Usage webhooks
Tenant usage webhooks
Point your existing observability stack at FrootAI. Subscribe a webhook URL and receive per-day usage summaries plus cost-threshold breach alerts — with first-class Datadog and Slack payload adapters.
Seed telemetry. Sample usage data until [X9.14] wires live exports. Costs use the [X9.6] DRAFT rate card — a modeling estimate, not a charge.
Events
usage.daily.summary
Invocations, attach-minutes, and estimated cost per tenant per day.
cost.threshold.breach
Fires when a tenant's cumulative estimated cost crosses its budget.
As of 2026-06-27: 6 daily summaries across 2 tenants, 0 active breaches.
Daily summary payload
Generic envelope:
{
"event": "usage.daily.summary",
"tenant": "tenant-acme",
"day": "2026-06-25",
"metrics": {
"invocations": 75,
"attachMinutes": 57,
"estCostUsd": 0.1515
},
"note": "Costs use the [X9.6] DRAFT rate card — a modeling estimate, not a charge.",
"ts": "2026-06-27T23:59:59.000Z"
}Datadog event intake:
{
"title": "FrootAI usage summary — tenant-acme 2026-06-25",
"text": "75 invocations, 57 attach-min, est $0.1515.",
"alert_type": "info",
"source_type_name": "frootai",
"tags": [
"tenant:tenant-acme",
"event:usage.daily.summary"
]
}Slack incoming webhook:
{
"text": ":bar_chart: *Usage summary* — `tenant-acme` 2026-06-25\n*75* invocations · *57* attach-min · est *$0.1515*",
"blocks": [
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": ":bar_chart: *Usage summary* — `tenant-acme` 2026-06-25"
}
},
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "*75* invocations · *57* attach-min · est *$0.1515*"
}
}
]
}Cost-threshold breach payload
Illustrative example — no tenant is currently over budget.
Generic envelope:
{
"event": "cost.threshold.breach",
"tenant": "tenant-example",
"threshold": {
"budgetUsd": 25,
"observedCostUsd": 27.4,
"breachPct": 110
},
"note": "Costs use the [X9.6] DRAFT rate card — a modeling estimate, not a charge.",
"ts": "2026-06-27T23:59:59.000Z"
}Datadog event intake:
{
"title": "FrootAI cost threshold breached — tenant-example",
"text": "Observed $27.4 of $25 budget (110%).",
"alert_type": "warning",
"source_type_name": "frootai",
"tags": [
"tenant:tenant-example",
"event:cost.threshold.breach"
]
}Slack incoming webhook:
{
"text": ":warning: *Cost threshold breached* — `tenant-example`\nObserved *$27.4* of *$25* budget (110%).",
"blocks": [
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": ":warning: *Cost threshold breached* — `tenant-example`"
}
},
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "Observed *$27.4* of *$25* budget (110%)."
}
}
]
}Source: public/data/usage-webhooks.json. See also latency budgets.