Agent Payments (x402)

Pay-per-call SMS verification via x402 (no account needed)

LIVE. Call without payment to receive the HTTP 402 payment manifest (accepted networks/assets/prices); retry with a valid X-PAYMENT header to settle inline and receive the OTP in the same response.

Canonical discovery manifest (always up to date on accepted networks + status): https://virtualsms.io/.well-known/x402.json

Accepted payment rails at time of writing: Base USDC, Solana USDC, Solana USDT, BNB Chain USDC, BNB Chain USDT.

Pricing: there is no flat per-call rate. The amount in the 402 challenge is the ordinary catalogue price for the requested service + country — the same price the storefront and a topped-up balance pay. The optional max_price_usdc field is a ceiling ($5 maximum): it refuses a call priced above your limit, it never sets the price.

Best for a single one-off verification. An agent making many calls should use /api/v1/x402/topup instead — deposit once ($2.50 minimum), get a reusable balance and an API key, then spend it through the standard customer API at the same prices.

Note: a standalone /api/v1/x402/facilitator endpoint is NOT deployed (roadmap only) — do not call it, it 404s. Settlement for sms-verify and topup both happen inline in their own handlers; there is no separate facilitator call.

post/api/v1/x402/sms-verify

Request

  • Base URL: https://virtualsms.io
  • URL: https://virtualsms.io/api/v1/x402/sms-verify
  • Auth: one of:
    • API key in header X-API-Key
    • API key in query parameter api_key

Request body

servicestring required
countrystring required

2-letter country code

max_price_usdcnumber

Optional price ceiling, max 5.00. Caps what you will pay; it does not set the price — the catalogue price for the service + country does. A call priced above this limit is refused.

Example request

{
  "service": "telegram",
  "country": "US",
  "max_price_usdc": 5
}

Response

Payment settled — verification code returned

phone_numberstring
codestring
sms_contentstring
servicestring
countrystring

Changes

No recorded changes to this operation across all 1 revision of this API.