Convo
Goal-directed conversations by text message, run by the AI part with a person in the loop.
appReaching people82 operationsid convo
How it sits
An app is already assembled from parts, with a face of its own. The counts and the links below are from the platform's spec and the other services' own descriptions.
| Operations | 82 GET 38 · POST 38 · PUT 4 · DELETE 2 |
| Resources | 20 |
| Leaned on by | no other service names it |
| Leans on | Executive assistant, SMS |
| In recipes | none yet |
What it can do
82 operations in 20 resources, as the spec declares them. Each row is one call; paths are relative to the part.
vt
| Method | Path | Does |
|---|---|---|
| GET | /api/v1/vt/browse | What the browser can show |
| GET | /api/v1/vt/browse/{entity} | One page of an entity |
| GET | /api/v1/vt/browse/{entity}/{record_id} | One record |
| GET | /api/v1/vt/campaign-registries | TCR registrations (a send names one) |
| GET | /api/v1/vt/campaigns | Campaigns, with the website's filters and the vendor's work queue |
| POST | /api/v1/vt/campaigns | Create a campaign (and its Deployment 1) |
| GET | /api/v1/vt/campaigns/{campaign_id} | One campaign with its deployments |
| PUT | /api/v1/vt/campaigns/{campaign_id} | Edit a campaign's name or dates |
| DELETE | /api/v1/vt/campaigns/{campaign_id}/bind | Unbind one of our campaigns: its replies are kept, nobody's |
| POST | /api/v1/vt/campaigns/{campaign_id}/bind | Bind one of our campaigns to a programme (replies reach it at once) |
| POST | /api/v1/vt/campaigns/{campaign_id}/close | Close one of our campaigns: webhook off, unbound, read-only |
| GET | /api/v1/vt/campaigns/{campaign_id}/conversations | The campaign's conversations, with ours marked |
| POST | /api/v1/vt/campaigns/{campaign_id}/deployments | Add a deployment (copies the template's creative and media) |
| POST | /api/v1/vt/campaigns/{campaign_id}/webhook | Point the campaign's replies at this engine, then test the delivery |
| GET | /api/v1/vt/deployments/{deployment_id} | One deployment: list, sends, report |
| PUT | /api/v1/vt/deployments/{deployment_id} | Edit a deployment's creative text or name |
| GET | /api/v1/vt/deployments/{deployment_id}/handoff | Is the deployment ready for a person to test send and launch? |
| POST | /api/v1/vt/deployments/{deployment_id}/launch | Launch the real send: builds the queue, then waits for the vendor's two clicks |
| POST | /api/v1/vt/deployments/{deployment_id}/list | Upload the deployment's list (TEST campaigns, gated numbers only) |
| POST | /api/v1/vt/deployments/{deployment_id}/test-send | Test send: the vendor texts the test list AT ONCE |
| POST | /api/v1/vt/drafts/{draft_id}/delivery | Ask the vendor where a sent reply stands (queued → delivered) |
| GET | /api/v1/vt/organizations | Organisations the key can see |
| GET | /api/v1/vt/sends/{send_id} | One send and its progress |
| POST | /api/v1/vt/sends/{send_id}/pause | Pause a send (the one vendor control the key may use) |
| GET | /api/v1/vt/status | What the desk can see and write |
25 operations
programme-versions
| Method | Path | Does |
|---|---|---|
| GET | /api/v1/programme-versions | Versions, filtered by campaign, programme or status |
| POST | /api/v1/programme-versions | Save the next version of an authored programme (a draft) |
| POST | /api/v1/programme-versions/check | Would this programme load? Problems field by field; nothing saved |
| GET | /api/v1/programme-versions/desk | What the desk has to look at: versions waiting, sent back, and live |
| GET | /api/v1/programme-versions/summary | One HQ campaign's programmes: versions, and the live one's brief |
| POST | /api/v1/programme-versions/test-conversations/{conv_id}/messages | The voter's turn in a rehearsal; returns the agent's replies |
| POST | /api/v1/programme-versions/{programme_id}/retire | The desk takes a live HQ program off, at once (a person only) |
| GET | /api/v1/programme-versions/{programme_id}/{version} | One version, with its body |
| POST | /api/v1/programme-versions/{programme_id}/{version}/campaign-yes | Record the campaign's yes on a draft (from HQ's approval queue) |
| POST | /api/v1/programme-versions/{programme_id}/{version}/go-live | The desk's yes: switch a campaign-approved version on (a person only) |
| POST | /api/v1/programme-versions/{programme_id}/{version}/send-back | The desk sends a version back to the campaign with a note |
| POST | /api/v1/programme-versions/{programme_id}/{version}/test-conversations | Rehearse a version on the bench — the real agent, no SMS |
12 operations
sends
| Method | Path | Does |
|---|---|---|
| GET | /api/v1/sends | Sends, newest first |
| POST | /api/v1/sends | Draft a send (nothing leaves Apex) |
| GET | /api/v1/sends/providers | The providers configured here and what each can do |
| GET | /api/v1/sends/{send_id} | One send with its events |
| PUT | /api/v1/sends/{send_id} | Edit a draft or a send in review |
| POST | /api/v1/sends/{send_id}/bind | How replies to this send find its programme |
| POST | /api/v1/sends/{send_id}/launch | Launch, or hand to the provider's own approvals |
| POST | /api/v1/sends/{send_id}/move | A plain transition: submit (review), approve, back to draft, close |
| POST | /api/v1/sends/{send_id}/queue | Queue: the one click that writes to the provider (files the order) |
| POST | /api/v1/sends/{send_id}/test | Test send to the send's test numbers — THE GATE rules every one |
| GET | /api/v1/sends/{send_id}/track | Where the launched send stands |
| POST | /api/v1/sends/{send_id}/watch | Ask the provider whether the deployment exists yet |
12 operations
hq-conversations
| Method | Path | Does |
|---|---|---|
| GET | /api/v1/hq-conversations | This campaign's AI conversations and the replies waiting on a person |
| POST | /api/v1/hq-conversations/drafts/{draft_id}/approve | The campaign's click — send one reply (GATED) |
| POST | /api/v1/hq-conversations/drafts/{draft_id}/reject | Turn a reply down; a model reply is drafted again |
| GET | /api/v1/hq-conversations/{claim_id} | One conversation: every message, and what waits |
| POST | /api/v1/hq-conversations/{claim_id}/redraft | Write a new reply to the voter's last message; sends nothing |
5 operations
claims
| Method | Path | Does |
|---|---|---|
| GET | /api/v1/claims | List claims |
| POST | /api/v1/claims/{claim_id}/redraft | Draft again for the last contact turn (Convo#29) |
| POST | /api/v1/claims/{claim_id}/release | End a conversation by hand (sends nothing) |
3 operations
contacts
| Method | Path | Does |
|---|---|---|
| GET | /api/v1/contacts/locations | Stated contact locations — the zones that outrank the area code |
| DELETE | /api/v1/contacts/{phone}/location | Forget a stated location — quiet hours fall back to the area code |
| PUT | /api/v1/contacts/{phone}/location | State where a person is (outranks the area code for quiet hours) |
3 operations
drafts
| Method | Path | Does |
|---|---|---|
| GET | /api/v1/drafts | Drafts awaiting a human click (default: pending) |
| POST | /api/v1/drafts/{draft_id}/approve | The human click — send one draft (GATED) |
| POST | /api/v1/drafts/{draft_id}/reject | Discard one draft — and, for a model reply, draft again (Convo#29) |
3 operations
programmes
| Method | Path | Does |
|---|---|---|
| GET | /api/v1/programmes | List loaded programmes |
| POST | /api/v1/programmes/{programme_id}/start | Open a claim and send the opening (GATED) |
| POST | /api/v1/programmes/{programme_id}/test-conversations | Open a TEST conversation with the programme's real agent (no SMS) |
3 operations
health
| Method | Path | Does |
|---|---|---|
| GET | /health | Basic health check |
| GET | /health/detailed | Detailed health check |
2 operations
test-conversations
| Method | Path | Does |
|---|---|---|
| GET | /api/v1/test-conversations/{conv_id} | A TEST conversation: claim, goals and transcript |
| POST | /api/v1/test-conversations/{conv_id}/messages | The voter's turn in a TEST conversation; returns the agent's replies |
2 operations
vt-reports
| Method | Path | Does |
|---|---|---|
| GET | /api/v1/vt-reports/organizations/{organization_id}/deployments | One organization's deployments, newest first, with report numbers |
| GET | /api/v1/vt-reports/organizations/{organization_id}/deployments/{deployment_id} | One deployment of the organization, with its message and report |
2 operations
webhook
| Method | Path | Does |
|---|---|---|
| POST | /api/v1/webhook/sms | Inbound SMS from SMS |
| POST | /api/v1/webhook/victorytext | A reply from Victory Text |
2 operations
audit
| Method | Path | Does |
|---|---|---|
| GET | /api/v1/audit | Outbound + inbound audit |
1 operation
brief
| Method | Path | Does |
|---|---|---|
| GET | /api/v1/brief | The programme brief — the client rollup, DERIVED from the store |
1 operation
gate
| Method | Path | Does |
|---|---|---|
| GET | /api/v1/gate | Gate status — counts only, never the numbers |
1 operation
optouts
| Method | Path | Does |
|---|---|---|
| GET | /api/v1/optouts | Revocations (stage0 + optout_intent) for VT suppression |
1 operation
practice
| Method | Path | Does |
|---|---|---|
| POST | /api/v1/practice/turn | Practice turn: ask, follow up or judge (no send, nothing stored) |
1 operation
prime
| Method | Path | Does |
|---|---|---|
| GET | /prime | Prime application caches |
1 operation
status
| Method | Path | Does |
|---|---|---|
| GET | /status | Service status overview |
1 operation
transcript
| Method | Path | Does |
|---|---|---|
| GET | /api/v1/transcript | Transcript rows (vt_response shape) for a contact |
1 operation
All the partsReaching peopleThe platform's own id for this service is cbconvo.
forge-catalog.json, generated Oct 30, 2026