curl --request GET \
--url https://api.venlyfinance.com/v1/webhooks/{webhookId}/deliveries/{deliveryId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.venlyfinance.com/v1/webhooks/{webhookId}/deliveries/{deliveryId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.venlyfinance.com/v1/webhooks/{webhookId}/deliveries/{deliveryId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.venlyfinance.com/v1/webhooks/{webhookId}/deliveries/{deliveryId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.venlyfinance.com/v1/webhooks/{webhookId}/deliveries/{deliveryId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.venlyfinance.com/v1/webhooks/{webhookId}/deliveries/{deliveryId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.venlyfinance.com/v1/webhooks/{webhookId}/deliveries/{deliveryId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"success": true,
"result": {
"id": "dlv_01J7Q0Z8R6Y3M2K1N9P8T7V6W5",
"eventType": "PAYOUT_COMPLETED",
"notificationId": "ntf_9f2c41ab7d0e4c6b",
"status": "FAILURE",
"attempts": 5,
"createdAt": "2026-09-10T14:02:11Z",
"updatedAt": "2026-09-10T15:31:40Z",
"payload": {
"eventType": "PAYOUT_COMPLETED",
"result": {
"payoutId": "c3d4e5f6-0718-4a2b-b3c4-d5e6f7081920",
"accountId": "b2a1f0e9-8c7d-4e3a-9f21-0a1b2c3d4e5f",
"status": "COMPLETED",
"occurredAt": "2026-09-10T14:02:09Z"
}
},
"deliveryAttempts": [
{
"responseCode": 503,
"responseBody": "upstream timeout",
"requestedAt": "2026-09-10T14:02:11Z",
"respondedAt": "2026-09-10T14:02:41Z"
},
{
"error": "connection refused",
"requestedAt": "2026-09-10T15:31:10Z"
}
]
}
}{
"success": false,
"errors": [
{
"code": "unauthenticated",
"message": "Please authenticate to perform this action."
}
]
}{
"success": false,
"errors": [
{
"code": "invalid-request",
"message": "The request contains invalid parameters."
}
],
"result": {}
}{
"success": false,
"errors": [
{
"code": "invalid-request",
"message": "The request contains invalid parameters."
}
],
"result": {}
}{
"success": false,
"errors": [
{
"code": "invalid-request",
"message": "The request contains invalid parameters."
}
],
"result": {}
}Get a webhook delivery
One delivery in full — the payload sent and every attempt’s outcome.
curl --request GET \
--url https://api.venlyfinance.com/v1/webhooks/{webhookId}/deliveries/{deliveryId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.venlyfinance.com/v1/webhooks/{webhookId}/deliveries/{deliveryId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.venlyfinance.com/v1/webhooks/{webhookId}/deliveries/{deliveryId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.venlyfinance.com/v1/webhooks/{webhookId}/deliveries/{deliveryId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.venlyfinance.com/v1/webhooks/{webhookId}/deliveries/{deliveryId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.venlyfinance.com/v1/webhooks/{webhookId}/deliveries/{deliveryId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.venlyfinance.com/v1/webhooks/{webhookId}/deliveries/{deliveryId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"success": true,
"result": {
"id": "dlv_01J7Q0Z8R6Y3M2K1N9P8T7V6W5",
"eventType": "PAYOUT_COMPLETED",
"notificationId": "ntf_9f2c41ab7d0e4c6b",
"status": "FAILURE",
"attempts": 5,
"createdAt": "2026-09-10T14:02:11Z",
"updatedAt": "2026-09-10T15:31:40Z",
"payload": {
"eventType": "PAYOUT_COMPLETED",
"result": {
"payoutId": "c3d4e5f6-0718-4a2b-b3c4-d5e6f7081920",
"accountId": "b2a1f0e9-8c7d-4e3a-9f21-0a1b2c3d4e5f",
"status": "COMPLETED",
"occurredAt": "2026-09-10T14:02:09Z"
}
},
"deliveryAttempts": [
{
"responseCode": 503,
"responseBody": "upstream timeout",
"requestedAt": "2026-09-10T14:02:11Z",
"respondedAt": "2026-09-10T14:02:41Z"
},
{
"error": "connection refused",
"requestedAt": "2026-09-10T15:31:10Z"
}
]
}
}{
"success": false,
"errors": [
{
"code": "unauthenticated",
"message": "Please authenticate to perform this action."
}
]
}{
"success": false,
"errors": [
{
"code": "invalid-request",
"message": "The request contains invalid parameters."
}
],
"result": {}
}{
"success": false,
"errors": [
{
"code": "invalid-request",
"message": "The request contains invalid parameters."
}
],
"result": {}
}{
"success": false,
"errors": [
{
"code": "invalid-request",
"message": "The request contains invalid parameters."
}
],
"result": {}
}view:webhooks — see Required scopes.
Returns the exact payload that was POSTed to your endpoint and, per attempt, the HTTP status and body your endpoint returned or the transport error when there was none.
Request and response headers are never returned — they carry your endpoint’s own API key or basic-auth credentials.Authorizations
OAuth2 client credentials flow. Token endpoints:
- Token URL
- https://login-staging.venly.io/auth/realms/VenlyFinance/protocol/openid-connect/token
Headers
Which tenant the request is scoped to, among those your token grants. Omit it when the token grants exactly one tenant; it is required when the token grants more than one. A supplied value must exactly match a tenant the token grants.
Absent when required, blank, malformed, or naming a tenant the token does not grant — each gets
the same generic 403 forbidden, which reveals neither whether a tenant exists nor which ones
you may use. Send the header once: a repeated header is rejected the same way.
"3fa85f64-5717-4562-b3fc-2c963f66afa6"
Path Parameters
Unique webhook identifier
Delivery identifier, as returned by the deliveries list
Was this page helpful?

