# Contact Verify (verify-x402) > Contact Verify (verify-x402). Preview is free. Basic is $0.002 for format plus mail server. Full is $0.01 for a real mailbox check. Phone line type is $0.02. Domain check is $0.02. Sender check is $0.025. No API key. 3× cheaper than typical $0.03 email checks. Category: Data This is the full usage guide. The short index is https://verify-x402.okwithit9.workers.dev/llms.txt. Contact Verify (verify-x402) full check: a real mailbox check at $0.01 (SMTP deliverability, disposable, catch-all, and role). Use before sending, for lead lists, CRM cleanup, and sign-up fraud checks. Email tags: email-verification, email-validation, validate-email, verify-email, email-checker, bounce-check, deliverability, disposable-email, lead-generation, crm, fraud-prevention Contact Verify (verify-x402) phone lookup: carrier line type (mobile, landline, VoIP, toll-free) and E.164 format. Detect VoIP/burner numbers in sign-up fraud checks; confirm SMS-capable mobiles. $0.02. Phone tags: phone-lookup, phone-validation, phone-verification, carrier-lookup, line-type, voip-detection, e164, sms, fraud-prevention, kyc This service does not send email or SMS. We don't store emails or phone numbers. Logs record the route, the HTTP status, and the settlement transaction id only. ## Pricing - POST /verify/email — 0.01 USD per address (10000 USDC atomic units, 6 decimals). Body: {"email":"..."}. - POST /verify/email/batch — 0.01 USD per email, up to 45 per call. The HTTP 402 amount is 10000 times the number of unique, well-formed addresses. Invalid syntax is not billed. - POST /verify/email/basic — 0.002 USD (2000 atomic units). Format plus mail server. Not a mailbox check. - POST /verify/email/preview — free. Body: {"email":"..."}. GET is HTTP 405 and does not echo the query. Contact Verify (verify-x402) preview is free: syntax, MX, disposable, and role account. It does not check the mailbox (mailbox_checked is false). No payment. Basic is POST /verify/email/basic at $0.002 for format plus mail server. The full real mailbox check is POST /verify/email at $0.01. The address is a JSON body field, not a query parameter. 30 requests per minute per IP. - GET /verify/domain — 0.02 USD (20000 atomic units). POST /verify/domain is the same price when the body includes a sender address. - POST /verify/sender — 0.025 USD (25000 atomic units). Email deliverability plus the domain check. - GET /verify/domain/preview — free. Lookalike, MX, and SPF/DMARC only. It can read low_risk when an unchecked age signal would raise the paid verdict. - POST /verify/phone — 0.02 USD per number (20000 USDC atomic units, 6 decimals). Body: {"phone":"...","country":"US"}. USDC amounts in the HTTP 402 challenge are atomic units, not decimal dollars. $0.01 is 10000. $0.02 is 20000. ## How to call 1. Request the URL. There is no API key and no signup. 2. Invalid input returns HTTP 400. No payment is requested. 3. A route that is not configured, or a deployment that is not accepting payment, returns HTTP 503. No payment is requested. Do not send payment. 4. A priced route with no payment returns HTTP 402. The PAYMENT-REQUIRED header is base64-encoded JSON (x402 v2). The JSON body has x402Version and an accepts array with the same requirements: scheme, network, amount, asset, payTo, resource, description, mimeType, maxTimeoutSeconds, and the bazaar extensions. The resource URL has no query string. 5. Pay that exact amount in USDC on the advertised network with the x402 exact scheme. 6. Retry the same URL with a PAYMENT-SIGNATURE header. 7. HTTP 200 is the verification result. HTTP 502 means the check failed and the payment is not settled. ``` curl -i -X POST "https://verify-x402.okwithit9.workers.dev/verify/email" \ -H "content-type: application/json" \ -d '{"email":"ada@example.com"}' ``` ``` curl -i -X POST "https://verify-x402.okwithit9.workers.dev/verify/email" \ -H "content-type: application/json" \ -H "PAYMENT-SIGNATURE: " \ -d '{"email":"ada@example.com"}' ``` Phone uses the same flow: POST https://verify-x402.okwithit9.workers.dev/verify/phone with {"phone":"+14155552671","country":"US"}. ## Email POST https://verify-x402.okwithit9.workers.dev/verify/email Price: 0.01 USD = 10000 USDC atomic units (6 decimals). Contact Verify (verify-x402) full check: a real mailbox check at $0.01 (SMTP deliverability, disposable, catch-all, and role). Use before sending, for lead lists, CRM cleanup, and sign-up fraud checks. Body: - email (required). A JSON object {"email":"..."}. The address is not a query parameter. With no payment header, a missing email still returns HTTP 402. Invalid syntax returns HTTP 400 with error invalid_email and reason invalid_syntax, and is not billed. A PAYMENT-SIGNATURE or X-PAYMENT header with a missing or invalid email returns HTTP 400 before verification or settlement. HTTP 200 fields: - email, username, domain - status — deliverability status for the mailbox - overall_score — numeric confidence score when the check includes one - is_valid_syntax, is_deliverable, is_safe_to_send - is_disposable, is_role_account, is_catch_all, is_free_email - can_connect_smtp, mx_accepts_mail, mx_records - has_inbox_full, is_disabled, is_spamtrap Other responses: - 402 — payment required - 502 — {"error":"upstream_unavailable","service":"email"}. Payment is not settled. - 504 — {"error":"upstream_timeout","service":"email"}. Payment is not settled. - 503 — {"error":"upstream_not_configured","service":"email"} when email verification is not configured, or {"error":"payments_not_configured"} when payment is not configured ## Email basic POST https://verify-x402.okwithit9.workers.dev/verify/email/basic Price: 0.002 USD = 2000 USDC atomic units (6 decimals). Same network, payTo, and exact scheme as POST /verify/email. Contact Verify (verify-x402) basic check: $0.002 (2000 atomic units) for format plus mail server. Syntax, MX, disposable, free-email, and role account. mailbox_checked is false. It does not check the mailbox. The full real mailbox check is POST /verify/email at $0.01. Body: - email (required). A JSON object {"email":"..."}. Invalid syntax is HTTP 400 and is not billed. With no payment header, a missing email still returns HTTP 402. HTTP 200 fields use the scrubbed email fields this check can know: - email, username, domain - tier — basic - mailbox_checked — false - is_valid_syntax, is_disposable, is_free_email, is_role_account - mx_accepts_mail — true when an MX record exists, false when it does not, null when the lookup fails - upgrade.url — /verify/email - upgrade.price_usd — 0.01 - upgrade.adds — smtp_deliverable, catch_all, score This route does not call the paid mailbox check. A failed DNS lookup is still HTTP 200 with mx_accepts_mail null. ``` curl -i -X POST "https://verify-x402.okwithit9.workers.dev/verify/email/basic" \ -H "content-type: application/json" \ -d '{"email":"ada@example.com"}' ``` ## Email preview POST https://verify-x402.okwithit9.workers.dev/verify/email/preview Free. No payment header and no paid lookup. Contact Verify (verify-x402) preview is free: syntax, MX, disposable, and role account. It does not check the mailbox (mailbox_checked is false). No payment. Basic is POST /verify/email/basic at $0.002 for format plus mail server. The full real mailbox check is POST /verify/email at $0.01. The address is a JSON body field, not a query parameter. 30 requests per minute per IP. Body: - email (required). A JSON object {"email":"..."}. A missing email is HTTP 400. Invalid syntax returns HTTP 200 with valid_syntax false and does not look up DNS. GET https://verify-x402.okwithit9.workers.dev/verify/email/preview is HTTP 405 with Allow: POST. The response body and headers do not include the query string. HTTP 200 fields: - preview — true - mailbox_checked — false - valid_syntax, mx_found, is_disposable, is_role_account - upgrade.url — /verify/email - upgrade.price_usd — 0.01 - upgrade.adds — smtp_deliverable, catch_all, score mx_found is null when the DNS lookup fails. More than 30 requests per minute from one IP returns HTTP 429. ## Email batch POST https://verify-x402.okwithit9.workers.dev/verify/email/batch Price: 0.01 USD per unique, well-formed address. The HTTP 402 amount is 10000 times that count. The paid retry must send the same body. Contact Verify (verify-x402) batch: the full $0.01 mailbox check for up to 45 addresses. The HTTP 402 amount is 10000 atomic units times the number of unique, well-formed addresses. Invalid syntax is not billed. A finished check can be status unknown. If any address cannot be checked, the response is HTTP 503 with no results and payment is not settled. Body: - emails (required). An array of 1 to 45 strings. The body must be identical on the paid retry. Duplicate addresses are checked once and billed once. Invalid syntax is left out of the price. If none of the addresses are well-formed, the response is HTTP 400 and nothing is billed. Each submitted address is returned in the same order when every check finishes. Status unknown is a finished verdict. If any address cannot be checked, the response is HTTP 503 with Retry-After, the body lists no addresses, and payment is not settled. ``` curl -i "https://verify-x402.okwithit9.workers.dev/verify/email/batch" \ -H "content-type: application/json" \ -d '{"emails":["ada@example.com","grace@example.com"]}' ``` ## Phone POST https://verify-x402.okwithit9.workers.dev/verify/phone Price: 0.02 USD = 20000 USDC atomic units (6 decimals). Contact Verify (verify-x402) phone lookup: carrier line type (mobile, landline, VoIP, toll-free) and E.164 format. Detect VoIP/burner numbers in sign-up fraud checks; confirm SMS-capable mobiles. $0.02. Body: - phone (required). Phone number to look up. E.164, or a national number when country is set. Sent in the JSON body, not the URL. - country — ISO 3166-1 alpha-2; needed only when phone isn't E.164. Required when phone does not start with +. The number is normalized to E.164 before payment. With no payment header, a missing phone still returns HTTP 402. Invalid numbers return HTTP 400 with error invalid_phone and reason invalid_country or invalid_phone. A payment header with a missing or invalid number returns HTTP 400 before verification or settlement. They are not billed. HTTP 200 fields: - phone_number — E.164 - national_format, calling_country_code, country_code - valid, validation_errors - line_type.type — mobile, landline, VoIP, or toll-free - line_type.carrier_name - line_type.mobile_country_code, line_type.mobile_network_code, line_type.error_code Other responses: - 402 — payment required - 502 — {"error":"upstream_unavailable","service":"phone"}. Payment is not settled. - 503 — {"error":"upstream_not_configured","service":"phone"} when phone lookup is not configured, or {"error":"payments_not_configured"} when payment is not configured ## Payment details - Scheme: exact - Network: eip155:8453 (Base) - Asset: 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 (USDC, EIP-712 name "USD Coin", version "2") - Decimals: 6 - Facilitator: Coinbase CDP (https://api.cdp.coinbase.com/platform/v2/x402) - Pay to: read payTo from https://verify-x402.okwithit9.workers.dev/ or from the 402 challenge. Do not hard-code a recipient from this document. ## Discovery - Service index: https://verify-x402.okwithit9.workers.dev/ - x402 manifest: https://verify-x402.okwithit9.workers.dev/.well-known/x402 - x402 manifest (JSON): https://verify-x402.okwithit9.workers.dev/.well-known/x402.json - OpenAPI: https://verify-x402.okwithit9.workers.dev/openapi.json (info.x-guidance, and x-payment-info on each paid operation) - Short index: https://verify-x402.okwithit9.workers.dev/llms.txt - This guide: https://verify-x402.okwithit9.workers.dev/llms-full.txt - MCP install (stdio server, Claude, Cursor, and Codex): https://verify-x402.okwithit9.workers.dev/mcp - MCP package, no registry login: npx -y https://verify-x402.okwithit9.workers.dev/mcp/contact-verify-mcp.tgz