# Webhook events

> The JSON Formclick sends to your webhook for each new submission.

Source: https://docs.formclick.io/api-reference/webhook-events

Webhooks are set up per form in the dashboard (see [Webhooks](https://docs.formclick.io/html-forms/webhooks)) or with the MCP `add_webhook` tool. Formclick calls your URL in the background after each submission is saved.

## Event: submission.created

| Field | Type | Description |
| --- | --- | --- |
| `submissionId` | string | Unique ID of the submission. |
| `formId` | string | The form it belongs to. |
| `data` | object | Submitted fields (control fields like `access_key` removed). Files appear as objects with a link. |
| `fromName` | string \| null | Sender name, from `name`, `full_name`, `fullname` or `your_name`. |
| `fromEmail` | string \| null | Sender email, from the `email` field. |
| `submittedAt` | string | ISO 8601 timestamp. |

```json
{
  "submissionId": "7f6c2b8e-…",
  "formId": "0d1a4f3c-…",
  "data": { "name": "Jane Smith", "email": "jane@example.com", "message": "Hi!" },
  "fromName": "Jane Smith",
  "fromEmail": "jane@example.com",
  "submittedAt": "2026-11-08T10:24:31.000Z"
}
```

## Request details

| Item | Value |
| --- | --- |
| Methods | `POST` (default), `PUT`, `PATCH` or `GET` (no body) |
| Headers | `Content-Type: application/json`, `User-Agent: Formclick-Webhook/1.0`, plus your custom headers |
| Retries | Failed deliveries are retried automatically |
| Spam | Submissions flagged as spam are never sent |

> **Tip:** Add a secret header such as `Authorization: Bearer …` when you create the webhook, and reject requests without it.
