REST endpoints for webhooks in ServFlo: 13 operations with parameters, request and response fields, permissions and curl examples.
Base URL: https://app.servflo.ai/api. Every call needs Authorization: Bearer sfk_… (Authentication); {organizationId} ($ORGANIZATION_ID in the examples) is your business's id.
GET /organizations/{organizationId}/webhooks/event-types
The event catalogue: every domain event type with its area (for subscribing by area), what it means, its payload version and the fields of its data (ids and safe fields only). Read-only.
The organization's webhook endpoints with their subscribed events, whether they are on, the secret's last four characters, the last delivery and how many deliveries are failing. Read-only.
Sends data out: from now on, the organization's events (all, or eventTypes) are POSTed to url as JSON {id, type, occurredAt, organizationId, data}, signed with ServFlo-Signature: t=<unix>,v1=<hex HMAC-SHA256 of "t.body">. Returns the signing secret ONCE. Retries 1 m, 5 m, 30 m, 2 h, 12 h, then DEAD; an endpoint whose deliveries die 5 times in a row is turned off. Send a test with POST /webhooks/{webhookId}/test.
Permission
integrations.manage (Owner, Admin)
Risk
sensitive, OAuth scope servflo.sensitive. Sensitive: moves money, deletes, sends or shows something to a customer, or grants or revokes access.
MCP tool
webhooks_create (toolset settings)
Approval
Waits for your approval in ServFlo when called with an API key or a connected app: the first call answers 428 APPROVAL_REQUIRED; once you approve it, repeat the call with the X-ServFlo-Approval header. See Approvals.
Where events are POSTed. https only (http://localhost only where the server allows private targets, i.e. development). Private, loopback and link-local addresses are refused. Up to 2048 characters.
description
string or null
No
Up to 500 characters.
eventTypes
array of string
No
The events to send; empty or omitted = every event. Up to 100 items.
Sends data out: change an endpoint's URL, description or subscribed events (empty = all). A new URL receives every later event. The secret is unchanged.
Permission
integrations.manage (Owner, Admin)
Risk
sensitive, OAuth scope servflo.sensitive. Sensitive: moves money, deletes, sends or shows something to a customer, or grants or revokes access.
MCP tool
webhooks_update (toolset settings)
Approval
Waits for your approval in ServFlo when called with an API key or a connected app: the first call answers 428 APPROVAL_REQUIRED; once you approve it, repeat the call with the X-ServFlo-Approval header. See Approvals.
Where events are POSTed. https only (http://localhost only where the server allows private targets, i.e. development). Private, loopback and link-local addresses are refused. Up to 2048 characters.
description
string or null
No
Up to 500 characters.
eventTypes
array of string
No
The events to send; empty or omitted = every event. Up to 100 items.
POST /organizations/{organizationId}/webhooks/{webhookId}/active
active: false pauses deliveries (they wait); active: true resumes them and clears an automatic turn-off and its failure count. Resend dead deliveries afterwards if needed.
Permission
integrations.manage (Owner, Admin)
Risk
write, OAuth scope servflo.write. Write: creates or changes records inside the business; nothing leaves it.
POST /organizations/{organizationId}/webhooks/{webhookId}/secret
Replaces the endpoint's signing secret and returns the new one ONCE. The old secret stops working at once: update the receiver first or accept failed verifications until then.
Permission
integrations.manage (Owner, Admin)
Risk
sensitive, OAuth scope servflo.sensitive. Sensitive: moves money, deletes, sends or shows something to a customer, or grants or revokes access.
MCP tool
webhooks_regenerateSecret (toolset settings)
Approval
Waits for your approval in ServFlo when called with an API key or a connected app: the first call answers 428 APPROVAL_REQUIRED; once you approve it, repeat the call with the X-ServFlo-Approval header. See Approvals.
GET /organizations/{organizationId}/webhooks/{webhookId}/deliveries
The delivery log, newest first: event type, status (PENDING, SUCCEEDED, FAILED = will retry, DEAD = out of attempts), attempts, the last HTTP status, time taken and error, the next attempt. Filter with status. Read-only.
POST /organizations/{organizationId}/webhooks/{webhookId}/deliveries/{deliveryId}/resend
Sends data out: delivers the event to the endpoint again now, whatever its status, with a fresh signature; a failure starts a new retry schedule. 409 while a worker is sending it.
Permission
integrations.manage (Owner, Admin)
Risk
sensitive, OAuth scope servflo.sensitive. Sensitive: moves money, deletes, sends or shows something to a customer, or grants or revokes access.
MCP tool
webhooks_resend (toolset settings)
Approval
Over MCP, this tool always waits for your approval in ServFlo. See Approvals.
POST /organizations/{organizationId}/webhooks/{webhookId}/test
Records a webhook.test event for this endpoint only and delivers it now (signed like any event; no customer data). Answers the delivery with the receiver's response, so a setup can be checked in one call.
Permission
integrations.manage (Owner, Admin)
Risk
write, OAuth scope servflo.write. Write: creates or changes records inside the business; nothing leaves it.
The outbox: every domain event the organization produced, newest first, with its payload (ids and safe fields), who caused it (USER, AGENT, SYSTEM, PUBLIC) and its webhook deliveries. Filter by type (exact, or a prefix ending in . such as invoice.), subjectType + subjectId (one record's history), actorUserId and from / to (UTC days). Useful to see what happened to a record. Read-only.