Use these guides to test and run Voicetta setup from your AI host. The canonical contract is the Setup API playbook; each host is a thin adapter.
Why it matters for your business
- Save money: validate one flow once, reuse across Claude, Cursor, and ChatGPT.
- Work faster: copy-paste configs per host instead of rediscovering endpoints.
- Standardize service: every host follows the same consent → handoff sequence.
- Delight every Guest: consistent handoff regardless of which AI tool they use.
Prerequisites
- Setup API base:
https://api.voicetta.com/v1/setup - OpenAPI: https://voicetta.com/setup-openapi.json
- Terminology: Connection (UI) = Setup Tool (API)
Claude Desktop (remote MCP)
This section is Setup MCP. It provisions a new agent, and no API key goes in the config.
To place a call from a workspace you already have, connect Claude to https://api.voicetta.com/mcp with your workspace API key. See Claude.
Add the hosted Setup server. No token goes in the config.
{
"mcpServers": {
"voicetta-setup": {
"url": "https://mcp.voicetta.com/mcp"
}
}
}E2E scenario
- Ask Claude: "Provision Voicetta for my hotel using voicetta_create_setup_session."
- Open the returned
consent_urlin a browser and authorize as the workspace owner. - Ask Claude to call
voicetta_wait_for_consent. It stores the bearer for the rest of the process. - Submit profile, configure the assistant, upload knowledge, skip or pay for a phone, select tools.
- When
pending_human_stepslists a tool or payment, finish that page in the dashboard. The page reports back. - Record the test call and fetch the handoff. It includes
login_urland the phone when one was bought.
Stdio is the fallback: npx -y @voicetta/setup-mcp with VOICETTA_SETUP_API_URL=https://api.voicetta.com. The same tools run. VOICETTA_SETUP_SESSION_ID and VOICETTA_SETUP_ACCESS_TOKEN only resume a session that already exists.
Cursor (MCP)
Prefer the remote URL. Stdio is the same tool list when a local process is required.
{
"mcpServers": {
"voicetta-setup": {
"url": "https://mcp.voicetta.com/mcp"
}
}
}E2E scenario
- Prompt: "Create a Voicetta setup session with partner_agent cursor."
- Complete consent in the browser when given
consent_url. - Call
voicetta_wait_for_consent. Do not paste a bearer into the config. - List the catalog, select
sms, enable it, and finish the connection in the dashboard whenpending_human_stepssays so. - Confirm the envelope
statusreachescompletedafter the test call and handoff.
ChatGPT (GPT Actions / OpenAPI)
Import https://voicetta.com/setup-openapi.json as a custom GPT Action. Authentication stays off until POST /sessions/{id}/claim returns setup_access_token. Use that bearer for the later steps. Do not ask the human to copy it out of the consent page.
E2E scenario
- Upload or link the OpenAPI spec to a GPT.
- Instruction: "Follow the Voicetta agent setup playbook. Start with POST /v1/setup/sessions."
- When
human_requiredappears, show the URL to the user and wait. - Continue with Bearer auth for remaining endpoints.
- End with GET
/v1/setup/sessions/{id}/handoff.
Raw REST (curl)
For agents without MCP or Actions — including custom or regional LLM hosts.
Create session
curl -sS -X POST "https://api.voicetta.com/v1/setup/sessions" \
-H "Content-Type: application/json" \
-H "X-Partner-Agent: custom" \
-d '{"partner_agent":"custom"}'List tool catalog (no auth)
curl -sS "https://api.voicetta.com/v1/setup/tools/catalog?category=PMS"Authenticated steps
export SETUP_TOKEN="setup_..."
export SESSION_ID="ses_..."
curl -sS "https://api.voicetta.com/v1/setup/sessions/${SESSION_ID}" \
-H "Authorization: Bearer ${SETUP_TOKEN}"
curl -sS -X POST "https://api.voicetta.com/v1/setup/sessions/${SESSION_ID}/profile" \
-H "Authorization: Bearer ${SETUP_TOKEN}" \
-H "Content-Type: application/json" \
-d '{"profile":{"business_name":"Demo Hotel","industry":"Hospitality"}}'
curl -sS "https://api.voicetta.com/v1/setup/sessions/${SESSION_ID}/handoff" \
-H "Authorization: Bearer ${SETUP_TOKEN}"E2E checklist
-
POST /sessionsreturnsconsent_urlandagent_claim_token - After consent,
POST /sessions/{id}/claimreturns a bearer that works onGET /sessions/{id} - Profile, assistant, knowledge steps advance
status -
GET /tools/cataloglistsguesty,sms,calcom -
POST /tools/selectand/tools/{id}/enablereturn envelope orhuman_required -
GET /handoffreturns login, phone, and next steps
Automated route checks (CI)
Backend pytest verifies Setup API routes are mounted and the public catalog responds:
cd voicetta-backend-app
poetry run pytest tests/test_setup_api_routes.py -qTroubleshooting
| Symptom | Fix |
|---|---|
401 on session steps | Call voicetta_wait_for_consent or POST /claim after the human authorizes |
409 AWAITING_CONSENT on claim | The human has not authorized yet. Keep polling |
400 state transition | Call steps in order; check message_for_user_agent |
pending_human_steps is not empty | The human still has to finish that dashboard page |
Tool enable returns human_required | Send the human to the URL. The dashboard posts human-step/complete |

