---
title: "Pay-per-call SMS verification via x402 (no account needed)"
method: POST
path: "/api/v1/x402/sms-verify"
tags: ["Agent Payments (x402)"]
---

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

`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`

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.

## Request body

- object
  - `service` string, required
  - `country` string, required: 2-letter country code
  - `max_price_usdc` number: 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.

## Response `200`

Payment settled — verification code returned

- object
  - `phone_number` string
  - `code` string
  - `sms_content` string
  - `service` string
  - `country` string
  - `x402_settlement` object
    - `tx_hash` string
    - `amount_paid_usdc` number
    - `network` string
    - `token` string

## Other responses

- `400`: Missing required parameters
- `402`: Payment Required

---

[API](https://skmtc.dev/virtualsms/apis/virtualsms-account-verification-platform-for-developers-and.md) · [All operations](https://skmtc.dev/virtualsms/apis/virtualsms-account-verification-platform-for-developers-and/llms.txt) · [OpenAPI document](https://skmtc.dev/virtualsms/apis/virtualsms-account-verification-platform-for-developers-and/revisions/be89af981be1?raw)
