Dokumentacja API
Zacznij od jednej prośby
Stwórz klucz API w swoim panelu, uzyskaj numer i sprawdź wiadomości co 10 sekund. Płatność zostanie dodana, gdy przyjdzie SMS z kodem; ponowne czytanie go nie wpływa na twoją kwotę.
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'Alternatywny adres kompatybilnego interfejsu: /handler_api.php. Istniejące integracje REST nadal działają.
Kreator żądań
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.Klucz nie jest zapisywany. Ta kontrola nie przydziela numerów.
REST dla nowych integracji
Usługi i kraje
Wybierz usługę i kraj. Wynagrodzenie za SMS zależy od kraju.
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)
Zdobądź numer
GET /stubs/handler_api.php?action=getNumber&api_key=YOUR_API_KEY&service=go&country=86Wybór automatyczny: losowy dostępny operator.
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: stringNumer jest ważny przez 20 minut. SMS sprawdzany co 10 sekund. Można odwołać natychmiast.
Sprawdź wiele numerów
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 messageSaldo · Wstrzymane
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 — Dostępne; held_balance — Wstrzymane. USD · 8
Można wypłacić tylko środki, których okres wstrzymania się zakończył.
Gotowe klienty
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.phpOsobisty klucz API użytkownika.
Wybierz usługę i kraj. Wynagrodzenie za SMS zależy od kraju.
| Kod | Opis |
|---|---|
getNumber / getNumberV2 | Zdobądź numer |
getStatus / getStatusV2 | Pobierz najnowszy kod |
setStatus / finishActivation / cancelActivation | Zarządzaj sesją |
getPrices / getNumbersStatus | Sprawdź dostępność |
getRewards (SMScash) | Nagroda za SMS |
getServicesList / getServices | Usługi |
getCountries / getOperators | Usługi i kraje |
getActiveActivations | Sesje |
getBalance | Saldo użytkownika |
getHoldBalance (SMScash) | Wstrzymane |
cost = 0 USD · activationCost = 0 USDreward — Nagroda za 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.Numer jest ważny przez 20 minut. SMS sprawdzany co 10 sekund. Można odwołać natychmiast.
Uwierzytelnianie i ponawianie
REST: header Authorization: Bearer YOUR_API_KEY. Zgodny interfejs: parametry api_key i action. Użyj HTTPS.
Aby zarządzać kluczami API, wejdź na swoje konto.
Częstotliwość żądań i liczba numerów telefonu są nieograniczone. Nie ma limitów dziennych ani godzinowych.
Numer jest ważny przez 20 minut. SMS sprawdzany co 10 sekund. Można odwołać natychmiast.
Zakres klucza API
Klucz można przypisać do konkretnych usług, krajów i dostawców. Puste listy zezwalają na wszystkie dostępne opcje.
{
"label": "Moje oprogramowanie",
"policy": {
"services": [
"go"
],
"countries": [
86
],
"providers": [
1
]
}
}PATCH /api/v1/keys/{id} całkowicie zmienia nazwę i policy. Sekret jest pokazywany dopiero po utworzeniu.
W sumie 10%. 5% + 5% z kodem oprogramowania.
Przy wydawaniu numeru prosimy o podanie ref właściciel oprogramowania. Żądanie jest autoryzowane kluczem użytkownika. Kod znajduje się w dziale „Poleconych” oraz w GET /api/v1/referrals → software_ref.
| Żądanie | Osoba polecająca | Oprogramowanie |
|---|---|---|
| Bez ref | 10% | — |
| Z ref | 5% | 5% |
| W przypadku ref nie ma elementu odsyłającego | — | 5% |
Platforma wypłaca premię nie umniejszając wynagrodzenia użytkownika. Właściciel oprogramowania i osoba polecająca mogą być tą samą osobą. Użytkownik nie może używać własnego kodu.
Warunki są ustalane przy utworzeniu sesji; czytanie SMS i retry nie zmieniają ich. Przekazuj ref ponownie dla nowej sesji powtórkowej. W obliczeniu taryfy, nagroda użytkownika w wysokości USD 0.003 daje USD 0.00015 każdemu właścicielowi oprogramowania i referencyjnikowi. Całkowity bonus wynosi USD 0.00030.
Polecenia API
11 metod w stylu XVBC plus saldo SMScash.
GETgetNumberZdobądź numer+
Tworzy sesję i rezerwuje dostępny numer dla użytkownika. Stawka oraz odbiorcy premii za polecenia są ustalani przy przydzieleniu; wynagrodzenie jest naliczane po otrzymaniu SMS z kodem.
Parametry
| Parametr | Wpisz | Opis |
|---|---|---|
api_key* | string | Osobisty klucz API użytkownika. |
service* | string | Dostępne kody serwisowe. Odpowiedź ogranicza się do obszaru klucza API. |
country* | integer | Weź ID z getCountries. |
operator | string | Возьмите ID из operators/getOperators (API). ID поставщиков, через запятую: operator=1,3. operator=1 · operator=1,3 · any/0 |
session_duration | integer | Sesja trwa 20 minut. Przekieruj 20 lub pominąć ten parametr. |
with_operator | integer | 1 dodaje ID operatora do odpowiedzi; 0 lub pominięcie parametru zwraca trzy segmenty. |
ref | string | Публичный код владельца софта: 5% ему и 5% пригласившему. Без ref — 10% пригласившему. Неизвестный, отключённый, некорректный или собственный ref игнорируется: запрос продолжается без бонуса владельцу софта. Действующие коды и прежние условия уже выданных сессий сохраняются. |
* Parametr wymagany. We wszystkich żądaniach należy także przekazać action=getNumber.
Przykładowe żądanie
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)Odpowiedzi
ACCESS_NUMBER:42:380670000000:1EMPTY_POOL- Wybór automatyczny: losowy dostępny operator.
- Numeryczny kraj bez puli daje EMPTY_POOL; nieprawidłowy format kraju to BAD_COUNTRY.
- Klucz wykreślonej sesji jest nadal używany: ponowne przydzielenie z tym kluczem daje SESSION_CLOSED i nie wydaje kolejnego numeru.
- Wynik przydzielania nie został potwierdzony. Automatyczne ponawianie jest wyłączone, aby nie przydzielić drugiego numeru.
GETgetNumbersStatusSprawdź dostępność+
Liczba dostępnych numerów telefonu według usługi i kraju.
Parametry
| Parametr | Wpisz | Opis |
|---|---|---|
api_key* | string | Osobisty klucz API użytkownika. |
country* | integer | Weź ID z getCountries. |
* Parametr wymagany. We wszystkich żądaniach należy także przekazać action=getNumbersStatus.
Przykładowe żądanie
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())Odpowiedzi
{
"go_0": 0
}- Sufiks _0 oznacza wybór bez określonego operatora.
- Dostępność dotyczy całej puli dostawcy. Wybrany kanał jest sprawdzany przy przydzielaniu numeru.
GETgetStatusPobierz najnowszy kod+
Łatwe żądanie statusu sesji i ostatniego kodu SMS. Zera wiodące w kodzie zostają zachowane.
Parametry
| Parametr | Wpisz | Opis |
|---|---|---|
api_key* | string | Osobisty klucz API użytkownika. |
id* | integer | ID Twojej sesji, otrzymany w momencie wydania numeru. |
* Parametr wymagany. We wszystkich żądaniach należy także przekazać action=getStatus.
Przykładowe żądanie
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)Odpowiedzi
STATUS_WAIT_CODESTATUS_OK:001234STATUS_CANCELNO_ACTIVATION- Prowadź ankiety co 20 sekund. Ponowne czytanie wiadomości nie powoduje nowego płatności.
- Po retry stary kod nie jest zwracany: getStatus czeka na następny SMS.
- Po usunięciu liczby bez SMS, getStatus i getSms powracają do STATUS_CANCEL; getSmsFull powraca do stanu zamkniętego, pusty telefon i pusta lista SMS. REST /activations/{id} i /sms powracają do 404 NO_ACTIVATION.
GETsetStatusZarządzaj sesją+
Zakończenia, odwołania lub wznowienie oczekiwania na SMS. Okres ważności sesji pozostaje takim samym.
Parametry
| Parametr | Wpisz | Opis |
|---|---|---|
api_key* | string | Osobisty klucz API użytkownika. |
id* | integer | ID Twojej sesji, otrzymany w momencie wydania numeru. |
status* | integer | 3 — czekać na następny kod bez rozszerzania sesji; 6 — zakończyć po SMS; 8 — natychmiast anulować. |
* Parametr wymagany. We wszystkich żądaniach należy także przekazać action=setStatus.
Przykładowe żądanie
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)Odpowiedzi
ACCESS_RETRY_GETACCESS_ACTIVATIONACCESS_CANCEL- Wielokrotnie próbuj, czekając na następny kod w ciągu pierwotnych 20 minut. Czas problemu i wygaśnięcia nie zmieniają się.
- Anulowanie nie odbiera już zarobionych środków.
- Tylko numery z kodem SMS są przechowywane w historii. Zlikwidowane i wygasłe numery bez kodu są usuwane.
GETgetRepeatNumberWydaj ponownie ten sam numer+
Otwiera nową sesję z określonym numerem z Twojej historii. Możesz wybrać inną usługę dostępną w tym samym kraju.
Parametry
| Parametr | Wpisz | Opis |
|---|---|---|
api_key* | string | Osobisty klucz API użytkownika. |
number* | string | Twój stary numer. Dozwolone są tylko cyfry i opcjonalny znak +. |
service* | string | Dostępne kody serwisowe. Odpowiedź ogranicza się do obszaru klucza API. |
session_duration | integer | Sesja trwa 20 minut. Przekieruj 20 lub pominąć ten parametr. |
with_operator | integer | 1 dodaje ID operatora do odpowiedzi; 0 lub pominięcie parametru zwraca trzy segmenty. |
ref | string | Публичный код владельца софта: 5% ему и 5% пригласившему. Без ref — 10% пригласившему. Неизвестный, отключённый, некорректный или собственный ref игнорируется: запрос продолжается без бонуса владельцу софта. Действующие коды и прежние условия уже выданных сессий сохраняются. |
operator | string | Возьмите ID из operators/getOperators (API). ID поставщиков, через запятую: operator=1,3. operator=1 · operator=1,3 · any/0 |
* Parametr wymagany. We wszystkich żądaniach należy także przekazać action=getRepeatNumber.
Przykładowe żądanie
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)Odpowiedzi
ACCESS_NUMBER:43:380670000000NUMBER_IN_USE- Najpierw zakończ lub anuluj bieżącą sesję. Jeżeli numer jest zajęty, ponowne wydanie nie jest realizowane.
- Nowa sesja otrzymuje nowe ID i aktualną taryfę. Stare SMS nie są do niego kopiowane. ref jest ponownie ustawione.
- SMScash pozwala na powtarzanie tylko numerów z historii tego rachunku. Kraj jest identyfikowany poprzez numer.
- Klucz wykreślonej sesji jest nadal używany: ponowne przydzielenie z tym kluczem daje SESSION_CLOSED i nie wydaje kolejnego numeru.
GETgetSmsFullZdobądź SMS jako JSON+
Ustrukturyzowana historia wszystkich wiadomości z ID, nadawcą, kodem, tekstem i danymi kraju, usługi i dostawcy.
Parametry
| Parametr | Wpisz | Opis |
|---|---|---|
api_key* | string | Osobisty klucz API użytkownika. |
id* | integer | ID Twojej sesji, otrzymany w momencie wydania numeru. |
* Parametr wymagany. We wszystkich żądaniach należy także przekazać action=getSmsFull.
Przykładowe żądanie
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())Odpowiedzi
{
"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"
}- Preferowany format integracji. Zapamiętaj sms[].id, aby przetwarzać tylko nowe wiadomości.
- Status numeryczny SMScash: 1 - aktywny, 6 - zakończony, 8 - anulowany lub wygasł. status_name rozróżnia oczekujące, odebrane, zakończone, anulowane i wygasłe.
- Kody otrzymane pozostają dostępne po zakończeniu sesji. W przypadku dużych ilości użyj REST /activations/{id}/sms z after_id.
- Po usunięciu liczby bez SMS, getStatus i getSms powracają do STATUS_CANCEL; getSmsFull powraca do stanu zamkniętego, pusty telefon i pusta lista SMS. REST /activations/{id} i /sms powracają do 404 NO_ACTIVATION.
GETgetSmsPobierz SMS jako ciąg tekstowy+
Zwraca całą historię SMS w formacie ciągu dla istniejących klientów.
Parametry
| Parametr | Wpisz | Opis |
|---|---|---|
api_key* | string | Osobisty klucz API użytkownika. |
id* | integer | ID Twojej sesji, otrzymany w momencie wydania numeru. |
* Parametr wymagany. We wszystkich żądaniach należy także przekazać action=getSms.
Przykładowe żądanie
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)Odpowiedzi
STATUS_OK:2026-10-09T12:00:00Z|001234|Код подтверждения: 001234STATUS_WAIT_CODESTATUS_CANCEL- Format wiadomości: czas|kod|tekst. Wiele wiadomości oddziela się dwukropkiem.
- Sam tekst SMS może zawierać dwukropki i pionowe kreski. Aby zapewnić niezawodne analizowanie, użyj getSmsFull.
GETgetServicesUsługi+
Dostępne kody serwisowe. Odpowiedź ogranicza się do obszaru klucza API.
Katalog
Publikowanie…
| Imię | Kod usługi service |
|---|
Katalog usługowy jest udostępniany przez dostawcę. Dostępność numerów sprawdzana jest osobno.
Klucz można przypisać do konkretnych usług, krajów i dostawców. Puste listy zezwalają na wszystkie dostępne opcje.
Parametry
| Parametr | Wpisz | Opis |
|---|---|---|
api_key* | string | Osobisty klucz API użytkownika. |
country | integer | Weź ID z getCountries. |
* Parametr wymagany. We wszystkich żądaniach należy także przekazać action=getServices.
Przykładowe żądanie
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())Odpowiedzi
{
"go": {
"name": "Google",
"code": "go"
}
}- Katalog usługowy jest udostępniany przez dostawcę. Dostępność numerów sprawdzana jest osobno.
GETgetCountriesKraje+
ID-y, nazwy i kody telefonów dla krajów w wybranym kanałie.
Katalog
Publikowanie…
| Imię | ID kraju country |
|---|
Klucz można przypisać do konkretnych usług, krajów i dostawców. Puste listy zezwalają na wszystkie dostępne opcje.
Parametry
| Parametr | Wpisz | Opis |
|---|---|---|
api_key* | string | Osobisty klucz API użytkownika. |
* Parametr wymagany. We wszystkich żądaniach należy także przekazać action=getCountries.
Przykładowe żądanie
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())Odpowiedzi
{
"86": {
"id": 86,
"name": "Italy",
"phone_code": "39"
}
}GETgetOperatorsOperatorzy+
Dostępni operatorzy: ID API, nazwa i okres wstrzymania wynagrodzenia.
Parametry
| Parametr | Wpisz | Opis |
|---|---|---|
api_key* | string | Osobisty klucz API użytkownika. |
country | integer | Weź ID z getCountries. |
operator | string | Возьмите ID из operators/getOperators (API). ID поставщиков, через запятую: operator=1,3. operator=1 · operator=1,3 · any/0 |
* Parametr wymagany. We wszystkich żądaniach należy także przekazać action=getOperators.
Przykładowe żądanie
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())Odpowiedzi
{
"1": {
"id": 1,
"provider_id": 1,
"operator": 1,
"name": "operator=1",
"earnings_hold_days": 45
}
}- Возьмите ID из operators/getOperators (API). ID поставщиков, через запятую: operator=1,3.
GETgetRewardsNagroda za SMS+
Ceny zależą od kraju. Wszystkie wartości w tabeli są za cenę zapłaconą SMS.
Parametry
| Parametr | Wpisz | Opis |
|---|---|---|
api_key* | string | Osobisty klucz API użytkownika. |
country | integer | Weź ID z getCountries. |
service | string | Dostępne kody serwisowe. Odpowiedź ogranicza się do obszaru klucza API. |
operator | string | Возьмите ID из operators/getOperators (API). ID поставщиков, через запятую: operator=1,3. operator=1 · operator=1,3 · any/0 |
* Parametr wymagany. We wszystkich żądaniach należy także przekazać action=getRewards.
Przykładowe żądanie
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())Odpowiedzi
{
"59": {
"vi": {
"1": "0.01000000",
"3": "0.00500000"
}
}
}{}- USD kwoty taryfowe są zwracane jako dokładne ciągi dziesiętne z 8 miejscami na cyfrze:
- Włączeni dostawcy dostępni dla Twojego klucza.
- country ID → service code → operator ID → reward (USD)
GETgetTopCountriesByServiceТоп стран по сервису+
До 10 стран с лучшей доставкой смс кодов за последние 24 часа
Parametry
| Parametr | Wpisz | Opis |
|---|---|---|
api_key* | string | Osobisty klucz API użytkownika. |
service* | string | Код сервиса из getServices. |
* Parametr wymagany. We wszystkich żądaniach należy także przekazać action=getTopCountriesByService.
Przykładowe żądanie
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())Odpowiedzi
Структура ответа
| Ключ в примере | Opis | Katalog |
|---|---|---|
["12"], ["36"] | ID kraju Первый, внешний уровень 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 не задаёт места в рейтинге.
GETgetBalanceSaldo użytkownika+
Dodatek SMScash: dostępne saldo uwzględniające rozliczenia międzyokresowe, premie za polecenie i wnioski o płatność.
Parametry
| Parametr | Wpisz | Opis |
|---|---|---|
api_key* | string | Osobisty klucz API użytkownika. |
* Parametr wymagany. We wszystkich żądaniach należy także przekazać action=getBalance.
Przykładowe żądanie
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)Odpowiedzi
ACCESS_BALANCE:0.00- getBalance zwraca dostępne saldo w USD z dokładnością do 8 miejsc po przecinku.
- Można wypłacić tylko środki, których okres wstrzymania się zakończył.
GETgetHoldBalanceWstrzymane+
Po otrzymaniu SMS wynagrodzenie jest wstrzymane na okres określony przez dostawcę. We wskazanym terminie kwota automatycznie staje się dostępna do wypłaty.
Parametry
| Parametr | Wpisz | Opis |
|---|---|---|
api_key* | string | Osobisty klucz API użytkownika. |
* Parametr wymagany. We wszystkich żądaniach należy także przekazać action=getHoldBalance.
Przykładowe żądanie
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)Odpowiedzi
ACCESS_HOLD_BALANCE:34.50000001- SMScash · getHoldBalance · USD · 8
- Można wypłacić tylko środki, których okres wstrzymania się zakończył.
Kody odpowiedzi i powtórzenia żądań
W handler_api.php wyniki biznesowe zwykle pochodzą z HTTP 200. Sprawdź tekst główny. Katalogi i getSmsFull zwracają JSON, jeśli się powiedzie; błędy są zawsze tekstowe.
| Kod | HTTP | Przyczyna i kolejny krok |
|---|---|---|
TARIFF_NOT_CONFIGURED | 200 | Ceny jeszcze nie zostały ustaloneDystrybucja numerów zacznie się po skonfigurowaniu nagród SMS. |
COUNTRY_BLOCKED | 200 | Dzielenie numerów dla tego kraju jest zablokowane.Wybierz inny kraj. |
BAD_SERVICE | 200 | Przydzielanie numerów dla tej usługi jest zablokowane.Wybierz inną usługę. |
PROVIDER_NOT_READY | 200 | Alokacja numerów jest tymczasowo niedostępnaOdśwież katalogi API. |
BAD_KEY | 400 | Brak api_key lub nieprawidłowy format.Sprawdź klucz w żądaniu. |
INVALID_API_KEY | 401 | Klucz jest nieznany, unieważniony lub konto jest wyłączone.Utwórz prawidłowy klucz API. |
BAD_COUNTRY | 400 | brakuje kraju lub nie jest to liczba dodatnia.Weź ID z getCountries. |
BAD_SESSION_DURATION | 400 | Numery telefonów są wydawane na dokładnie 20 minut.Prawidłowy session_duration. |
BAD_REQUEST | 400 | Sprawdź pola żądania.Popraw swoją prośbę. |
BAD_SERVICE / BAD_OPERATOR / INVALID_PROVIDER | 200 | Nieznany lub wyłączony element katalogu.Odśwież katalogi API. |
BAD_NUMBER | 200 | Nieprawidłowy format liczby.Podaj liczbę cyframi. |
BAD_ACTION / BAD_STATUS | 200 | Nieznane polecenie, ID lub operacja.Sprawdź ustawienia. |
EMPTY_POOL | 200 | Obecnie nie są dostępne żadne pasujące numery telefonów.Powtórz po 10-30 sekundach lub zmień filtry. |
NUMBER_IN_USE | 200 | Aktywna sesja zajmuje określony numer.Zakończ sesję lub wybierz inny numer. |
NO_ACTIVATION | 200 | Sesja lub poprzedni numer nie należy do Twojego konta.Sprawdź ID i klucz. |
SESSION_CLOSED / SMS_REQUIRED | 200 | Zmiana stanu jest obecnie niedostępna.Sprawdź stan i dostępność SMS. |
SCOPE_BLOCKED | 200 | Usługa, kraj lub sprzedawca nie mają autoryzacji do klucza.Zaktualizuj zakres klucza API. |
INTERNAL_ERROR | 500 | Tymczasowy błąd serwera lub dostawcy.Kontakt i pomoc · X-Request-ID |
ALLOCATION_PENDING | 200 | CzekamgetActiveActivations · getStatus |
ALLOCATION_UNCERTAIN | 200 | Wynik przydzielania nie został potwierdzony. Automatyczne ponawianie jest wyłączone, aby nie przydzielić drugiego numeru.Wynik przydzielania nie został potwierdzony. Automatyczne ponawianie jest wyłączone, aby nie przydzielić drugiego numeru. |
REST zwraca obiekt {"error":{"code":"…","message":"…"}} i regularne statusy HTTP 400/401/403/404/409/503.
{
"error": {
"code": "BAD_REQUEST",
"message": "Sprawdź pola żądania.",
"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 dla nowych integracji
USD kwoty taryfowe są zwracane jako dokładne ciągi dziesiętne z 8 miejscami na cyfrze: 0.00300000 USD.
Waluta salda to USD. Schematy żądań i odpowiedzi są dostępne w OpenAPI.
/api/v1/catalogUsługi i kraje/api/v1/tariffsSMS stawki nagród według kraju/api/v1/offersStawki i nagrody/api/v1/servicesKatalog/api/v1/countriesKatalog/api/v1/operatorsKatalog/api/v1/availability?country=1Dostępność numeru/api/v1/activationsNowa sesja/api/v1/activations/batch?ids=42,43Sprawdź wiele numerów/api/v1/activationsNajnowsze 200 sesje: scope=history, czekanie lub wszystkie/api/v1/activations/{id}Sesja i wiadomości/api/v1/activations/{id}/sms?after_id=0&limit=100Nowy SMS z kursorem/api/v1/activations/{id}/retryWaiting for SMS/api/v1/activations/{id}/finishZakończenie/api/v1/activations/{id}/cancelAnuluj/api/v1/activations/repeatPonowne wydanie numeru/api/v1/keysKlucze API/api/v1/keysUtwórz klucz/api/v1/keys/{id}Zmień nazwę lub policy/api/v1/keys/{id}Unieważnij klucz/api/v1/referralsKod polecający i zarobki/api/v1/summaryBilans i podsumowanie/api/v1/balanceWstrzymane/api/v1/ledgerKsięga zarobków/api/v1/withdrawalsŻądania wypłaty/api/v1/withdrawalsUtwórz prośbę/api/v1/statisticsOgólne statystyki/api/v1/earnings/holdsWstrzymane wynagrodzeniaOtrzymuję tylko nowy 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": "Kod: 001234",
"sender": "Service",
"received_at": "2026-10-09T12:00:00Z"
}
],
"next_cursor": 101,
"has_more": false
}Zapisz next_cursor i przekaż go jako after_id. Jeśli has_more=true, następną stronę można przeczytać natychmiast. limit: 1–200. Sesje i SMS są dostępne tylko dla właściciela.