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.
kind | What it fetches |
|---|---|
siblingApi | Hits a sibling product's API ({ serviceSlug, path, method, body }) and feeds the response to the LLM. |
aiaQuery | Built-in shortcut for AI Automation entities: incidents, flowRuns, generations. Filters: status, since. |
flowRun | The 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:
summaryKind | Notes |
|---|---|
custom_prompt | Free-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
format | Output |
|---|---|
email_html | Sent as HTML email. Tabular sections render properly in Gmail / Outlook. |
slack_blocks | Slack Block Kit JSON. Posted to configured Slack workspace integrations. |
pdf | Letter-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
/api/digests/api/digests/api/digests/{id}/api/digests/{id}/api/digests/{id}/api/digests/{id}/run-nowCreate
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
| Event | Fires when |
|---|---|
digest.delivered | Digest successfully delivered to recipients. |
digest.failed | Delivery 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.