Webhooks API
Webhooks push every new submission to a URL you control the moment it arrives. This page covers managing webhooks over the API; the payload you receive is documented under Notifications → Webhooks.
Requires a bearer token; the form must be in the token's workspace. A form can have up to 5 webhooks.
The webhook object
{
"id": 77,
"form_id": 42,
"url": "https://hooks.example.com/rapidform",
"active": true,
"created_at": "2026-09-04T10:00:00+00:00"
}
| Field | Type | Description |
|---|---|---|
id |
integer | Webhook ID. Use it to delete the webhook. |
form_id |
integer | The form it fires for. |
url |
string | Endpoint that receives a POST for every new submission. |
active |
boolean | Inactive webhooks are kept but not called. |
created_at |
ISO 8601 datetime | When it was added. |
List webhooks
GET /forms/{form}/webhooks
Returns {"data": [ …webhook objects… ]} for the form, including webhooks added in the dashboard.
curl https://rapidform.com/api/v1/forms/42/webhooks \
-H "Authorization: Bearer $RAPIDFORM_API_KEY"
Add a webhook
POST /forms/{form}/webhooks
| Body parameter | Type | Required | Description |
|---|---|---|---|
url |
string, max 2048 | yes | An http:// or https:// URL. Use HTTPS in production. |
active |
boolean | no, default true |
Set false to register the webhook without enabling it. |
curl -X POST https://rapidform.com/api/v1/forms/42/webhooks \
-H "Authorization: Bearer $RAPIDFORM_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "url": "https://hooks.example.com/rapidform" }'
Responds 201 Created with the webhook object.
Errors: 422 with errors.url for an invalid URL, or 422 with code: webhook_limit_reached when the form already has 5 webhooks.
Remove a webhook
DELETE /forms/{form}/webhooks/{webhook}
Stops deliveries immediately. Responds 204 No Content, or 404 if the webhook does not belong to that form.
curl -X DELETE https://rapidform.com/api/v1/forms/42/webhooks/77 \
-H "Authorization: Bearer $RAPIDFORM_API_KEY"
What your endpoint receives
For each submission RapidForm sends one POST per active webhook with a JSON body containing the form (id, name, slug) and the submission (id, answers keyed by field label, metadata, timestamp). Requests time out after 10 seconds and are not retried, so respond with a 2xx quickly and process the payload asynchronously. See the full example under Notifications → Webhooks.
A typical pattern is to create the form and its webhook in one go:
FORM_ID=$(curl -s -X POST https://rapidform.com/api/v1/forms \
-H "Authorization: Bearer $RAPIDFORM_API_KEY" -H "Content-Type: application/json" \
-d '{ "name": "Quote request", "status": "published", "fields": [
{ "type": "email", "label": "Email", "required": true },
{ "type": "textarea", "label": "What do you need?" } ] }' | jq -r '.data.id')
curl -s -X POST "https://rapidform.com/api/v1/forms/$FORM_ID/webhooks" \
-H "Authorization: Bearer $RAPIDFORM_API_KEY" -H "Content-Type: application/json" \
-d '{ "url": "https://hooks.example.com/quotes" }'