Install
openclaw skills install shadow-phoneGet a disposable temp phone number and receive OTP codes to sign up on websites without using your real number. Handles x402 crypto payment automatically.
openclaw skills install shadow-phoneSHADOW_API_URL=https://extraordinary-charisma-production.up.railway.app
Use this skill when you need to sign up on a website that requires phone verification, or any time you need a disposable phone number to receive an OTP/SMS verification code.
Pick the service code for the website you are signing up on:
| Website | Code |
|---|---|
| Telegram | opt1 |
| opt2 | |
| Google / Gmail | opt7 |
| opt29 | |
| opt36 | |
| Twitter / X | opt48 |
| Microsoft | opt33 |
| Apple | opt42 |
| PayPal | opt15 |
| Amazon | opt22 |
| Tinder | opt38 |
| Shopee | opt49 |
If the exact service is not listed above, use the service name to search — the API accepts any valid SMSPVA service code.
Make a POST request to the Shadow buy endpoint. This endpoint requires x402 payment — your agent wallet will automatically pay ~$0.10 USDC on Base when the server returns HTTP 402, then retry.
POST https://extraordinary-charisma-production.up.railway.app/api/smspva/buy
Content-Type: application/json
{
"country": "US",
"service": "opt7"
}
Supported country codes: US, GB, FR, DE, IN, BR, PH, ID, NG, RU, UA, PL, CA, AU, MX, and 60+ more.
Success response (200):
{
"statusCode": 200,
"data": {
"phoneNumber": "14155552671",
"orderId": "abc123",
"orderExpireIn": 600
}
}
The full number to enter on the website is: +{countryCode}{phoneNumber} (e.g. +14155552671 for US numbers).
If you get a non-200 response, try a different country or service code and call buy again.
Use your browser to:
+14155552671)After triggering the SMS, poll every 15 seconds:
GET https://extraordinary-charisma-production.up.railway.app/api/smspva/otp/{orderId}
OTP received (200):
{
"statusCode": 200,
"data": {
"sms": { "code": "123456" },
"orderId": "abc123",
"orderExpireIn": 540
}
}
Extract data.sms.code — that is your OTP.
Not yet received (202): wait 15 seconds and retry.
Stop polling if:
orderExpireIn drops to 0 (order expired — start over)Go back to the browser tab and enter the OTP code from data.sms.code into the verification field. Submit the form to complete signup.
Number doesn't work / site rejects it:
PUT https://extraordinary-charisma-production.up.railway.app/api/smspva/refuse/{orderId}
Then go back to Step 2 and buy a new number.
Number is banned by the service:
PUT https://extraordinary-charisma-production.up.railway.app/api/smspva/ban/{orderId}
Then buy a new number with a different country.
User: "Sign me up on Telegram with a US number"
POST /api/smspva/buy with { country: "US", service: "opt1" }phoneNumber: "14155552671", orderId: "x9k2m"https://web.telegram.org → start signup+14155552671 as the phone number → click Send CodeGET /api/smspva/otp/x9k2m every 15s{ sms: { code: "84712" } }84712 in the Telegram verification box → account created ✅orderExpireIn seconds (typically 5–10 minutes)+ prefix when entering the number on websites