Docs
Build on sayintel.
One capability registry, two doors. Every action the product can take is exposed both as an MCP tool and as a REST endpoint, generated from the same definition, so the two cannot drift. Right now that is 26 endpoints (14 read, 12 write or send) and 26 MCP tools.
The envelope
Every response, success or failure, has the same shape. Branch on ok, read data, never parse prose.
{ "ok": true, "tool": "list_campaigns", "kind": "read", "data": { ... }, "error": null }
{ "ok": false, "tool": "get_campaign", "kind": "read", "data": null, "error": { "code": "not_found", "message": "..." } }Sixty-second quickstart
# 1. Sign up (free, 10 credits, no card) and mint a token:
# sayintel.com → Settings → Agent access
# 2. Check the key and what it may call
curl https://sayintel.com/api/public/v1/whoami \
-H "Authorization: Bearer $SAYINTEL_TOKEN"
# 3. Start a campaign from a conference URL
curl -X POST https://sayintel.com/api/public/v1/campaigns \
-H "Authorization: Bearer $SAYINTEL_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"Money20/20 USA 2026","conference_url":"https://us.money2020.com/speakers"}'
# 4. Watch it work
curl https://sayintel.com/api/public/v1/campaigns/<campaign_id>/runs/latest \
-H "Authorization: Bearer $SAYINTEL_TOKEN"Where to go next
- Authentication — tokens, scopes, rate limits, idempotency, dry runs.
- REST reference — every endpoint with its parameters and a copy-pasteable request.
- MCP server — connect Claude, ChatGPT, Cursor or Claude Code.
- Webhooks and events — signed callbacks and the live run stream.
- Errors and QA codes — the machine-readable vocabulary, including every draft hard-fail.
Writing an agent rather than an integration? The dense, model-facing version lives at /for-agents.