Skip to main content
Proxies are billed by the gigabyte and are reachable with a normal API key — the same x-api-key you use for verifications, including one minted through x402. There is no separate product key and no separate signup. Base path: https://virtualsms.io/api/v1/proxies
Two endpoints are public and need no key: GET /api/v1/proxies/catalog and GET /api/v1/proxies/locations. Everything else requires authentication.

Catalog

public
Pool types and the countries each one serves.
Pool ids are residential, mobile and datacenter, always returned in that order. Cached for 10 minutes.

Locations

public
Cities, states, ASNs or ZIP codes available inside one country for one pool type.
Any missing or invalid parameter returns 400. Cached for 6 hours.

Buy a proxy

authenticated
Adds gigabytes to a proxy and returns the credentials to use it.
proxy_host + proxy_port is the HTTP endpoint; proxy_port_socks is the SOCKS5 endpoint. Use proxy_login / proxy_password as the proxy credentials.

Idempotency

Send X-Idempotency-Key: <your-key> (it takes precedence over a body idempotency_key). If you send neither, one is derived from your user id, pool type, gigabytes and country — so an accidental duplicate of the same request will not double-charge you.

Errors

List your proxies

authenticated
Returns a JSON array (not an object) of your proxies:

Per-proxy operations

All five take the proxy id in the path and require authentication. A proxy you do not own returns 404.

Usage

Usage history

Only 7d and 30d are accepted; anything else returns 400. Cached for 10 minutes.

Rotate

Optional body {"port": 823} — omit it, or send 0, for the default port.
Rotation has a 30-second cooldown per proxy and port. Calling it sooner returns 429. If the upstream rotation itself fails you get 502 and the cooldown is released, so you can retry immediately.

Targeting

country_code is required. premium_2x: true means the city/ASN targeting you asked for is billed at double rate on this pool.

Test

This endpoint returns HTTP 200 even when the dial fails — check the ok field, not the status code. A failure looks like { "ok": false, "error": "<reason>" }. There is a 20-second cooldown per proxy; calling it sooner returns 429.

Availability

If the proxy product is disabled for the deployment you are calling, every endpoint above except /locations returns:
with status 503.