Docs
Dashboard
API reference / WebhooksBeta

Retry a delivery

Sends a finished delivery (delivered or failed) again now, with the same event id and body, and waits up to 12 seconds for the answer. 409 invalid_state while it is still queued, payload_expired after 7 days, webhook_disabled while the endpoint is switched off. Shares the limit of test events (10 per minute).

POST/v1/webhooks/{id}/deliveries/{deliveryId}/retry

Request

Method and pathPOST/v1/webhooks/{id}/deliveries/{deliveryId}/retry
Base URLhttps://api.boxline.dev
AuthenticationYour API key in the x-api-key header (or Authorization: Bearer). The examples read it from BOXLINE_API_KEY.
Rate limitYes. See Rate limits for the numbers and headers.

Path parameters

NameTypeDefaultAllowed valuesDescription
idrequiredstring––
deliveryIdrequiredstring––
curl -X POST "https://api.boxline.dev/v1/webhooks/$WEBHOOK_ID/deliveries/$DELIVERY_ID/retry" \  -H "x-api-key: $BOXLINE_API_KEY"

Responses

200 OK

The delivery.

Fields

NameTypeDefaultAllowed valuesDescription
idstring––
endpointIdstring––
eventIdstring––The event's id (the same on every endpoint and every attempt).
eventTypestring––
testboolean––
statusstring–pending, delivered, failedpending: waiting for its next attempt; failed: no more attempts.
attemptsinteger––
nextAttemptAtstring | null––Format: date-time.
lastAttemptAtstring | null––Format: date-time.
deliveredAtstring | null––Format: date-time.
responseStatusinteger | null––The last answer's HTTP status (null when there was none).
responseBodystring | null––The first 1 KB of the last answer (kept 7 days).
durationMsinteger | null––
errorstring | null––Why the last attempt failed.
errorCodestring | null–bad_status, gone, timeout, connection_failed, tls_failed, address_not_allowed, gateway_unavailable, endpoint_disabled, project_suspended, payload_expired, queue_full, signing_failed, nullWhy a delivery (or an attempt) failed; null when delivered. The last five are deliveries that were never sent (queue_full: the project already had 10,000 deliveries waiting).
historyobject[]––The last 20 attempts.
history[].atstring––Format: date-time.
history[].statusinteger | null––
history[].durationMsinteger––
history[].errorstring | null––
history[].errorCodestring | null–bad_status, gone, timeout, connection_failed, tls_failed, address_not_allowed, gateway_unavailable, endpoint_disabled, project_suspended, payload_expired, queue_full, signing_failed, nullWhy a delivery (or an attempt) failed; null when delivered. The last five are deliveries that were never sent (queue_full: the project already had 10,000 deliveries waiting).
payloadany––The body that was sent (the event); null after 7 days.
createdAtstring––Format: date-time.
Response 200
{  "id": "dlv_4fJx0aQm2Lk9Pz7N",  "endpointId": "…",  "eventId": "…",  "eventType": "…",  "test": false,  "status": "pending",  "attempts": 0,  "nextAttemptAt": "2026-09-29T10:00:00.000Z",  "lastAttemptAt": "2026-09-29T10:00:00.000Z",  "deliveredAt": "2026-09-29T10:00:00.000Z",  "responseStatus": 0,  "responseBody": "…",  "durationMs": 0,  "error": "…",  "errorCode": "bad_status",  "history": [    {      "at": "2026-09-29T10:00:00.000Z",      "status": 0,      "durationMs": 0,      "error": "…",      "errorCode": "bad_status"    }  ],  "payload": null,  "createdAt": "2026-09-29T10:00:00.000Z"}

Errors

Errors have a matching HTTP status and the same body. code is stable, so check it in your code; message is for people. See Errors and request ids.

StatusCodesWhen
401 UnauthorizedunauthorizedMissing or invalid API key.
404 Not Foundnot_found, invite_not_found, provider_unavailableNo such thing in this project (or organization), or no such route.
409 Conflictsession_not_running, shell_disabled, browser_disabled, nothing_saved, not_resumable, invalid_state, conflict, email_taken, identity_in_use, provider_already_linked, last_sign_in_method, not_impersonating, machine_too_old, too_many_credential_values, limit_reached, terms_version_mismatch, no_project, last_owner, organization_not_empty, project_has_sessions, already_member, invite_pending, idempotency_in_progressThe current state does not allow it, or a request with this Idempotency-Key is still being answered.
429 Too Many Requestsrate_limited, concurrency_limitToo many requests, or the organization's concurrent sessions (its plan's) or the project's concurrencyCap are in use.
503 Service Unavailableno_capacity, proxy_unavailable, provider_unavailable, search_unavailable, webhooks_unavailable, mail_unavailable, browser_unreachableNo machine free in time, proxies not set up, the model provider is not configured or has no key, or web search is not set up or its provider is not answering, or webhook delivery is not set up, or an email cannot be sent, or the session's browser did not answer in time.
Error body
{  "error": {    "code": "not_found",    "message": "session not found",    "requestId": "req_4fJx0aQm2Lk9Pz7N"  }}

Learn more

These docs describe a beta API. Endpoints, fields and SDK methods may change before general availability; breaking changes will be listed in the changelog.