rizamodocs
Webhooks

Create a webhook endpoint

POST
/webhooks

Events from now on go to it, of the profiles the person it sends for reaches (onBehalfOf: the caller, or the person behind the API key or agent), and it is deleted when they leave the team. Each event goes as one POST of JSON (the event as List events gives it), signed with Standard Webhooks' headers (webhook-id, the event's id; webhook-timestamp; webhook-signature). A 2xx answer within 15 seconds is delivered; anything else is tried again 6 times over about 18 hours, and a 410 Gone disables the endpoint. After 10 failures in a row an endpoint's deliveries wait while one at a time tries it, and one that keeps failing like that with nothing delivered for 5 days is disabled; Rizamo emails the team's owners and the person it sends for. Never sent to rizamo.com or workers.dev addresses, nor to private ones. Deliveries are not in order: order one resource's events by at. Its signing secret is in the answer, and only there. A team has up to 20 endpoints.

Authorization

apiKey
headerAuthorizationBearer <token>

An API key from the web app, under Developers. It starts with rz_live_.

Header Parameters

Idempotency-Key?string

1 to 255 printable characters, new for each request (a UUID); the body up to 1 MB. For 24 hours a repeat with the same key, path and body gets the first answer, with Idempotent-Replayed: true, instead of running again; 5xx, 409 and 429 answers are not kept. Errors, Retries, has the rest.

Length1 <= length <= 255

Request Body

application/json
  1. body
url*string

Where Rizamo sends events: an https address on the public internet.

Length1 <= length <= 2048
description?string

What it is for, for the people of the team.

Lengthlength <= 200
Default""
events?array<>|

The event types it receives. Null: every type, those Rizamo adds later included. A key or agent lists the inbox's types (comment.received, message.received, message.sent) only with inbox:read, and comment_automation.* only with automations:read; with null, the endpoint gets none of those it cannot read.

Defaultnull
profileIds?array<>|

Only events of these profiles. Null: every profile's, and the events of no profile. Someone limited to some profiles gives some of theirs.

Defaultnull

Response Body

OK

application/json
  1. response
endpoint*
secret*string

The signing secret (whsec_ and base64), shown only now: keep it where your receiver reads it. Each delivery's webhook-signature is v1, and the base64 HMAC-SHA256, keyed with the base64 after whsec_, of <webhook-id>.<webhook-timestamp>.<body>.

Example Request
curl -X POST 'https://api.rizamo.com/v1/webhooks' \  -H 'Idempotency-Key: 4b9e7c1a-2f3d-4e8a-9c6b-1d2e3f4a5b6c' \  -H 'Content-Type: application/json' \  -d '{  "url": "https://hooks.cafelumen.pt/rizamo",  "description": "Posts to our CRM",  "events": [    "post.published",    "post.failed",    "post.target.failed"  ]}'
Example Response
{  "endpoint": {    "id": "wh_01m4m44q00ea9a11gpjs99ddcy",    "url": "https://hooks.cafelumen.pt/rizamo",    "description": "Posts to our CRM",    "events": [      "post.published",      "post.failed",      "post.target.failed"    ],    "profileIds": null,    "status": "active",    "disabledReason": null,    "breaker": "closed",    "failingSince": null,    "disablesAt": null,    "successRate": null,    "lastDeliveryAt": null,    "createdBy": {      "type": "api_key",      "keyId": "key_01m4qw9xw0fem94hjmcppyba8c",      "name": "CRM sync"    },    "onBehalfOf": {      "userId": "user_01m4pc7v40fdm89vjt5k51b5h8",      "name": "Ana Costa"    },    "createdAt": "2026-11-01T15:00:00.000Z",    "updatedAt": "2026-11-01T15:00:00.000Z"  },  "secret": "whsec_ZXhhbXBsZS1zZWNyZXQtZm9yLWRvY3MtMDAwMQ=="}