forms

Add a webhook

Adds a webhook that receives every submission as a JSON POST. The response carries the signing secret once; store it.

A form takes up to 10 webhooks (webhook_limit_reached past that) and one webhook per URL (webhook_url_taken).

To add webhooks, you need a plan that includes them.

post/v1/forms/{form_id}/webhooks

Request

  • Base URL: https://api.formcarry.com
  • URL: https://api.formcarry.com/v1/forms/{form_id}/webhooks
  • Auth: HTTP bearer

Path parameters

form_idstring required

The form's id, as shown in the dashboard and in the form's endpoint URL

Request body

urlstring required

Where every submission is POSTed as JSON.

enabledboolean

A webhook that is off keeps its settings but receives nothing.

descriptionstring nullable

A label for your own reference.

eventsstring[]

What the webhook receives. Only submission.created exists today.

Example request

{
  "url": "https://example.com/hooks/formcarry"
}

Response

idstring required
urlstring required
enabledboolean required
descriptionstring nullable required
eventsstring[] required
created_atstring required
secretstring required

Only in this response. Store it: it is never shown again. Every delivery carries a signature made with it (see signing).

Example response

{
  "id": "whk_3f9Kq2bLm8xZpQ1rT7vWc0",
  "url": "https://example.com/hooks/formcarry",
  "description": "CRM sync",
  "events": [
    "submission.created"
  ],
  "signing": {
    "algorithm": "hmac-sha256",
    "header": "X-Formcarry-Signature"
  },
  "last_delivery": {
    "at": "2026-09-13T12:00:00.000Z",
    "response_status": 200,
    "attempt": 1
  },
  "created_at": "2026-09-13T12:00:00.000Z",
  "secret": "whsec_..."
}

Changes

No recorded changes to this operation across all 1 revision of this API.