Webhooks
GET /v1/webhook-endpoints
Section titled “GET /v1/webhook-endpoints”List webhook endpoints
Scope: webhooks:manage
curl https://app.rieck.nu/api/v1/webhook-endpoints \ -H "Authorization: Bearer $RIECK_API_KEY"const svar = await rieck.request("GET", "/v1/webhook-endpoints");POST /v1/webhook-endpoints
Section titled “POST /v1/webhook-endpoints”Register endpoint
Response carries the signing secret exactly once. HTTPS only; private hosts rejected; max 10 per organisation.
Scope: webhooks:manage
curl -X POST https://app.rieck.nu/api/v1/webhook-endpoints \ -H "Authorization: Bearer $RIECK_API_KEY" \ -H "Idempotency-Key: order-2041" \ -d '{ "url": "https://erp.acme.example/webhooks/rieck", "eventTypes": [ "…" ], "description": "Consulting" }'const svar = await rieck.request("POST", "/v1/webhook-endpoints", { body: { "url": "https://erp.acme.example/webhooks/rieck", "eventTypes": [ "…" ], "description": "Consulting" },});Request body — fuldt JSON Schema
{ "type": "object", "properties": { "url": { "type": "string", "minLength": 1, "maxLength": 500 }, "eventTypes": { "minItems": 1, "maxItems": 28, "type": "array", "items": { "type": "string" } }, "description": { "anyOf": [ { "type": "string", "maxLength": 200 }, { "type": "null" } ] } }, "required": [ "url", "eventTypes" ], "additionalProperties": false}GET /v1/webhook-endpoints/{endpointId}
Section titled “GET /v1/webhook-endpoints/{endpointId}”Get endpoint
Scope: webhooks:manage
curl https://app.rieck.nu/api/v1/webhook-endpoints/9b2f1c1e-… \ -H "Authorization: Bearer $RIECK_API_KEY"const svar = await rieck.request("GET", "/v1/webhook-endpoints/9b2f1c1e-…");PATCH /v1/webhook-endpoints/{endpointId}
Section titled “PATCH /v1/webhook-endpoints/{endpointId}”Update endpoint
The URL cannot be changed — register a new endpoint instead.
Scope: webhooks:manage
curl -X PATCH https://app.rieck.nu/api/v1/webhook-endpoints/9b2f1c1e-… \ -H "Authorization: Bearer $RIECK_API_KEY" \ -H "Idempotency-Key: order-2041" \ -d '{ "eventTypes": [ "…" ], "active": true, "description": "Consulting" }'const svar = await rieck.request("PATCH", "/v1/webhook-endpoints/9b2f1c1e-…", { body: { "eventTypes": [ "…" ], "active": true, "description": "Consulting" },});Request body — fuldt JSON Schema
{ "type": "object", "properties": { "eventTypes": { "minItems": 1, "maxItems": 28, "type": "array", "items": { "type": "string" } }, "active": { "type": "boolean" }, "description": { "anyOf": [ { "type": "string", "maxLength": 200 }, { "type": "null" } ] } }, "additionalProperties": false}DELETE /v1/webhook-endpoints/{endpointId}
Section titled “DELETE /v1/webhook-endpoints/{endpointId}”Delete endpoint
Scope: webhooks:manage
curl -X DELETE https://app.rieck.nu/api/v1/webhook-endpoints/9b2f1c1e-… \ -H "Authorization: Bearer $RIECK_API_KEY" \ -H "Idempotency-Key: order-2041"const svar = await rieck.request("DELETE", "/v1/webhook-endpoints/9b2f1c1e-…");POST /v1/webhook-endpoints/{endpointId}/rotate-secret
Section titled “POST /v1/webhook-endpoints/{endpointId}/rotate-secret”Rotate secret (24 h overlap)
Scope: webhooks:manage
curl -X POST https://app.rieck.nu/api/v1/webhook-endpoints/9b2f1c1e-…/rotate-secret \ -H "Authorization: Bearer $RIECK_API_KEY" \ -H "Idempotency-Key: order-2041"const svar = await rieck.request("POST", "/v1/webhook-endpoints/9b2f1c1e-…/rotate-secret");POST /v1/webhook-endpoints/{endpointId}/test
Section titled “POST /v1/webhook-endpoints/{endpointId}/test”Send test ping
Scope: webhooks:manage
curl -X POST https://app.rieck.nu/api/v1/webhook-endpoints/9b2f1c1e-…/test \ -H "Authorization: Bearer $RIECK_API_KEY" \ -H "Idempotency-Key: order-2041"const svar = await rieck.request("POST", "/v1/webhook-endpoints/9b2f1c1e-…/test");POST /v1/webhook-endpoints/{endpointId}/replay
Section titled “POST /v1/webhook-endpoints/{endpointId}/replay”Replay deliveries
Re-queues failed/given-up deliveries and enqueues never-queued events since since (max 90 days back). Delivered events are never re-sent.
Scope: webhooks:manage
curl -X POST https://app.rieck.nu/api/v1/webhook-endpoints/9b2f1c1e-…/replay \ -H "Authorization: Bearer $RIECK_API_KEY" \ -H "Idempotency-Key: order-2041" \ -d '{ "since": "2026-08-15" }'const svar = await rieck.request("POST", "/v1/webhook-endpoints/9b2f1c1e-…/replay", { body: { "since": "2026-08-15" },});Request body — fuldt JSON Schema
{ "type": "object", "properties": { "since": { "anyOf": [ { "type": "string", "format": "date-time", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" }, { "type": "string", "pattern": "^\\d{4}-\\d{2}-\\d{2}$" } ] } }, "required": [ "since" ], "additionalProperties": false}