SDR Autopilot Public API
Authenticate with X-API-Key or Authorization: Bearer. Keys are project-scoped (create them under API & agents in the app — requires a CURRENT ACTIVE paid Founder/Growth plan). daily_budget_cents is an internal spend safety budget in cents; retail capacity is billed by new prospects reached (Founder/Growth included + optional top-ups). Identity, inbox, hot-leads, reply, and campaign-start return 402 with code: "paid_required" when the project lacks CURRENT ACTIVE paid entitlement (Free, past_due, or canceled). Historical identities may remain readable in the authenticated app UI.
For AI agents — load these first: /llms.txt, /llms-full.txt, /openapi.json. Hosted MCP (Streamable HTTP): /mcp. Product overview: homepage.
GET /api/v1/projects
List projects for this API key
API keys are project-scoped. Returns the single project the key belongs to (id, name, domain, daily_budget_cents internal spend safety budget, autopilot). Creating keys requires a CURRENT ACTIVE paid Founder/Growth plan.
GET /api/v1/projects/{project_id}/analytics
Project analytics
Totals for the period plus a per-campaign breakdown (same stats as the dashboard).
GET /api/v1/projects/{project_id}/budget
Get project daily budget
Internal daily spend safety budget in cents (estimated vendor-action ledger). 0 pauses further vendor spend for the day. This is not retail subscription pricing — retail capacity is billed by new prospects reached (Founder/Growth included + optional top-ups).
PATCH /api/v1/projects/{project_id}/budget
Set project daily budget
Integer cents, 0–1000000. Sets the internal daily spend safety budget (not prospect capacity). 0 pauses vendor spend once the daily cap is hit (immediately if already spent).
GET /api/v1/projects/{project_id}/autopilot
Get autopilot setting
Autopilot here is the project flag that lets the auto-scaler pause/scale campaigns. Start/stop and budget edits still work while it is ON (unlike Explee).
PATCH /api/v1/projects/{project_id}/autopilot
Set autopilot
Turns the project autopilot / auto-scaler flag on or off.
GET /api/v1/campaigns
List campaigns
Every campaign in the key's project with status and stats for a short 'how each is doing' summary.
GET /api/v1/campaigns/{campaign_id}
Get campaign definition
Offer, audience, budget, status. Read-only — edit targeting in the app.
GET /api/v1/campaigns/{campaign_id}/leads
List campaign leads
People enrolled in the campaign (identities). Requires CURRENT ACTIVE paid Founder/Growth; Free / past_due / canceled return 402 paid_required.
GET /api/v1/campaigns/{campaign_id}/analytics
Campaign analytics
Period-filtered send/reply/hot-lead/spend totals.
PATCH /api/v1/campaigns/{campaign_id}/budget
Set campaign daily budget
Per-campaign internal daily spend safety budget in cents (not retail prospect capacity). Works with autopilot ON.
POST /api/v1/campaigns/{campaign_id}/start
Start or resume a campaign
not_started → launches the pipeline; paused → resumes sending; failed → retries failed stages; already running → idempotent accepted. Requires current paid send entitlement (Free / past_due → 402 paid_required). Always available re: autopilot (no 409 for autopilot).
POST /api/v1/campaigns/{campaign_id}/stop
Pause a campaign
Stops new sends; inbound replies are still watched. Idempotent.
GET /api/v1/campaigns/{campaign_id}/inbox
List inbox conversations
Threads for one campaign (identities). Requires CURRENT ACTIVE paid Founder/Growth; Free / past_due / canceled return 402 paid_required. Use person_id with the thread and reply endpoints.
GET /api/v1/campaigns/{campaign_id}/inbox/{person_id}
Read a conversation thread
Full thread plus the lead profile. Requires CURRENT ACTIVE paid Founder/Growth (402 paid_required on Free / past_due / canceled). can_reply is false for unsubscribe or no inbound yet.
POST /api/v1/campaigns/{campaign_id}/inbox/{person_id}/reply
Reply in a thread
Uses the same send path as the in-app Inbox. Requires CURRENT ACTIVE paid Founder/Growth (402 paid_required on Free / past_due / canceled). You write only the body.
GET /api/v1/hot-leads
List hot leads
Inbound replies classified as hot, oldest first. Requires CURRENT ACTIVE paid Founder/Growth (402 paid_required on Free / past_due / canceled). Poll with ?since=<newest became_hot_at you already have>. phone is always null (we do not store phone numbers). reason/campaign/detected_at are kept for older clients.
POST /api/v1/suppressions
Add a suppression
Project-wide suppress list (not named lists). Cancels queued sends that match. type is required.