Skip to main content
Webhooks require the Pro plan or higher.

What are Webhooks?

Webhooks are HTTP callbacks that send data to a URL you specify when events occur—such as a form submission. Orbit AI webhooks let you:
  • Real-time — Data is sent immediately when a submission is received
  • Flexible — Works with any service that accepts HTTP POST requests
  • Secure — Verify requests using HMAC-SHA256 signatures
  • Retries — Automatic retries if your endpoint fails

Setting Up a Webhook

1

Open your form

Open the form you want to send webhook data from.
2

Go to Integrations

Click Integrations in the form settings or sidebar.
3

Add Webhook

Click Add Webhook or Webhook.
4

Enter your URL

Enter the full endpoint URL (e.g., https://your-server.com/webhook).
5

Configure optional settings

Add custom headers or adjust the payload format if needed.
6

Save and test

Save the webhook and submit a test form to verify it works.
7

Copy your signing secret

Copy the webhook signing secret to verify requests on your server.

Payload Format

Each webhook request is sent as a JSON payload with the following structure:
{
  "event": "form.submitted",
  "timestamp": "2025-03-07T12:00:00.000Z",
  "form_id": "abc123",
  "form_name": "Contact Form",
  "submission_id": "sub_xyz789",
  "data": {
    "email": "[email protected]",
    "name": "Jane Doe",
    "message": "Hello, I'd like to learn more."
  }
}
FieldDescription
eventThe event type (e.g., form.submitted)
timestampISO 8601 timestamp
form_idUnique form identifier
form_nameDisplay name of the form
submission_idUnique submission identifier
dataForm field values keyed by field ID or name

Security & Verification

Orbit AI signs each webhook request with HMAC-SHA256. Verify the signature before processing.

Signature Header

The signature is sent in the X-Orbit-Signature header.

Verification Steps

  1. Get the raw request body — Use the raw bytes as received (do not parse and re-serialize JSON)
  2. Compute HMAC-SHA256 — Using your webhook signing secret as the key
  3. Compare with the header — The header value should match your computed signature
  4. Reject if mismatched — Do not process requests with invalid signatures
Example (Node.js):
const crypto = require('crypto');

function verifyWebhook(payload, signature, secret) {
  const expected = crypto
    .createHmac('sha256', secret)
    .update(payload)
    .digest('hex');
  return crypto.timingSafeEqual(
    Buffer.from(signature, 'hex'),
    Buffer.from(expected, 'hex')
  );
}

Error Handling & Retries

Success Response

Your endpoint should return a 2xx status code (e.g., 200, 201, 204) to indicate successful processing.

Automatic Retries

If your endpoint returns a non-2xx status or times out, Orbit AI will retry up to 3 times with exponential backoff.

Timeout

Requests time out after 30 seconds. Ensure your endpoint responds within this window.

Next Steps