Manage Webhooks
Create, list, update, archive, restore, and permanently delete inbound webhooks for a site.
List Webhooks
Retrieve all inbound webhooks for a site.
/v1/sites/:id/webhooksQuery Parameters
archivedstringShow archived webhooks: true or false (default: false)
Example Request
curl "https://proforms.io/api/v1/sites/s_xyz789/webhooks" \
-H "Authorization: Bearer pf_your_api_key"Response
{
"success": true,
"data": {
"webhooks": [
{
"id": "wh_abc123",
"name": "Contact Form Webhook",
"source": "generic",
"isEnabled": true,
"submissionCount": 142,
"lastReceivedAt": "2026-02-17T09:15:00.000Z",
"archivedAt": null,
"webhookUrl": "https://proforms.io/api/v1/incoming/wh_abc123",
"createdAt": "2026-01-10T10:00:00.000Z",
"updatedAt": "2026-02-15T14:00:00.000Z"
}
],
"archivedCount": 2
}
}Create Webhook
Create a new inbound webhook for a site. The secret key is only returned once on creation â save it.
/v1/sites/:id/webhooksRequest Body
name*stringWebhook name (e.g. "Contact Form")
sourcestringSource type: generic, google_ads, zapier (default: generic)
Example Request
curl -X POST "https://proforms.io/api/v1/sites/s_xyz789/webhooks" \
-H "Authorization: Bearer pf_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"name": "Google Ads Leads",
"source": "google_ads"
}'Response
{
"success": true,
"data": {
"id": "wh_def456",
"name": "Google Ads Leads",
"source": "google_ads",
"isEnabled": true,
"secretKey": "a1b2c3d4e5f6...your_secret_key_here",
"webhookUrl": "https://proforms.io/api/v1/incoming/wh_def456",
"createdAt": "2026-02-17T10:00:00.000Z"
}
}secretKey is only returned on creation. Store it securely â it cannot be retrieved later. The GET endpoint returns a masked placeholder.Get Webhook
Retrieve details of a single webhook.
/v1/sites/:id/webhooks/:webhookIdExample Request
curl "https://proforms.io/api/v1/sites/s_xyz789/webhooks/wh_abc123" \
-H "Authorization: Bearer pf_your_api_key"Response
{
"success": true,
"data": {
"id": "wh_abc123",
"name": "Contact Form Webhook",
"source": "generic",
"isEnabled": true,
"secretKey": "âĸâĸâĸâĸâĸâĸâĸâĸ",
"submissionCount": 142,
"lastReceivedAt": "2026-02-17T09:15:00.000Z",
"archivedAt": null,
"webhookUrl": "https://proforms.io/api/v1/incoming/wh_abc123",
"createdAt": "2026-01-10T10:00:00.000Z",
"updatedAt": "2026-02-15T14:00:00.000Z"
}
}Update Webhook
Update a webhook's name, source, enabled state, or restore it from archive.
/v1/sites/:id/webhooks/:webhookIdRequest Body
namestringWebhook name
sourcestringSource type: generic, google_ads, zapier
isEnabledbooleanEnable or disable the webhook
restorebooleanSet to true to restore an archived webhook
Example Request
curl -X PUT "https://proforms.io/api/v1/sites/s_xyz789/webhooks/wh_abc123" \
-H "Authorization: Bearer pf_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"name": "Updated Webhook Name",
"isEnabled": false
}'Response
{
"success": true,
"data": {
"id": "wh_abc123",
"name": "Updated Webhook Name",
"source": "generic",
"isEnabled": false,
"submissionCount": 142,
"lastReceivedAt": "2026-02-17T09:15:00.000Z",
"webhookUrl": "https://proforms.io/api/v1/incoming/wh_abc123",
"updatedAt": "2026-02-17T14:30:00.000Z"
}
}Archive Webhook
Soft-delete a webhook. The webhook is disabled and moved to the archive. Archived webhooks return 410 Gone when they receive submissions.
/v1/sites/:id/webhooks/:webhookIdExample Request
curl -X DELETE "https://proforms.io/api/v1/sites/s_xyz789/webhooks/wh_abc123" \
-H "Authorization: Bearer pf_your_api_key"Response
{
"success": true,
"data": {
"message": "Webhook archived successfully"
}
}{"restore": true}.Permanent Delete
Permanently delete a webhook and its auto-created form (if any). Builder-created forms are unlinked but preserved.
/v1/sites/:id/webhooks/:webhookId?permanent=trueExample Request
curl -X DELETE "https://proforms.io/api/v1/sites/s_xyz789/webhooks/wh_abc123?permanent=true" \
-H "Authorization: Bearer pf_your_api_key"Response
{
"success": true,
"data": {
"message": "Webhook permanently deleted"
}
}