Skip to content

How do I subscribe to webhooks?

Register a webhook URL at /account/webhooks/. We POST events (tool.run.completed, workflow.completed, etc.) with HMAC-signed payloads.

Last updated: 2026-05-04

Registering a webhook

  1. Sign in (Pro or above).
  2. Visit /account/webhooks/.
  3. Click Add webhook.
  4. Enter URL (must be HTTPS), pick events, add a description.
  5. Save — we send a webhook.test ping immediately to confirm your endpoint is reachable.

Available events

EventFired when
`tool.run.completed`A tool finishes (success or failure)
`tool.run.failed`A tool errors out
`workflow.completed`A workflow run finishes
`workflow.failed`A workflow errors mid-step
`agent.completed`An agent task completes
`subscription.upgraded`You upgraded tier
`subscription.cancelled`Cancellation activated
`usage.threshold`You hit 80% / 100% of your monthly quota

Payload shape

{

"event": "tool.run.completed", "timestamp": "2026-05-04T12:34:56Z", "webhook_id": "wh_abc123", "data": { "run_id": "run_xyz789", "tool_slug": "blog-post-generator", "status": "success", "output_url": "https://aicentraltools.com/account/runs/run_xyz789", "tokens_used": 1240 } }</code></pre>

Verifying signatures

We send X-AICT-Signature: sha256=<hex> computed as HMAC-SHA256 of the raw body using your webhook secret.

import hmac, hashlib

expected = hmac.new( webhook_secret.encode(), request.body, hashlib.sha256 ).hexdigest() if not hmac.compare_digest(expected, request.headers['X-AICT-Signature'].split('=')[1]): abort(401)</code></pre>

Retry policy

If your endpoint returns non-2xx, we retry with exponential backoff: 30s → 5min → 1h → 6h → 24h (5 attempts total). After 5 failures the webhook is paused; you'll be emailed.

Was this helpful?

0 / 0 people found this helpful

Still stuck? Contact support