Dial x402
No accountNo API keyNo 10DLC queueWallet pays. Number provisioned.

The internet's payphone.
Walk up. Pay. Communicate.

A funded wallet is all you need. Provision a real US phone number in about two minutes. Send SMS for $0.05. Inbound is free.

No account. No 10DLC registration. No carrier paperwork. Your wallet owns the number.

~2 min to a real number
no carrier queue, no registration
4 live endpoints
US numbers, international, SMS, and inbound
Agent-native from day one
MCP, llms.txt, x402 discovery built in
Send SMS in one request
POST /api/v1/sms/send$0.05 per message
curl (prints status + headers)
# -i = show HTTP status line + response headers (402 + PAYMENT-REQUIRED)
curl -i -sS -X POST "https://x402.dial.wtf/api/v1/sms/send" \
  -H "Content-Type: application/json" \
  -d '{"to":"+1234567890","message":"Hello from my AI agent!"}'
Unpaid calls return 402. The JSON body is often {} — payment terms are in the PAYMENT-REQUIRED header (only visible with curl -i). Use @x402/fetch in JS to pay automatically — see Quickstart below.

Pay for what you use. Nothing else.

USDC on Base. No minimums, no subscriptions, no invoices. The wallet pays when you use it. Silence when you don't.

Send SMS
Live
$0.05
per message

Send a one-off SMS from a pool number. No setup required — just pay and send.

POST /api/v1/sms/send
SMS from Own Number
Live
$0.05
per message

Send SMS from your provisioned number. Requires SIWE authentication (wallet that purchased the number).

POST /api/v1/numbers/mine/send
US Phone Line
Live
$100.00
activation

Buy an exclusive US phone line. 10k texts included first month. $60/mo renewal with 5k texts. Manage via SIWE.

POST /api/v1/numbers/buy/us
International Number
Live
$100.00
activation

Buy an exclusive international phone line. 10k texts included first month. $60/mo renewal with 5k texts. Manage via SIWE.

POST /api/v1/numbers/buy/intl
Coming soon:Phone Lookup ($0.05)Breach Search ($0.05)Buy Credits ($5.00)Phone Verify ($2.25)eSIM Checkout ($2.45)

Twilio makes you lease a landline.
Dial is the payphone.

Traditional SMS APIs were built for businesses with accounts, compliance teams, and patience for 6-week approval queues. Dial was built for teams and agents who need a number today.

Minutes, not weeks

Provision a real US phone number in about two minutes. No 10DLC brand registration. No carrier approval queue. No compliance review. The number is yours when the payment settles.

💰
Pay when you use it

$100 activation. $60/month with 5k texts. $0.05 per SMS. That's the entire pricing model. No seat fees, no campaign registration costs, no invoices at the end of the month that don't match what you expected.

🔑
Your wallet is the credential

No account to create. No API key to manage. No credit card to attach. Your EVM wallet pays via USDC and owns the number. Prove ownership anytime with a wallet signature — no login required.

🤖
Agents pay for it themselves

MCP server, llms.txt, Bazaar discovery — your agent finds the endpoint, reads the price, signs the payment, and gets the number. No human setup at any point. This is the only telephony API built for that.

🏛
The number belongs to your wallet

Not to a platform account. Not to a carrier relationship. Your wallet pays, your wallet owns — the same way it holds any other asset. When you need to rotate, automate, or transfer it, you do that programmatically. No support ticket.

Running SMS campaigns for multiple brands?Talk to our team about volume pricing →

Walk up. Put in the coin. Make the call.

x402 is the HTTP payment standard — the protocol that activates HTTP 402 'Payment Required' for real machine payments. Your agent or app discovers the price, signs a USDC authorization, and gets the resource. No account. One round-trip.

01
Call the endpoint

POST to any Dial endpoint. No payment header yet. The server returns HTTP 402 with a PAYMENT-REQUIREDheader containing the price, network, and address to pay. That's your offer.

02
Sign the authorization

Your wallet signs an EIP-3009 typed-data authorization — a signature, not a transaction. No ETH needed. Gas is sponsored by the facilitator. The SDK handles this in one line.

03
Get the resource

Resubmit with your signature in the PAYMENT-SIGNATURE header. The OpenX402 facilitator verifies and settles on-chain in about one second. Your SMS is sent. Your number is provisioned. Done.

The only telephony API your agent can pay for itself.

Agents can't sign up for accounts. They can hold wallets. Every other telephony API was built for humans to set up. Dial is built for the agent that needs a phone number at 2am in the middle of a workflow — no human required.

MCP Server

Connect at x402.dial.wtf/mcp. Your agent discovers available tools, reads their schemas, calls them, and pays — all through the Model Context Protocol. Works with Claude, GPT, LangChain, CrewAI, and any MCP-compatible framework.

llms.txt

Machine-readable API docs at /llms.txt and /llms-full.txt. Your agent understands every endpoint, parameter, and response schema without you writing a single line of documentation for it.

OpenX402 Discovery

Listed on openx402.ai. Bazaar-standard resource catalog at /discovery/resources. Protocol metadata at /.well-known/x402. Agents that browse the x402 ecosystem find Dial without you pointing them there.

TypeScript SDK

@dial/api wraps every endpoint with typed methods, zod-validated schemas, and flow helpers. Works with any x402-compatible payment wrapper.

Your number lives in your wallet.
Not in a platform account.

The wallet that pays owns the number. Prove ownership anytime by signing with that wallet — no username, no password, no support ticket to recover access. The number persists as long as your wallet does.

Send SMS
$0.05/msg

Send messages from your number at the discounted rate. SIWE proves ownership, x402 handles payment.

Receive SMS
Free

Inbound messages stored automatically. Read via API or configure a webhook URL to receive them in real-time.

Extend lease
Free

Renew your number for additional months. Keep your number as long as you need it.

Webhook forwarding
Free

Configure a webhook URL and every inbound SMS gets POST'd to your server in real-time with retry.

Three ways to start.
Pick yours.

Three ways to start: curl, JavaScript SDK, or MCP for AI agents.

Developer?

Grab the SDK or hit the API directly. No account setup, no API key, no env var to rotate. Fund a wallet with USDC on Base and you're ready. Send your first SMS in under 3 minutes.

Running a team or agency?

We'll provision lines and walk you through the dashboard live. Book a 15-minute demo →

1. Send SMS (curl)
# -i = print status line + response headers (required to see 402 + PAYMENT-REQUIRED)
# -sS = quiet URL noise but still show errors
curl -i -sS -X POST "https://x402.dial.wtf/api/v1/sms/send" \
  -H "Content-Type: application/json" \
  -d '{"to":"+1234567890","message":"Hello from Dial"}'

# Expect: HTTP/2 402 and header PAYMENT-REQUIRED: <base64…>
# JSON body is often {} — the priced offer is in that header (x402 v2).
# Decode: copy the header value, then: echo '<paste>' | base64 -d | jq .

# After you have a payment proof, retry with PAYMENT-SIGNATURE (what @x402/fetch sends).
curl -i -sS -X POST "https://x402.dial.wtf/api/v1/sms/send" \
  -H "Content-Type: application/json" \
  -H "PAYMENT-SIGNATURE: <base64-payment-proof>" \
  -d '{"to":"+1234567890","message":"Hello from Dial"}'
2. JavaScript SDK (auto-payment)
import { wrapFetchWithPayment } from "@x402/fetch";
import { x402Client } from "@x402/core/client";
import { ExactEvmScheme } from "@x402/evm/exact/client";
import { toClientEvmSigner } from "@x402/evm";

const signer = toClientEvmSigner(walletClient);
const client = new x402Client();
client.register("eip155:*", new ExactEvmScheme(signer));
const paidFetch = wrapFetchWithPayment(fetch, client);

// Buy a US phone line ($100 activation)
await paidFetch("https://x402.dial.wtf/api/v1/numbers/buy/us", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ country: "US" }),
});

// Send an SMS ($0.05)
await paidFetch("https://x402.dial.wtf/api/v1/sms/send", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ to: "+1234567890", message: "Hello!" }),
});
3. Connect via MCP (AI agents)
import { experimental_createMCPClient as createMCPClient } from "ai";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
import { withPayment } from "x402-mcp";

const mcpClient = await createMCPClient({
  transport: new StreamableHTTPClientTransport("https://x402.dial.wtf/mcp"),
});
const client = await withPayment(mcpClient, {
  account: walletAccount,
  network: "base",
});

const tools = await client.tools();
// → buy_number_us ($100), buy_number_intl ($100),
//   send_sms ($0.05), discovery (free)

Discovery endpoints

Everything a bot needs to find, understand, and pay for Dial services.