P
ProFormsDocs

Manage Webhooks

Create, list, update, archive, restore, and permanently delete inbound webhooks for a site.

â„šī¸
For details on how inbound webhooks receive and process submissions, see Inbound Webhooks.

List Webhooks

Retrieve all inbound webhooks for a site.

sites.view
GET/v1/sites/:id/webhooks

Query Parameters

archivedstring

Show archived webhooks: true or false (default: false)

Example Request

curl
curl "https://proforms.io/api/v1/sites/s_xyz789/webhooks" \
  -H "Authorization: Bearer pf_your_api_key"

Response

200 OK
{
  "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.

sites.edit
POST/v1/sites/:id/webhooks

Request Body

name*string

Webhook name (e.g. "Contact Form")

sourcestring

Source type: generic, google_ads, zapier (default: generic)

Example Request

curl
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

201 Created
{
  "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"
  }
}
âš ī¸
The 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.

sites.view
GET/v1/sites/:id/webhooks/:webhookId

Example Request

curl
curl "https://proforms.io/api/v1/sites/s_xyz789/webhooks/wh_abc123" \
  -H "Authorization: Bearer pf_your_api_key"

Response

200 OK
{
  "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.

sites.edit
PUT/v1/sites/:id/webhooks/:webhookId

Request Body

namestring

Webhook name

sourcestring

Source type: generic, google_ads, zapier

isEnabledboolean

Enable or disable the webhook

restoreboolean

Set to true to restore an archived webhook

Example Request

curl
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

200 OK
{
  "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.

sites.delete
DELETE/v1/sites/:id/webhooks/:webhookId

Example Request

curl
curl -X DELETE "https://proforms.io/api/v1/sites/s_xyz789/webhooks/wh_abc123" \
  -H "Authorization: Bearer pf_your_api_key"

Response

200 OK
{
  "success": true,
  "data": {
    "message": "Webhook archived successfully"
  }
}
💡
To restore an archived webhook, use the Update endpoint with {"restore": true}.

Permanent Delete

Permanently delete a webhook and its auto-created form (if any). Builder-created forms are unlinked but preserved.

sites.delete
DELETE/v1/sites/:id/webhooks/:webhookId?permanent=true

Example Request

curl
curl -X DELETE "https://proforms.io/api/v1/sites/s_xyz789/webhooks/wh_abc123?permanent=true" \
  -H "Authorization: Bearer pf_your_api_key"

Response

200 OK
{
  "success": true,
  "data": {
    "message": "Webhook permanently deleted"
  }
}
âš ī¸
Permanent deletion removes the webhook and any auto-created webhook-source form (including its submissions). This action cannot be undone.