Developer API
Fetch virtual phone numbers and read incoming verification SMS codes programmatically using standard HTTP JSON requests.
Base API URL
All responses are returned as standard JSON with HTTP status codes.
API Authentication
Generate and manage your secret API key inside your account profile tab.
Available Endpoints
{
"success": true,
"countries": [
{
"id": 1,
"name": "United States",
"iso_code": "US",
"phone_prefix": "+1",
"active_numbers": 3
}
]
}
?country=US)
{
"success": true,
"numbers": [
{
"id": 1,
"number": "+12025550143",
"formatted_number": "+1 (202) 555-0143",
"carrier": "T-Mobile US",
"country": "United States",
"status": "active"
}
]
}
{
"success": true,
"messages": [
{
"id": 104,
"sender": "WhatsApp",
"masked_sender": "Wh••••pp",
"raw_content": "Your WhatsApp code is: 829-410. Don't share it.",
"extracted_otp": "829410",
"received_at": "2026-10-05T02:00:00Z"
}
]
}
{
"success": true,
"user": {
"id": 1,
"name": "Alex Rivera",
"email": "alex@company.io",
"wallet_balance": 145.50,
"active_rentals_count": 2
}
}
{
"success": true,
"data": [
{
"id": 12,
"number": "+12025550199",
"formatted_number": "+1 (202) 555-0199",
"country": "United States",
"status": "active",
"duration": "monthly",
"expires_at": "2026-11-05T00:00:00Z"
}
]
}
Mobile App API
Used by the Copy SMS Android / iOS appSign in with email + password to receive a personal bearer token, then call the authenticated endpoints with Authorization: Bearer <token>. Each device gets its own token; logging out revokes only that device.
{ "success": true, "order_minutes": 15, "services": [ { "slug": "whatsapp", "name": "WhatsApp", "qty": 5000, "from_usd": 0.6, "from_formatted": "$0.60" } ] }
{ "success": true, "countries": [ { "slug": "nigeria", "name": "Nigeria", "flag": "🇳🇬", "count": 50, "rate": 95, "price_usd": 0.7, "price_formatted": "$0.70" } ] }
// body: { "service": "whatsapp", "country": "nigeria", "price": 0.70 }
{ "success": true, "activation": { "id": 20, "status": "pending", "formatted_phone": "+2346783…", "seconds_left": 900 }, "wallet_balance": 4.3 }
{ "success": true, "activation": { "id": 20, "status": "finished", "sms_code": "332328", "sms_text": "Your WhatsApp code is 332-328", "refunded": false } }
{ "success": true, "activation": { "id": 20, "status": "cancelled", "refunded": true }, "wallet_balance": 5.0 }
{ "success": true, "data": { "data": [ { "id": 20, "service_name": "WhatsApp", "country_name": "Nigeria", "sms_code": "332328", "status": "finished" } ] } }
{
"success": true,
"app": { "name": "Copy SMS", "tagline": "Receive SMS online — copy the code for any app" },
"currency": { "base": "USD", "display_code": "XAF", "xaf_rate": 600 },
"wallet": { "min_recharge_usd": 1 },
"gateways": [ { "key": "fapshi", "name": "Mobile Money (MTN MoMo / Orange Money)", "direct_pay": true } ]
}
// body: { "name", "email", "password", "password_confirmation", "terms": true, "device_name" }
{ "success": true, "token": "csms_live_…", "user": { "id": 42, "wallet_balance": 0 } }
// body: { "email", "password", "device_name" }
{ "success": true, "token": "csms_live_…", "user": { "id": 42, "wallet_balance_formatted": "FCFA 3 000" } }
{ "success": true }
{ "success": true, "user": { "id": 42, "name": "…", "wallet_balance": 5.0, "unread_notifications": 1 } }
// body: { "amount": 5, "gateway": "fapshi", "method": "direct", "phone": "6XXXXXXXX", "medium": "mobile money" }
{ "success": true, "type": "direct", "reference": "DEP-AB12CD34EF56", "amount_usd": 5, "amount_xaf": 3000 }
// or, for method=checkout:
{ "success": true, "type": "redirect", "reference": "DEP-…", "url": "https://checkout.fapshi.com/payment/…" }
{ "success": true, "status": "completed", "wallet_balance": 5.0, "wallet_balance_formatted": "$5.00" }
{ "success": true, "data": { "data": [ { "reference": "DEP-…", "type": "deposit", "amount": 5, "gateway": "fapshi", "status": "completed" } ] } }
{ "success": true, "data": { "data": [ { "id": 7, "formatted_number": "+1 (415) 555-2671", "prices": { "daily": 1.5, "weekly": 6, "monthly": 15 } } ] } }
// body: { "platform": "android", "push_token": "…", "device_name": "Pixel 8" }
{ "success": true }
Admin API
Requires Admin Token
Programmatic control-plane access for server owners: platform stats, user management, number pool,
rentals, transactions, notifications and read-only settings. Admin tokens are issued from
Admin → API Tokens and use the same Authorization: Bearer <TOKEN>
header. Regular user/reseller tokens are rejected on these endpoints with 403.
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/v1/admin/stats | Users, rentals, revenue and today's message counts |
| GET | /api/v1/admin/users | Paginated users — filters: ?status=active|suspended, ?search= |
| GET | /api/v1/admin/users/{id} | Single user detail |
| PATCH | /api/v1/admin/users/{id} | Update name / email / status (role never changeable via API) |
| GET | /api/v1/admin/numbers | Paginated number pool — filters: ?status=, ?country=ISO2 |
| POST | /api/v1/admin/numbers | Register a number (same validation as admin panel) |
| PATCH | /api/v1/admin/numbers/{id} | Update a pooled number |
| DELETE | /api/v1/admin/numbers/{id} | Delete a number — refused (409) while an active rental holds it |
| GET | /api/v1/admin/rentals | Paginated rentals — filter: ?status=active|expired|cancelled |
| POST | /api/v1/admin/rentals/{id}/cancel | Cancel a rental — optional {"refund": true} credits the wallet |
| GET | /api/v1/admin/transactions | Paginated wallet ledger — filters: ?status=, ?type= |
| POST | /api/v1/admin/notifications | In-app notification — target "all", or "user" + user_id/email |
| GET | /api/v1/admin/settings | Read-only operational settings (secrets never exposed) |
Example — suspend a user
curl -X PATCH "https://copysms.com/api/v1/admin/users/42" \
-H "Authorization: Bearer YOUR_ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{"status": "suspended"}'
{
"success": true,
"message": "User updated successfully.",
"user": { "id": 42, "status": "suspended", "..." : "..." }
}
All admin endpoints are rate-limited to 60 requests/minute. Validation failures return 422 with messages; error responses follow the {"success": false, "error": ..., "message": ...} envelope.
Private Verification Pass
Need 100% confidential SMS verification?
Rent a dedicated private SIM line for as little as $3.50. Keep your private WhatsApp, banking, and crypto OTP codes completely confidential away from public eyes.