Skip to content

Redeliver a dead webhook delivery

POST
/v1/webhook/deliveries/{id}/redeliver
curl --request POST \
--url https://api.sulpayments.ch/v1/webhook/deliveries/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/redeliver \
--header 'Authorization: Bearer <token>'

Requeues one of the merchant's own dead deliveries after the endpoint is fixed: the delivery goes back to pending with a fresh attempt counter and the sender retries it with the exact original payload. Only dead deliveries can be redelivered — anything else (or another merchant's id) is a 404.

id
required
string format: uuid

Delivery id

The delivery, requeued

Media typeapplication/json

One outbound notification delivery, as the owning merchant sees it. The endpoint, payload event and failure detail all describe the MERCHANT'S own webhook — nothing internal — so the whole row is safe to show. The frozen payload itself is not repeated here: it is exactly the settlement webhook body the merchant already receives.

object
attempts
required
integer format: int32
created_at
required
string format: date-time
delivered_at
string | null format: date-time
delivery_id
required
string format: uuid
event_type
required
string
last_error
string | null
next_attempt_at
required
string format: date-time
response_status
integer | null format: int32
settlement_id
required
string format: uuid
status
required

pending (queued or mid-retry), delivered, or dead (retries exhausted; eligible for redelivery).

string
url
required

The endpoint the delivery targets, frozen at enqueue time — a later config change does not rewrite history.

string
Examplegenerated
{
"attempts": 1,
"created_at": "2026-04-15T12:00:00Z",
"delivered_at": "2026-04-15T12:00:00Z",
"delivery_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
"event_type": "example",
"last_error": "example",
"next_attempt_at": "2026-04-15T12:00:00Z",
"response_status": 1,
"settlement_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
"status": "example",
"url": "example"
}

Missing or invalid API key

Media typeapplication/json

The error envelope every 4xx/5xx response uses. The error.code is machine-stable across locales; error.message is localized via the request's Accept-Language (en by default). error.fields is present only for per-field validation failures.

object
error
required

The body of an [ErrorEnvelope].

object
code
required

Machine-stable error code (stable across locales).

string
Allowed values: invalid_credentials unauthenticated origin_not_allowed challenge_failed locked invalid_link invalid_code otp_enforced no_merchant no_partner not_found invalid_body internal_error provider_unavailable provider_call_failed quote_refused conversion_refused payout_refused payout_wallet_out_of_gas unexpected_failure provider_still_processing database_grant_missing rail_inactive fx_accounts_missing sender_not_registered payout_outcome_unknown conversion_outcome_unknown validation_failed webhook_endpoint_not_configured access_token_missing access_token_malformed access_token_invalid access_verification_unavailable conflict admin_validation_failed forbidden issuance_not_enabled merchant_identity_incomplete issuance_quota_exceeded issuance_rate_limited end_user_reference_exists currency_not_enabled currency_not_supported required invalid_url unsafe_url unresolvable_host
fields

Per-field validation errors, present only for validation_failed.

Array<object> | null

One field-level validation failure inside [ApiError::fields].

object
code
required

The machine-stable reason code for this field.

string
Allowed values: invalid_credentials unauthenticated origin_not_allowed challenge_failed locked invalid_link invalid_code otp_enforced no_merchant no_partner not_found invalid_body internal_error provider_unavailable provider_call_failed quote_refused conversion_refused payout_refused payout_wallet_out_of_gas unexpected_failure provider_still_processing database_grant_missing rail_inactive fx_accounts_missing sender_not_registered payout_outcome_unknown conversion_outcome_unknown validation_failed webhook_endpoint_not_configured access_token_missing access_token_malformed access_token_invalid access_verification_unavailable conflict admin_validation_failed forbidden issuance_not_enabled merchant_identity_incomplete issuance_quota_exceeded issuance_rate_limited end_user_reference_exists currency_not_enabled currency_not_supported required invalid_url unsafe_url unresolvable_host
field
required

The request field the error applies to (e.g. webhook_url).

string
message
required

Human-readable message, localized by Accept-Language.

string
Example
{
"error": {
"code": "invalid_credentials",
"fields": [
{
"code": "invalid_credentials"
}
],
"message": "One or more fields are invalid."
}
}

Unknown delivery, or not dead

Media typeapplication/json

The error envelope every 4xx/5xx response uses. The error.code is machine-stable across locales; error.message is localized via the request's Accept-Language (en by default). error.fields is present only for per-field validation failures.

object
error
required

The body of an [ErrorEnvelope].

object
code
required

Machine-stable error code (stable across locales).

string
Allowed values: invalid_credentials unauthenticated origin_not_allowed challenge_failed locked invalid_link invalid_code otp_enforced no_merchant no_partner not_found invalid_body internal_error provider_unavailable provider_call_failed quote_refused conversion_refused payout_refused payout_wallet_out_of_gas unexpected_failure provider_still_processing database_grant_missing rail_inactive fx_accounts_missing sender_not_registered payout_outcome_unknown conversion_outcome_unknown validation_failed webhook_endpoint_not_configured access_token_missing access_token_malformed access_token_invalid access_verification_unavailable conflict admin_validation_failed forbidden issuance_not_enabled merchant_identity_incomplete issuance_quota_exceeded issuance_rate_limited end_user_reference_exists currency_not_enabled currency_not_supported required invalid_url unsafe_url unresolvable_host
fields

Per-field validation errors, present only for validation_failed.

Array<object> | null

One field-level validation failure inside [ApiError::fields].

object
code
required

The machine-stable reason code for this field.

string
Allowed values: invalid_credentials unauthenticated origin_not_allowed challenge_failed locked invalid_link invalid_code otp_enforced no_merchant no_partner not_found invalid_body internal_error provider_unavailable provider_call_failed quote_refused conversion_refused payout_refused payout_wallet_out_of_gas unexpected_failure provider_still_processing database_grant_missing rail_inactive fx_accounts_missing sender_not_registered payout_outcome_unknown conversion_outcome_unknown validation_failed webhook_endpoint_not_configured access_token_missing access_token_malformed access_token_invalid access_verification_unavailable conflict admin_validation_failed forbidden issuance_not_enabled merchant_identity_incomplete issuance_quota_exceeded issuance_rate_limited end_user_reference_exists currency_not_enabled currency_not_supported required invalid_url unsafe_url unresolvable_host
field
required

The request field the error applies to (e.g. webhook_url).

string
message
required

Human-readable message, localized by Accept-Language.

string
Example
{
"error": {
"code": "invalid_credentials",
"fields": [
{
"code": "invalid_credentials"
}
],
"message": "One or more fields are invalid."
}
}