Retrieve the webhook payload for an event
curl --request GET \
--url https://api.useduro.com/v1/events/{id}/payload \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.useduro.com/v1/events/{id}/payload"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.useduro.com/v1/events/{id}/payload', 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.useduro.com/v1/events/{id}/payload",
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.useduro.com/v1/events/{id}/payload"
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.useduro.com/v1/events/{id}/payload")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.useduro.com/v1/events/{id}/payload")
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{
"id": "evt_01HKBZ4PQ9Z3K7T8V9X2Y1B5C6",
"type": "checkout_completed",
"createdAt": "<string>",
"data": {
"customer": {
"id": "<string>",
"email": "<string>",
"phone": "<string>",
"name": "<string>",
"merchantRef": "<string>",
"blacklisted": true,
"blacklistReason": "<string>",
"createdAt": "<string>"
},
"plan": {
"id": "<string>",
"name": "<string>",
"amount": 123,
"currency": "<string>",
"interval": "hour",
"intervalCount": 123,
"trialDays": 123,
"maxCycles": 123,
"createdAt": "2023-11-07T05:31:56Z"
},
"subscription": {
"id": "<string>",
"status": "incomplete",
"planId": "<string>",
"currentPeriodStart": "<string>",
"currentPeriodEnd": "<string>",
"cyclesCompleted": 123,
"createdAt": "<string>"
},
"invoice": {
"id": "<string>",
"subscriptionId": "<string>",
"amount": 123,
"currency": "<string>",
"status": "draft",
"periodStart": "<string>",
"periodEnd": "<string>",
"paidAt": "<string>",
"createdAt": "<string>"
}
}
}Events
Retrieve the webhook payload for an event
Returns the exact body Duro POSTs to your webhook endpoints for this event, with related resources (customer, plan, subscription, invoice) expanded inline. Use it to re-fetch or reconcile a delivery — the response equals the webhook body byte for byte.
GET
/
v1
/
events
/
{id}
/
payload
Retrieve the webhook payload for an event
curl --request GET \
--url https://api.useduro.com/v1/events/{id}/payload \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.useduro.com/v1/events/{id}/payload"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.useduro.com/v1/events/{id}/payload', 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.useduro.com/v1/events/{id}/payload",
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.useduro.com/v1/events/{id}/payload"
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.useduro.com/v1/events/{id}/payload")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.useduro.com/v1/events/{id}/payload")
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{
"id": "evt_01HKBZ4PQ9Z3K7T8V9X2Y1B5C6",
"type": "checkout_completed",
"createdAt": "<string>",
"data": {
"customer": {
"id": "<string>",
"email": "<string>",
"phone": "<string>",
"name": "<string>",
"merchantRef": "<string>",
"blacklisted": true,
"blacklistReason": "<string>",
"createdAt": "<string>"
},
"plan": {
"id": "<string>",
"name": "<string>",
"amount": 123,
"currency": "<string>",
"interval": "hour",
"intervalCount": 123,
"trialDays": 123,
"maxCycles": 123,
"createdAt": "2023-11-07T05:31:56Z"
},
"subscription": {
"id": "<string>",
"status": "incomplete",
"planId": "<string>",
"currentPeriodStart": "<string>",
"currentPeriodEnd": "<string>",
"cyclesCompleted": 123,
"createdAt": "<string>"
},
"invoice": {
"id": "<string>",
"subscriptionId": "<string>",
"amount": 123,
"currency": "<string>",
"status": "draft",
"periodStart": "<string>",
"periodEnd": "<string>",
"paidAt": "<string>",
"createdAt": "<string>"
}
}
}Authorizations
Paste your secret key as the bearer token: sk_test_… (test) or sk_live_… (live). That is all a normal API call needs. OAuth access tokens from POST /v1/oauth/token also work, but a client id/secret is only for platforms acting on another tenant's behalf, not for your own integration.
Path Parameters
Response
200 - application/json
The delivered webhook payload
The exact payload delivered to webhook endpoints — identical to the POST body.
Was this page helpful?