Skip to main content
Register one or more endpoints and SudoMock sends a signed JSON payload to them when your jobs complete. Webhooks are available on every plan. Polling GET /api/v1/jobs/{job_id} remains the source of truth, and webhooks are a convenience layer on top of it.
Add, edit and rotate endpoints from Dashboard, Webhooks, or through the API. Each endpoint has its own signing secret, prefixed whsec_, shown once when you create or rotate it.

Events

Leave event_types empty to subscribe to every event, including ones added later. A failed upload is delivered as render.failed, so subscribe to render.failed if you ingest PSDs.
Endpoints created before the photo_mockup names were introduced are pinned to the earlier spelling of the same five events: 2d_mockup.ready, 2d_mockup.rejected, 2d_mockup.failed, 2d_render.succeeded and 2d_render.failed, with kind spelled 2d_create or 2d_render. They keep receiving them unchanged. The endpoint’s event_naming field reads legacy or current and says which spelling it receives; new endpoints default to current. Either spelling is accepted in event_types. Move an existing endpoint with PATCH { "event_naming": "current" } once your handler reads the new names.

Headers and body

Headers
Body
Verify the signature before you act on the body. See Verifying signatures.

Create an endpoint

The full whsec_ secret is returned only on create and on rotate-secret. Store it when you receive it. Every other read masks it as whsec_****<last4>.

The endpoint object

Deliveries

Every attempt is logged with its HTTP status, attempt count and error.
The delivery and events feeds page with an opaque cursor. Make the first request without cursor. When another page exists, the response carries X-Webhook-Next-Cursor. Send that exact value as the next request’s cursor. When the header is absent, the list is complete.
Paging through deliveries

Retries and replay

Failed deliveries are retried automatically. You can inspect every attempt and replay a single delivery, or replay every failed delivery for an endpoint at once. Treat job_id plus the event name as the delivery’s idempotency key, persist it before applying side effects, and return a 2xx response only after processing succeeds. A replayed delivery can arrive with result_url set to null; when that happens, fetch the result by polling GET /api/v1/jobs/{job_id}.

Send a test event

The test event travels the same signed path as a real one, so it exercises your verification code end to end.

Verifying signatures

Check the HMAC before you trust a payload.

Webhook endpoints API

Create, rotate, list, replay and inspect, from your own backend.