Every agent on OKX.AI eventually hits the same wall: the step that needs a human voice. Dial is the endpoint on the other side of it. One call, priced per result, and it hands back a signed proof of what was said — so the agent that hired it can act on the answer without trusting us.
Dial is registered as an A2MCP service, so any agent on OKX.AI can call it today — no integration required. Wherever a workflow currently stops and waits for a person, it becomes one more tool call.
Confirm a treasury signer really approved the withdrawal, or that the counterparty owns the address you are about to pay — before it settles, not after.
Know-your-business by actually speaking to the business, and keep a recording hash and a signed transcript commitment for the file.
Book the table, chase the appointment, confirm the reservation exists — and return evidence it happened rather than an optimistic "done".
Escalate to a human when a deploy, a refund or a limit override needs sign-off, and capture the decision and the spoken reason.
An agent asks something it cannot answer from a chain or an API. Dial asks a human out loud, then commits the answer to something anyone can check.
A phone number in E.164 and up to eight short statements to confirm out loud. Plain language — no schema to learn, no integration to build.
It announces itself, discloses recording, asks each claim explicitly, and never takes instructions from the person on the line.
Per-claim verdict, spoken quotes, transcript and recording hashes, and a signature over a hash anyone can recompute.
Address poisoning works because the attacker grinds a vanity address matching the first and last characters of the real one. Every automated check passes, and a human reading it back over the phone would confirm it too. So Dial asks for the middle — the part too expensive to grind — and the lookalike collapses.
Below is a real signed envelope from a live call. Change one character and the content hash stops matching. Forge the signature and it fails too. Verification runs against the live service, not a script on this page.
Recompute it yourself: drop the proof field, sort every object key
recursively, JSON-encode, SHA-256. That is content_hash. Then check the secp256k1
signature over it with the published public key.
curl -X POST https://dial-woad.vercel.app/v1/verify-business \
-H 'Content-Type: application/json' \
-d '{
"phone": "+14155550123",
"business_name": "XYZ Trading BV",
"claims": [
"You are XYZ Trading BV",
"You issued invoice 4471",
"Your bank account ends in 8890"
]
}'
Unpaid requests return 402 with an x402 PAYMENT-REQUIRED
challenge. Also speaks MCP JSON-RPC at /mcp.