Agent Setup Playbook
This playbook is for external AI agents (Claude, ChatGPT, Cursor, custom bots) that provision Voicetta on behalf of a human Guest.
Why it matters for your business
- Save money: one agent session replaces repeated manual onboarding support.
- Work faster: profile, assistant, knowledge, phone, and tools in one guided flow.
- Standardize service: every host uses the same Setup API contract.
- Delight every Guest: the human receives a ready handoff card with login and forwarding steps.
Terminology bridge
When human-facing docs say Connections in app.voicetta.com, the Setup API uses Tools:
| Human UI | Agent API | After enable |
|---|---|---|
| Connection | Setup Tool (tool_id) | Capability (voice action) |
Examples:
- UI: "Connect Guesty" → API:
tool_id: guesty→ Capability:guesty_search_reservations - UI: "SMS channel" → API:
tool_id: sms→ Capability:send_sms_confirmation
Do not send connection or integration in Setup API requests. Use tool_id from the catalog.
Discovery
| Resource | URL |
|---|---|
| LLM index | https://voicetta.com/llms.txt |
| OpenAPI | https://voicetta.com/setup-openapi.json |
| MCP package | @voicetta/setup-mcp |
| Host guides | Setup Host Guides |
Base API URL: https://api.voicetta.com/v1/setup
AgentEnvelope
Every authenticated step returns an AgentEnvelope:
{ "session_id": "ses_...", "status": "awaiting_consent", "message_for_user_agent": "Ask the user to open the consent URL.", "actions_completed": ["session_created"], "human_required": { "type": "consent", "url": "https://app.voicetta.com/setup/consent?...", "instructions": "Authorize Voicetta setup in the browser." }, "handoff": null }
When human_required is present, pause automation and instruct the human. Resume after they complete the step.
Setup flow
flowchart LR A[Create session] --> B[Human consent] B --> C[Profile] C --> D[Assistant] D --> E[Knowledge] E --> F[Phone] F --> G[Select tools] G --> H[Enable tools] H --> I[Test call] I --> J[Handoff]
1. Create session
POST /v1/setup/sessions Content-Type: application/json X-Partner-Agent: claude {"partner_agent": "claude"}
Response: session_id, consent_url, status.
2. Human consent
Send the human to consent_url. After login and authorization, Voicetta issues a scoped Bearer token:
Authorization: Bearer setup_...
TTL: 24 hours, bound to one session_id.
3. Profile → assistant → knowledge
POST /v1/setup/sessions/{session_id}/profile POST /v1/setup/sessions/{session_id}/assistant POST /v1/setup/sessions/{session_id}/knowledge
Each step returns an updated envelope with the next message_for_user_agent.
4. Phone (optional)
POST /v1/setup/sessions/{session_id}/phone
May return human_required for payment (type: payment) or forwarding instructions. Poll GET /v1/setup/sessions/{session_id} until status advances.
5. Tool catalog and selection
GET /v1/setup/tools/catalog GET /v1/setup/tools/catalog?category=PMS&industry=Hospitality POST /v1/setup/sessions/{session_id}/tools/select
List only available tools. UI label for each item is Connection.
6. Enable or skip tools
POST /v1/setup/sessions/{session_id}/tools/{tool_id}/enable POST /v1/setup/sessions/{session_id}/tools/{tool_id}/skip GET /v1/setup/sessions/{session_id}/tools
OAuth and marketplace tools often return human_required with a URL. Credentials-based tools may accept payload from the agent when agent_can_submit_credentials is true.
7. Test call and handoff
POST /v1/setup/sessions/{session_id}/test-call GET /v1/setup/sessions/{session_id}/handoff
Return the handoff JSON to the human: login URL, Voicetta phone, forwarding instructions, tool status, and next steps.
MCP mirror
The @voicetta/setup-mcp package exposes one MCP tool per Setup API step:
voicetta_create_setup_sessionvoicetta_get_session_statusvoicetta_list_tools_catalogvoicetta_submit_business_profilevoicetta_configure_assistantvoicetta_upload_knowledgevoicetta_request_phone_numbervoicetta_select_toolsvoicetta_enable_toolvoicetta_skip_toolvoicetta_get_tools_statusvoicetta_run_test_callvoicetta_get_handoff_summary
Set VOICETTA_SETUP_SESSION_ID and VOICETTA_SETUP_ACCESS_TOKEN after consent.
Webhooks (optional)
Agents without push support can poll GET /sessions/{id}. For async steps (phone provisioning, OAuth), register:
POST /v1/setup/sessions/{session_id}/webhooks/register {"webhook_url": "https://your-agent.example/hooks/voicetta"}
Events: phone.provisioned, tool.enabled, test_call.completed.
Rules
- Only document and call tools Voicetta can actually perform.
- Never include passwords in handoff — reference Google OAuth or the password set at consent.
- Use
X-Partner-Agentorpartner_agentfor attribution (claude,chatgpt,cursor,custom). - When status is
completed, stop and deliver the handoff.