{"slug": "let-your-ai-agent-place-a-real-phone-call-paid-per-call-in-usdc", "title": "Let your AI agent place a real phone call, paid per call in USDC", "summary": "Agentgates launched a pay-per-call phone service that lets AI agents place real outbound calls paid in USDC via the x402 payment protocol, with no account, verified number or card on file required. Agents can bridge a call to their owner's phone, stream bidirectional audio over a websocket (raw mulaw at 8 kHz, 20 ms frames) so an agent with its own speech and ears talks directly, or hand a plain-sentence task to an AI operator that returns a transcript and outcome. Calls that never connect can be retried with the same payment at no charge, and a separate endpoint leases a phone number for a month.", "body_md": "An agent that needs to call a restaurant, a clinic or a shop usually hits a wall: phone APIs want an account, a verified number and a card on file. [Agentgates](https://agentgates.ai) runs a payphone instead. The agent pays for a window of minutes, names the number, and the call goes out from a house number. Nothing is stored and nothing renews.\n\n```\ncurl -s https://agentgates.ai/api/booth | jq '.windows'\n```\n\nEach window is a number of minutes and its price, read live.\n\nEvery call names who is on our side of the line.\n\nYour own phone: send `bridgeTo` with your number and the booth rings you first, then connects you to `to`.\n\nYour agent's own voice: send `streamUrl` and the call's audio becomes a bidirectional websocket, so an agent with its own speech and its own ears talks to the person directly. Frames are raw mulaw at 8 kHz, 20 ms each (160 bytes), base64 in `{\"event\":\"media\",\"media\":{\"payload\":\"...\"}}`. Send raw mulaw, not RTP: a 12-byte RTP header on outbound frames plays as a click every 20 ms.\n\nOur operator: send `task`, a plain sentence of what to get done, and an AI operator makes the call and answers with the transcript and the outcome.\n\n```\ncurl -s -X POST https://agentgates.ai/api/booth \\\n  -H 'content-type: application/json' \\\n  -d '{\"kind\":\"call\",\"minutes\":5,\"to\":\"+15551234567\",\"task\":\"Ask what time they open tomorrow.\"}'\n```\n\nThat request comes back `402 Payment Required` with the exact USDC amount on each network it accepts. Nothing is dialed yet. Sign that amount with the paying wallet and send the same request again with the payment attached; any x402 client does both steps. Then the phone rings.\n\nA call that never connects can be placed again with the same payment at no charge, and the agent can end the call early by sending `{\"kind\":\"call\",\"hangup\":true}` with that payment.\n\n`POST /api/account/plans` leases a number for a month. It receives texts and places calls, and it belongs to the agent's account for the term. The account is twelve words the agent keeps, made with one command:\n\n```\nnpm i -g @agentgates/cli && agentgates init\n```\n\n`/api/account/docs/phone`` npx skills add agentgates-ai/agentgates`\nOnly call people who agreed to hear from you: [terms](https://agentgates.ai/terms).", "url": "https://wpnews.pro/news/let-your-ai-agent-place-a-real-phone-call-paid-per-call-in-usdc", "canonical_source": "https://dev.to/agentgates/let-your-ai-agent-place-a-real-phone-call-paid-per-call-in-usdc-1j7a", "published_at": "2026-11-03 05:21:05+00:00", "updated_at": "2026-11-03 05:23:10.950270+00:00", "lang": "en", "topics": ["ai-agents", "ai-tools", "agent-protocols", "ai-products"], "entities": ["Agentgates", "USDC", "x402", "@agentgates/cli"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/let-your-ai-agent-place-a-real-phone-call-paid-per-call-in-usdc", "markdown": "https://wpnews.pro/news/let-your-ai-agent-place-a-real-phone-call-paid-per-call-in-usdc.md", "text": "https://wpnews.pro/news/let-your-ai-agent-place-a-real-phone-call-paid-per-call-in-usdc.txt", "jsonld": "https://wpnews.pro/news/let-your-ai-agent-place-a-real-phone-call-paid-per-call-in-usdc.jsonld"}}