Documentação da API
Números, mensagens e ganhos, diretamente do seu aplicativo.
Comece com uma solicitação
Crie uma chave API no seu painel de controle, obtenha um número e verifique as mensagens a cada 20 segundos. O pagamento é creditado quando um SMS com um código chega; ler novamente não afeta seu saldo.
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}'Endereço de interface compatível alternativo: /handler_api.php. As integrações REST existentes continuam funcionando.
Construtor de pedidos
Idempotency-Key: UUID · POST · 8–128
Seleção automática: mais códigos na última hora, depois em 24 horas. Sem números: próximo operador.
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.A chave não é guardada. Esta verificação não atribui números.
REST para novas integrações
Serviços e países
Escolha um serviço e um país. O pagamento por SMS depende do país.
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)
Obtenha um número
POST /api/v1/activations
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
Idempotency-Key: request-unique-001
{
"service": "go",
"country": 86
}Seleção automática: mais códigos na última hora, depois em 24 horas. Sem números: próximo operador.
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: stringO número é válido por 20 minutos. SMS é verificado a cada 20 segundos. Você pode cancelar imediatamente.
Verificar vários números
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 messageSaldo · Em retenção
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 — Disponível; held_balance — Em retenção. USD · 8
Só é possível levantar fundos cujo prazo de retenção terminou.
Clientes prontos a usar
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.phpChave API pessoal do usuário.
Escolha um serviço e um país. O pagamento por SMS depende do país.
| Código | Descrição |
|---|---|
getNumber / getNumberV2 | Obtenha um número |
getStatus / getStatusV2 | Obtenha o código mais recente |
setStatus / finishActivation / cancelActivation | Gerenciar sessão |
getPrices / getNumbersStatus | Verifique a disponibilidade |
getRewards (SMScash) | Recompensa para SMS |
getServicesList / getServices | Serviços |
getCountries / getOperators | Serviços e países |
getActiveActivations | Sessões |
getBalance | Saldo do usuário |
getHoldBalance (SMScash) | Em retenção |
cost = 0 USD · activationCost = 0 USDreward — Recompensa para 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.O número é válido por 20 minutos. SMS é verificado a cada 20 segundos. Você pode cancelar imediatamente.
Autenticação e novas tentativas
REST: cabeçalho Authorization: Bearer YOUR_API_KEY. Interface compatível: parâmetros api_key e action. Utilize HTTPS.
Para gerenciar chaves API, insira sua conta.
A frequência de pedidos e a quantidade de números de telefone são ilimitadas. Não há quotas diárias nem horárias.
O número é válido por 20 minutos. SMS é verificado a cada 20 segundos. Você pode cancelar imediatamente.
Em REST, um único Idempotency-Key é necessário para alocação de números, alocação repetida, retry e solicitações de pagamento. É opcional, mas recomendado em handler_api.php. Reutilize a chave ao tentar novamente uma solicitação de rede; use uma nova chave para uma nova operação.
Âmbito da chave API
Pode associar uma chave a serviços, países e fornecedores específicos. Listas vazias permitem todas as opções disponíveis.
{
"label": "Meu software",
"policy": {
"services": [
"go"
],
"countries": [
86
],
"providers": [
1
]
}
}PATCH /api/v1/keys/{id} muda totalmente o nome e policy. O segredo só é mostrado quando criado.
10% no total. 5% + 5% com código de software.
Ao emitir um número, forneça ref proprietário do software. A solicitação é autorizada pela chave do usuário. O código está na seção "Referências" e em GET /api/v1/referrals → software_ref.
| Solicitação | Quem convidou | Programas |
|---|---|---|
| Sem ref | 10% | — |
| Com ref | 5% | 5% |
| Com ref, sem referenciador | — | 5% |
A plataforma paga o bônus sem reduzir o rendimento do usuário. O proprietário do software e o referenciador podem ser a mesma pessoa. Um usuário não pode usar seu próprio código.
Os termos são fixados quando uma sessão é criada; a leitura de SMS e retry não os altera. Passar ref novamente para uma nova sessão de repetição. No cálculo da tarifa, um recompensamento do usuário de USD 0.003 fornece USD 0.00015 cada um ao proprietário e referidor do software. O bônus total é USD 0.00030.
Comandos API
11 métodos estilo XVBC mais seu saldo SMScash.
GETgetNumberObtenha um número+
Cria uma sessão e reserva um número disponível para o usuário. A taxa de recompensa e os destinatários das referências são fixados na alocação; a recompensa é creditada quando um SMS com um código chega.
Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
api_key* | string | Chave API pessoal do usuário. |
service* | string | Códigos de serviço disponíveis. A resposta está limitada à área da chave API. |
country* | integer | Pegue ID de getCountries. |
operator | string | Pegue ID de operators/getOperators (API). operator=1 · any/0 |
session_duration | integer | A sessão dura 20 minutos. Passar 20 ou omitir este parâmetro. |
with_operator | integer | 1 adiciona o ID do operador à resposta; 0 ou sua omissão retorna três segmentos. |
ref | string | Código público do proprietário do software: 5% para ele e 5% para quem convida. Sem ref - 10% para quem convida. |
* Parâmetro obrigatório. Em todas as requisições passe também action=getNumber.
Solicitação de exemplo
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)Respostas
ACCESS_NUMBER:42:380670000000:1EMPTY_POOL- Seleção automática: mais códigos na última hora, depois em 24 horas. Sem números: próximo operador.
- Passe Idempotency-Key: a mesma solicitação com a mesma chave retorna a sessão anterior. Alterar os parâmetros chama IDEMPOTENCY_CONFLICT.
- Um país numérico sem pool fornece EMPTY_POOL; o formato de país errado é BAD_COUNTRY.
- A chave de uma sessão excluída continua sendo usada: a alocação com essa chave retorna SESSION_CLOSED e não gera outro número.
- O resultado da atribuição não está confirmado. A repetição automática está desativada para evitar atribuir um segundo número.
GETgetNumbersStatusVerifique a disponibilidade+
Quantidade de números de telefone disponíveis por serviço e país.
Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
api_key* | string | Chave API pessoal do usuário. |
country* | integer | Pegue ID de getCountries. |
* Parâmetro obrigatório. Em todas as requisições passe também action=getNumbersStatus.
Solicitação de exemplo
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())Respostas
{
"go_0": 0
}- O sufixo _0 significa uma escolha sem um operador específico.
- A disponibilidade refere-se ao conjunto total do fornecedor. O canal escolhido é verificado ao atribuir um número.
GETgetStatusObtenha o código mais recente+
Solicitação fácil de status da sessão e último código SMS. Os zeros à esquerda no código são preservados.
Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
api_key* | string | Chave API pessoal do usuário. |
id* | integer | ID da sua sessão, recebido quando o número foi emitido. |
* Parâmetro obrigatório. Em todas as requisições passe também action=getStatus.
Solicitação de exemplo
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)Respostas
STATUS_WAIT_CODESTATUS_OK:001234STATUS_CANCELNO_ACTIVATION- Faça uma pesquisa a cada 20 segundos. Ler uma mensagem novamente não gera outro pagamento.
- Após retry o código antigo não é retornado: getStatus aguarda o próximo SMS.
- Após a eliminação de um número sem SMS, getStatus e getSms retornam STATUS_CANCEL; getSmsFull retorna o status fechado, um telefone vazio e uma lista de SMS vazia. REST /activations/{id} e /sms retornam 404 NO_ACTIVATION.
GETsetStatusGerenciar sessão+
Finalizações, cancelamentos ou retomadas de espera por SMS. O prazo da sessão permanece o mesmo.
Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
api_key* | string | Chave API pessoal do usuário. |
id* | integer | ID da sua sessão, recebido quando o número foi emitido. |
status* | integer | 3 — espere pelo próximo código sem expandir a sessão; 6 — termine após SMS; 8 — cancele imediatamente. |
* Parâmetro obrigatório. Em todas as requisições passe também action=setStatus.
Solicitação de exemplo
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)Respostas
ACCESS_RETRY_GETACCESS_ACTIVATIONACCESS_CANCEL- Tente novamente e aguarde o próximo código dentro dos 20 minutos originais. Os tempos de problema e expiração não mudam.
- Para status=3 use Idempotency-Key: repetir a solicitação não redefinirá o novo código já recebido. A história do SMS permanece disponível.
- O cancelamento não retira as recompensas já obtidas.
- Apenas os números com um código SMS são mantidos na história. Os números cancelados e expirados sem código são excluídos.
GETgetRepeatNumberEmitir o mesmo número novamente+
Abre uma nova sessão com um número específico do seu histórico. Você pode selecionar outro serviço disponível no mesmo país.
Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
api_key* | string | Chave API pessoal do usuário. |
number* | string | Seu número antigo. Somente números e um + opcional inicial são permitidos. |
service* | string | Códigos de serviço disponíveis. A resposta está limitada à área da chave API. |
session_duration | integer | A sessão dura 20 minutos. Passar 20 ou omitir este parâmetro. |
with_operator | integer | 1 adiciona o ID do operador à resposta; 0 ou sua omissão retorna três segmentos. |
ref | string | Código público do proprietário do software: 5% para ele e 5% para quem convida. Sem ref - 10% para quem convida. |
operator | string | Pegue ID de operators/getOperators (API). operator=1 · any/0 |
* Parâmetro obrigatório. Em todas as requisições passe também action=getRepeatNumber.
Solicitação de exemplo
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)Respostas
ACCESS_NUMBER:43:380670000000NUMBER_IN_USE- Primeiro, encerre ou cancele sua sessão atual. Se o número estiver ocupado, a reemissão não será realizada.
- A nova sessão recebe um novo ID e o tarifário atual. SMS antigos não são copiados para ele. ref é definido novamente.
- SMScash permite repetir apenas números do histórico desta conta. O país é identificado por número.
- A chave de uma sessão excluída continua sendo usada: a alocação com essa chave retorna SESSION_CLOSED e não gera outro número.
GETgetSmsFullObtenha SMS como JSON+
Histórico estruturado de todas as mensagens com ID, remetente, código, texto e dados de país, serviço e fornecedor.
Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
api_key* | string | Chave API pessoal do usuário. |
id* | integer | ID da sua sessão, recebido quando o número foi emitido. |
* Parâmetro obrigatório. Em todas as requisições passe também action=getSmsFull.
Solicitação de exemplo
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())Respostas
{
"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"
}- Formato preferido para integração. Lembre-se de sms[].id para processar apenas novas mensagens.
- Status numérico SMScash: 1 - ativo, 6 - concluído, 8 - cancelado ou expirado. status_name distingue entre espera, recebido, finalizado, cancelado, expirado.
- Os códigos recebidos permanecem disponíveis após o término da sessão. Para volumes grandes, use REST /activations/{id}/sms com after_id.
- Após a eliminação de um número sem SMS, getStatus e getSms retornam STATUS_CANCEL; getSmsFull retorna o status fechado, um telefone vazio e uma lista de SMS vazia. REST /activations/{id} e /sms retornam 404 NO_ACTIVATION.
GETgetSmsObtenha SMS como uma string de texto+
Retorna todo o histórico SMS em formato de string para clientes existentes.
Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
api_key* | string | Chave API pessoal do usuário. |
id* | integer | ID da sua sessão, recebido quando o número foi emitido. |
* Parâmetro obrigatório. Em todas as requisições passe também action=getSms.
Solicitação de exemplo
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)Respostas
STATUS_OK:2026-10-09T12:00:00Z|001234|Код подтверждения: 001234STATUS_WAIT_CODESTATUS_CANCEL- Formato da mensagem: hora|código|texto. Várias mensagens são separadas por dois pontos.
- O próprio texto SMS pode conter dois pontos e barras verticais. Para uma análise confiável, use getSmsFull.
GETgetServicesServiços+
Códigos de serviço disponíveis. A resposta está limitada à área da chave API.
Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
api_key* | string | Chave API pessoal do usuário. |
country | integer | Pegue ID de getCountries. |
* Parâmetro obrigatório. Em todas as requisições passe também action=getServices.
Solicitação de exemplo
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())Respostas
{
"go": {
"name": "Google",
"code": "go"
}
}- O diretório de serviços é compartilhado entre os fornecedores. A disponibilidade do número é verificada separadamente.
GETgetCountriesPaíses+
IDs, nomes e códigos de chamada para os países no canal selecionado.
Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
api_key* | string | Chave API pessoal do usuário. |
* Parâmetro obrigatório. Em todas as requisições passe também action=getCountries.
Solicitação de exemplo
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())Respostas
{
"86": {
"id": 86,
"name": "Italy",
"phone_code": "39"
}
}GETgetOperatorsOperadores+
Operadores disponíveis: ID da API, nome e período de retenção.
Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
api_key* | string | Chave API pessoal do usuário. |
country | integer | Pegue ID de getCountries. |
operator | string | Pegue ID de operators/getOperators (API). operator=1 · any/0 |
* Parâmetro obrigatório. Em todas as requisições passe também action=getOperators.
Solicitação de exemplo
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())Respostas
{
"1": {
"id": 1,
"provider_id": 1,
"operator": 1,
"name": "Оператор 1",
"earnings_hold_days": 45
}
}- Pegue ID de operators/getOperators (API).
GETgetRewardsRecompensa para SMS+
As taxas dependem do país. Todas as quantias na tabela são por SMS pago.
Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
api_key* | string | Chave API pessoal do usuário. |
country | integer | Pegue ID de getCountries. |
service | string | Códigos de serviço disponíveis. A resposta está limitada à área da chave API. |
operator | string | Pegue ID de operators/getOperators (API). operator=1 · any/0 |
* Parâmetro obrigatório. Em todas as requisições passe também action=getRewards.
Solicitação de exemplo
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())Respostas
{
"59": {
"vi": {
"1": "0.01000000",
"3": "0.00500000"
}
}
}{}- USDAs quantias de tarifa são retornadas como strings decimais exatas com 8 casas decimais:
- Provedores habilitados disponíveis para sua chave.
- country ID → service code → operator ID → reward (USD)
GETgetBalanceSaldo do usuário+
Adição SMScash: saldo disponível considerando acumulações, bônus de indicação e solicitações de pagamento.
Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
api_key* | string | Chave API pessoal do usuário. |
* Parâmetro obrigatório. Em todas as requisições passe também action=getBalance.
Solicitação de exemplo
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)Respostas
ACCESS_BALANCE:0.00- getBalance devolve o saldo disponível em USD com até 8 casas decimais.
- Só é possível levantar fundos cujo prazo de retenção terminou.
GETgetHoldBalanceEm retenção+
Após receber um SMS, os ganhos ficam retidos pelo prazo do fornecedor. Na data indicada, o montante fica automaticamente disponível para levantamento.
Parâmetros
| Parâmetro | Tipo | Descrição |
|---|---|---|
api_key* | string | Chave API pessoal do usuário. |
* Parâmetro obrigatório. Em todas as requisições passe também action=getHoldBalance.
Solicitação de exemplo
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)Respostas
ACCESS_HOLD_BALANCE:34.50000001- SMScash · getHoldBalance · USD · 8
- Só é possível levantar fundos cujo prazo de retenção terminou.
Códigos de resposta e solicitações repetidas
Em handler_api.php os resultados de negócios geralmente vêm com HTTP 200. Verifique o corpo do texto. Diretórios e getSmsFull retornam JSON se forem bem-sucedidos; erros são sempre texto.
| Código | HTTP | Causa e próximo passo |
|---|---|---|
TARIFF_NOT_CONFIGURED | 200 | As taxas ainda não foram definidasA alocação de números começará assim que as recompensas SMS forem configuradas. |
COUNTRY_BLOCKED | 200 | A alocação de números para este país está bloqueada.Escolha outro país. |
BAD_SERVICE | 200 | A atribuição de números para este serviço está bloqueada.Escolha outro serviço. |
PROVIDER_NOT_READY | 200 | A alocação de números está temporariamente indisponívelAtualize os catálogos da API. |
BAD_KEY | 400 | Nenhum api_key ou formato inválido.Verifique a chave na solicitação. |
INVALID_API_KEY | 401 | A chave é desconhecida, revogada ou a conta está desativada.Crie uma chave de API válida. |
BAD_COUNTRY | 400 | país está faltando ou não tem um número positivo.Pegue ID de getCountries. |
BAD_SESSION_DURATION | 400 | Os números de telefone são emitidos por exatamente 20 minutos.Correto session_duration. |
BAD_REQUEST | 400 | Parâmetro inválido ou Idempotency-Key.Por favor, corrija sua solicitação. |
BAD_SERVICE / BAD_OPERATOR / INVALID_PROVIDER | 200 | Item de diretório desconhecido ou desativado.Atualize os catálogos da API. |
BAD_NUMBER | 200 | Formato numérico incorreto.Dê o número em algarismos. |
BAD_ACTION / BAD_STATUS | 200 | Comando desconhecido, ID ou operação.Verifique as configurações. |
EMPTY_POOL | 200 | Nenhum número de telefone correspondente está disponível no momento.Repita após 10-30 segundos ou troque os filtros. |
NUMBER_IN_USE | 200 | Um número específico é ocupado por uma sessão ativa.Encerre sua sessão ou selecione outro número. |
NO_ACTIVATION | 200 | A sessão ou número anterior não pertence à sua conta.Verifique ID e chave. |
SESSION_CLOSED / SMS_REQUIRED | 200 | A transição de estado não está disponível no momento.Verifique a condição e disponibilidade do SMS. |
SCOPE_BLOCKED | 200 | O serviço, país ou fornecedor não está autorizado para a chave.Atualize o escopo da chave de API. |
IDEMPOTENCY_CONFLICT | 200 | Esta chave de consulta já está associada a outros parâmetros.Para uma nova operação, crie outro Idempotency-Key. |
BAD_REF / SELF_REF | 400 | O código do software é desconhecido, desabilitado ou pertence ao próprio usuário.Passe adiante o código do proprietário do software. |
INTERNAL_ERROR | 500 | Erro temporário do servidor ou fornecedor.Repita com atraso e o mesmo Idempotency-Key. |
ALLOCATION_PENDING | 200 | A atribuição do número já está em curso. Tente novamente com o mesmo Idempotency-Key.A atribuição do número já está em curso. Tente novamente com o mesmo Idempotency-Key. |
ALLOCATION_UNCERTAIN | 200 | O resultado da atribuição não está confirmado. A repetição automática está desativada para evitar atribuir um segundo número.O resultado da atribuição não está confirmado. A repetição automática está desativada para evitar atribuir um segundo número. |
REST devolve um objeto {"error":{"code":"…","message":"…"}} e status HTTP regular 400/401/403/404/409/503.
{
"error": {
"code": "BAD_REQUEST",
"message": "Verifique os campos da solicitação.",
"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 para novas integrações
USDAs quantias de tarifa são retornadas como strings decimais exatas com 8 casas decimais: 0.00300000 USD.
A moeda do saldo é USD. Os esquemas de solicitação e resposta estão disponíveis em OpenAPI.
/api/v1/catalogServiços e países/api/v1/tariffsSMS taxas de recompensa por país/api/v1/offersTaxas e recompensas/api/v1/servicesDiretório/api/v1/countriesDiretório/api/v1/operatorsDiretório/api/v1/availability?country=1Disponibilidade de número/api/v1/activationsNova sessão/api/v1/activations/batch?ids=42,43Verificar vários números/api/v1/activationsÚltimas 200 sessões: scope=history, esperando ou todas/api/v1/activations/{id}Sessão e mensagens/api/v1/activations/{id}/sms?after_id=0&limit=100Novo SMS com cursor/api/v1/activations/{id}/retryEsperando por SMS/api/v1/activations/{id}/finishConclusão/api/v1/activations/{id}/cancelCancelar/api/v1/activations/repeatReemissão de número/api/v1/keysChaves API/api/v1/keysCrie uma chave/api/v1/keys/{id}Alterar nome ou policy/api/v1/keys/{id}Revogar chave/api/v1/referralsCódigo de referência e ganhos/api/v1/summarySaldo e Resumo/api/v1/balanceEm retenção/api/v1/ledgerLivro de ganhos/api/v1/withdrawalsSolicitações de pagamento/api/v1/withdrawalsCrie uma solicitação/api/v1/statisticsEstatísticas gerais/api/v1/earnings/holdsRetenção de ganhosRecebendo apenas novos 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": "Código: 001234",
"sender": "Service",
"received_at": "2026-10-09T12:00:00Z"
}
],
"next_cursor": 101,
"has_more": false
}Salve next_cursor e passe-o adiante como after_id. Se has_more=true, a próxima página poderá ser lida imediatamente. limit: 1–200. Sessões e SMS estão disponíveis apenas para o proprietário.