± API documentation
Start with one request
♫ Create a API key in your dashboard, get a number and check for messages cada 10 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 --get 'https://smscash.org/stubs/handler_api.php' \
--data-urlencode 'api_key=YOUR_API_KEY' \
--data-urlencode 'action=getNumber' \
--data-urlencode 'service=go' \
--data-urlencode 'country=86'Alternative compatible interface address: /handler_api.php. Eventual REST integrations continua a work.
अनुरोध निर्माण उपकरण
https://smscash.org/stubs/handler_api.phpcurl --max-time 15 --fail-with-body 'https://smscash.org/stubs/handler_api.php?action=getNumber&api_key=YOUR_API_KEY&service=go&country=86&with_operator=1'package main
import (
"fmt"
"io"
"net/http"
"net/url"
"os"
"time"
)
func main() {
endpoint, err := url.Parse("https://smscash.org/stubs/handler_api.php?action=getNumber&api_key=YOUR_API_KEY&service=go&country=86&with_operator=1")
if err != nil { panic(err) }
query := endpoint.Query()
query.Set("api_key", os.Getenv("SMSCASH_API_KEY"))
endpoint.RawQuery = query.Encode()
req, err := http.NewRequest("GET", endpoint.String(), nil)
if err != nil { panic(err) }
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) }
defer res.Body.Close()
body, err := io.ReadAll(res.Body)
if err != nil { panic(err) }
fmt.Println(res.StatusCode, string(body))
}// Node.js 18+: set SMSCASH_API_KEY in your environment.
const url = new URL("https://smscash.org/stubs/handler_api.php?action=getNumber&api_key=YOUR_API_KEY&service=go&country=86&with_operator=1");
url.searchParams.set("api_key", process.env.SMSCASH_API_KEY);
const response = await fetch(url, {
method: 'GET',
signal: AbortSignal.timeout(15000),
redirect: 'error',
});
const result = await response.text();
console.log(response.status, result);
// SMS codes are strings: keep leading zeros. Never repeat issuance automatically.import json
import os
import urllib.error
import urllib.parse
import urllib.request
class NoRedirect(urllib.request.HTTPRedirectHandler):
def redirect_request(self, req, fp, code, msg, headers, newurl):
return None
url = "https://smscash.org/stubs/handler_api.php?action=getNumber&api_key=YOUR_API_KEY&service=go&country=86&with_operator=1"
parts = urllib.parse.urlsplit(url)
params = dict(urllib.parse.parse_qsl(parts.query))
params["api_key"] = os.environ["SMSCASH_API_KEY"]
url = urllib.parse.urlunsplit(parts._replace(query=urllib.parse.urlencode(params)))
request = urllib.request.Request(url, method='GET')
try:
with urllib.request.build_opener(NoRedirect).open(request, timeout=15) as response:
result = response.read().decode("utf-8")
print(response.status, result)
except urllib.error.HTTPError as error:
print(error.code, error.read().decode('utf-8'))
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
GET /stubs/handler_api.php?action=getNumber&api_key=YOUR_API_KEY&service=go&country=86स्वचालित चयन: उपलब्ध प्रदायकबाट अनियमित छनोट।
ACCESS_NUMBER: session ID · phone number
service + country · session_duration: 20
ref: software owner code (optional)
operator: public ID (e.g. 1) or comma-separated IDs (e.g. "1,3")
optional · omitted/any/0: random eligible provider
country: integer · service: string · SMS code: stringʹNumber is valide per 20 minutes. SMS is controled cada 10 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": 10
}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';
const api = new SmScash(process.env.SMSCASH_API_KEY);
const catalog = await api.catalog({service: 'go', country: 86});
console.log(catalog.rows);
const messages = await api.sms(42, {afterId: 0});
console.log(messages.sms);
const statuses = await api.batch([42]);
const held = await api.holdBalance();
console.log(held); // Exact USD stringimport os
from smscash import SmScash, SmScashError
api = SmScash(os.environ['SMSCASH_API_KEY'])
catalog = api.catalog(service='go', country=86)
print(catalog['rows'])
messages = api.sms(42, after_id=0)
print(messages['sms'])
statuses = api.batch([42])
held = api.hold_balance()
print(held) # Exact USD stringme() · balance() · holdBalance()/hold_balance() · catalog() · activation() · sms() · batch()
setStatus(id, "cancel") / set_status(id, "cancel")
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'{
"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, e.g. 1,3); 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.
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 10 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 10 sekundes. You canceled imediately.
± 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 | Возьмите ID из operators/getOperators (API). ID поставщиков, через запятую: operator=1,3. operator=1 · operator=1,3 · any/0 |
session_duration | integer | La session dura 20 minutes. Pass 20 or outlook this parameter. |
with_operator | integer | 1 ले जवाफमा अपरेटर ID थप्छ; 0 वा प्यारामिटर नदिँदा तीन खण्ड फर्काउँछ। |
ref | string | Публичный код владельца софта: 5% ему и 5% пригласившему. Без ref — 10% пригласившему. Неизвестный, отключённый, некорректный или собственный ref игнорируется: запрос продолжается без бонуса владельцу софта. Действующие коды и прежние условия уже выданных сессий сохраняются. |
* 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'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) }
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");
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",
timeout=15,
)
print(response.status_code, response.text)akana responsi
ACCESS_NUMBER:42:380670000000:1EMPTY_POOL- स्वचालित चयन: उपलब्ध प्रदायकबाट अनियमित छनोट।
- ± 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'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) }
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");
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",
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.
- • 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 | Публичный код владельца софта: 5% ему и 5% пригласившему. Без ref — 10% пригласившему. Неизвестный, отключённый, некорректный или собственный ref игнорируется: запрос продолжается без бонуса владельцу софта. Действующие коды и прежние условия уже выданных сессий сохраняются. |
operator | string | Возьмите ID из operators/getOperators (API). ID поставщиков, через запятую: operator=1,3. operator=1 · operator=1,3 · 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'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) }
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");
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",
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": "operator=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.
Útvoi direktoriu līmeiro
प्रकाशन…
| akana name | Service code service |
|---|
Lieder Service directory is shared intervest the forward. Number disponibility is controled separately.
♫ You can restricte a key for specific services, pays and providers. Lists vacces permite alle options disponibles.
ʹ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.
Útvoi direktoriu līmeiro
प्रकाशन…
| akana name | ± ID Country country |
|---|
♫ You can restricte a key for specific services, pays and providers. Lists vacces permite alle options disponibles.
ʹ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 | Возьмите ID из operators/getOperators (API). ID поставщиков, через запятую: operator=1,3. operator=1 · operator=1,3 · 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": "operator=1",
"earnings_hold_days": 45
}
}- Возьмите ID из operators/getOperators (API). ID поставщиков, через запятую: operator=1,3.
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 | Возьмите ID из operators/getOperators (API). ID поставщиков, через запятую: operator=1,3. operator=1 · operator=1,3 · 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)
GETgetTopCountriesByServiceТоп стран по сервису+
До 10 стран с лучшей доставкой смс кодов за последние 24 часа
ʹparameters
| ʹparameter | ± Type | ʹDescription |
|---|---|---|
api_key* | string | प्रयोगकर्ताको व्यक्तिगत API कुञ्जी। |
service* | string | Код сервиса из getServices. |
* Necessari parameter. In all requests also pass action=getTopCountriesByService.
Exemply request
curl 'https://smscash.org/stubs/handler_api.php?action=getTopCountriesByService&api_key=YOUR_API_KEY&service=go'package main
import (
"fmt"
"io"
"net/http"
"time"
)
func main() {
req, err := http.NewRequest("GET", "https://smscash.org/stubs/handler_api.php?action=getTopCountriesByService&api_key=YOUR_API_KEY&service=go", 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=getTopCountriesByService&api_key=YOUR_API_KEY&service=go");
const result = await response.json();
console.log(response.status, result);import requests
response = requests.get(
"https://smscash.org/stubs/handler_api.php?action=getTopCountriesByService&api_key=YOUR_API_KEY&service=go",
timeout=15,
)
print(response.status_code, response.json())akana responsi
Структура ответа
| Ключ в примере | ʹDescription | Útvoi direktoriu līmeiro |
|---|---|---|
["12"], ["36"] | ± ID Country Первый, внешний уровень JSON. Каждая запись объединяет операторов одной страны. | getCountries |
["12"]["1"], ["12"]["3"] | ID оператора Второй уровень JSON, внутри страны. Это публичный ID оператора (поставщика), который передаётся в параметре operator. | getOperators |
{
"12": {
"1": {
"reward": 0.012,
"count": 542
},
"3": {
"reward": 0.014,
"count": 301
}
},
"36": {
"1": {
"reward": 0.011,
"count": 190
}
}
}{}- В примере ["12"]["1"] — данные оператора 1 в стране 12. ID стран берутся из getCountries, ID операторов — из getOperators.
- reward — действующее личное вознаграждение в USD, JSON-число. count — количество выданных номеров за последние 24 часа, включая сессии без кода.
- Рейтинг рассчитывается как все полученные непустые коды, делённые на все выдачи номеров за последние 24 часа для выбранного сервиса.
- Повторные непустые коды увеличивают числитель; конверсия может превышать 100%. Начальные нули сохраняются.
- Суточная статистика сервиса кэшируется на 10 минут. Тарифы и ограничения ключа проверяются при каждом запросе. Момент среза — в заголовке X-Statistics-As-Of.
- Нет данных или доступных связок — пустой объект {}. Страны с выдачами и нулём кодов имеют нулевую конверсию. Порядок ключей JSON не задаёт места в рейтинге.
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 | ♫ Kontrola request fields.♫ 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. |
INTERNAL_ERROR | 500 | * Temporary server or vendor error.सम्पर्क र सहयोग · X-Request-ID |
ALLOCATION_PENDING | 200 | ♫ WaittinggetActiveActivations · getStatus |
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.