NumPool API

Programmatic access to instant virtual numbers for SMS verification (Server 1) and long-term US number rentals.

The API is REST over HTTPS. All requests and responses are JSON. The base URL is:

https://numpool.com/api/v1

You pay from your NumPool wallet balance, the same balance you use on the website. Verifications charge per code; rentals charge once for the full duration.

Get an API key

Your key authenticates every request. Keep it secret. If you are logged in to numpool.com in this browser, you can create one right here:

Checking your account…

Authentication

Send your key in the X-API-Key header on every request.

# every request needs this header
curl https://numpool.com/api/v1/balance \
  -H "X-API-Key: np_live_your_key_here"

Errors & rate limits

Errors return a non-2xx status and a JSON body with an error field. Rate limit is 60 requests per minute per key.

StatusMeaning
400Missing or invalid parameters
401Missing or invalid API key
402Insufficient wallet balance (top up at numpool.com)
404Order or rental not found
429Too many requests (max 60/min)
5xxProvider or server error — safe to retry

Service codes

Pass one of these as the service value. This is the full list of officially supported services; the live list is also available at GET /services.

CodeServiceCodeService
waWhatsApptnSnapchat
tgTelegramviViber
fbFacebookfuLazada
goGooglemoShopee
twTwitter / XdpSteam
cnFiverrbwBinance
igInstagramokOKX
lfTikTokoiOLX
amAmazonkaKuCoin
dsDiscordabBybit
tsPayPalyaYahoo
wxApplevkVK
ubUberliLinkedIn
nfNetflixmmMicrosoft

Country codes

Pass the numeric id as the country value. The most common ones are below. For the complete list of every country code, call GET /countries with no service parameter:

curl https://numpool.com/api/v1/countries \
  -H "X-API-Key: np_live_..."

// [{ "id": 0, "name": "Russia" }, { "id": 28, "name": "England" }, { "id": 187, "name": "USA" }, ...]
IDCountryIDCountry
187USA20France
28United Kingdom129Germany
188Canada143Spain
13Nigeria142Italy
17India151Thailand
6Malaysia158Australia
4Philippines25Brazil
5Indonesia1Russia
9Vietnam2Ukraine
16Egypt117Kenya

Country availability and the exact price vary per service — use GET /countries?service=... to see which countries are in stock for a given service and what they cost.

Verifications (Server 1)

The fast path: rent a number for a single SMS code, then release it. Typical flow: servicescountriesbuypoll /sms.

List services

GET/services

Returns the supported services and their short codes (use the id as the service value elsewhere).

curl https://numpool.com/api/v1/services \
  -H "X-API-Key: np_live_..."

// [{ "id": "wa", "name": "WhatsApp", "domain": "whatsapp.com" }, ...]

List countries for a service

GET/countries?service=wa
QueryDescription
serviceService id from /services (required)
curl "https://numpool.com/api/v1/countries?service=wa" \
  -H "X-API-Key: np_live_..."

// [{ "id": 187, "name": "USA", "flag": "US", "price": 0.43, "stock": 338400, "currency": "USD" }]

Buy a number

POST/buy
BodyDescription
serviceService id (required)
countryCountry id from /countries (required)
operatorOptional carrier preference
curl -X POST https://numpool.com/api/v1/buy \
  -H "X-API-Key: np_live_..." \
  -H "Content-Type: application/json" \
  -d '{ "service": "wa", "country": 187 }'

// {
//   "order_id": "a1b2c3...",
//   "number": "+1XXXXXXXXXX",
//   "cost": 0.43,
//   "status": "pending",
//   "poll_url": "https://numpool.com/api/v1/sms/a1b2c3..."
// }

Your wallet is charged on purchase. If no code arrives, cancel the order to get refunded.

Poll for the code

GET/sms/:order_id

Poll every few seconds until status is received. Statuses: waiting, received, cancelled.

curl https://numpool.com/api/v1/sms/a1b2c3 \
  -H "X-API-Key: np_live_..."

// { "order_id": "a1b2c3", "status": "received", "code": "123456", "full_sms": "Your code is 123456", "number": "+1..." }

A complete loop in JavaScript:

const H = { "X-API-Key": "np_live_...", "Content-Type": "application/json" };
const base = "https://numpool.com/api/v1";

const order = await (await fetch(base + "/buy", {
  method: "POST", headers: H,
  body: JSON.stringify({ service: "wa", country: 187 })
})).json();

let code = null;
while (!code) {
  await new Promise(r => setTimeout(r, 4000));
  const s = await (await fetch(base + "/sms/" + order.order_id, { headers: H })).json();
  if (s.status === "received") code = s.code;
}
console.log("OTP:", code);

Cancel a number

POST/cancel/:order_id

Cancels a pending order and refunds your wallet. Only works while status is pending.

curl -X POST https://numpool.com/api/v1/cancel/a1b2c3 \
  -H "X-API-Key: np_live_..."

// { "ok": true, "order_id": "a1b2c3", "refunded": 0.43 }

List your orders

GET/orders?limit=20&offset=0
curl "https://numpool.com/api/v1/orders?limit=20" \
  -H "X-API-Key: np_live_..."

US Number Rentals

Rent a US number for a fixed period and receive its full SMS inbox for the whole window. Durations:

oneDaythreeDaysevenDay fourteenDaythirtyDay

List rental services

GET/rentals/services
curl https://numpool.com/api/v1/rentals/services \
  -H "X-API-Key: np_live_..."

// [{ "service": "discord", "name": "Discord" }, ...]

Get rental prices

GET/rentals/prices?service=discord
curl "https://numpool.com/api/v1/rentals/prices?service=discord" \
  -H "X-API-Key: np_live_..."

// { "service": "discord", "durations": [{ "duration": "oneDay", "days": 1, "price": 1.20 }, ...] }

Create a rental

POST/rentals
BodyDescription
serviceService from /rentals/services (required)
durationOne of the duration keys above (required)
curl -X POST https://numpool.com/api/v1/rentals \
  -H "X-API-Key: np_live_..." \
  -H "Content-Type: application/json" \
  -d '{ "service": "discord", "duration": "sevenDay" }'

// {
//   "rental_id": "r1...",
//   "number": "+1XXXXXXXXXX",
//   "days": 7,
//   "cost": 4.50,
//   "ends_at": "2026-06-20T...",
//   "inbox_url": "https://numpool.com/api/v1/rentals/r1.../sms"
// }

The full rental price is charged once on creation. Rentals are non-refundable.

List your rentals

GET/rentals
curl https://numpool.com/api/v1/rentals \
  -H "X-API-Key: np_live_..."

Read the rental inbox

GET/rentals/:id/sms
curl https://numpool.com/api/v1/rentals/r1/sms \
  -H "X-API-Key: np_live_..."

// { "rental_id": "r1", "messages": [
//   { "from": "Discord", "body": "Your code is 123456", "code": "123456", "at": "2026-06-13T..." }
// ]}

Account balance

GET/balance
curl https://numpool.com/api/v1/balance \
  -H "X-API-Key: np_live_..."

// { "balance": 12.40, "currency": "USD" }

Need a higher rate limit or a feature that is not here yet? Reach out from your NumPool account.