BotForge
Developers

Real-time webhooks

Get notified the instant something happens in your workspace. BotForge POSTs signed JSON to your endpoint and retries on failure.

Events

Add an endpoint under Developers → Webhooks and subscribe to any of these events.

order.createdorder.paidorder.cancelledcustomer.joinedticket.createdticket.repliedticket.closedbroadcast.sentreferral.created

Payload & signature

Each delivery is a JSON POST signed with HMAC-SHA256 over the raw body, using your endpoint's secret, in the X-BotForge-Signature header.

Example payload — order.paid

{
  "event": "order.paid",
  "workspaceId": "ws_...",
  "data": { "id": "ord_...", "number": 1042, "status": "paid", "total_cents": 4999, "currency": "usd" },
  "timestamp": "2026-07-06T10:15:00.000Z"
}

Verification

Always verify the signature before trusting a payload — never process an unverified body.

Node.js verification

import crypto from "crypto";

function isValidSignature(rawBody: string, header: string, secret: string) {
  const expected = "sha256=" + crypto
    .createHmac("sha256", secret)
    .update(rawBody)
    .digest("hex");
  return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(header));
}

Use a timing-safe comparison (like crypto.timingSafeEqual) — a plain === check leaks timing information.

Retries

Non-2xx responses are retried up to 6 times with backoff. After the final failure, the endpoint owner is notified in-app.

AttemptDelay
1Immediate
210 seconds
360 seconds
45 minutes
530 minutes
61 hour

Testing

Every endpoint's settings page has a Send test event button that fires a real, correctly-signed payload for any event type — no need to trigger the real action in your workspace. Delivery attempts, response codes and response bodies are all logged per-endpoint for debugging.

Examples

A full receiving handler example (Next.js route) is on the Examples page.