Phone number in.WhatsApp profile out.
Registration, business details, profile photos and carrier for any number. Agents pay per request in USDC, no account needed.
Try it on a real number.
Checking the price is free. Pay from your own wallet to run the lookup, exactly the way an agent does.
With its country code. The + is optional.
No browser wallet? Run it from a terminal:
npx wtsp exists +447400123456Enter a number, then check the price. The 402 quote shows up here first, and the answer once it is paid for.
API reference
Every endpoint takes one parameter. Each request is paid on its own, and only answers are charged.
https://wtsp.devGET/v1/existsWhether a number is on WhatsApp: a plain yes or no.0.004 USDC
Whether a number has a WhatsApp account, and nothing else: the cheapest way to clean a list before paying for profiles. /v1/profile gives the same answer plus the account's details.
Query parameter
phonestringrequired
Phone number with its country code, e.g. +14155552671. The + is optional; spaces, dashes and a leading 00 are fine.
Price
0.004USDC per request, $4.00 per 1,000
Every answer is charged, “not on WhatsApp” included; a lookup WhatsApp does not answer is free.
# Creates a wallet on first run, pays per request, prints JSON.
npx wtsp exists +14155552671+1 415 555 2671
On WhatsApp
GET/v1/profileRegistration, account type, about text and the full business profile.0.006 USDC
Whether a number is on WhatsApp and, if so: personal or business account, about text, country, linked devices and whether it runs on the Cloud API. Businesses add their public profile: name, description, categories, email, websites, address, coordinates, hours, join date and Facebook page. No photo; /v1/profile/full adds it.
Query parameter
phonestringrequired
Phone number with its country code, e.g. +14155552671. The + is optional; spaces, dashes and a leading 00 are fine.
Price
0.006USDC per request, $6.00 per 1,000
Every answer is charged, “not on WhatsApp” included; a lookup WhatsApp does not answer is free.
# Creates a wallet on first run, pays per request, prints JSON.
npx wtsp profile +14155552671Fresh Market SF
+1 415 555 2671 US
Fresh groceries, delivered daily 🍋
- 123 Market St, San Francisco, CA 94103
- freshmarket.example
- hello@freshmarket.example
- Mon 08:00-20:00, Sat 09:00-18:00, Sun by appointment
- Joined in March, 2021
- Fresh Market SF · 1,840 likes
- Sells through a WhatsApp cart
2 devices including the phone
GET/v1/profile/fullEverything in /v1/profile plus a permanent profile-photo URL.0.01 USDC
Everything /v1/profile returns, plus the profile photo as a permanent URL and a content hash: an unchanged hash means an unchanged photo. The URL is null when the account has no photo or hides it.
Query parameter
phonestringrequired
Phone number with its country code, e.g. +14155552671. The + is optional; spaces, dashes and a leading 00 are fine.
Price
0.01USDC per request, $10.00 per 1,000
Every answer is charged, “not on WhatsApp” included; a lookup WhatsApp does not answer is free.
# Creates a wallet on first run, pays per request, prints JSON.
npx wtsp profile +14155552671 --photoFresh Market SF
+1 415 555 2671 US
Fresh groceries, delivered daily 🍋
- 123 Market St, San Francisco, CA 94103
- freshmarket.example
- hello@freshmarket.example
- Mon 08:00-20:00, Sat 09:00-18:00, Sun by appointment
- Joined in March, 2021
- Fresh Market SF · 1,840 likes
- Sells through a WhatsApp cart
2 devices including the phone
GET/v1/carrierCarrier, line type, country, region and time zones of any number.0.004 USDC
The carrier and line type of any number, from the numbering plan: the network its range was issued to, mobile, fixed line or VoIP, plus country, region, time zones and national and international formats. Works whether or not the number is on WhatsApp. Ported numbers report their original carrier.
Query parameter
phonestringrequired
Phone number with its country code, e.g. +14155552671. The + is optional; spaces, dashes and a leading 00 are fine.
Price
0.004USDC per request, $4.00 per 1,000
Only charged when a carrier is on record; numbers without one (the US and Canada among them) get a free 404.
# Creates a wallet on first run, pays per request, prints JSON.
npx wtsp carrier +447400123456United Kingdom +44
Three
+44 7400 123456
What you pay for
A payment is only settled when you get an answer. Everything else costs nothing, and errors are JSON: {"error": {"code", "message"}}.
200 Charged
The answer, “not on WhatsApp” included.
400 Free
Malformed number, rejected before any payment is asked for.
402 Free
Payment required, or the payment sent was invalid.
404 Free
Carrier lookup only: no carrier on record for the number.
503 Free
WhatsApp did not answer. The payment is cancelled, never settled.
Pay for answers, not attempts.
A flat price per answered request, paid in USDC as you go. No plan, no minimum, nothing to cancel.
Never charged
- Malformed numbers, rejected before you pay
- Lookups WhatsApp did not answer
- Carrier lookups with no carrier on record
- Checking the price: an unpaid request just returns it
| Endpoint | Per request | Per 1,000 | Per month |
|---|---|---|---|
WhatsApp check/v1/exists | $0.004 | $4.00 | $4.00 |
WhatsApp profile/v1/profile | $0.006 | $6.00 | $6.00 |
WhatsApp profile + photo/v1/profile/full | $0.01 | $10.00 | $10.00 |
Carrier lookup/v1/carrier | $0.004 | $4.00 | $4.00 |
Rather use an API key?
Prepay any amount of USDC once, then call the same endpoints with a bearer key. Same prices, nothing to sign per request, and failed lookups go back on the balance.
curl "https://wtsp.dev/v1/profile?phone=14155552671" \
-H "Authorization: Bearer $WTSP_API_KEY"Every response says what is left in the wtsp-credits-remaining header. The CLI uses the key when WTSP_API_KEY is set.
Leave it empty to get a new key.
One line sets up any agent.
Paste it into Claude Code, Codex, Cursor or any agent that can run a shell command. The agent installs the wtsp CLI, creates its wallet and learns the endpoints.
Set up https://wtsp.dev/skill.mdnpx wtsp start- Creates a wallet and prints its address and what to send it.
npx wtsp mode mpp- Pays on Tempo with MPP instead of USDC on Base.
npx wtsp balance- What the wallet holds to pay with.
npx wtsp exists +14155552671- Whether the number is on WhatsApp, nothing more.
npx wtsp profile +14155552671- WhatsApp profile. Add --photo for the profile photo too.
npx wtsp carrier +447400123456- Carrier, line type, country and time zones.
Already have an x402 wallet such as AgentCash? It finds every endpoint, with prices, at /openapi.json.
Questions
About paying, the data and what it costs when things go wrong.
Do I need an account or an API key?
No. Every request can carry its own payment, so there is nothing to sign up for: your agent needs a wallet holding USDC on Base, and npx wtsp start creates one. If you would rather not sign each request, buy prepaid credit for an API key instead.
How does paying work?
wtsp.dev speaks x402, an open protocol built on HTTP 402 Payment Required. The first request returns a price quote. Your agent signs a USDC authorization for exactly that amount and repeats the request; the answer comes back and the payment settles on Base. Signing costs no gas. Agents that hold stablecoins on Tempo can pay the same quote with MPP instead.
What if a lookup fails?
You are not charged. A payment only settles once the answer is ready. Malformed numbers are turned away before any payment is asked for, and a lookup WhatsApp does not answer returns a 503 with the payment cancelled.
Why is “not on WhatsApp” charged?
Because it is an answer: WhatsApp was asked and said no. When you are cleaning a list, a no is worth as much as a yes.
What does a personal account reveal?
Whether the number is on WhatsApp, its about text and profile photo unless privacy settings hide them, the account's country and its linked devices. Personal accounts publish no name. Business accounts add their whole public profile.
Why do some numbers have no carrier?
Carrier data comes from the numbering plan. Some countries publish none, the US and Canada among them, and a ported number keeps its original carrier. A number with no carrier on record gets a free 404.
Are there rate limits?
No fixed quotas. Lookups run through a pool of WhatsApp sessions, so a heavy burst can get a 503 back, which costs nothing. Retry after a moment.