Purchase virtual numbers and receive verification codes with the Provynx SMS REST API. Browse routes by section, copy examples, and ship in minutes.
Base URL
https://sms.provynx.com/api/v1/sms
Auth header
Authorization: Bearer nsk_live_your_api_key
curl -X GET "https://sms.provynx.com/api/v1/sms/us/services?operator=any" \ -H "Authorization: Bearer nsk_live_••••••••"
Auth, workflow, and sandbox
Send your API key on every request via Authorization. Create keys in Settings → API Keys.
Live
nsk_live_…
Test
nsk_test_…
Up to 10 active keys per account.
Test keys use the nsk_test_ prefix and return sandbox responses. No wallet debits and no live number purchases. Verification codes are returned after two polls with code 123456.
Fixed balance: $100.00 USD
Live API purchases debit your Provynx wallet. There is no public top-up endpoint — add funds on the website, then use GET /balance before buying numbers.
Top up walletCreate a live or test API key in Settings → API Keys.
For live keys: sign in and top up your wallet on the website (Wallet → Top up). There is no public top-up API.
Use a test key (nsk_test_) to integrate against sandbox responses first — no wallet funding required.
Check balance: GET /balance (live keys reflect your wallet; test keys always return $100.00 sandbox balance).
Pick a server (1, 2, or 3) and keep it consistent for catalog + purchase in each flow.
US flow: GET /us/operators?server=1 → GET /us/services?server=1&operator=any → POST /us/numbers with the same server → GET /us/numbers/{id}/code. Cancel with DELETE /us/numbers/{id} if needed.
Global flow: GET /global/countries?server=1 → GET /global/services?server=1&country=gb&operator=any → POST /global/numbers with the same server → GET /global/numbers/{id}/code. Global numbers cannot be canceled via the API.
Alternatively, receive otp.received webhooks when a verification code arrives (live and test keys). Verify deliveries with your whsec_ signing secret.
Upstream server selection for catalog and purchases
Provynx exposes three interchangeable SMS servers. Pick one server for the whole flow — catalog browsing and purchase must use the same server value. Defaults to server 1 when omitted.
Server 1
Server 1
Default catalog for US and global numbers.
Server 2
Server 2
Alternate catalog for US and global numbers.
Server 3
Server 3
Alternate catalog for US and global numbers with broad international coverage.
?server=3·"server": 3Errors, limits, and platform notes
Missing or invalid API key
Invalid request body or product unavailable
Insufficient wallet balance
Number or pricing not found
Purchase already in progress (retry with same idempotency key)
Rate limit exceeded
Temporary service failure
SMS numbers are temporarily unavailable
Body shape: { "error": "..." }
GET …/numbers/{id}DELETE /us/numbers/{id}API_CORS_ORIGINS for browser clients