Campaign stats
Funnel stats for a single campaign. `qualified` / `disqualified` / `needs_input` are the ICP verdict (qualify_verdict, decided after enrichment; it gates research and drafting). Qualify always decides with a confidence: `check_fit` are qualified at low confidence (drafted, flagged), `maybe` are ruled out at low confidence (recoverable), `needs_input` is only the capped review shortlist of the maybes closest to the ICP (at most 10, optional), and `unjudged` are people the model failed on, retried automatically. `triage_*` is the cheap first pass on the scraped title and company (prequalify_verdict); triage 'unsure' and low-confidence 'disqualified' still flow to qualification, so never read triage as the qualification. `drafted` counts speakers with a complete live 3-message sequence; `drafted_messages` is the raw live row count; `superseded` is rows parked by a repair/redraft pass and awaiting their replacement (never deleted first).
Request
curl "https://sayintel.com/api/public/v1/campaigns/<campaign_id>/stats" \ -H "Authorization: Bearer $SAYINTEL_TOKEN"
Try it out
Sent as a bearer token to this site only, and kept in this tab's session storage. It is never written to disk or sent anywhere else.
Path parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| campaign_id | path | string | yes | — |
Response
{
"ok": true,
"tool": "campaign_stats",
"kind": "read",
"data": { ... },
"error": null
}Notes
- Scope required: read. How scopes work.
- Same capability over MCP as the tool campaign_stats. MCP setup.