TrustWixDocs
API reference

Webhooks

GET
/v1/webhooks

Your endpoints. The signing secret is never returned here, only once at creation. Cursor-paginated, newest first. limit accepts 1 to 100 and defaults to 20. To walk further, set starting_after to the id of the last record on the page you just read. has_more tells you another page exists and next_cursor is the value to pass back; on the last page has_more is false and next_cursor is null. An unknown cursor is ignored and you get the first page. Requires the webhook:manage permission on the calling key.

Authorization

secretKey
AuthorizationBearer <token>

Secret API key, server-side only. Example: Bearer TWK_...

In: header

Query Parameters

limit?integer

How many records to return. 1 to 100, defaults to 20.

Range1 <= value <= 100
Default20
starting_after?string

A webhook endpoint id; returns the page after it.

Match^whe_

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/v1/webhooks"
{  "object": "list",  "data": [    {      "id": "string",      "object": "webhook_endpoint",      "url": "http://example.com",      "events": [        "string"      ],      "status": "active",      "api_key_ids": [        "46d53060-1858-4fe7-9116-50b66c33fdea"      ],      "description": "string",      "created_at": "2019-08-24T14:15:22Z"    }  ],  "has_more": true,  "next_cursor": "string"}
POST
/v1/webhooks

Register a URL to receive events. The response carries signing_secret exactly once: store it now, because it is not recoverable afterwards and no later call will return it. Use it to verify the signature on every delivery.

By default the endpoint serves every API key on the account. Pass api_key_ids to narrow it to named keys, which is how one account routes each product to its own backend. Minting a key later never adds it to an endpoint.

Requires the webhook:manage permission on the calling key.

Authorization

secretKey
AuthorizationBearer <token>

Secret API key, server-side only. Example: Bearer TWK_...

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/v1/webhooks" \  -H "Content-Type: application/json" \  -d '{    "url": "http://example.com",    "events": [      "verification.created"    ]  }'
{  "id": "string",  "object": "webhook_endpoint",  "url": "http://example.com",  "events": [    "string"  ],  "status": "active",  "api_key_ids": [    "46d53060-1858-4fe7-9116-50b66c33fdea"  ],  "description": "string",  "created_at": "2019-08-24T14:15:22Z",  "signing_secret": "string"}
POST
/v1/webhooks/{id}/rotate_secret

Issues a new signing_secret for this endpoint and returns it exactly once. The endpoint keeps its id and its delivery history.

THE CUTOVER IS IMMEDIATE and there is no overlap window: the previous secret stops signing as soon as this responds, so any delivery that arrives before you deploy the new one will fail signature verification on your side. Treat it as a coordinated change.

Requires the webhook:manage permission on the calling key.

Authorization

secretKey
AuthorizationBearer <token>

Secret API key, server-side only. Example: Bearer TWK_...

In: header

Path Parameters

id*string
Match^whe_

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/v1/webhooks/string/rotate_secret"
{  "id": "string",  "object": "webhook_endpoint",  "url": "http://example.com",  "events": [    "string"  ],  "status": "active",  "api_key_ids": [    "46d53060-1858-4fe7-9116-50b66c33fdea"  ],  "description": "string",  "created_at": "2019-08-24T14:15:22Z",  "signing_secret": "string"}
POST
/v1/webhooks/{id}/test

Delivers one sample event to this endpoint, through the real delivery path. It is signed with the endpoint's own secret, recorded in your delivery log, and retried on failure exactly like a real event, so a handler that accepts this is a handler that will accept production traffic.

THE EVENT DOES NOT HAVE TO BE ONE THE ENDPOINT SUBSCRIBES TO. Testing a handler before subscribing to the event is the point: you should not have to put production on verification.rejected to find out whether your branch for it works. The endpoint does have to be active.

The payload is easy to tell apart from a real one. The envelope carries test: true, which real events never do, and every resource id inside data is a clearly fake placeholder such as vs_test000000000000000000, so nothing in it resolves to a real person and a test can never be mistaken for a decision about one.

Responds 202 as soon as the delivery is queued. Whether your server accepted it is answered by the delivery log, not by this response.

Requires the webhook:manage permission on the calling key.

Authorization

secretKey
AuthorizationBearer <token>

Secret API key, server-side only. Example: Bearer TWK_...

In: header

Path Parameters

id*string
Match^whe_

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/v1/webhooks/string/test" \  -H "Content-Type: application/json" \  -d '{}'
{  "id": "string",  "object": "webhook_delivery",  "endpoint_id": "string",  "event": "string",  "test": true,  "status": "pending",  "created_at": "2019-08-24T14:15:22Z"}
PATCH
/v1/webhooks/{id}

Change where deliveries go, which events they carry, which keys they cover, or whether the endpoint is active. Send only the fields you are changing.

The endpoint keeps its id and its delivery history, which is the reason to prefer this over delete-and-recreate. The environment cannot be changed, because every delivery already recorded is labelled with it.

Watch api_key_ids in particular: omitting it leaves the routing untouched, while sending [] clears the filter and puts the endpoint back on every key.

Requires the webhook:manage permission on the calling key.

Authorization

secretKey
AuthorizationBearer <token>

Secret API key, server-side only. Example: Bearer TWK_...

In: header

Path Parameters

id*string
Match^whe_

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Every field is optional; send only what changes. At least one is required. The environment is fixed when an endpoint is registered and cannot be changed, because every delivery already recorded carries it.

OMITTING A FIELD IS NOT THE SAME AS SENDING AN EMPTY VALUE FOR IT. Omitting api_key_ids leaves this endpoint's routing exactly as it is; sending [] CLEARS the filter and returns the endpoint to receiving every key's traffic. Build the body from the fields you are actually changing rather than spreading a partial object with ?? [] defaults, or you will unfilter an endpoint you only meant to rename.

Properties1 <= properties

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X PATCH "https://example.com/v1/webhooks/string" \  -H "Content-Type: application/json" \  -d '{}'
{  "id": "string",  "object": "webhook_endpoint",  "url": "http://example.com",  "events": [    "string"  ],  "status": "active",  "api_key_ids": [    "46d53060-1858-4fe7-9116-50b66c33fdea"  ],  "description": "string",  "created_at": "2019-08-24T14:15:22Z"}
DELETE
/v1/webhooks/{id}

Permanently removes the endpoint and stops future deliveries to it. Requires the webhook:manage permission on the calling key.

Authorization

secretKey
AuthorizationBearer <token>

Secret API key, server-side only. Example: Bearer TWK_...

In: header

Path Parameters

id*string
Match^whe_

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X DELETE "https://example.com/v1/webhooks/string"
{  "id": "string",  "object": "webhook_endpoint",  "deleted": true}

verification.created. A verification session was created.

Return any 2xx promptly. Anything else, including a timeout, is a failed delivery and is retried with exponential backoff.

Two answers mean "not now" rather than "this failed". Reply 429 or 503 and the delivery is deferred WITHOUT consuming an attempt, honoring Retry-After up to 6 hours per deferral and 24 hours overall, after which it fails on the normal ladder. Use them when you are throttling or briefly down, and keep your retry budget for real failures.

Verify the signature on every request before acting on it, and treat the event id as an idempotency key: a delivery you have already processed can arrive again.

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

Example Requests

POST/verification.created

verification.pending. The session is waiting on the applicant.

Return any 2xx promptly. Anything else, including a timeout, is a failed delivery and is retried with exponential backoff.

Two answers mean "not now" rather than "this failed". Reply 429 or 503 and the delivery is deferred WITHOUT consuming an attempt, honoring Retry-After up to 6 hours per deferral and 24 hours overall, after which it fails on the normal ladder. Use them when you are throttling or briefly down, and keep your retry budget for real failures.

Verify the signature on every request before acting on it, and treat the event id as an idempotency key: a delivery you have already processed can arrive again.

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

Example Requests

POST/verification.pending

verification.awaiting_service. Submissions are in and the checks are queued.

Return any 2xx promptly. Anything else, including a timeout, is a failed delivery and is retried with exponential backoff.

Two answers mean "not now" rather than "this failed". Reply 429 or 503 and the delivery is deferred WITHOUT consuming an attempt, honoring Retry-After up to 6 hours per deferral and 24 hours overall, after which it fails on the normal ladder. Use them when you are throttling or briefly down, and keep your retry budget for real failures.

Verify the signature on every request before acting on it, and treat the event id as an idempotency key: a delivery you have already processed can arrive again.

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

Example Requests

POST/verification.awaiting_service

verification.completed. The session reached a terminal state. Fires for every outcome.

Return any 2xx promptly. Anything else, including a timeout, is a failed delivery and is retried with exponential backoff.

Two answers mean "not now" rather than "this failed". Reply 429 or 503 and the delivery is deferred WITHOUT consuming an attempt, honoring Retry-After up to 6 hours per deferral and 24 hours overall, after which it fails on the normal ladder. Use them when you are throttling or briefly down, and keep your retry budget for real failures.

Verify the signature on every request before acting on it, and treat the event id as an idempotency key: a delivery you have already processed can arrive again.

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

Example Requests

POST/verification.completed

verification.approved. The verdict is approve.

Return any 2xx promptly. Anything else, including a timeout, is a failed delivery and is retried with exponential backoff.

Two answers mean "not now" rather than "this failed". Reply 429 or 503 and the delivery is deferred WITHOUT consuming an attempt, honoring Retry-After up to 6 hours per deferral and 24 hours overall, after which it fails on the normal ladder. Use them when you are throttling or briefly down, and keep your retry budget for real failures.

Verify the signature on every request before acting on it, and treat the event id as an idempotency key: a delivery you have already processed can arrive again.

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

Example Requests

POST/verification.approved

verification.rejected. The verdict is reject.

Return any 2xx promptly. Anything else, including a timeout, is a failed delivery and is retried with exponential backoff.

Two answers mean "not now" rather than "this failed". Reply 429 or 503 and the delivery is deferred WITHOUT consuming an attempt, honoring Retry-After up to 6 hours per deferral and 24 hours overall, after which it fails on the normal ladder. Use them when you are throttling or briefly down, and keep your retry budget for real failures.

Verify the signature on every request before acting on it, and treat the event id as an idempotency key: a delivery you have already processed can arrive again.

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

Example Requests

POST/verification.rejected

verification.review. The verdict is review and a human needs to look at it.

Return any 2xx promptly. Anything else, including a timeout, is a failed delivery and is retried with exponential backoff.

Two answers mean "not now" rather than "this failed". Reply 429 or 503 and the delivery is deferred WITHOUT consuming an attempt, honoring Retry-After up to 6 hours per deferral and 24 hours overall, after which it fails on the normal ladder. Use them when you are throttling or briefly down, and keep your retry budget for real failures.

Verify the signature on every request before acting on it, and treat the event id as an idempotency key: a delivery you have already processed can arrive again.

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

Example Requests

POST/verification.review

verification.expired. The applicant never completed the session in time.

Return any 2xx promptly. Anything else, including a timeout, is a failed delivery and is retried with exponential backoff.

Two answers mean "not now" rather than "this failed". Reply 429 or 503 and the delivery is deferred WITHOUT consuming an attempt, honoring Retry-After up to 6 hours per deferral and 24 hours overall, after which it fails on the normal ladder. Use them when you are throttling or briefly down, and keep your retry budget for real failures.

Verify the signature on every request before acting on it, and treat the event id as an idempotency key: a delivery you have already processed can arrive again.

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

Example Requests

POST/verification.expired

verification.corrected. An outcome we already sent for this session was wrong, and has been corrected.

Return any 2xx promptly. Anything else, including a timeout, is a failed delivery and is retried with exponential backoff.

Two answers mean "not now" rather than "this failed". Reply 429 or 503 and the delivery is deferred WITHOUT consuming an attempt, honoring Retry-After up to 6 hours per deferral and 24 hours overall, after which it fails on the normal ladder. Use them when you are throttling or briefly down, and keep your retry budget for real failures.

Verify the signature on every request before acting on it, and treat the event id as an idempotency key: a delivery you have already processed can arrive again.

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

Example Requests

POST/verification.corrected

verification.data_updated. Someone on your team edited this verification's applicant data. Fetch it again for the new values.

Return any 2xx promptly. Anything else, including a timeout, is a failed delivery and is retried with exponential backoff.

Two answers mean "not now" rather than "this failed". Reply 429 or 503 and the delivery is deferred WITHOUT consuming an attempt, honoring Retry-After up to 6 hours per deferral and 24 hours overall, after which it fails on the normal ladder. Use them when you are throttling or briefly down, and keep your retry budget for real failures.

Verify the signature on every request before acting on it, and treat the event id as an idempotency key: a delivery you have already processed can arrive again.

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

Example Requests

POST/verification.data_updated

verification.already_verified. A new verification was attempted for someone this merchant has already approved, and was refused.

Return any 2xx promptly. Anything else, including a timeout, is a failed delivery and is retried with exponential backoff.

Two answers mean "not now" rather than "this failed". Reply 429 or 503 and the delivery is deferred WITHOUT consuming an attempt, honoring Retry-After up to 6 hours per deferral and 24 hours overall, after which it fails on the normal ladder. Use them when you are throttling or briefly down, and keep your retry budget for real failures.

Verify the signature on every request before acting on it, and treat the event id as an idempotency key: a delivery you have already processed can arrive again.

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

Example Requests

POST/verification.already_verified

check.completed. An individual check inside a verification finished.

Return any 2xx promptly. Anything else, including a timeout, is a failed delivery and is retried with exponential backoff.

Two answers mean "not now" rather than "this failed". Reply 429 or 503 and the delivery is deferred WITHOUT consuming an attempt, honoring Retry-After up to 6 hours per deferral and 24 hours overall, after which it fails on the normal ladder. Use them when you are throttling or briefly down, and keep your retry budget for real failures.

Verify the signature on every request before acting on it, and treat the event id as an idempotency key: a delivery you have already processed can arrive again.

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

Example Requests

POST/check.completed

fraud_network.created. A cross-merchant fraud signal was raised.

Return any 2xx promptly. Anything else, including a timeout, is a failed delivery and is retried with exponential backoff.

Two answers mean "not now" rather than "this failed". Reply 429 or 503 and the delivery is deferred WITHOUT consuming an attempt, honoring Retry-After up to 6 hours per deferral and 24 hours overall, after which it fails on the normal ladder. Use them when you are throttling or briefly down, and keep your retry budget for real failures.

Verify the signature on every request before acting on it, and treat the event id as an idempotency key: a delivery you have already processed can arrive again.

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

Example Requests

POST/fraud_network.created

fraud_network.modified. An existing fraud signal changed.

Return any 2xx promptly. Anything else, including a timeout, is a failed delivery and is retried with exponential backoff.

Two answers mean "not now" rather than "this failed". Reply 429 or 503 and the delivery is deferred WITHOUT consuming an attempt, honoring Retry-After up to 6 hours per deferral and 24 hours overall, after which it fails on the normal ladder. Use them when you are throttling or briefly down, and keep your retry budget for real failures.

Verify the signature on every request before acting on it, and treat the event id as an idempotency key: a delivery you have already processed can arrive again.

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

Example Requests

POST/fraud_network.modified

action.reviewed. A reviewer reached a decision.

Return any 2xx promptly. Anything else, including a timeout, is a failed delivery and is retried with exponential backoff.

Two answers mean "not now" rather than "this failed". Reply 429 or 503 and the delivery is deferred WITHOUT consuming an attempt, honoring Retry-After up to 6 hours per deferral and 24 hours overall, after which it fails on the normal ladder. Use them when you are throttling or briefly down, and keep your retry budget for real failures.

Verify the signature on every request before acting on it, and treat the event id as an idempotency key: a delivery you have already processed can arrive again.

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

Example Requests

POST/action.reviewed

action.on_hold. A case was put on hold.

Return any 2xx promptly. Anything else, including a timeout, is a failed delivery and is retried with exponential backoff.

Two answers mean "not now" rather than "this failed". Reply 429 or 503 and the delivery is deferred WITHOUT consuming an attempt, honoring Retry-After up to 6 hours per deferral and 24 hours overall, after which it fails on the normal ladder. Use them when you are throttling or briefly down, and keep your retry budget for real failures.

Verify the signature on every request before acting on it, and treat the event id as an idempotency key: a delivery you have already processed can arrive again.

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

Example Requests

POST/action.on_hold

action.pending. A case is waiting on a reviewer.

Return any 2xx promptly. Anything else, including a timeout, is a failed delivery and is retried with exponential backoff.

Two answers mean "not now" rather than "this failed". Reply 429 or 503 and the delivery is deferred WITHOUT consuming an attempt, honoring Retry-After up to 6 hours per deferral and 24 hours overall, after which it fails on the normal ladder. Use them when you are throttling or briefly down, and keep your retry budget for real failures.

Verify the signature on every request before acting on it, and treat the event id as an idempotency key: a delivery you have already processed can arrive again.

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

Example Requests

POST/action.pending

verification.tag_added. One of your own labels was put on a verification.

Return any 2xx promptly. Anything else, including a timeout, is a failed delivery and is retried with exponential backoff.

Two answers mean "not now" rather than "this failed". Reply 429 or 503 and the delivery is deferred WITHOUT consuming an attempt, honoring Retry-After up to 6 hours per deferral and 24 hours overall, after which it fails on the normal ladder. Use them when you are throttling or briefly down, and keep your retry budget for real failures.

Verify the signature on every request before acting on it, and treat the event id as an idempotency key: a delivery you have already processed can arrive again.

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

Example Requests

POST/verification.tag_added

verification.tag_removed. One of your own labels was taken off a verification.

Return any 2xx promptly. Anything else, including a timeout, is a failed delivery and is retried with exponential backoff.

Two answers mean "not now" rather than "this failed". Reply 429 or 503 and the delivery is deferred WITHOUT consuming an attempt, honoring Retry-After up to 6 hours per deferral and 24 hours overall, after which it fails on the normal ladder. Use them when you are throttling or briefly down, and keep your retry budget for real failures.

Verify the signature on every request before acting on it, and treat the event id as an idempotency key: a delivery you have already processed can arrive again.

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

Example Requests

POST/verification.tag_removed