Skip to main content
Webhooks let your server react when a form receives a completed response.

Event type

The public API currently supports one event:

Create a webhook

Signing secrets must contain at least 16 characters. Onlyform never returns the secret after creation. The has_secret response field tells you whether a webhook has one.
Use a long, randomly generated signing secret. Store it independently from the API key.

Destination requirements

Onlyform accepts public http and https URLs, but production destinations should use HTTPS. For request safety, webhook destinations:
  • Must resolve through public DNS.
  • Cannot resolve to private, loopback, link-local, reserved, or multicast addresses.
  • Cannot use protocols other than HTTP or HTTPS.
  • Should return a 2xx response promptly.
Redirects are not followed during delivery.

Delivery request

Onlyform sends an HTTP POST request with a JSON body:
The exact response object may contain additional submission metadata. Ignore fields your integration does not use. Delivery headers include:
Onlyform-Signature is present when the webhook has a signing secret.

Verify signatures

The signature is a SHA-256 HMAC of the exact raw request body.
Verify the signature before parsing or processing the payload. Your framework must give you access to the raw request bytes.

Delivery history

GET /v1/webhooks/{webhookId}/deliveries returns up to the 100 most recent redacted delivery summaries. A network-level failure has status 0. Do not rely on automatic retries for business-critical processing. Make your handler idempotent and use the delivery history for monitoring and reconciliation.

Rotate a signing secret

Update signing_secret with PATCH /v1/webhooks/{webhookId}, deploy the new secret to your receiver, and verify the next delivery. Updating the secret replaces the previous value.

Create a webhook

See the complete request and response schema.

List deliveries

Inspect recent delivery outcomes.