Automette docs

List webhook subscriptions

GET
/api/v1/webhooks

Authorization

ApiKeyAuth
AuthorizationBearer <token>

API key from Settings → API Keys.

In: header

Response Body

application/json

application/json

curl -X GET "https://example.com/api/v1/webhooks"
[  {    "id": "string",    "url": "http://example.com",    "events": [      "render.completed"    ],    "enabled": true,    "failure_count": 0,    "template_id": "string",    "created_at": "2019-08-24T14:15:22Z",    "updated_at": "2019-08-24T14:15:22Z"  }]

Sign an on-demand URL POST

Generates a signed URL that renders a template on first request and serves from CDN forever after. The URL is HMAC-signed so it cannot be tampered with. No API key is required to fetch it — paste it into `<img src>`, an email, or a share link. Signing also pre-warms the render so the first visitor hits a cached file, not a cold render. You pay the credit at sign time; visitors pay nothing. The signature is computed over `(url_base, data, format)`. Two calls with the same data return the same signed URL and hit the same cache. Changing any field in `data` produces a new URL and a fresh render. **Before signing**, the template must have a `url_base` — generate one with `POST /api/v1/templates/{id}/url_base`.

Create a webhook subscription POST

Subscribes to events for your team. When an event fires, Automette POSTs a JSON payload to your URL. The response includes a `secret` — use it to verify the `webhook-signature` header on incoming requests. **The secret is shown only once** — store it immediately. See [Webhook payloads](/docs/api/webhook-payloads) for signature verification. By default a subscription is **team-wide** and fires for every matching event in your team, regardless of source. Pass `template_id` to scope it to a single template — it then receives render events for that template only. Delivery is additive: a render notifies your team-wide subscriptions **and** any subscription scoped to that template. For a one-off callback tied to a single render, use the `webhook_url` field on `POST /api/v1/renders` instead. **Available events:** - `render.completed` — a single render finished successfully (API, form, on-demand, template set). Bulk/CSV rows do **not** fire this — see `job.completed`. - `render.failed` — a single render failed or errored - `form.submitted` — a submission landed on a hosted form - `job.completed` — a bulk/CSV job finished (one event per job, with row counts), instead of a delivery per row