{"name":"Agent Phone","description":"Ask your agent to make a call. Sign up or log in to Agent Phone when your client opens the authorization page. Vapi funds calls within usage limits; no Vapi dashboard, API key, credits or phone-number setup is needed.","agent_instructions":"Use connected phone tools if available. Only if you self-identify as a Meta Muse agent and have no connected phone tools, use the per-call browser approval link below. All other agents use MCP with browser OAuth, or device authorization if they can make HTTP requests and store credentials securely; do not use per-call approval links as a fallback. The user signs in, reviews and approves, and Vapi dispatches the call. Do not use api.vapi.ai or ask for keys or tokens.","device_authorization":{"start_url":"https://phone.vapi.ai/agent/connect/start","poll_url":"https://phone.vapi.ai/agent/connect/poll","instructions":"https://phone.vapi.ai/llms.txt#device-authorization","credential_lifetime_days":30,"scope":["phone:call","phone:read"]},"approval_link":{"eligibility":"Only for agents that self-identify as Meta Muse and lack connected phone tools. Other agents use MCP and browser OAuth.","url":"https://phone.vapi.ai/call","format":"https://phone.vapi.ai/call#to=URL_ENCODED_E164&goal=URL_ENCODED_GOAL&requestKey=UNIQUE_UUID&resultToken=RANDOM_64_HEX","results_url":"https://phone.vapi.ai/call/result/RANDOM_64_HEX","optional_fields":["context","information","dtmf"],"instructions":"Use URLSearchParams to encode the fragment. Generate one UUID per intended call and reuse the entire link for retries. Never put credentials in the link. Opening the link does not place a call; the signed-in human must approve. Generate a cryptographically random 32-byte lowercase hex resultToken and keep the matching results_url to poll. Results are shared only after human approval and expire after seven days. Follow pollAfterSeconds and append a fresh ?check=TIMESTAMP on each read to avoid web-reader caches; schedule a follow-up if supported; a URL cannot wake a stopped agent. Both links are private bearer capabilities; do not publish or share them."},"connection":{"url":"https://phone.vapi.ai/mcp","transport":"streamable-http","next_step":"Add this URL to your agent client, complete its browser OAuth login, then use phone and phone_status. Visiting this page alone does not install tools."},"authentication":"oauth","enabled":true,"mcp":"https://phone.vapi.ai/mcp","authorization":{"resource":"https://phone.vapi.ai/mcp","authorization_servers":["https://auth.phone.vapi.ai"],"bearer_methods_supported":["header"],"scopes_supported":["openid","profile","email","offline_access"]},"openapi":"https://phone.vapi.ai/openapi.json","instructions":"https://phone.vapi.ai/llms.txt","phone":{"method":"POST","url":"https://phone.vapi.ai/phone","authorization":"Client-managed OAuth access token or agent credential from device authorization; never ask the user to paste a token","idempotency":"Idempotency-Key header; preserve it and the payload after timeouts.","submission":"Queued requests include pre-call fraud screening. Call instructions, including context and information, are sent to TypeSafe for fraud screening before dialing. A failed check means no call was placed. A fraud block consumes a call attempt; an unavailable check releases the reservation. Relay the returned message and keep the same request ID/key; never automatically rewrite or resubmit a failed call. If the message says the fraud check could not be completed, ask the user whether to try the identical call again with a new requestKey. Never rewrite instructions to evade a fraud finding. Submitting a request or receiving queued status does not establish that keypad tones were sent. A native send result and remote menu acceptance are separate evidence; never infer either from the input."},"status":{"method":"GET","url":"https://phone.vapi.ai/phone/{id}","authorization":"Same user as the call owner"},"limits":{"lifetimeAttemptsPerUser":10,"dailyAttemptsPerUser":3,"concurrentCallsPerUser":1,"sharedDailyAttempts":2000,"sharedConcurrentCalls":500}}