POST /agents + “find me leads …” | One-shot: POST /leads/searches { brief, count, quality }. List-first: POST /leads/lists + column ops, then POST /leads/lists/{list_id}/fetch |
POST /agents/{id}/runs + “get more” | POST /leads/searches/{search_id}/fetch-more { count } (deterministic — no prompt) |
POST /agents/{id}/runs + “enrich …” | POST /leads/lists/{list_id}/enrich { column_slugs } or POST /leads/lists/{list_id}/enrich_custom { instructions } |
Run polling GET /agents/{id}/runs/{runId} | GET /jobs/{job_id} (honor next_poll_at) or job.* webhooks |
runs.status: needs_input → new run with the answer | POST /jobs/{job_id}/input { answers } — same Job id resumes |
POST /tables/{tableId}/rows/upsert | POST /leads/lists/{list_id}/rows/upsert — same semantics, snake_case, embedded enrichment_job |
GET /tables/{tableId}/rows | GET /leads/lists/{list_id}/rows with min_relevance_score, sort, include_*, ids, format=csv |
POST /tables/{tableId}/campaigns (agent) | Deterministic recipe: POST /send/campaigns → schema → people → templates → settings → senders → approvals → launch. Agent shortcut: POST /send/campaigns/draft |
POST /campaigns/{id}/edits + instructions | Named ops: people upsert / template variant ops / PATCH .../settings / sender pool ops |
POST /campaigns/{id}/launch | POST /send/campaigns/{campaign_id}/launch — real dry_run, typed 409 blockers |
GET /senders | GET /account/senders + manage ops (patch, IMAP connect, warmup, disconnect) |
GET /account, /account/credits | Same, plus /account/credits/usage and /account/rate-limits |
GET /projects … | /account/projects … |
Workspaces / workspaceId | Gone from v3. Chats (/account/chats) are the conversation container; lists and campaigns are org-scoped and linked to chats |