# Custom webhooks

Send each submission to a URL of your own, such as your backend, a serverless function or an automation tool that takes webhooks.

## How it works

Each time someone submits the form, or edits a submission, Formstep sends the answers to your URL. A form can have several webhooks, and each one gets every submission. Unfinished drafts are not sent to a webhook.

## Add a webhook

1. **Open Integrations**

   Click **Integrations** in the form's top bar, then pick Webhook.

2. **URL**

   Type the https\:// address that should receive the answers.

3. **Answers to send**

   Leave the mapping empty to send every field. Add rows to send only some fields, each under a name you choose. Open **See an example request** to watch what is sent change as you edit.

4. **Signing secret and headers**

   Formstep creates a signing secret for this webhook. Copy it now and give it to whoever runs the receiving end. Add up to 5 headers of your own if the receiver needs them, such as an authorization token.

5. **Turn it on**

   Click **Turn on Webhook**, then **Send a test event** to send an example submission.

> **Testing on your own computer**
>
> A webhook also accepts `http://localhost`, so you can try it against a receiver running on your machine. A request’s callback URL does not: it must use HTTPS.

Formstep refuses addresses inside a private network. If a delivery fails, Formstep retries it and pauses the webhook after repeated failures: see [Health and monitoring](https://formstep.io/docs/integrations/health-monitoring/).

## What your URL receives

Each delivery carries the form, the submission, and every answer twice: once as the stored value, under the question’s [field key](https://formstep.io/docs/requests/field-keys/), and once as text a person reads. To see the exact body for your form, open the webhook and expand **Example payload**. It uses your current mapping with sample answers.

Each delivery is signed with the webhook’s secret, so the receiver can check it came from Formstep. Developers: see [Signing](https://formstep.io/docs/developers/webhooks-reference/#signing) in the webhooks reference, which also has the full format.

## FAQ

**Can I change the signing secret?**

No. Formstep creates it once, with the webhook. For a new secret, delete the webhook and add a new one. Only the workspace owner can see the secret later.

**How do I get unfinished drafts at my URL?**

A custom webhook sends only finished submissions and edits. A developer can subscribe to unfinished drafts through the [webhooks reference](https://formstep.io/docs/developers/webhooks-reference/#abandoned-submissions). Google Sheets, Airtable, Notion, Slack, Discord, Linear and GitHub Issues can send them too, on Pro and Business.

**How do I remove the webhook?**

Open Integrations, pick the webhook under **On this form**, and choose **Delete integration** in the ⋯ menu. Formstep stops sending at once and deletes the webhook’s event history.

## Next steps

[Webhook API reference](https://formstep.io/docs/developers/webhooks-reference/) — Format, signing and retries, for developers

[Airtable](https://formstep.io/docs/integrations/airtable/) — Add each submission to an Airtable base
