Browse documentation

Async

Webhooks & async delivery

For high-volume jobs — weekly cash checks across hundreds of accounts, nightly batch runs, or alert-triggered checks — Cashytics supports webhook delivery so you do not need to hold open HTTP connections.

How it works

  1. Register a webhook endpoint URL in your dashboard (Settings → Webhooks).
  2. POST your envelope to the standard /api/v1/<slug> route with an additional top-level field: "webhook_url": "https://your-server.com/cashytics-hook"
  3. The API immediately returns HTTP 202 Accepted with a job_id.
  4. When processing completes (typically <5 seconds), Cashytics POSTs the full structured response to your webhook URL, signed with HMAC-SHA256 using your webhook secret.

Response shape on 202

{
  "status": "accepted",
  "job_id": "job_abc123",
  "estimated_delivery_ms": 4000,
  "webhook_url": "https://your-server.com/cashytics-hook"
}

Webhook payload shape

Same as synchronous response, plus metadata:

{
  "job_id": "job_abc123",
  "delivered_at": "2026-04-20T14:00:00Z",
  "endpoint": "cashflow-health-score",
  "account_id": "acct_123",
  "processing": { ... },
  "structured": { ... },
  "narrative": "..."
}

Verifying the signature

The request will include header: X-Cashytics-Signature: sha256=<hmac>

Compute HMAC-SHA256 of the raw request body using your webhook secret (found in dashboard → Settings → Webhooks). Reject any request where the signature does not match.

Retries

If your endpoint returns non-2xx, Cashytics retries up to 3 times with exponential backoff (5s, 30s, 5min). After 3 failures the job is marked as failed and visible in your dashboard.

Batch tip

For batches of 50+ accounts, loop your POST calls server-side and use webhook delivery to collect results asynchronously rather than awaiting each response sequentially.

Errors & limits · Quickstart