Webhooks
- Built in
- Free plan
- Developers
Send every response to your own endpoint as a signed JSON request. Retries, delivery logs and a stable payload shape make it safe to build on.
How it works
Every submission, delivered to your code
Add an endpoint URL to a form and Onlyform POSTs a JSON body for each response. Requests are signed so you can verify they came from us.
Signed requests
Every request carries an HMAC signature header computed with your webhook secret.
Retries with backoff
Non-2xx responses are retried for 24 hours with exponential backoff; every attempt is logged.
Stable payload
The payload shape is versioned. New fields are added, existing ones never change meaning.
Setting it up
Three steps
Once per form. You can add several endpoints to one form.
- 1
Open Integrations
In the form, go to the Integrations tab and choose Webhooks.
- 2
Add your endpoint
Paste the URL, copy the signing secret into your service, and choose which events to receive.
- 3
Send a test
Fire a test delivery and inspect the request and your response in the delivery log.
Reference
What the payload contains
Top-level fields on every delivery. Answers are keyed by question id with the label alongside.
| Field | What it holds | Type |
|---|---|---|
| event | response.completed or response.partial | Text |
| response.id | A unique id for the submission | Text |
| response.submitted_at | ISO timestamp, UTC | Datetime |
| response.answers | Answers keyed by question id | Object |
| form.id | The form that was submitted | Text |
If something looks wrong
Troubleshooting
The 3 things behind almost every support ticket on this connection.
Deliveries are failing
Open the delivery log on the form to see the status code and body your endpoint returned. Anything other than a 2xx is retried for 24 hours.
How do I verify the signature?
Compute an HMAC-SHA256 of the raw body with your secret and compare it to the signature header. The docs have examples in Node, Python and PHP.
Can I receive partial responses?
Yes. Enable the partial event on the endpoint and you receive a delivery when a respondent leaves a form unfinished.
Templates that use this
Build on every response
Available on every plan. Add an endpoint, verify the signature, and you are live.