Skip to content

Lists the 50 most recent delivery attempts for one endpoint, newest first, with what your server answered.

GET

Path parameters

  • organizationIdstringRequired

    Your organization id.

  • endpointIdstringRequired

    From the endpoint listing.

Behavior

This is the answer to "did you send me that event" without anyone having to open a dashboard.

lastError carries your server's response when an attempt failed, and nextAttemptAt is when we will try again. Retries back off over roughly 70 hours (nine retries, ±20% jitter); after that the delivery is dead and only the event feed (GET /payments/organizations/{orgId}/events) will still have it.

Payloads are not returned. Read the event from the feed by eventId, or replay the delivery from the dashboard (one at a time, or every dead delivery in a window). A replay re-fires under the same eventId, so your deduplication still holds.

Responses

200Delivery attempts, newest first

Body

  • idstringRequired
  • eventIdstringRequired

    The event's id: the svix-id header we sent, the id in the delivered body, and the id of the same row in GET /events. Dedupe on this.

  • eventTypestringRequired
  • attemptsintegerRequired
  • deliveredAtstring<date-time> | nullOptional

    Null until an attempt is accepted.

  • nextAttemptAtstring<date-time> | nullOptional
  • lastErrorstring | nullOptional

    The status your server answered with on the most recent failure (HTTP 500), or the transport error. Never your response body; we do not store one.

  • createdAtstring<date-time>Required

Errors

  • 401

    The key was refused. Nothing ran.

    • UNAUTHORIZED: missing, invalid or revoked, or a key on a route that does not accept one.
    • KEY_EXPIRED: the key passed the expiry it was issued with. Issue a new one; an expired key cannot be rotated.
    • KEY_IP_NOT_ALLOWED: the key is pinned to source addresses and this request came from another.
  • 403

    A valid key that may not make this call. Nothing ran.

    • FORBIDDEN: the key belongs to a different organization.
    • ACCOUNT_BLOCKED: API access for your organization is suspended.
    • DEVELOPER_FEATURE_DISABLED: developer tools (webhook endpoints) are off for your organization. GET /policy lists developer in features when they are on.
  • 429

    Too many requests. The default ceiling is 100 requests per minute per API credential on a 60-second window. High-volume payout and reconciliation routes declare a 600/minute override, and batch submission a 30/minute ceiling. A separate 2,000/minute per-source-IP abuse ceiling always applies.

    Obey Retry-After; it is in seconds and is authoritative. A 429 means the request was refused before the handler ran. Retry reads normally; retry an idempotent mutation with its same Idempotency-Key.

Error body · Error
  • typestringRequired

    Stable machine-readable code.

  • detailstringRequired

    What went wrong, in a sentence. Always a string, so detail.toLowerCase() is safe.

    More

    This is the field to read on BAD_REQUEST and PROVIDER_REJECTED, where the type alone does not name the condition.

  • messagestringRequired

    The same text as detail, kept for integrations written before detail existed. Read detail.

  • resolutionstringOptional

    What to do about it, when there is a specific answer. It is not on every error (it is absent on BAD_REQUEST, NOT_FOUND, PAYOUT_NOT_CANCELABLE and DESTINATION_ACCOUNT_NOT_FOUND), so treat it as optional and fall back to detail.

  • statusintegerRequired

    HTTP status, repeated in the body.

  • statusCodeintegerRequired

    The same value as status, kept for integrations written before status existed. Read status.

  • requestIdstringRequired

    Quote this to support and we can find the exact request. Also sent as the x-request-id response header, which is the only place it appears on a successful response. Success bodies do not carry it. Send your own x-request-id on the request and we use it, so your trace and ours share one identifier; otherwise we mint one.

  • errorsarray of stringOptional

    Present on VALIDATION_ERROR; names each field that failed.

  • originalIdempotencyKeystringOptional

    On DUPLICATE_REQUEST_DETECTED only. Send the request again with this to receive the original payout instead of making a second one. Without it there is no way to recover except by risking a double payment.

  • originalPayoutIdstringOptional

    On DUPLICATE_REQUEST_DETECTED only. The payout the first request created.

  • originalBatchIdstringOptional

    On a batch DUPLICATE_REQUEST_DETECTED. The run the first request created.

  • originalRequestIdstringOptional

    On a 409 PAYOUT_OUTCOME_UNKNOWN replay. The requestId of the call whose outcome is unknown; quote it to support.

  • existingRecipientIdstringOptional

    On BANK_ACCOUNT_ALREADY_LINKED. The recipient in your organization that already holds this account.

  • existingMethodIdstringOptional

    On BANK_ACCOUNT_ALREADY_LINKED. The payment method on that recipient.

Branch on type, never on the status or the message. Every error type is listed with what to do about it.

Avvio Partner Payouts · Webhook endpoints · operation listWebhookDeliveries

Try it: List webhook deliveries

GET https://api.avvio.xyz/business/api/v1/organizations/{organizationId}/webhook-endpoints/{endpointId}/deliveries

Test keys only. Sent as x-api-key through this site's proxy to the Avvio API, never saved, and cleared when you close this dialog.

Was this page helpful?