This page is generated from the contract (data/gateway-v1.json): each operation shows its verb, path, parameters, body, responses, whether it carries an Idempotency-Key, and the equivalent method in all five SDKs. For the end-to-end flow with complete examples, see the implementation guide.

Operations in tag webhooks #

Contract description: Self-service outbound webhooks for the API key’s organization: event catalog (with payload examples and the HMAC signature contract), endpoint CRUD, secret rotation, signed test events, and delivery history with replay. Scopes: webhooks:read (reads) and webhooks:manage (writes).

MethodPathOperationScopeIdem.
GET/v1/gateway/webhooks/deliveries/List deliveries (filters: status, event, endpoint, dates)webhooks:read—
GET/v1/gateway/webhooks/deliveries/{delivery_id}/Delivery detail (attempts, response; no secret)webhooks:read—
POST/v1/gateway/webhooks/deliveries/{delivery_id}/replay/Replay a failed or abandoned deliverywebhooks:managerecommended
GET/v1/gateway/webhooks/endpoints/List the organization's endpointswebhooks:read—
POST/v1/gateway/webhooks/endpoints/Register an endpoint (returns the secret ONCE)webhooks:managerecommended
GET/v1/gateway/webhooks/endpoints/{endpoint_id}/Endpoint detailwebhooks:read—
PATCH/v1/gateway/webhooks/endpoints/{endpoint_id}/Update an endpoint (url, events, label, description, active)webhooks:managerecommended
DELETE/v1/gateway/webhooks/endpoints/{endpoint_id}/Delete an endpoint (and its delivery history)webhooks:managerecommended
POST/v1/gateway/webhooks/endpoints/{endpoint_id}/rotate-secret/Rotate the signing secret (the old one stops working immediately)webhooks:managerecommended
POST/v1/gateway/webhooks/endpoints/{endpoint_id}/test/Send a signed test eventwebhooks:managerecommended
GET/v1/gateway/webhooks/event-catalog/Event catalog (description, payload example, signature contract)webhooks:read—

List deliveries (filters: status, event, endpoint, dates) #

GET/v1/gateway/webhooks/deliveries/

  • operationId listWebhookDeliveries
  • Authentication X-API-Key · scope webhooks:read
  • Idempotency-Key not applicable

Parameters

NameInTypeDescription
statusquerystringDelivery status.
event_typequerystringCatalog key, e.g. credits.decision.
endpoint_idquerystringOnly deliveries of this endpoint.
date_fromquerystringFrom (YYYY-MM-DD or ISO-8601), by queue time.
date_toquerystringTo (YYYY-MM-DD or ISO-8601), inclusive.
pagequeryintegerPage (1-based).
page_sizequeryintegerPage size.

Responses

CodeDescriptionBody
200A page of deliveries.WebhookDeliveryList application/json
Possible errors (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
400Malformed request.about:blank
401Missing or invalid API key.about:blank
403The key is valid but lacks the required scope, or the source IP is not allow-listed.about:blank
404The requested resource does not exist.about:blank
409Idempotency conflict — same key, original still processing.https://errors.compense.co/gateway/idempotency-conflict
422Request body failed validation.https://errors.compense.co/gateway/validation
429Per-key rate limit or monthly quota exceeded; see Retry-After.https://errors.compense.co/gateway/rate-limited
500Unexpected gateway error; quote the trace_id to support.about:blank
502The processing engine returned an error.https://errors.compense.co/gateway/upstream-error
504The processing engine did not respond in time.https://errors.compense.co/gateway/upstream-error

See problem+json errors for the equivalent exception in each SDK.

Example

SDK method and HTTP request
client.webhooks.deliveries.list()

Each SDK's methods come from its contract parity suite. The cURL runs against the sandbox; <field> values are placeholders.

Delivery detail (attempts, response; no secret) #

GET/v1/gateway/webhooks/deliveries/{delivery_id}/

  • operationId getWebhookDelivery
  • Authentication X-API-Key · scope webhooks:read
  • Idempotency-Key not applicable

Parameters

NameInTypeDescription
delivery_id requiredpathstringWebhook delivery id. E.g.: 7c9e6679-7425-40de-944b-e07fc1f90ae7

Responses

CodeDescriptionBody
200The delivery.WebhookDeliveryDetail application/json
Possible errors (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
400Malformed request.about:blank
401Missing or invalid API key.about:blank
403The key is valid but lacks the required scope, or the source IP is not allow-listed.about:blank
404The requested resource does not exist.about:blank
409Idempotency conflict — same key, original still processing.https://errors.compense.co/gateway/idempotency-conflict
422Request body failed validation.https://errors.compense.co/gateway/validation
429Per-key rate limit or monthly quota exceeded; see Retry-After.https://errors.compense.co/gateway/rate-limited
500Unexpected gateway error; quote the trace_id to support.about:blank
502The processing engine returned an error.https://errors.compense.co/gateway/upstream-error
504The processing engine did not respond in time.https://errors.compense.co/gateway/upstream-error

See problem+json errors for the equivalent exception in each SDK.

Example

SDK method and HTTP request
client.webhooks.deliveries.get()

Each SDK's methods come from its contract parity suite. The cURL runs against the sandbox; <field> values are placeholders.

Replay a failed or abandoned delivery #

POST/v1/gateway/webhooks/deliveries/{delivery_id}/replay/

  • operationId replayWebhookDelivery
  • Authentication X-API-Key · scope webhooks:manage
  • Idempotency-Key recommended (the SDK generates it)

Parameters

NameInTypeDescription
delivery_id requiredpathstringWebhook delivery id. E.g.: 7c9e6679-7425-40de-944b-e07fc1f90ae7
Idempotency-KeyheaderstringClient-generated key that makes a write safely retryable. Replaying the same key returns the original result with idempotent_replay: true; a replay while the original is still in flight returns 409. E.g.: horizonte-2026-06-26-credit-000123

Responses

CodeDescriptionBody
200Done; the engine result is in data.TransactionEnvelope application/json
Possible errors (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
400Malformed request.about:blank
401Missing or invalid API key.about:blank
403The key is valid but lacks the required scope, or the source IP is not allow-listed.about:blank
404The requested resource does not exist.about:blank
409Idempotency conflict — same key, original still processing.https://errors.compense.co/gateway/idempotency-conflict
422Request body failed validation.https://errors.compense.co/gateway/validation
429Per-key rate limit or monthly quota exceeded; see Retry-After.https://errors.compense.co/gateway/rate-limited
500Unexpected gateway error; quote the trace_id to support.about:blank
502The processing engine returned an error.https://errors.compense.co/gateway/upstream-error
504The processing engine did not respond in time.https://errors.compense.co/gateway/upstream-error

See problem+json errors for the equivalent exception in each SDK.

Example

SDK method and HTTP request
client.webhooks.deliveries.replay()

Each SDK's methods come from its contract parity suite. The cURL runs against the sandbox; <field> values are placeholders.

List the organization's endpoints #

GET/v1/gateway/webhooks/endpoints/

  • operationId listWebhookEndpoints
  • Authentication X-API-Key · scope webhooks:read
  • Idempotency-Key not applicable

Responses

CodeDescriptionBody
200Endpoints (no secrets).WebhookEndpointList application/json
Possible errors (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
400Malformed request.about:blank
401Missing or invalid API key.about:blank
403The key is valid but lacks the required scope, or the source IP is not allow-listed.about:blank
404The requested resource does not exist.about:blank
409Idempotency conflict — same key, original still processing.https://errors.compense.co/gateway/idempotency-conflict
422Request body failed validation.https://errors.compense.co/gateway/validation
429Per-key rate limit or monthly quota exceeded; see Retry-After.https://errors.compense.co/gateway/rate-limited
500Unexpected gateway error; quote the trace_id to support.about:blank
502The processing engine returned an error.https://errors.compense.co/gateway/upstream-error
504The processing engine did not respond in time.https://errors.compense.co/gateway/upstream-error

See problem+json errors for the equivalent exception in each SDK.

Example

SDK method and HTTP request
client.webhooks.endpoints.list()

Each SDK's methods come from its contract parity suite. The cURL runs against the sandbox; <field> values are placeholders.

Register an endpoint (returns the secret ONCE) #

POST/v1/gateway/webhooks/endpoints/

  • operationId createWebhookEndpoint
  • Authentication X-API-Key · scope webhooks:manage
  • Idempotency-Key recommended (the SDK generates it)
data.secret is shown only in this response (and on rotate-secret). An idempotent replay returns the endpoint without the secret.

Parameters

NameInTypeDescription
Idempotency-KeyheaderstringClient-generated key that makes a write safely retryable. Replaying the same key returns the original result with idempotent_replay: true; a replay while the original is still in flight returns 409. E.g.: horizonte-2026-06-26-credit-000123

Request body

Content type: application/json · required

Schema WebhookEndpointCreateIn

FieldTypeDescription
activeboolean
descriptionstring
events requiredarray of stringKeys from the event catalog. E.g.: ["credits.decision","wallets.cashin.confirmed"]
labelstringMax. 128 characters.
url requiredstring (uri)Public HTTPS URL. E.g.: "https://erp.nova.example/compense/webhooks"

Responses

CodeDescriptionBody
200Done; the engine result is in data.TransactionEnvelope application/json
Possible errors (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
400Malformed request.about:blank
401Missing or invalid API key.about:blank
403The key is valid but lacks the required scope, or the source IP is not allow-listed.about:blank
404The requested resource does not exist.about:blank
409Idempotency conflict — same key, original still processing.https://errors.compense.co/gateway/idempotency-conflict
422Request body failed validation.https://errors.compense.co/gateway/validation
429Per-key rate limit or monthly quota exceeded; see Retry-After.https://errors.compense.co/gateway/rate-limited
500Unexpected gateway error; quote the trace_id to support.about:blank
502The processing engine returned an error.https://errors.compense.co/gateway/upstream-error
504The processing engine did not respond in time.https://errors.compense.co/gateway/upstream-error

See problem+json errors for the equivalent exception in each SDK.

Example

SDK method and HTTP request
client.webhooks.endpoints.create()

Each SDK's methods come from its contract parity suite. The cURL runs against the sandbox; <field> values are placeholders.

Endpoint detail #

GET/v1/gateway/webhooks/endpoints/{endpoint_id}/

  • operationId getWebhookEndpoint
  • Authentication X-API-Key · scope webhooks:read
  • Idempotency-Key not applicable

Parameters

NameInTypeDescription
endpoint_id requiredpathstringWebhook endpoint id. E.g.: 3f1a2b3c-0000-4a1b-9c2d-000000000001

Responses

CodeDescriptionBody
200The endpoint (no secret).WebhookEndpoint application/json
Possible errors (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
400Malformed request.about:blank
401Missing or invalid API key.about:blank
403The key is valid but lacks the required scope, or the source IP is not allow-listed.about:blank
404The requested resource does not exist.about:blank
409Idempotency conflict — same key, original still processing.https://errors.compense.co/gateway/idempotency-conflict
422Request body failed validation.https://errors.compense.co/gateway/validation
429Per-key rate limit or monthly quota exceeded; see Retry-After.https://errors.compense.co/gateway/rate-limited
500Unexpected gateway error; quote the trace_id to support.about:blank
502The processing engine returned an error.https://errors.compense.co/gateway/upstream-error
504The processing engine did not respond in time.https://errors.compense.co/gateway/upstream-error

See problem+json errors for the equivalent exception in each SDK.

Example

SDK method and HTTP request
client.webhooks.endpoints.get()

Each SDK's methods come from its contract parity suite. The cURL runs against the sandbox; <field> values are placeholders.

Update an endpoint (url, events, label, description, active) #

PATCH/v1/gateway/webhooks/endpoints/{endpoint_id}/

  • operationId updateWebhookEndpoint
  • Authentication X-API-Key · scope webhooks:manage
  • Idempotency-Key recommended (the SDK generates it)

Parameters

NameInTypeDescription
endpoint_id requiredpathstringWebhook endpoint id. E.g.: 3f1a2b3c-0000-4a1b-9c2d-000000000001
Idempotency-KeyheaderstringClient-generated key that makes a write safely retryable. Replaying the same key returns the original result with idempotent_replay: true; a replay while the original is still in flight returns 409. E.g.: horizonte-2026-06-26-credit-000123

Request body

Content type: application/json · required

Schema WebhookEndpointUpdateIn — Partial update. Only these fields are accepted.

FieldTypeDescription
activeboolean
descriptionstring
eventsarray of string
labelstringMax. 128 characters.
urlstring (uri)

Responses

CodeDescriptionBody
200Done; the engine result is in data.TransactionEnvelope application/json
Possible errors (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
400Malformed request.about:blank
401Missing or invalid API key.about:blank
403The key is valid but lacks the required scope, or the source IP is not allow-listed.about:blank
404The requested resource does not exist.about:blank
409Idempotency conflict — same key, original still processing.https://errors.compense.co/gateway/idempotency-conflict
422Request body failed validation.https://errors.compense.co/gateway/validation
429Per-key rate limit or monthly quota exceeded; see Retry-After.https://errors.compense.co/gateway/rate-limited
500Unexpected gateway error; quote the trace_id to support.about:blank
502The processing engine returned an error.https://errors.compense.co/gateway/upstream-error
504The processing engine did not respond in time.https://errors.compense.co/gateway/upstream-error

See problem+json errors for the equivalent exception in each SDK.

Example

SDK method and HTTP request
client.webhooks.endpoints.update()

Each SDK's methods come from its contract parity suite. The cURL runs against the sandbox; <field> values are placeholders.

Delete an endpoint (and its delivery history) #

DELETE/v1/gateway/webhooks/endpoints/{endpoint_id}/

  • operationId deleteWebhookEndpoint
  • Authentication X-API-Key · scope webhooks:manage
  • Idempotency-Key recommended (the SDK generates it)

Parameters

NameInTypeDescription
endpoint_id requiredpathstringWebhook endpoint id. E.g.: 3f1a2b3c-0000-4a1b-9c2d-000000000001
Idempotency-KeyheaderstringClient-generated key that makes a write safely retryable. Replaying the same key returns the original result with idempotent_replay: true; a replay while the original is still in flight returns 409. E.g.: horizonte-2026-06-26-credit-000123

Responses

CodeDescriptionBody
200Done; the engine result is in data.TransactionEnvelope application/json
Possible errors (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
400Malformed request.about:blank
401Missing or invalid API key.about:blank
403The key is valid but lacks the required scope, or the source IP is not allow-listed.about:blank
404The requested resource does not exist.about:blank
409Idempotency conflict — same key, original still processing.https://errors.compense.co/gateway/idempotency-conflict
422Request body failed validation.https://errors.compense.co/gateway/validation
429Per-key rate limit or monthly quota exceeded; see Retry-After.https://errors.compense.co/gateway/rate-limited
500Unexpected gateway error; quote the trace_id to support.about:blank
502The processing engine returned an error.https://errors.compense.co/gateway/upstream-error
504The processing engine did not respond in time.https://errors.compense.co/gateway/upstream-error

See problem+json errors for the equivalent exception in each SDK.

Example

SDK method and HTTP request
client.webhooks.endpoints.delete()

Each SDK's methods come from its contract parity suite. The cURL runs against the sandbox; <field> values are placeholders.

Rotate the signing secret (the old one stops working immediately) #

POST/v1/gateway/webhooks/endpoints/{endpoint_id}/rotate-secret/

  • operationId rotateWebhookSecret
  • Authentication X-API-Key · scope webhooks:manage
  • Idempotency-Key recommended (the SDK generates it)

Parameters

NameInTypeDescription
endpoint_id requiredpathstringWebhook endpoint id. E.g.: 3f1a2b3c-0000-4a1b-9c2d-000000000001
Idempotency-KeyheaderstringClient-generated key that makes a write safely retryable. Replaying the same key returns the original result with idempotent_replay: true; a replay while the original is still in flight returns 409. E.g.: horizonte-2026-06-26-credit-000123

Responses

CodeDescriptionBody
200Done; the engine result is in data.TransactionEnvelope application/json
Possible errors (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
400Malformed request.about:blank
401Missing or invalid API key.about:blank
403The key is valid but lacks the required scope, or the source IP is not allow-listed.about:blank
404The requested resource does not exist.about:blank
409Idempotency conflict — same key, original still processing.https://errors.compense.co/gateway/idempotency-conflict
422Request body failed validation.https://errors.compense.co/gateway/validation
429Per-key rate limit or monthly quota exceeded; see Retry-After.https://errors.compense.co/gateway/rate-limited
500Unexpected gateway error; quote the trace_id to support.about:blank
502The processing engine returned an error.https://errors.compense.co/gateway/upstream-error
504The processing engine did not respond in time.https://errors.compense.co/gateway/upstream-error

See problem+json errors for the equivalent exception in each SDK.

Example

SDK method and HTTP request
client.webhooks.endpoints.rotate_secret()

Each SDK's methods come from its contract parity suite. The cURL runs against the sandbox; <field> values are placeholders.

Send a signed test event #

POST/v1/gateway/webhooks/endpoints/{endpoint_id}/test/

  • operationId sendWebhookTestEvent
  • Authentication X-API-Key · scope webhooks:manage
  • Idempotency-Key recommended (the SDK generates it)
Payload carries "test": true and the event_id starts with test-.

Parameters

NameInTypeDescription
endpoint_id requiredpathstringWebhook endpoint id. E.g.: 3f1a2b3c-0000-4a1b-9c2d-000000000001
Idempotency-KeyheaderstringClient-generated key that makes a write safely retryable. Replaying the same key returns the original result with idempotent_replay: true; a replay while the original is still in flight returns 409. E.g.: horizonte-2026-06-26-credit-000123

Request body

Content type: application/json

Schema WebhookTestIn

FieldTypeDescription
event_typestringCatalog key whose payload_example is sent (default test.ping). E.g.: "credits.decision"

Responses

CodeDescriptionBody
200Done; the engine result is in data.TransactionEnvelope application/json
Possible errors (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
400Malformed request.about:blank
401Missing or invalid API key.about:blank
403The key is valid but lacks the required scope, or the source IP is not allow-listed.about:blank
404The requested resource does not exist.about:blank
409Idempotency conflict — same key, original still processing.https://errors.compense.co/gateway/idempotency-conflict
422Request body failed validation.https://errors.compense.co/gateway/validation
429Per-key rate limit or monthly quota exceeded; see Retry-After.https://errors.compense.co/gateway/rate-limited
500Unexpected gateway error; quote the trace_id to support.about:blank
502The processing engine returned an error.https://errors.compense.co/gateway/upstream-error
504The processing engine did not respond in time.https://errors.compense.co/gateway/upstream-error

See problem+json errors for the equivalent exception in each SDK.

Example

SDK method and HTTP request
client.webhooks.endpoints.send_test()

Each SDK's methods come from its contract parity suite. The cURL runs against the sandbox; <field> values are placeholders.

Event catalog (description, payload example, signature contract) #

GET/v1/gateway/webhooks/event-catalog/

  • operationId getWebhookEventCatalog
  • Authentication X-API-Key · scope webhooks:read
  • Idempotency-Key not applicable

Parameters

NameInTypeDescription
categoryquerystringFilter by category (credits, wallets, …).

Responses

CodeDescriptionBody
200The catalog.WebhookEventCatalog application/json
Possible errors (400, 401, 403, 404, 409, 422, 429, 500, 502, 504) — application/problem+json
400Malformed request.about:blank
401Missing or invalid API key.about:blank
403The key is valid but lacks the required scope, or the source IP is not allow-listed.about:blank
404The requested resource does not exist.about:blank
409Idempotency conflict — same key, original still processing.https://errors.compense.co/gateway/idempotency-conflict
422Request body failed validation.https://errors.compense.co/gateway/validation
429Per-key rate limit or monthly quota exceeded; see Retry-After.https://errors.compense.co/gateway/rate-limited
500Unexpected gateway error; quote the trace_id to support.about:blank
502The processing engine returned an error.https://errors.compense.co/gateway/upstream-error
504The processing engine did not respond in time.https://errors.compense.co/gateway/upstream-error

See problem+json errors for the equivalent exception in each SDK.

Example

SDK method and HTTP request
client.webhooks.event_catalog()

Each SDK's methods come from its contract parity suite. The cURL runs against the sandbox; <field> values are placeholders.