sayintel
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

Writing an agent rather than an integration? The dense, model-facing version lives at /for-agents.