📘 Public beta · Endpoints are stable; OpenAPI specs and SDKs ship monthly. See changelog →
Products
AI Automation
Digests

Digests

A digest is a scheduled, LLM-summarized report. Define what to fetch (sibling APIs, AI-Automation queries, flow runs), where to send it (email, Slack, PDF), and when to run it (cron). On each tick the data sources are gathered, Quantum AI produces a narrative summary, and the result fanouts to the configured recipients.

Typical use cases:

  • Daily compliance digest — overnight AML alerts + KYC funnel stats + SAR queue to MLRO inbox.
  • Weekly ops digest — incidents fired this week, top false-positive rules, generation cost trend to Slack #ops.
  • Monthly board PDF — top-line KPIs across the seven products to a board distribution list.

Digest object

{
  "id": "dig_01HXY...",
  "name": "Daily compliance digest",
  "cronExpression": "0 7 * * *",
  "dataSources": [
    { "kind": "aiaQuery",   "entity": "incidents",  "status": "firing",       "label": "Open incidents" },
    { "kind": "siblingApi", "serviceSlug": "aml",   "path": "/api/alerts?status=open&limit=50", "method": "GET", "label": "Open AML alerts" },
    { "kind": "flowRun",    "flowId": "flw_kyc_daily_funnel", "label": "KYC funnel — last run" }
  ],
  "summaryPrompt": "Summarize the day's compliance posture for an MLRO audience. Lead with anything critical. End with a one-line recommended action.",
  "summaryKind": "custom_prompt",
  "format": "email_html",
  "recipients": {
    "emails":         ["mlro@bankacme.id", "compliance-lead@bankacme.id"],
    "integrationIds": ["int_slack_compliance..."]
  },
  "status": "active",
  "nextRunAt": "2026-05-26T00:00:00Z",
  "lastRunAt": "2026-05-25T00:00:00Z"
}

Data sources

Each digest has one or more data sources. They're fetched in parallel before the summary step.

kindWhat it fetches
siblingApiHits a sibling product's API ({ serviceSlug, path, method, body }) and feeds the response to the LLM.
aiaQueryBuilt-in shortcut for AI Automation entities: incidents, flowRuns, generations. Filters: status, since.
flowRunThe most recent run output of a specific flow.

Up to 20 data sources per digest. Each is labeled (the label shows up in the summary structure).

Summary prompts

Two ways to drive the summary:

summaryKindNotes
custom_promptFree-form prompt. Reference data sources by their label. Default mode.
Named (e.g. compliance_brief, ops_brief)Pre-built prompts curated for common audiences. Saves you prompt-engineering.

Formats

formatOutput
email_htmlSent as HTML email. Tabular sections render properly in Gmail / Outlook.
slack_blocksSlack Block Kit JSON. Posted to configured Slack workspace integrations.
pdfLetter-format PDF. Sent as email attachment.

Recipients

Either email addresses (recipients.emails[]) or saved integration IDs (recipients.integrationIds[]). An integration is a saved channel — a Slack workspace + channel, an MS Teams webhook, etc., configured from Dashboard → Settings → Integrations.

Endpoints

POST/api/digests
Auth · API keyScope · digests:write
GET/api/digests
Auth · API keyScope · digests:read
GET/api/digests/{id}
Auth · API keyScope · digests:read
PATCH/api/digests/{id}
Auth · API keyScope · digests:write
DELETE/api/digests/{id}
Auth · API keyScope · digests:write
POST/api/digests/{id}/run-now
Auth · API keyScope · digests:write

Create

curl -X POST .../api/digests \
  -H "Authorization: Bearer $QE_API_KEY" \
  -d '{
    "name": "Daily compliance digest",
    "cronExpression": "0 7 * * *",
    "dataSources": [
      { "kind": "aiaQuery", "entity": "incidents", "status": "firing", "label": "Open incidents" },
      { "kind": "siblingApi", "serviceSlug": "aml", "path": "/api/alerts?status=open&limit=50", "label": "Open AML alerts" }
    ],
    "summaryPrompt": "Summarize the day for an MLRO.",
    "format": "email_html",
    "recipients": { "emails": ["mlro@bankacme.id"] }
  }'

Run now (preview)

POST /api/digests/{id}/run-now triggers an out-of-cycle send. Useful to:

  • Validate the digest before its first scheduled fire
  • Re-deliver after a transient delivery failure
  • Pull an ad-hoc snapshot

Returns the rendered digest body + delivery status synchronously when possible (or 202 with a job ID for larger digests).

Pausing without deleting

PATCH /api/digests/{id} with { "status": "paused" } keeps the row + schedule but stops firing. Re-enable later by flipping back to active.

Webhooks

EventFires when
digest.deliveredDigest successfully delivered to recipients.
digest.failedDelivery failed (after retries).

Digests use the same inference budget as flows

Every digest run consumes tokens against your org's inference quota. Long data sources + frequent cadence add up — a */5 * * * * digest fetching 50 incidents each tick is 12,000+ runs/month. Use the dashboard's Billing → Usage page to see per-digest token spend.