Skip to main content
POST
Redeliver a webhook delivery

Authorizations

X-Signature
string
header
required

HMAC signature authentication for backend integrators.

Required Headers:

  • X-Integrator-Key: Integrator API key (format: ik_...)
  • X-Signature: HMAC signature (format: sha256={hex})
  • X-Timestamp: Unix timestamp in milliseconds
  • Authorization: Bearer {user-api-key}

Signature Algorithm: HMAC-SHA256

Signature Format: {timestamp}.{METHOD}.{path}.{bodyHash}

  • timestamp: Unix timestamp in milliseconds
  • METHOD: HTTP method in UPPERCASE (GET, POST, etc.)
  • path: Request path (e.g., /v1/transactions)
  • bodyHash: SHA256 hex digest of request body (empty string if no body)

Timestamp Tolerance: ±5 minutes (300 seconds)

Example: For POST /v1/transactions with body {"amount":100} and timestamp 1234567890000: Payload: 1234567890000.POST./v1/transactions.{sha256(body)} Signature: sha256=abc123...

X-Integrator-Key
string
header
required

Integrator API key (format: ik_...) used with HMAC authentication

X-Timestamp
string
header
required

Unix timestamp in milliseconds for request freshness. Must be within 5 minutes of server time. The timestamp alone bounds but does not prevent an exact replay within that window. Use Idempotency-Key on supported mutations.

Path Parameters

deliveryId
string
required

The delivery id from GET /v1/integrator/webhooks/deliveries or the Spritz-Delivery-Id header

Pattern: ^[a-fA-F\d]{24}$

Response

Response for status 200

id
string
required

Stable delivery ID, sent as the Spritz-Delivery-Id header on every attempt and redelivery. Pass it to POST /v1/integrator/webhooks/deliveries/{deliveryId}/redeliver.

Example:

"6a7441a013a0c37c0d1facfe"

eventId
string | null
required

The eventId of the delivered event, the same on every attempt and redelivery. Deduplicate on it. null for events sent without one.

status
enum<string>
default:pending
required

pending: Spritz will retry at nextAttemptAt. succeeded: your endpoint returned a 2xx (terminal). failed: retries are exhausted or your endpoint returned a non-retryable status (terminal); redeliver it once your endpoint is fixed.

Available options:
pending,
succeeded,
failed
attempts
integer | null
required

Total HTTP attempts made for this delivery so far, across retries and redeliveries. null when not recorded.

Required range: x >= 0
nextAttemptAt
string<date-time> | null
required

When Spritz will next attempt this delivery. Set only while status is pending; otherwise null. Not a guarantee of exact timing.

event
string
required

The event that was delivered

Example:

"onramp.completed"

webhookUrl
string
required

The URL the delivery was attempted against

Example:

"https://api.example.com/webhooks"

payload
object
required

The exact body that was sent, and the body the signature was computed over. ACH debit, off-ramp, and credit on-ramp milestone events use the versioned semantic payload variants; other event families use their resource-change payload.

success
boolean
required

Whether Spritz received a successful response. false alongside an error does not mean your endpoint rejected the event — it may have processed it and only the response was lost. false with neither error nor responseStatus means the outcome was never recorded, not that it failed. Read those two fields before concluding anything about delivery.

Example:

true

responseStatus
number

HTTP status your endpoint returned — but only when error is absent. When error is set no response was received at all, and this is Spritz's classification of the failure (504 for a timeout, 500 otherwise) rather than anything your endpoint said.

Example:

200

error
string

Set when no usable response was received — a timeout, a refused connection, a DNS or certificate problem. This does not prove the request never arrived: a refused connection means it did not, but a timeout or a dropped connection may mean your endpoint received and fully processed it and we never heard back. Treat delivery as unknown and rely on idempotent handling. When error is absent the request landed and responseStatus is your endpoint's own answer.

Example:

"getaddrinfo ENOTFOUND webhooks.example.com"

timestamp
string<date-time>

When the delivery was attempted. Absent on a handful of very early records that predate the field — omitted rather than guessed.