curl -X POST "https://api.dcycle.io/v2/webhook-endpoints/5c9e2f14-8b7a-4d3e-9f60-1a2b3c4d5e6f/deliveries/8e7d6c5b-4a39-4281-b0f9-e8d7c6b5a4f3/retry" \
-H "x-api-key: ${DCYCLE_API_KEY}" \
-H "x-organization-id: ${DCYCLE_ORG_ID}"
import os
import requests
response = requests.post(
"https://api.dcycle.io/v2/webhook-endpoints/5c9e2f14-8b7a-4d3e-9f60-1a2b3c4d5e6f/deliveries/8e7d6c5b-4a39-4281-b0f9-e8d7c6b5a4f3/retry",
headers={
"x-api-key": os.environ["DCYCLE_API_KEY"],
"x-organization-id": os.environ["DCYCLE_ORG_ID"],
},
timeout=30,
)
response.raise_for_status()
print(response.status_code, response.json())
const axios = require('axios');
const response = await axios.post('https://api.dcycle.io/v2/webhook-endpoints/5c9e2f14-8b7a-4d3e-9f60-1a2b3c4d5e6f/deliveries/8e7d6c5b-4a39-4281-b0f9-e8d7c6b5a4f3/retry', null, {
headers: {
'x-api-key': process.env.DCYCLE_API_KEY,
'x-organization-id': process.env.DCYCLE_ORG_ID,
},
});
console.log(response.status, response.data);
{
"id": "8e7d6c5b-4a39-4281-b0f9-e8d7c6b5a4f3",
"event_id": "6f1d2c3b-9a8e-4f7d-b6c5-a4e3d2c1b0a9",
"event_type": "ingest_job.finished",
"status": "succeeded",
"attempt_count": 1,
"next_attempt_at": null,
"last_attempt_at": "2026-10-01T09:14:03.410Z",
"last_status_code": 200,
"last_error": null,
"last_duration_ms": 187,
"delivered_at": "2026-10-01T09:14:03.410Z",
"created_at": "2026-10-01T09:14:03.222Z",
"payload": {
"id": "6f1d2c3b-9a8e-4f7d-b6c5-a4e3d2c1b0a9",
"type": "ingest_job.finished",
"created_at": "2026-10-01T09:14:03Z",
"organization_id": "a8315ef3-dd50-43f8-b7ce-d839e68d51fa",
"data": {
"endpoint_id": "5c9e2f14-8b7a-4d3e-9f60-1a2b3c4d5e6f"
}
}
}
Retry Webhook Delivery
Send a past delivery’s event again, now
POST
/
v2
/
webhook-endpoints
/
{endpoint_id}
/
deliveries
/
{delivery_id}
/
retry
curl -X POST "https://api.dcycle.io/v2/webhook-endpoints/5c9e2f14-8b7a-4d3e-9f60-1a2b3c4d5e6f/deliveries/8e7d6c5b-4a39-4281-b0f9-e8d7c6b5a4f3/retry" \
-H "x-api-key: ${DCYCLE_API_KEY}" \
-H "x-organization-id: ${DCYCLE_ORG_ID}"
import os
import requests
response = requests.post(
"https://api.dcycle.io/v2/webhook-endpoints/5c9e2f14-8b7a-4d3e-9f60-1a2b3c4d5e6f/deliveries/8e7d6c5b-4a39-4281-b0f9-e8d7c6b5a4f3/retry",
headers={
"x-api-key": os.environ["DCYCLE_API_KEY"],
"x-organization-id": os.environ["DCYCLE_ORG_ID"],
},
timeout=30,
)
response.raise_for_status()
print(response.status_code, response.json())
const axios = require('axios');
const response = await axios.post('https://api.dcycle.io/v2/webhook-endpoints/5c9e2f14-8b7a-4d3e-9f60-1a2b3c4d5e6f/deliveries/8e7d6c5b-4a39-4281-b0f9-e8d7c6b5a4f3/retry', null, {
headers: {
'x-api-key': process.env.DCYCLE_API_KEY,
'x-organization-id': process.env.DCYCLE_ORG_ID,
},
});
console.log(response.status, response.data);
{
"id": "8e7d6c5b-4a39-4281-b0f9-e8d7c6b5a4f3",
"event_id": "6f1d2c3b-9a8e-4f7d-b6c5-a4e3d2c1b0a9",
"event_type": "ingest_job.finished",
"status": "succeeded",
"attempt_count": 1,
"next_attempt_at": null,
"last_attempt_at": "2026-10-01T09:14:03.410Z",
"last_status_code": 200,
"last_error": null,
"last_duration_ms": 187,
"delivered_at": "2026-10-01T09:14:03.410Z",
"created_at": "2026-10-01T09:14:03.222Z",
"payload": {
"id": "6f1d2c3b-9a8e-4f7d-b6c5-a4e3d2c1b0a9",
"type": "ingest_job.finished",
"created_at": "2026-10-01T09:14:03Z",
"organization_id": "a8315ef3-dd50-43f8-b7ce-d839e68d51fa",
"data": {
"endpoint_id": "5c9e2f14-8b7a-4d3e-9f60-1a2b3c4d5e6f"
}
}
}
← Webhooks
Send the event of a past delivery again, now: one signed attempt, no retries, recorded as a new delivery with the same event
id (so a receiver that deduplicates treats it as the same event). The original delivery keeps its history. It works on disabled endpoints too, to check a fix before re-enabling.
Beta. Part of the webhooks API, currently in beta. The contract may still change before general availability.
curl -X POST "https://api.dcycle.io/v2/webhook-endpoints/5c9e2f14-8b7a-4d3e-9f60-1a2b3c4d5e6f/deliveries/8e7d6c5b-4a39-4281-b0f9-e8d7c6b5a4f3/retry" \
-H "x-api-key: ${DCYCLE_API_KEY}" \
-H "x-organization-id: ${DCYCLE_ORG_ID}"
import os
import requests
response = requests.post(
"https://api.dcycle.io/v2/webhook-endpoints/5c9e2f14-8b7a-4d3e-9f60-1a2b3c4d5e6f/deliveries/8e7d6c5b-4a39-4281-b0f9-e8d7c6b5a4f3/retry",
headers={
"x-api-key": os.environ["DCYCLE_API_KEY"],
"x-organization-id": os.environ["DCYCLE_ORG_ID"],
},
timeout=30,
)
response.raise_for_status()
print(response.status_code, response.json())
const axios = require('axios');
const response = await axios.post('https://api.dcycle.io/v2/webhook-endpoints/5c9e2f14-8b7a-4d3e-9f60-1a2b3c4d5e6f/deliveries/8e7d6c5b-4a39-4281-b0f9-e8d7c6b5a4f3/retry', null, {
headers: {
'x-api-key': process.env.DCYCLE_API_KEY,
'x-organization-id': process.env.DCYCLE_ORG_ID,
},
});
console.log(response.status, response.data);
{
"id": "8e7d6c5b-4a39-4281-b0f9-e8d7c6b5a4f3",
"event_id": "6f1d2c3b-9a8e-4f7d-b6c5-a4e3d2c1b0a9",
"event_type": "ingest_job.finished",
"status": "succeeded",
"attempt_count": 1,
"next_attempt_at": null,
"last_attempt_at": "2026-10-01T09:14:03.410Z",
"last_status_code": 200,
"last_error": null,
"last_duration_ms": 187,
"delivered_at": "2026-10-01T09:14:03.410Z",
"created_at": "2026-10-01T09:14:03.222Z",
"payload": {
"id": "6f1d2c3b-9a8e-4f7d-b6c5-a4e3d2c1b0a9",
"type": "ingest_job.finished",
"created_at": "2026-10-01T09:14:03Z",
"organization_id": "a8315ef3-dd50-43f8-b7ce-d839e68d51fa",
"data": {
"endpoint_id": "5c9e2f14-8b7a-4d3e-9f60-1a2b3c4d5e6f"
}
}
}
Request
Headers
string
required
API key of an organization admin.Example:
sk_live_1234567890abcdefstring
required
The organization that owns the endpoints.Example:
a8315ef3-dd50-43f8-b7ce-d839e68d51faPath Parameters
uuid
required
The endpoint
id.Example: 5c9e2f14-8b7a-4d3e-9f60-1a2b3c4d5e6fuuid
required
The delivery to send again, from List Webhook Deliveries.Example:
8e7d6c5b-4a39-4281-b0f9-e8d7c6b5a4f3Response
The new delivery (200 OK), whether your server accepted it or not. Check status and last_status_code:
uuid
Delivery id.
uuid
The payload
id, the same on every retry and for every endpoint that got the event.string
ingest_job.finished or webhook.test.string
Available values:
pending (being sent or waiting for a retry), succeeded (got a 2xx), failed (retries exhausted, or the endpoint was disabled).integer
Attempts so far (at most 7).
datetime | null
When the next retry is due (UTC), while
pending.datetime | null
UTC.
integer | null
HTTP status your server answered;
null on a timeout or network error.string | null
Why the last attempt failed, e.g.
HTTP 503 or a connection error.integer | null
How long the last attempt took.
datetime | null
When your server answered
2xx (UTC).datetime
When the event was recorded (UTC).
Common Errors
401 Unauthorized
Missing or invalid API key.403 Forbidden
ORG_ADMIN_REQUIRED: only organization admins can manage webhook endpoints. LOGGED_USER_NOT_MEMBER: the API key’s user is not a member of the organization.
404 Not Found
The endpoint does not exist or belongs to another organization, or the delivery is not one of this endpoint’s.Related Endpoints
List Webhook Deliveries
Every delivery
Webhooks
Verify the signature
Was this page helpful?