GET /customers/{customer_id}/insights— a computed report: a snapshot of balances and obligations, observations about recent activity, and advisory suggestions. No LLM anywhere in this path — every number, date, and sentence is computed deterministically from the customer’s own objects.POST /customers/{customer_id}/insights/chat— an advisory chat that answers questions about the account. The model narrates the same deterministic data the report is built from; it holds no write capability of any kind.
Alpha — part of the agentic early-access surface. Insights are read-only by construction: neither endpoint can move money, create, or change anything.
The report
The report is a view, not a stored object — computed on demand from the customer’s scheduled payments, mandates, recipients, wallets, and balances. There is nothing to create, poll into existence, or clean up.snapshot— typed facts for stat cards: per-wallet balances (aggregated over all the customer’s linked wallets), upcoming-payment totals per asset, open/active counts.insights[]— observations: what is happening.suggestions[]— advice: what the customer may want to do. Always advisory — acting on one is a separate, human-gated step through the normal payment flow.
{kind, severity, message, detail, evidence}.
Rendering items
severityis a closed set:info | warn | critical. Sort and color by it.kindis an open set — new kinds appear over time without a breaking change. Render an unrecognized kind generically frommessage+severity; never drop it.messageis a complete, human-readable sentence. A minimal UI can show messages alone and be correct.detailcarries the raw computed values behind the sentence, for custom rendering.evidence[]contains typed references ({type, id}—wallet,scheduled_payment,mandate,recipient; up to 10 per item) to the exact objects the item was computed from — deep-link each claim to the data behind it.evidence.typeis open-set likekind.
The kind catalog
A mandate that is exactly on plan — filled by its own scheduled series — stays silent; headroom items fire only on breach or tightness.
Degradation, not errors
A deployment without a balance index simply omits balance-derived parts (snapshot balances, shortfall math); the rest of the report still computes. Missing data degrades the report — it never 500s.The advisory chat
Where the numbers come from
The model never computes facts. It reads them from deterministic, server-computed tool data:
There is no write tool, no propose tool, and no way to pass another customer’s identifiers — the tools are scoped to the path customer by construction. Asked to do something (“pay this invoice”), the assistant declines and points at the payment flow.
Conversation status
conversation_status reports where the conversation stands with the assistant’s scope guard:
Bounds
Requests are validated before any model spend: at most 40 messages, 4,000 characters per message, 64 KB total; empty messages are rejected. Chat turns are rate-limited per customer — 100/hour and 500/day — returning429 beyond that. The report endpoint is deterministic and carries no chat-specific limit beyond the standard API rate limits.

