{"service":"dial","tagline":"Give your agent a phone. Get back a signed proof it made the call.","version":"0.1.0","mode":"live","tools":[{"name":"dial.capabilities","title":"Describe this service","description":"Free. Returns the Dial tool manifest, pricing, settlement network, and the public key used to sign proof envelopes. Call this first to learn how to verify Dial output.","paid":false,"endpoint":"https://dial-woad.vercel.app/v1/capabilities","input_schema":{"type":"object","additionalProperties":false,"properties":{}}},{"name":"dial.verify_business","title":"Verify a counterparty by phone","description":"Places a real outbound phone call to a business, verifies a list of claims out loud with whoever answers, and returns a cryptographically signed proof envelope containing the verdict, the transcript hash, and the recording hash. Use this before releasing funds, onboarding a supplier, or acting on an invoice.","paid":true,"endpoint":"https://dial-woad.vercel.app/v1/verify-business","input_schema":{"type":"object","title":"Counterparty phone check request","required":["phone","claims"],"additionalProperties":false,"properties":{"phone":{"type":"string","title":"Phone","description":"The number to call, in E.164 format including the country code. Destinations may be restricted by an allowlist; the free capabilities endpoint reports the active policy.","pattern":"^\\+[1-9]\\d{6,14}$","examples":["+14155550123","+442071838750"]},"claims":{"type":"array","title":"Claims","description":"Statements to confirm or deny out loud, one per item. Keep each atomic — one fact per claim — because each is asked and scored separately in the result.","minItems":1,"maxItems":8,"items":{"type":"string","minLength":3,"maxLength":300,"title":"Claim","description":"A single factual statement the person on the call can confirm or deny.","examples":["You are XYZ Trading BV","You issued invoice 4471 for fifty thousand USDT"]},"examples":[["You are XYZ Trading BV","You issued invoice 4471"]]},"business_name":{"type":"string","title":"Business name","description":"Who you expect to reach. Used to detect a wrong number or an impersonator, and spoken back during the call.","maxLength":200,"examples":["XYZ Trading BV"]},"context":{"type":"string","title":"Context","description":"Why the call is being made. Spoken to the person as the reason for calling, so phrase it the way you would want it said aloud.","maxLength":500,"examples":["Confirming supplier payment details before releasing a transfer"]}}},"documentation":"https://dial-woad.vercel.app/v1/docs (GET, free)","parameters":[{"name":"phone","type":"string","required":true,"format":"E.164","constraints":"Must match ^\\+[1-9]\\d{6,14}$. Include the country code.","example":"+14155550123","description":"The number Dial will call. Destinations may be restricted by an allowlist; see the free capabilities endpoint for the active policy."},{"name":"claims","type":"string[]","required":true,"constraints":"1 to 8 items, each 3 to 300 characters.","example":["You are XYZ Trading BV","You issued invoice 4471"],"description":"Statements to confirm or deny out loud, one per item. Keep each atomic — one fact per claim — because each is answered and scored separately."},{"name":"business_name","type":"string","required":false,"constraints":"Up to 200 characters.","example":"XYZ Trading BV","description":"Who you expect to reach. Used to detect a wrong number or an impersonator."},{"name":"context","type":"string","required":false,"constraints":"Up to 500 characters.","example":"Confirming supplier payment details before releasing a transfer","description":"Why the call is being made. Spoken to the person as the reason for calling."}],"example_request":{"phone":"+14155550123","business_name":"XYZ Trading BV","context":"Confirming supplier payment details before releasing a transfer","claims":["You are XYZ Trading BV","You issued invoice 4471 for fifty thousand USDT","Your receiving address starts with the characters 7a3f9 and ends with c41d8"]},"example_response":{"version":"dial-proof/1","tool":"dial.verify_business","issued_at":"2026-07-27T11:05:52.000Z","mode":"live","inputs":{"phone":"*********0123","phone_hash":"0x0d497b6a…60d7","claims":["You are XYZ Trading BV","You issued invoice 4471 for fifty thousand USDT"],"business_name":"XYZ Trading BV","context":"Confirming supplier payment details before releasing a transfer"},"engine":{"name":"dial","version":"0.1.0","model":"openai/gpt-4o","prompt_hash":"0x6726…","code_hash":"0x05e7…"},"result":{"verdict":"PARTIAL","answered_by":"human","claim_results":[{"claim":"You are XYZ Trading BV","result":"confirmed","quote":"Yes, speaking."},{"claim":"You issued invoice 4471 for fifty thousand USDT","result":"denied","quote":"No, that isn't ours."}],"spoken_reason":"","summary":"Identity confirmed; the invoice was denied.","duration_s":79,"ended_reason":"customer-ended-call"},"evidence":{"call_id":"019fa522-a476-7001-9b95-545ef6854c7d","transcript_hash":"0x0aed1118…d8ef","recording_hash":"0x29482ce0…1ace","recording_url":"https://…/019fa522-mono.wav"},"self_checks":[{"check":"all_claims_have_a_result","passed":true}],"self_checks_passed":6,"self_checks_total":6,"proof":{"content_hash":"0x8aa1e78e…7a52","algorithm":"secp256k1/sha256","signature":"0x3963bf78…","signer_public_key":"0x03a291…","how_to_verify":"Remove `proof`, canonicalize the rest (sort keys recursively, JSON-encode), sha256 it, compare to content_hash, then verify the signature over it."}},"verdicts":{"CONFIRMED":"Every claim was confirmed by the person who answered.","DENIED":"The person contradicted one or more claims.","PARTIAL":"A mix — some claims confirmed, at least one denied or unclear.","UNREACHABLE":"Nobody answered, the line was busy, or it went to voicemail.","REFUSED":"A person answered but declined to answer the questions.","WRONG_NUMBER":"The number does not belong to the expected party."},"errors":[{"status":400,"code":"INVALID_PHONE","meaning":"phone is not valid E.164."},{"status":400,"code":"INVALID_CLAIMS","meaning":"claims is missing, empty, over 8 items, or an item is the wrong length."},{"status":402,"code":"payment_required","meaning":"No payment supplied. The x402 challenge is in the PAYMENT-REQUIRED header."},{"status":403,"code":"DESTINATION_NOT_ALLOWED","meaning":"The destination is outside this deployment’s allowlist."},{"status":403,"code":"DESTINATION_HIGH_RISK","meaning":"Premium-rate or satellite range, blocked to prevent toll fraud."},{"status":429,"code":"NUMBER_COOLDOWN","meaning":"That number was called too recently. See retry_after_seconds."},{"status":429,"code":"IP_RATE_LIMIT","meaning":"Hourly call limit reached for this caller."},{"status":502,"code":"CALL_FAILED","meaning":"The telephony provider could not place the call."},{"status":504,"code":"CALL_TIMEOUT","meaning":"The call did not finish inside the time budget."}]}],"limits":{"allowlist":null,"callsLastHour":0,"maxCallsPerHour":20,"maxCallsPerIpHour":5,"sameNumberCooldownSeconds":120,"distinctCallers":0,"stateScope":"in-memory, per-process; resets on restart"},"pricing":{"model":"per completed call, not per minute","amount":"0.1","amount_atomic":"100000","asset":"USD₮0","asset_address":"0x779ded0c9e1022225f8e0630b35a9b54be713736","decimals":6,"network":"eip155:196","protocol":"x402","enforced":true,"settlement":"okx-facilitator"},"proof":{"version":"dial-proof/1","algorithm":"secp256k1/sha256","signer_public_key":"0x03a291829f29b23a2a368ff32bb43c1e6bc6c8b5e2d72959b2f472e314b2b4ebfd","verify_endpoint":"https://dial-woad.vercel.app/v1/verify-proof"}}