± API documentation
■ Numbers, messages and recent, directly from your app.
Start with one request
♫ Create a API key in your dashboard, get a number and check for messages cada 20 segondes. Paging is crededed when un SMS with a code arrive; reading it reverse non affect your balance.
https://smscash.org/api/v1https://smscash.org/stubs/handler_api.phpcurl -X POST 'https://smscash.org/api/v1/activations' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: request-unique-001' \
-d '{"service":"go","country":86}'Alternative compatible interface address: /handler_api.php. Eventual REST integrations continua a work.
अनुरोध निर्माण उपकरण
Idempotency-Key: UUID · POST · 8–128
स्वचालित छनोट: पछिल्लो घण्टामा, त्यसपछि २४ घण्टामा सबैभन्दा धेरै कोड। नम्बर नभए अर्को अपरेटर।
curl --max-time 15 --fail-with-body -X POST 'https://smscash.org/api/v1/activations' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: request-unique-001' \
--data '{"service":"go","country":86}'package main
import (
"bytes"
"fmt"
"io"
"net/http"
"os"
"time"
)
func main() {
payload := []byte("{\"service\":\"go\",\"country\":86}")
req, err := http.NewRequest("POST", "https://smscash.org/api/v1/activations", bytes.NewReader(payload))
if err != nil { panic(err) }
req.Header.Set("Authorization", "Bearer " + os.Getenv("SMSCASH_API_KEY"))
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Idempotency-Key", "request-unique-001")
client := &http.Client{Timeout: 15 * time.Second, CheckRedirect: func(_ *http.Request, _ []*http.Request) error { return http.ErrUseLastResponse }}
res, err := client.Do(req)
if err != nil { panic(err) } // Keep the same operation key after a network error.
defer res.Body.Close()
body, err := io.ReadAll(res.Body)
if err != nil { panic(err) }
if res.StatusCode >= 300 {
fmt.Fprintf(os.Stderr, "HTTP %d, request_id=%s\n%s\n", res.StatusCode, res.Header.Get("X-Request-ID"), body)
os.Exit(1)
}
fmt.Println(string(body))
}// Node.js 18+: set SMSCASH_API_KEY in your environment.
const response = await fetch("https://smscash.org/api/v1/activations", {
method: "POST",
headers: {
Authorization: 'Bearer ' + process.env.SMSCASH_API_KEY,
'Content-Type': 'application/json',
'Idempotency-Key': "request-unique-001",
},
body: JSON.stringify({
"service": "go",
"country": 86
}),
signal: AbortSignal.timeout(15000),
redirect: 'error',
});
const result = await response.json();
if (!response.ok) {
const error = result.error || {};
console.error(response.status, error.code, error.hint, error.request_id);
throw new Error(error.message || 'API error');
}
console.log(result);
// SMS codes are strings: keep leading zeros. Never retry writes automatically.import json
import os
import urllib.error
import urllib.request
class NoRedirect(urllib.request.HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
headers = {
'Authorization': 'Bearer ' + os.environ['SMSCASH_API_KEY'],
'Content-Type': 'application/json',
'Idempotency-Key': "request-unique-001",
}
request = urllib.request.Request(
"https://smscash.org/api/v1/activations",
headers=headers,
data="{\"service\":\"go\",\"country\":86}".encode('utf-8'),
method="POST",
)
try:
with urllib.request.build_opener(NoRedirect).open(request, timeout=15) as response:
result = json.load(response)
print(result)
except urllib.error.HTTPError as error:
details = json.load(error).get('error', {})
print(error.code, details.get('code'), details.get('hint'), details.get('request_id'))
raise
# No automatic retries; SMS codes remain strings.कुञ्जी सुरक्षित गरिँदैन। यो जाँचले नम्बर उपलब्ध गराउँदैन।
■ REST for nove integrationes
सेवाहरू र देशहरू
± Choice a service and a land. Payment per SMS depende on the pay.
GET /api/v1/catalog?service=go&country=86&page=1&page_size=100
Authorization: Bearer YOUR_API_KEY{
"rows": [
{
"offer_id": 42,
"service": "go",
"service_name": "Google",
"country_id": 86,
"country_name": "Italy",
"provider_id": 1,
"operator": 1,
"provider_name": "Operator 1",
"reward": "0.00300000",
"currency": "USD",
"accounting_precision": 8,
"earnings_hold_days": 45
}
],
"page": 1,
"page_size": 100,
"total": 1,
"pages": 1,
"has_more": false,
"accounting_precision": 8
}service · country · operator · q · page · page_size (1–100)
±Get numer
POST /api/v1/activations
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
Idempotency-Key: request-unique-001
{
"service": "go",
"country": 86
}स्वचालित छनोट: पछिल्लो घण्टामा, त्यसपछि २४ घण्टामा सबैभन्दा धेरै कोड। नम्बर नभए अर्को अपरेटर।
201: new session · 200: replay of the same operation
service + country OR offer_id · duration_minutes: 20
ref: software owner code (optional)
operator: public ID (e.g. 1 for Operator 1), optional · any/0: automatic
country: integer · service: string · SMS code: stringʹNumber is valide per 20 minutes. SMS is controled cada 20 sekundes. You canceled imediately.
धेरै नम्बर जाँच्नुहोस्
GET /api/v1/activations/batch?ids=42,43
Authorization: Bearer YOUR_API_KEY{
"rows": [
{
"id": 42,
"found": true,
"phone": "12025550123",
"status": "received",
"service": "go",
"country_id": 86,
"provider_id": 1,
"operator": 1,
"expires_at": "2026-10-10T12:15:00Z",
"sms_count": 1,
"code": "001234",
"last_sms": {
"id": 101,
"code": "001234",
"sender": "Service",
"text": "Code: 001234",
"received_at": "2026-10-10T12:01:00Z"
}
},
{
"id": 43,
"found": false,
"error": {
"code": "NO_ACTIVATION",
"message": "Session not found."
}
}
],
"as_of": "2026-10-10T12:01:00Z",
"poll_interval_seconds": 20
}ids: 1–100 positive session IDs, separated by commas
Input order preserved · duplicates removed
Foreign, unavailable or out-of-scope IDs: found=false
Read only · no supplier requests · last_sms is the latest messageमौज्दात · रोकिएको रकम
GET /api/v1/balance
Authorization: Bearer YOUR_API_KEY{
"currency": "USD",
"accounting_precision": 8,
"balance": "12.00000000",
"held_balance": "34.50000001",
"balance_minor": "1200000000",
"held_minor": "3450000001",
"as_of": "2026-10-12T20:00:00Z",
"next_release_at": "2026-11-26T20:00:00Z"
}balance — उपलब्ध; held_balance — रोकिएको रकम. USD · 8
रोक्का अवधि सकिएको रकम मात्र निकाल्न सकिन्छ।
तयार क्लाइन्टहरू
import {SmScash, SmScashError} from './smscash.mjs';
import {randomUUID} from 'node:crypto';
const api = new SmScash(process.env.SMSCASH_API_KEY);
const catalog = await api.catalog({service: 'go', country: 86});
console.log(catalog.rows);
// Save this key before sending; keep it for retries of this operation.
const requestKey = randomUUID();
const session = await api.createNumber({service: 'go', country: 86}, requestKey);
// After 20 seconds:
const messages = await api.sms(session.id, {afterId: 0});
console.log(messages.sms);
const statuses = await api.batch([session.id]);
const held = await api.holdBalance();
console.log(held); // Exact USD stringimport os
import uuid
from smscash import SmScash, SmScashError
api = SmScash(os.environ['SMSCASH_API_KEY'])
catalog = api.catalog(service='go', country=86)
print(catalog['rows'])
# Save this key before sending; keep it for retries of this operation.
request_key = str(uuid.uuid4())
session = api.create_number({'service': 'go', 'country': 86}, request_key)
# After 20 seconds:
messages = api.sms(session['id'], after_id=0)
print(messages['sms'])
statuses = api.batch([session['id']])
held = api.hold_balance()
print(held) # Exact USD stringme() · balance() · holdBalance()/hold_balance() · catalog() · activation() · sms() · batch()
createNumber(parameters, requestKey) / create_number(parameters, request_key)
setStatus(id, "cancel") / set_status(id, "cancel")
setStatus(id, "retry", requestKey) / set_status(id, "retry", request_key)
Timeout: 15 s · no dependencies · no automatic retries
Error: code · status · hint · requestId/request_id · retryable
ALLOCATION_UNCERTAIN: contact support with request_id; never retry automatically.SMS-Activate / HeroSMS
https://smscash.org/sms-activate/stubs/handler_api.phphttps://smscash.org/hero-sms/stubs/handler_api.phpप्रयोगकर्ताको व्यक्तिगत API कुञ्जी।
± Choice a service and a land. Payment per SMS depende on the pay.
| ± kod | ʹDescription |
|---|---|
getNumber / getNumberV2 | ±Get numer |
getStatus / getStatusV2 | ±Get the last code |
setStatus / finishActivation / cancelActivation | Management session |
getPrices / getNumbersStatus | • Kontrola disponibility |
getRewards (SMScash) | ♫ Recompense for SMS |
getServicesList / getServices | सेवाहरू |
getCountries / getOperators | सेवाहरू र देशहरू |
getActiveActivations | Sessions |
getBalance | प्रयोगकर्ताको मौज्दात |
getHoldBalance (SMScash) | रोकिएको रकम |
cost = 0 USD · activationCost = 0 USDreward — ♫ Recompense for SMS
curl --get 'https://smscash.org/hero-sms/stubs/handler_api.php' \
--data-urlencode 'api_key=YOUR_API_KEY' \
--data-urlencode 'action=getNumberV2' \
--data-urlencode 'service=go' \
--data-urlencode 'country=86' \
-H 'Idempotency-Key: request-unique-001'{
"activationId": "42",
"phoneNumber": "393331234567",
"activationCost": 0,
"currency": 840,
"countryCode": 86,
"canGetAnotherSms": true,
"activationTime": "2026-10-11T12:00:00Z",
"activationEndTime": "2026-10-11T12:15:00Z",
"reward": "0.00300000"
}GET or POST application/x-www-form-urlencoded
api_key · action · service · country · ref (optional)
setStatus: 1 → ACCESS_READY · 3 → ACCESS_RETRY_GET
6 → ACCESS_ACTIVATION · 8 → ACCESS_CANCEL
getStatus: STATUS_WAIT_CODE · STATUS_OK:001234 · STATUS_CANCEL
getStatusV2: {"verificationType":1,"sms":null,"call":null}
getServicesList: {"status":"success","services":[{"code":"go","name":"Google"}]}
getCountries: {"86":{"id":86,"eng":"Italy","visible":1,"retry":1,"rent":0}}
getPrices: {"86":{"go":{"cost":0,"count":12,"reward":"0.00300000","currency":"USD"}}}
getRewards: {"59":{"vi":{"1":"0.01000000"}}}
getRewards filters: country · service · operator (optional); any/0: all permitted providers
getActiveActivations: start=0 · limit=1–100 · activeActivations / data
Business/key errors: HTTP 200 + plain text · server errors: HTTP 500
Availability: actual supplier pool, shared cache up to 20 s; not a reservation
No automatic retries after a transport error or ALLOCATION_UNCERTAIN.
Keep the original Idempotency-Key and parameters.
Unsupported: rent · calls · forwarding · multiple services per number · prolong
Unsupported options return BAD_REQUEST; unsupported actions return BAD_ACTION.
SMScash keys and country/service codes; configure this base URL in your software.ʹNumber is valide per 20 minutes. SMS is controled cada 20 sekundes. You canceled imediately.
• autentification and retries
REST: ± header Authorization: Bearer YOUR_API_KEY. ♫ Compatible Interface: ʹparameters api_key und action± . Use HTTPS.
για management API keys, enter your account.
API request frequency and the number of telefon numbers is unlimited. No quotes day or hourly.
ʹNumber is valide per 20 minutes. SMS is controled cada 20 sekundes. You canceled imediately.
In REST, a unic Idempotency-Key es necessariable for number allocation, repetition, reestry and pagout requests. It is optional, but recommended in handler_api.php. Reuse the key when reasing a network request; use a new key for a New operation.
± API key scope
♫ You can restricte a key for specific services, pays and providers. Lists vacces permite alle options disponibles.
{
"label": "♫ My software",
"policy": {
"services": [
"go"
],
"countries": [
86
],
"providers": [
1
]
}
}PATCH /api/v1/keys/{id} ± modified the name and policy completly. Secret is show only time create.
10% total. 5% + 5% ♫ avec software-code.
± quando emite un number, please provide ref ± owner of the software. La solicitud is autorised by the प्रयोगकर्ता's key. The code is in the section "Referrals" and in GET /api/v1/referrals → software_ref.
| Request | ± Inviter | akana software |
|---|---|---|
| akana san ref | 10% | — |
| ♫ with ref | 5% | 5% |
| With ref, no refererer | — | 5% |
La platform paga il bonus sin reducir rentail de la प्रयोगकर्ता. Proprieter de software and the referer can be a self person. प्रयोगकर्ताहरू can't use your proprie code.
♫ Termens figuras quando session is create; reading SMS und retry do not change them. Pass ref ====*** *** (**)**=* * **(*) **) ==*== USD 0.003 ≤ gives USD 0.00015 cada uno to the softwareowner and referer. USD 0.00030.
± API commands
± 11 Metodes XVBC-style plus your SMScash balance.
GETgetNumber±Get numer+
ังles create a session and reserve un number disponible for the प्रयोगकर्ता. The recompense rate and reference remitents is fixed at allocation; recompens is crediteded when un SMS with a code arrive.
ʹparameters
| ʹparameter | ± Type | ʹDescription |
|---|---|---|
api_key* | string | प्रयोगकर्ताको व्यक्तिगत API कुञ्जी। |
service* | string | ± Disponible service codes. The response is limited to the area of the API key. |
country* | integer | Take ID from getCountries. |
operator | string | Take ID from operators/getOperators (API). operator=1 · any/0 |
session_duration | integer | La session dura 20 minutes. Pass 20 or outlook this parameter. |
with_operator | integer | 1 ले जवाफमा अपरेटर ID थप्छ; 0 वा प्यारामिटर नदिँदा तीन खण्ड फर्काउँछ। |
ref | string | ♫ public code of the softwareowner: 5% for he's and 5% for the inviter. ref - 10% ל invitar. |
* Necessari parameter. In all requests also pass action=getNumber.
Exemply request
curl 'https://smscash.org/stubs/handler_api.php?action=getNumber&api_key=YOUR_API_KEY&service=go&country=86&with_operator=1' \
-H 'Idempotency-Key: request-unique-001'package main
import (
"fmt"
"io"
"net/http"
"time"
)
func main() {
req, err := http.NewRequest("GET", "https://smscash.org/stubs/handler_api.php?action=getNumber&api_key=YOUR_API_KEY&service=go&country=86&with_operator=1", nil)
if err != nil { panic(err) }
req.Header.Set("Idempotency-Key", "request-unique-001")
client := &http.Client{Timeout: 15 * time.Second}
resp, err := client.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil { panic(err) }
fmt.Println(resp.StatusCode, string(body))
}const response = await fetch("https://smscash.org/stubs/handler_api.php?action=getNumber&api_key=YOUR_API_KEY&service=go&country=86&with_operator=1", {
headers: {"Idempotency-Key": "request-unique-001"}
});
const result = await response.text();
console.log(response.status, result);import requests
response = requests.get(
"https://smscash.org/stubs/handler_api.php?action=getNumber&api_key=YOUR_API_KEY&service=go&country=86&with_operator=1",
headers={"Idempotency-Key": "request-unique-001"},
timeout=15,
)
print(response.status_code, response.text)akana responsi
ACCESS_NUMBER:42:380670000000:1EMPTY_POOL- स्वचालित छनोट: पछिल्लो घण्टामा, त्यसपछि २४ घण्टामा सबैभन्दा धेरै कोड। नम्बर नभए अर्को अपरेटर।
- ♫ Pass Idempotency-Keyʹ: the same request with theself key return the previous session. Change the parameters calls IDEMPOTENCY_CONFLICT.
- ± a numeric pays with a pool give EMPTY_POOL; the error format of the pays is BAD_COUNTRY.
- ± key of a deleted session continua usated: replaying allocation with that key return SESION_CLOSEd and do not emit un ather number.
- ë resultat de allocation is not confirmed. Automatic reasing is disabled for evit asignation a second number.
GETgetNumbersStatus• Kontrola disponibility+
ë disponible telefon numbers per service and land.
ʹparameters
| ʹparameter | ± Type | ʹDescription |
|---|---|---|
api_key* | string | प्रयोगकर्ताको व्यक्तिगत API कुञ्जी। |
country* | integer | Take ID from getCountries. |
* Necessari parameter. In all requests also pass action=getNumbersStatus.
Exemply request
curl 'https://smscash.org/stubs/handler_api.php?action=getNumbersStatus&api_key=YOUR_API_KEY&country=86'package main
import (
"fmt"
"io"
"net/http"
"time"
)
func main() {
req, err := http.NewRequest("GET", "https://smscash.org/stubs/handler_api.php?action=getNumbersStatus&api_key=YOUR_API_KEY&country=86", nil)
if err != nil { panic(err) }
client := &http.Client{Timeout: 15 * time.Second}
resp, err := client.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil { panic(err) }
fmt.Println(resp.StatusCode, string(body))
}const response = await fetch("https://smscash.org/stubs/handler_api.php?action=getNumbersStatus&api_key=YOUR_API_KEY&country=86");
const result = await response.json();
console.log(response.status, result);import requests
response = requests.get(
"https://smscash.org/stubs/handler_api.php?action=getNumbersStatus&api_key=YOUR_API_KEY&country=86",
timeout=15,
)
print(response.status_code, response.json())akana responsi
{
"go_0": 0
}- Le suffix _0 significa a choice sin specifique operator.
- Disponibility reference to the general pool of the founder. The selected canal is controled, want a number is allocation.
GETgetStatus±Get the last code+
♫ Easy request for session status and last SMS code. Leading zeros in the code is conserved.
ʹparameters
| ʹparameter | ± Type | ʹDescription |
|---|---|---|
api_key* | string | प्रयोगकर्ताको व्यक्तिगत API कुञ्जी। |
id* | integer | ♫ ID of your session, recebited when the number was emited. |
* Necessari parameter. In all requests also pass action=getStatus.
Exemply request
curl 'https://smscash.org/stubs/handler_api.php?action=getStatus&api_key=YOUR_API_KEY&id=42'package main
import (
"fmt"
"io"
"net/http"
"time"
)
func main() {
req, err := http.NewRequest("GET", "https://smscash.org/stubs/handler_api.php?action=getStatus&api_key=YOUR_API_KEY&id=42", nil)
if err != nil { panic(err) }
client := &http.Client{Timeout: 15 * time.Second}
resp, err := client.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil { panic(err) }
fmt.Println(resp.StatusCode, string(body))
}const response = await fetch("https://smscash.org/stubs/handler_api.php?action=getStatus&api_key=YOUR_API_KEY&id=42");
const result = await response.text();
console.log(response.status, result);import requests
response = requests.get(
"https://smscash.org/stubs/handler_api.php?action=getStatus&api_key=YOUR_API_KEY&id=42",
timeout=15,
)
print(response.status_code, response.text)akana responsi
STATUS_WAIT_CODESTATUS_OK:001234STATUS_CANCELNO_ACTIVATION- ± poll cada 20 seconds. Reading a message reading do not create ather page.
- ■ post retry the anst code is not return: getStatus wants for the next SMS.
- ♫ After un number sin SMS es deleted, getStatus and getSms return STATUS_CANCEL; getSmsFull returne the close status, un phone vac and a vap sms list. REST /activations/{id} and /sms retorn 404 NO_ACTIVATION.
GETsetStatusManagement session+
♫ Finishes, canceles or reanly wait for SMS. The session expiration continued as same.
ʹparameters
| ʹparameter | ± Type | ʹDescription |
|---|---|---|
api_key* | string | प्रयोगकर्ताको व्यक्तिगत API कुञ्जी। |
id* | integer | ♫ ID of your session, recebited when the number was emited. |
status* | integer | ± 3 — wait for the next code, uden prolonging the session; 6 — finish post SMS; 8 — cancel immediately. |
* Necessari parameter. In all requests also pass action=setStatus.
Exemply request
curl 'https://smscash.org/stubs/handler_api.php?action=setStatus&api_key=YOUR_API_KEY&id=42&status=3' \
-H 'Idempotency-Key: request-unique-001'package main
import (
"fmt"
"io"
"net/http"
"time"
)
func main() {
req, err := http.NewRequest("GET", "https://smscash.org/stubs/handler_api.php?action=setStatus&api_key=YOUR_API_KEY&id=42&status=3", nil)
if err != nil { panic(err) }
req.Header.Set("Idempotency-Key", "request-unique-001")
client := &http.Client{Timeout: 15 * time.Second}
resp, err := client.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil { panic(err) }
fmt.Println(resp.StatusCode, string(body))
}const response = await fetch("https://smscash.org/stubs/handler_api.php?action=setStatus&api_key=YOUR_API_KEY&id=42&status=3", {
headers: {"Idempotency-Key": "request-unique-001"}
});
const result = await response.text();
console.log(response.status, result);import requests
response = requests.get(
"https://smscash.org/stubs/handler_api.php?action=setStatus&api_key=YOUR_API_KEY&id=42&status=3",
headers={"Idempotency-Key": "request-unique-001"},
timeout=15,
)
print(response.status_code, response.text)akana responsi
ACCESS_RETRY_GETACCESS_ACTIVATIONACCESS_CANCEL- ë retry wait for the next code in the original 20 minutes.
- ♫ For status=3 ≤ use Idempotency-Key: repetition the request never reset the nove code ja recebite. The history of SMS remain disponible.
- • Cancellation need remove recompensies ja functioned.
- ♫ Only numbers with SMS code holdes in historia. Anullated and expirate numers with a code is borred.
GETgetRepeatNumber■ emite same number de norme denominar+
ัง Opens a nove session with specific number of your history. You can select out a display service in the same pay.
ʹparameters
| ʹparameter | ± Type | ʹDescription |
|---|---|---|
api_key* | string | प्रयोगकर्ताको व्यक्तिगत API कुञ्जी। |
number* | string | ʹ your old number. Only numbers and a optional leading + ire allowed. |
service* | string | ± Disponible service codes. The response is limited to the area of the API key. |
session_duration | integer | La session dura 20 minutes. Pass 20 or outlook this parameter. |
with_operator | integer | 1 ले जवाफमा अपरेटर ID थप्छ; 0 वा प्यारामिटर नदिँदा तीन खण्ड फर्काउँछ। |
ref | string | ♫ public code of the softwareowner: 5% for he's and 5% for the inviter. ref - 10% ל invitar. |
operator | string | Take ID from operators/getOperators (API). operator=1 · any/0 |
* Necessari parameter. In all requests also pass action=getRepeatNumber.
Exemply request
curl 'https://smscash.org/stubs/handler_api.php?action=getRepeatNumber&api_key=YOUR_API_KEY&number=380670000000&service=go' \
-H 'Idempotency-Key: request-unique-001'package main
import (
"fmt"
"io"
"net/http"
"time"
)
func main() {
req, err := http.NewRequest("GET", "https://smscash.org/stubs/handler_api.php?action=getRepeatNumber&api_key=YOUR_API_KEY&number=380670000000&service=go", nil)
if err != nil { panic(err) }
req.Header.Set("Idempotency-Key", "request-unique-001")
client := &http.Client{Timeout: 15 * time.Second}
resp, err := client.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil { panic(err) }
fmt.Println(resp.StatusCode, string(body))
}const response = await fetch("https://smscash.org/stubs/handler_api.php?action=getRepeatNumber&api_key=YOUR_API_KEY&number=380670000000&service=go", {
headers: {"Idempotency-Key": "request-unique-001"}
});
const result = await response.text();
console.log(response.status, result);import requests
response = requests.get(
"https://smscash.org/stubs/handler_api.php?action=getRepeatNumber&api_key=YOUR_API_KEY&number=380670000000&service=go",
headers={"Idempotency-Key": "request-unique-001"},
timeout=15,
)
print(response.status_code, response.text)akana responsi
ACCESS_NUMBER:43:380670000000NUMBER_IN_USE- First, finish or cancel your actual session. If the number is buddy, re-issuance non is executed.
- ■ La new session recipient a new ID and the actual tariff. Old SMS is not copyed in it. ref is set reset.
- SMScash permite repetering only numbers from the history of this account. The pay is identified per number.
- ± key of a deleted session continua usated: replaying allocation with that key return SESION_CLOSEd and do not emit un ather number.
GETgetSmsFull±Get SMS as JSON+
■ structured history of all messages with ID, sender, code, text and pays, service and forwiver data.
ʹparameters
| ʹparameter | ± Type | ʹDescription |
|---|---|---|
api_key* | string | प्रयोगकर्ताको व्यक्तिगत API कुञ्जी। |
id* | integer | ♫ ID of your session, recebited when the number was emited. |
* Necessari parameter. In all requests also pass action=getSmsFull.
Exemply request
curl 'https://smscash.org/stubs/handler_api.php?action=getSmsFull&api_key=YOUR_API_KEY&id=42'package main
import (
"fmt"
"io"
"net/http"
"time"
)
func main() {
req, err := http.NewRequest("GET", "https://smscash.org/stubs/handler_api.php?action=getSmsFull&api_key=YOUR_API_KEY&id=42", nil)
if err != nil { panic(err) }
client := &http.Client{Timeout: 15 * time.Second}
resp, err := client.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil { panic(err) }
fmt.Println(resp.StatusCode, string(body))
}const response = await fetch("https://smscash.org/stubs/handler_api.php?action=getSmsFull&api_key=YOUR_API_KEY&id=42");
const result = await response.json();
console.log(response.status, result);import requests
response = requests.get(
"https://smscash.org/stubs/handler_api.php?action=getSmsFull&api_key=YOUR_API_KEY&id=42",
timeout=15,
)
print(response.status_code, response.json())akana responsi
{
"success": true,
"session_id": 42,
"phone": "380670000000",
"status": 1,
"status_name": "received",
"sms_count": 1,
"sms": [
{
"id": 101,
"external_id": "message-101",
"sender": "Service",
"code": "001234",
"text": "Код подтверждения: 001234",
"received_at": "2026-10-09T12:00:00Z",
"country": {
"id": 86,
"name": "Italy"
},
"service": {
"code": "go",
"name": "Google"
},
"provider": {
"id": 1,
"name": "Оператор 1"
}
}
],
"expires_at": "2026-10-09T12:20:00Z"
}- Dialog Preferred format for integration. Remember sms[].id to process only new messages.
- numeric status SMScash: 1 - active, 6 - completed, 8 - cancellate or expirate. status_name distinctions between wait, received, finished, canceled, expired.
- ± Codes recebidos continuas disponibles tras session closeds. For grandes volumes, use REST /activations/{id}/sms with after_id.
- ♫ After un number sin SMS es deleted, getStatus and getSms return STATUS_CANCEL; getSmsFull returne the close status, un phone vac and a vap sms list. REST /activations/{id} and /sms retorn 404 NO_ACTIVATION.
GETgetSms±Get SMS als a text string+
ë return the total SMS historia in string format for existing clients.
ʹparameters
| ʹparameter | ± Type | ʹDescription |
|---|---|---|
api_key* | string | प्रयोगकर्ताको व्यक्तिगत API कुञ्जी। |
id* | integer | ♫ ID of your session, recebited when the number was emited. |
* Necessari parameter. In all requests also pass action=getSms.
Exemply request
curl 'https://smscash.org/stubs/handler_api.php?action=getSms&api_key=YOUR_API_KEY&id=42'package main
import (
"fmt"
"io"
"net/http"
"time"
)
func main() {
req, err := http.NewRequest("GET", "https://smscash.org/stubs/handler_api.php?action=getSms&api_key=YOUR_API_KEY&id=42", nil)
if err != nil { panic(err) }
client := &http.Client{Timeout: 15 * time.Second}
resp, err := client.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil { panic(err) }
fmt.Println(resp.StatusCode, string(body))
}const response = await fetch("https://smscash.org/stubs/handler_api.php?action=getSms&api_key=YOUR_API_KEY&id=42");
const result = await response.text();
console.log(response.status, result);import requests
response = requests.get(
"https://smscash.org/stubs/handler_api.php?action=getSms&api_key=YOUR_API_KEY&id=42",
timeout=15,
)
print(response.status_code, response.text)akana responsi
STATUS_OK:2026-10-09T12:00:00Z|001234|Код подтверждения: 001234STATUS_WAIT_CODESTATUS_CANCEL- lëng Message format: Timeságcode ≤text. Multimes messages is separated by a colon.
- ʹThe text SMS self possible contain kolons and vertical bars. For confidentible parsing, use getSmsFull.
GETgetServicesसेवाहरू+
± Disponible service codes. The response is limited to the area of the API key.
ʹparameters
| ʹparameter | ± Type | ʹDescription |
|---|---|---|
api_key* | string | प्रयोगकर्ताको व्यक्तिगत API कुञ्जी। |
country | integer | Take ID from getCountries. |
* Necessari parameter. In all requests also pass action=getServices.
Exemply request
curl 'https://smscash.org/stubs/handler_api.php?action=getServices&api_key=YOUR_API_KEY'package main
import (
"fmt"
"io"
"net/http"
"time"
)
func main() {
req, err := http.NewRequest("GET", "https://smscash.org/stubs/handler_api.php?action=getServices&api_key=YOUR_API_KEY", nil)
if err != nil { panic(err) }
client := &http.Client{Timeout: 15 * time.Second}
resp, err := client.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil { panic(err) }
fmt.Println(resp.StatusCode, string(body))
}const response = await fetch("https://smscash.org/stubs/handler_api.php?action=getServices&api_key=YOUR_API_KEY");
const result = await response.json();
console.log(response.status, result);import requests
response = requests.get(
"https://smscash.org/stubs/handler_api.php?action=getServices&api_key=YOUR_API_KEY",
timeout=15,
)
print(response.status_code, response.json())akana responsi
{
"go": {
"name": "Google",
"code": "go"
}
}- Lieder Service directory is shared intervest the forward. Number disponibility is controled separately.
GETgetCountriesदेशहरू+
́IDs, names and challing codes for the pays in the selection canal.
ʹparameters
| ʹparameter | ± Type | ʹDescription |
|---|---|---|
api_key* | string | प्रयोगकर्ताको व्यक्तिगत API कुञ्जी। |
* Necessari parameter. In all requests also pass action=getCountries.
Exemply request
curl 'https://smscash.org/stubs/handler_api.php?action=getCountries&api_key=YOUR_API_KEY'package main
import (
"fmt"
"io"
"net/http"
"time"
)
func main() {
req, err := http.NewRequest("GET", "https://smscash.org/stubs/handler_api.php?action=getCountries&api_key=YOUR_API_KEY", nil)
if err != nil { panic(err) }
client := &http.Client{Timeout: 15 * time.Second}
resp, err := client.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil { panic(err) }
fmt.Println(resp.StatusCode, string(body))
}const response = await fetch("https://smscash.org/stubs/handler_api.php?action=getCountries&api_key=YOUR_API_KEY");
const result = await response.json();
console.log(response.status, result);import requests
response = requests.get(
"https://smscash.org/stubs/handler_api.php?action=getCountries&api_key=YOUR_API_KEY",
timeout=15,
)
print(response.status_code, response.json())akana responsi
{
"86": {
"id": 86,
"name": "Italy",
"phone_code": "39"
}
}GETgetOperatorsOperatora (_O)+
उपलब्ध अपरेटरहरू: API ID, नाम र रकम रोक्ने अवधि।
ʹparameters
| ʹparameter | ± Type | ʹDescription |
|---|---|---|
api_key* | string | प्रयोगकर्ताको व्यक्तिगत API कुञ्जी। |
country | integer | Take ID from getCountries. |
operator | string | Take ID from operators/getOperators (API). operator=1 · any/0 |
* Necessari parameter. In all requests also pass action=getOperators.
Exemply request
curl 'https://smscash.org/stubs/handler_api.php?action=getOperators&api_key=YOUR_API_KEY'package main
import (
"fmt"
"io"
"net/http"
"time"
)
func main() {
req, err := http.NewRequest("GET", "https://smscash.org/stubs/handler_api.php?action=getOperators&api_key=YOUR_API_KEY", nil)
if err != nil { panic(err) }
client := &http.Client{Timeout: 15 * time.Second}
resp, err := client.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil { panic(err) }
fmt.Println(resp.StatusCode, string(body))
}const response = await fetch("https://smscash.org/stubs/handler_api.php?action=getOperators&api_key=YOUR_API_KEY");
const result = await response.json();
console.log(response.status, result);import requests
response = requests.get(
"https://smscash.org/stubs/handler_api.php?action=getOperators&api_key=YOUR_API_KEY",
timeout=15,
)
print(response.status_code, response.json())akana responsi
{
"1": {
"id": 1,
"provider_id": 1,
"operator": 1,
"name": "Оператор 1",
"earnings_hold_days": 45
}
}- Take ID from operators/getOperators (API).
GETgetRewards♫ Recompense for SMS+
Limiteds depende dependente on the pay. Total monts is per paged SMS.
ʹparameters
| ʹparameter | ± Type | ʹDescription |
|---|---|---|
api_key* | string | प्रयोगकर्ताको व्यक्तिगत API कुञ्जी। |
country | integer | Take ID from getCountries. |
service | string | ± Disponible service codes. The response is limited to the area of the API key. |
operator | string | Take ID from operators/getOperators (API). operator=1 · any/0 |
* Necessari parameter. In all requests also pass action=getRewards.
Exemply request
curl 'https://smscash.org/stubs/handler_api.php?action=getRewards&api_key=YOUR_API_KEY&country=59&service=vi'package main
import (
"fmt"
"io"
"net/http"
"time"
)
func main() {
req, err := http.NewRequest("GET", "https://smscash.org/stubs/handler_api.php?action=getRewards&api_key=YOUR_API_KEY&country=59&service=vi", nil)
if err != nil { panic(err) }
client := &http.Client{Timeout: 15 * time.Second}
resp, err := client.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil { panic(err) }
fmt.Println(resp.StatusCode, string(body))
}const response = await fetch("https://smscash.org/stubs/handler_api.php?action=getRewards&api_key=YOUR_API_KEY&country=59&service=vi");
const result = await response.json();
console.log(response.status, result);import requests
response = requests.get(
"https://smscash.org/stubs/handler_api.php?action=getRewards&api_key=YOUR_API_KEY&country=59&service=vi",
timeout=15,
)
print(response.status_code, response.json())akana responsi
{
"59": {
"vi": {
"1": "0.01000000",
"3": "0.00500000"
}
}
}{}- ≤ USD tariffiske summas returneres como decimal decimales exacte strengs with 8 decimalies places:
- ♫ actived providers disponible for your key.
- country ID → service code → operator ID → reward (USD)
GETgetBalanceप्रयोगकर्ताको मौज्दात+
Addition SMScash: disponible balance tendence to consideration recordingals, bonuss reference and paging requests.
ʹparameters
| ʹparameter | ± Type | ʹDescription |
|---|---|---|
api_key* | string | प्रयोगकर्ताको व्यक्तिगत API कुञ्जी। |
* Necessari parameter. In all requests also pass action=getBalance.
Exemply request
curl 'https://smscash.org/stubs/handler_api.php?action=getBalance&api_key=YOUR_API_KEY'package main
import (
"fmt"
"io"
"net/http"
"time"
)
func main() {
req, err := http.NewRequest("GET", "https://smscash.org/stubs/handler_api.php?action=getBalance&api_key=YOUR_API_KEY", nil)
if err != nil { panic(err) }
client := &http.Client{Timeout: 15 * time.Second}
resp, err := client.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil { panic(err) }
fmt.Println(resp.StatusCode, string(body))
}const response = await fetch("https://smscash.org/stubs/handler_api.php?action=getBalance&api_key=YOUR_API_KEY");
const result = await response.text();
console.log(response.status, result);import requests
response = requests.get(
"https://smscash.org/stubs/handler_api.php?action=getBalance&api_key=YOUR_API_KEY",
timeout=15,
)
print(response.status_code, response.text)akana responsi
ACCESS_BALANCE:0.00- getBalance return the disponible USD balance with ≤ 8 decimal places.
- रोक्का अवधि सकिएको रकम मात्र निकाल्न सकिन्छ।
GETgetHoldBalanceरोकिएको रकम+
SMS प्राप्त भएपछि आम्दानी प्रदायकले तोकेको अवधिसम्म रोक्का हुन्छ। तोकिएको मितिमा रकम स्वतः निकाल्न उपलब्ध हुन्छ।
ʹparameters
| ʹparameter | ± Type | ʹDescription |
|---|---|---|
api_key* | string | प्रयोगकर्ताको व्यक्तिगत API कुञ्जी। |
* Necessari parameter. In all requests also pass action=getHoldBalance.
Exemply request
curl 'https://smscash.org/stubs/handler_api.php?action=getHoldBalance&api_key=YOUR_API_KEY'package main
import (
"fmt"
"io"
"net/http"
"time"
)
func main() {
req, err := http.NewRequest("GET", "https://smscash.org/stubs/handler_api.php?action=getHoldBalance&api_key=YOUR_API_KEY", nil)
if err != nil { panic(err) }
client := &http.Client{Timeout: 15 * time.Second}
resp, err := client.Do(req)
if err != nil { panic(err) }
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil { panic(err) }
fmt.Println(resp.StatusCode, string(body))
}const response = await fetch("https://smscash.org/stubs/handler_api.php?action=getHoldBalance&api_key=YOUR_API_KEY");
const result = await response.text();
console.log(response.status, result);import requests
response = requests.get(
"https://smscash.org/stubs/handler_api.php?action=getHoldBalance&api_key=YOUR_API_KEY",
timeout=15,
)
print(response.status_code, response.text)akana responsi
ACCESS_HOLD_BALANCE:34.50000001- SMScash · getHoldBalance · USD · 8
- रोक्का अवधि सकिएको रकम मात्र निकाल्न सकिन्छ।
• Codes de respons and repeat requests
♫ In handler_api.php business resultats normalmente provenis HTTP 200. Kontrole body text. Directorys and getSmsFull return JSON if success; errors is allways text.
| ± kod | HTTP | • Cause and next step |
|---|---|---|
TARIFF_NOT_CONFIGURED | 200 | ± rates year was not definited■ Number allocation will started unknown SMS recompenses is configurated. |
COUNTRY_BLOCKED | 200 | ■ asignation number for this pays is blocked.♫ Choice outher pays. |
BAD_SERVICE | 200 | ■ asignation number for this service is blocked.Select ather service. |
PROVIDER_NOT_READY | 200 | ± Number allocation non disponible temporarly± refresh the API katalogs. |
BAD_KEY | 400 | ʹNo api_key or invalid format.■ Kontrola last key in the request. |
INVALID_API_KEY | 401 | ± key is unknown, revocate or the account is desactived.ʹCreate a valid API key. |
BAD_COUNTRY | 400 | mancant o non un number positiv.Take ID from getCountries. |
BAD_SESSION_DURATION | 400 | ʹTelefonnumbers publiced exclusive 20 minutes.Korekt ± Korrekt session_duration. |
BAD_REQUEST | 400 | ë invalid parameter or Idempotency-Key.♫ Please corrige your request. |
BAD_SERVICE / BAD_OPERATOR / INVALID_PROVIDER | 200 | Unknown or desactived directory item.± refresh the API katalogs. |
BAD_NUMBER | 200 | ë incorrecte number format.♫ Give the number in digits. |
BAD_ACTION / BAD_STATUS | 200 | ʹUnknown commando, ID or operation.■ Kontroli settings. |
EMPTY_POOL | 200 | ± ejecun matching telefon numbers disponible actualmente.Repetirez tra 10-30 sekundes, o change filters. |
NUMBER_IN_USE | 200 | ■ Specifique number is ocupat of a active session.Find your session or select another number. |
NO_ACTIVATION | 200 | Die session or previous number non aparten al your account.♫ Check ID and Key. |
SESSION_CLOSED / SMS_REQUIRED | 200 | ♫ State transition momental няма disponible.■ Kontrola condition and disponibility of SMS. |
SCOPE_BLOCKED | 200 | ± service, land, of vendor non autorized for the key.■ update's scope of the API key. |
IDEMPOTENCY_CONFLICT | 200 | Diese query key is already asociated with andere parameters.For a new operation, create other Idempotency-Key. |
BAD_REF / SELF_REF | 400 | ♫ The software code is unknown, desactived, or aparten a the workerself.́pass on the softwareowner's code. |
INTERNAL_ERROR | 500 | * Temporary server or vendor error.Repetition with a tard and the same Idempotency-Key. |
ALLOCATION_PENDING | 200 | ♫ Number allocation is already in progress. Restart with the same Idempotency-Key.♫ Number allocation is already in progress. Restart with the same Idempotency-Key. |
ALLOCATION_UNCERTAIN | 200 | ë resultat de allocation is not confirmed. Automatic reasing is disabled for evit asignation a second number.ë resultat de allocation is not confirmed. Automatic reasing is disabled for evit asignation a second number. |
± REST returna un object {"error":{"code":"…","message":"…"}} et regular HTTP statuss 400/401/403/404/409/503.
{
"error": {
"code": "BAD_REQUEST",
"message": "♫ Kontrola request fields.",
"request_id": "req_…",
"hint": "Use the documented JSON type; numbers must not be quoted.",
"retryable": false,
"details": {
"field": "country",
"expected": "integer"
}
}
}X-Request-ID: included in every API response
405: Allow lists the supported HTTP methods
ALLOCATION_PENDING: retryable=true · Retry-After=3 · same operation key
ALLOCATION_UNCERTAIN: retryable=false · contact support
Transport errors: check the operation before another write; keep the original key.■ REST for nove integrationes
≤ USD tariffiske summas returneres como decimal decimales exacte strengs with 8 decimalies places: 0.00300000 USD.
■ balance money is USD. Request and response schemes exists in OpenAPI.
/api/v1/catalogसेवाहरू र देशहरू/api/v1/tariffsSMS recompense rates per Country/api/v1/offers♫ Rates and recompenses/api/v1/servicesÚtvoi direktoriu līmeiro/api/v1/countriesÚtvoi direktoriu līmeiro/api/v1/operatorsÚtvoi direktoriu līmeiro/api/v1/availability?country=1Númber disponibility/api/v1/activations± New session/api/v1/activations/batch?ids=42,43धेरै नम्बर जाँच्नुहोस्/api/v1/activations♫ Last 200 sessions: scope=history, wait or all/api/v1/activations/{id}Session and messages/api/v1/activations/{id}/sms?after_id=0&limit=100ë New SMS with cursor/api/v1/activations/{id}/retry♫ Watching for SMS/api/v1/activations/{id}/finishKomplimentation/api/v1/activations/{id}/cancelCancel/api/v1/activations/repeat± Number reissues/api/v1/keys± API keys/api/v1/keysCreate a key/api/v1/keys/{id}■ Change name or policy/api/v1/keys/{id}Key Revoke/api/v1/referrals♫ Code referencial and rendements/api/v1/summaryBalance and Resumé/api/v1/balanceरोकिएको रकम/api/v1/ledgerEarnings ledger/api/v1/withdrawals± requestes receptions/api/v1/withdrawalsCreate a request/api/v1/statistics■ Statistiki totale/api/v1/earnings/holdsआम्दानीको रोक्का♫ Recipiente only new SMS
GET /api/v1/activations/42/sms?after_id=0&limit=100
Authorization: Bearer YOUR_API_KEY{
"session_id": 42,
"sms": [
{
"id": 101,
"code": "001234",
"text": "± Code: 001234",
"sender": "Service",
"received_at": "2026-10-09T12:00:00Z"
}
],
"next_cursor": 101,
"has_more": false
}Save next_cursor and transfer it on as after_id. If has_more=true, la next page puede read immediately. limite: 1–200. Sessions and SMS disponible only for theowner.