Documentación de la API
Números, mensajes y ganancias, directamente desde tu aplicación.
Comience con una solicitud
Cree una clave API en su panel de control, obtenga un número y verifique los mensajes cada 20 segundos. El pago se aplica cuando llegue un SMS con un código; leerlo nuevamente no afecta su 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}'Dirección de interfaz compatible alternativa: /handler_api.php. Las integraciones existentes de REST continúan funcionando.
Constructor de solicitudes
Idempotency-Key: UUID · POST · 8–128
Selección automática: más códigos en la última hora, luego en 24 horas. Sin números: siguiente 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.La clave no se guarda. Esta comprobación no asigna números.
REST para nuevas integraciones
Servicios y países
Elige un servicio y un país. El pago por SMS depende del 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)
obtener un numero
POST /api/v1/activations
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
Idempotency-Key: request-unique-001
{
"service": "go",
"country": 86
}Selección automática: más códigos en la última hora, luego en 24 horas. Sin números: siguiente 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: stringEl número es válido durante 20 minutos. Los SMS se consultan cada 20 segundos. Puedes cancelar de inmediato.
Comprobar varios 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 · Retenido
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 — Disponible; held_balance — Retenido. USD · 8
Solo se pueden retirar fondos cuyo plazo de retención haya terminado.
Clientes listos para 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.phpClave API personal del usuario.
Elige un servicio y un país. El pago por SMS depende del país.
| Código | Descripción |
|---|---|
getNumber / getNumberV2 | obtener un numero |
getStatus / getStatusV2 | Obtenga el código más reciente |
setStatus / finishActivation / cancelActivation | Administrar sesión |
getPrices / getNumbersStatus | Consultar disponibilidad |
getRewards (SMScash) | Recompensa por SMS |
getServicesList / getServices | Servicios |
getCountries / getOperators | Servicios y países |
getActiveActivations | Sesiones |
getBalance | Saldo del usuario |
getHoldBalance (SMScash) | Retenido |
cost = 0 USD · activationCost = 0 USDreward — Recompensa por 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.El número es válido durante 20 minutos. Los SMS se consultan cada 20 segundos. Puedes cancelar de inmediato.
Autenticación y reintentos
REST: encabezado Authorization: Bearer YOUR_API_KEY. Interfaz compatible: parámetros api_key y action. Utilice HTTPS.
Para administrar las claves API, ingrese a su cuenta.
La frecuencia de solicitudes y la cantidad de números de teléfono no tienen límite. No hay cuotas diarias ni por hora.
El número es válido durante 20 minutos. Los SMS se consultan cada 20 segundos. Puedes cancelar de inmediato.
En REST, un único Idempotency-Key es necesario para la asignación de números, la repetición de asignaciones, retry y solicitudes de pago. Es opcional pero recomendado en handler_api.php. Reutilice la clave cuando vuelva a intentar una solicitud de red; utilice una nueva clave para una nueva operación.
Ámbito de la clave API
Puedes vincular una clave a servicios, países y proveedores concretos. Las listas vacías permiten todas las opciones disponibles.
{
"label": "mi software",
"policy": {
"services": [
"go"
],
"countries": [
86
],
"providers": [
1
]
}
}PATCH /api/v1/keys/{id} cambia el nombre y policy por completo. El secreto sólo se muestra cuando se crea.
10% en total. 5% + 5% con código de software.
Al emitir un número, proporcione ref propietario del software. La solicitud está autorizada por la clave del usuario. El código está en la sección "Referidos" y en GET /api/v1/referrals → software_ref.
| Solicitar | Quien te invitó | programas |
|---|---|---|
| Sin ref | 10% | — |
| Con ref | 5% | 5% |
| Con ref, sin referente | — | 5% |
La plataforma paga el bono sin reducir los ingresos del usuario. El propietario del software y el referente pueden ser la misma persona. Un usuario no puede utilizar su propio código.
Los términos se fijan cuando se crea una sesión; leer SMS y retry no los cambia. Pasar ref nuevamente para una nueva sesión de repetición. En el cálculo del tarifario, una recompensa para el usuario de USD 0.003 proporciona USD 0.00015 a cada uno del propietario y referente del software. El bono total es USD 0.00030.
Comandos API
11 métodos estilo XVBC más tu saldo SMScash.
GETgetNumberobtener un numero+
Crea una sesión y reserva un número disponible para el usuario. La tasa de recompensa y los receptores de referencias están fijados en la asignación; la recompensa se acredita cuando llega un SMS con un código.
Parámetros
| Parámetro | Tipo | Descripción |
|---|---|---|
api_key* | string | Clave API personal del usuario. |
service* | string | Códigos de servicio disponibles. La respuesta se limita al área de la tecla API. |
country* | integer | Tome ID de getCountries. |
operator | string | Tome ID de operators/getOperators (API). operator=1 · any/0 |
session_duration | integer | La sesión dura 20 minutos. Pasar 20 o ometer este parámetro. |
with_operator | integer | 1 añade el ID del operador a la respuesta; 0 o su omisión devuelve tres segmentos. |
ref | string | Código público del propietario del software: 5% para él y 5% para el invitante. Sin ref - 10% al que invita. |
* Parámetro requerido. En todas las solicitudes también pase action=getNumber.
Solicitud de ejemplo
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)Respuestas
ACCESS_NUMBER:42:380670000000:1EMPTY_POOL- Selección automática: más códigos en la última hora, luego en 24 horas. Sin números: siguiente operador.
- Pase Idempotency-Key: la misma solicitud con la misma clave devuelve la sesión anterior. Cambiar los parámetros llama a IDEMPOTENCY_CONFLICT.
- Un país numérico sin grupo da EMPTY_POOL; el formato de país incorrecto es BAD_COUNTRY.
- La clave de una sesión eliminada sigue en uso: volver a asignar con esa clave devuelve SESSION_CLOSED y no emite otro número.
- El resultado de la asignación no está confirmado. El reintento automático está desactivado para evitar asignar un segundo número.
GETgetNumbersStatusConsultar disponibilidad+
Cantidad de números de teléfono disponibles por servicio y país.
Parámetros
| Parámetro | Tipo | Descripción |
|---|---|---|
api_key* | string | Clave API personal del usuario. |
country* | integer | Tome ID de getCountries. |
* Parámetro requerido. En todas las solicitudes también pase action=getNumbersStatus.
Solicitud de ejemplo
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())Respuestas
{
"go_0": 0
}- El sufijo _0 significa una elección sin un operador específico.
- La disponibilidad corresponde al conjunto total del proveedor. El canal elegido se comprueba al asignar un número.
GETgetStatusObtenga el código más reciente+
Solicitud sencilla del estado de la sesión y del último código SMS. Se conservan los ceros a la izquierda del código.
Parámetros
| Parámetro | Tipo | Descripción |
|---|---|---|
api_key* | string | Clave API personal del usuario. |
id* | integer | ID de su sesión, recibido cuando se emitió el número. |
* Parámetro requerido. En todas las solicitudes también pase action=getStatus.
Solicitud de ejemplo
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)Respuestas
STATUS_WAIT_CODESTATUS_OK:001234STATUS_CANCELNO_ACTIVATION- Realice una encuesta cada 20 segundos. Leer un mensaje nuevamente no genera otro pago.
- Después de retry no se devuelve el código antiguo: getStatus espera el siguiente SMS.
- Después de que un número sin SMS sea eliminado, getStatus y getSms devuelven STATUS_CANCEL; getSmsFull devuelve el estado cerrado, un teléfono vacío y una lista de SMS vacía. REST /activations/{id} y /sms devuelven 404 NO_ACTIVATION.
GETsetStatusAdministrar sesión+
Terminaciones, cancelaciones o reanudaciones en espera de SMS. El vencimiento de la sesión permanece igual.
Parámetros
| Parámetro | Tipo | Descripción |
|---|---|---|
api_key* | string | Clave API personal del usuario. |
id* | integer | ID de su sesión, recibido cuando se emitió el número. |
status* | integer | 3 — espere el siguiente código sin extender la sesión; 6 — termine después de SMS; 8 — cancele inmediatamente. |
* Parámetro requerido. En todas las solicitudes también pase action=setStatus.
Solicitud de ejemplo
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)Respuestas
ACCESS_RETRY_GETACCESS_ACTIVATIONACCESS_CANCEL- Repita la acción y espere el siguiente código dentro de los 20 minutos originales. Los tiempos de problema y expiración no cambian.
- Para estado = 3 use Idempotency-Key: repetir la solicitud no restablecerá el nuevo código ya recibido. El historial de SMS sigue disponible.
- La cancelación no descuenta las recompensas ya obtenidas.
- Solo los números con un código SMS se conservan en el historial. Los números cancelados y caducados sin código se eliminan.
GETgetRepeatNumberVuelve a emitir el mismo número+
Abre una nueva sesión con un número específico de tu historial. Puedes seleccionar otro servicio disponible en el mismo país.
Parámetros
| Parámetro | Tipo | Descripción |
|---|---|---|
api_key* | string | Clave API personal del usuario. |
number* | string | Tu antiguo número. Sólo se permiten números y un + inicial opcional. |
service* | string | Códigos de servicio disponibles. La respuesta se limita al área de la tecla API. |
session_duration | integer | La sesión dura 20 minutos. Pasar 20 o ometer este parámetro. |
with_operator | integer | 1 añade el ID del operador a la respuesta; 0 o su omisión devuelve tres segmentos. |
ref | string | Código público del propietario del software: 5% para él y 5% para el invitante. Sin ref - 10% al que invita. |
operator | string | Tome ID de operators/getOperators (API). operator=1 · any/0 |
* Parámetro requerido. En todas las solicitudes también pase action=getRepeatNumber.
Solicitud de ejemplo
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)Respuestas
ACCESS_NUMBER:43:380670000000NUMBER_IN_USE- Primero, finalice o cancele su sesión actual. Si el número está ocupado, no se realiza la reemisión.
- La nueva sesión recibe un nuevo ID y la tarifa actual. Los antiguos SMS no se copian en él. ref se configura nuevamente.
- SMScash permite repetir solo números del historial de esta cuenta. El país se identifica por un número.
- La clave de una sesión eliminada sigue en uso: volver a asignar con esa clave devuelve SESSION_CLOSED y no emite otro número.
GETgetSmsFullObtenga SMS como JSON+
Historial estructurado de todos los mensajes con ID, remitente, código, texto y país, datos de servicio y proveedor.
Parámetros
| Parámetro | Tipo | Descripción |
|---|---|---|
api_key* | string | Clave API personal del usuario. |
id* | integer | ID de su sesión, recibido cuando se emitió el número. |
* Parámetro requerido. En todas las solicitudes también pase action=getSmsFull.
Solicitud de ejemplo
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())Respuestas
{
"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 la integración. Recuerde sms[].id para procesar solo mensajes nuevos.
- Estado numérico SMScash: 1 - activo, 6 - completado, 8 - cancelado o caducado. status_name distingue entre en espera, recibido, finalizado, cancelado, caducado.
- Los códigos recibidos permanecen disponibles después de que se cierre una sesión. Para volúmenes grandes, utilice REST /activations/{id}/sms con after_id.
- Después de que un número sin SMS sea eliminado, getStatus y getSms devuelven STATUS_CANCEL; getSmsFull devuelve el estado cerrado, un teléfono vacío y una lista de SMS vacía. REST /activations/{id} y /sms devuelven 404 NO_ACTIVATION.
GETgetSmsObtenga SMS como una cadena de texto+
Devuelve el historial completo de SMS en formato de cadena para clientes existentes.
Parámetros
| Parámetro | Tipo | Descripción |
|---|---|---|
api_key* | string | Clave API personal del usuario. |
id* | integer | ID de su sesión, recibido cuando se emitió el número. |
* Parámetro requerido. En todas las solicitudes también pase action=getSms.
Solicitud de ejemplo
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)Respuestas
STATUS_OK:2026-10-09T12:00:00Z|001234|Код подтверждения: 001234STATUS_WAIT_CODESTATUS_CANCEL- Formato del mensaje: tiempo|código|texto. Varios mensajes están separados por dos puntos.
- El texto SMS puede contener dos puntos y barras verticales. Para un análisis confiable, use getSmsFull.
GETgetServicesServicios+
Códigos de servicio disponibles. La respuesta se limita al área de la tecla API.
Parámetros
| Parámetro | Tipo | Descripción |
|---|---|---|
api_key* | string | Clave API personal del usuario. |
country | integer | Tome ID de getCountries. |
* Parámetro requerido. En todas las solicitudes también pase action=getServices.
Solicitud de ejemplo
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())Respuestas
{
"go": {
"name": "Google",
"code": "go"
}
}- El directorio de servicios se comparte entre los proveedores. La disponibilidad de números se verifica por separado.
GETgetCountriesPaíses+
Identificadores, nombres y códigos de llamada para los países en el canal seleccionado.
Parámetros
| Parámetro | Tipo | Descripción |
|---|---|---|
api_key* | string | Clave API personal del usuario. |
* Parámetro requerido. En todas las solicitudes también pase action=getCountries.
Solicitud de ejemplo
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())Respuestas
{
"86": {
"id": 86,
"name": "Italy",
"phone_code": "39"
}
}GETgetOperatorsOperadores+
Operadores disponibles: ID de API, nombre y período de retención.
Parámetros
| Parámetro | Tipo | Descripción |
|---|---|---|
api_key* | string | Clave API personal del usuario. |
country | integer | Tome ID de getCountries. |
operator | string | Tome ID de operators/getOperators (API). operator=1 · any/0 |
* Parámetro requerido. En todas las solicitudes también pase action=getOperators.
Solicitud de ejemplo
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())Respuestas
{
"1": {
"id": 1,
"provider_id": 1,
"operator": 1,
"name": "Оператор 1",
"earnings_hold_days": 45
}
}- Tome ID de operators/getOperators (API).
GETgetRewardsRecompensa por SMS+
Las tasas dependen del país. Todas las cantidades de la tabla son por SMS pagado.
Parámetros
| Parámetro | Tipo | Descripción |
|---|---|---|
api_key* | string | Clave API personal del usuario. |
country | integer | Tome ID de getCountries. |
service | string | Códigos de servicio disponibles. La respuesta se limita al área de la tecla API. |
operator | string | Tome ID de operators/getOperators (API). operator=1 · any/0 |
* Parámetro requerido. En todas las solicitudes también pase action=getRewards.
Solicitud de ejemplo
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())Respuestas
{
"59": {
"vi": {
"1": "0.01000000",
"3": "0.00500000"
}
}
}{}- USDLos montos de tarifa se devuelven como cadenas decimales exactas con 8 casillas decimales:
- Proveedores habilitados disponibles para su clave.
- country ID → service code → operator ID → reward (USD)
GETgetBalanceSaldo del usuario+
Adición SMScash: saldo disponible teniendo en cuenta acumulaciones, bonos por referencia y solicitudes de pago.
Parámetros
| Parámetro | Tipo | Descripción |
|---|---|---|
api_key* | string | Clave API personal del usuario. |
* Parámetro requerido. En todas las solicitudes también pase action=getBalance.
Solicitud de ejemplo
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)Respuestas
ACCESS_BALANCE:0.00- getBalance devuelve el saldo disponible en USD con hasta 8 decimales.
- Solo se pueden retirar fondos cuyo plazo de retención haya terminado.
GETgetHoldBalanceRetenido+
Tras recibir un SMS, sus ganancias se retienen durante el plazo del proveedor. En la fecha indicada, el importe pasa automáticamente a estar disponible para retirar.
Parámetros
| Parámetro | Tipo | Descripción |
|---|---|---|
api_key* | string | Clave API personal del usuario. |
* Parámetro requerido. En todas las solicitudes también pase action=getHoldBalance.
Solicitud de ejemplo
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)Respuestas
ACCESS_HOLD_BALANCE:34.50000001- SMScash · getHoldBalance · USD · 8
- Solo se pueden retirar fondos cuyo plazo de retención haya terminado.
Códigos de respuesta y solicitudes repetidas
Z En handler_api.php, los resultados comerciales generalmente vienen con HTTP 200. Verifique el texto del cuerpo. Los directorios y getSmsFull devuelven JSON si tienen éxito; Los errores son siempre texto.
| Código | HTTP | Causa y siguiente paso |
|---|---|---|
TARIFF_NOT_CONFIGURED | 200 | Los tipos de cambio aún no están establecidosLa asignación de números comenzará una vez que se configuren las recompensas SMS. |
COUNTRY_BLOCKED | 200 | La asignación de números para este país está bloqueada.Elija otro país. |
BAD_SERVICE | 200 | La asignación de números para este servicio está bloqueada.Elige otro servicio. |
PROVIDER_NOT_READY | 200 | La asignación de números está temporalmente no disponibleActualizar los catálogos de API. |
BAD_KEY | 400 | Sin api_key o formato no válido.Verifique la clave en la solicitud. |
INVALID_API_KEY | 401 | La clave es desconocida, revocada o la cuenta está deshabilitada.Cree una clave API válida. |
BAD_COUNTRY | 400 | país falta o no hay un número positivo.Tome ID de getCountries. |
BAD_SESSION_DURATION | 400 | Los números de teléfono se otorgan por exactamente 20 minutos.Correcto session_duration. |
BAD_REQUEST | 400 | Parámetro no válido o Idempotency-Key.Por favor corrija su solicitud. |
BAD_SERVICE / BAD_OPERATOR / INVALID_PROVIDER | 200 | Elemento de directorio desconocido o deshabilitado.Actualizar los catálogos de API. |
BAD_NUMBER | 200 | Formato de número incorrecto.Da el número en dígitos. |
BAD_ACTION / BAD_STATUS | 200 | Comando desconocido, ID u operación.Verifique la configuración. |
EMPTY_POOL | 200 | Actualmente no hay números de teléfono coincidentes disponibles.Repita después de 10 a 30 segundos o cambie los filtros. |
NUMBER_IN_USE | 200 | Un número específico está ocupado por una sesión activa.Finaliza tu sesión o selecciona otro número. |
NO_ACTIVATION | 200 | La sesión o número anterior no pertenece a tu cuenta.Verifique ID y clave. |
SESSION_CLOSED / SMS_REQUIRED | 200 | La transición de estado no está disponible actualmente.Z Consulta el estado y disponibilidad de SMS. |
SCOPE_BLOCKED | 200 | El servicio, país o proveedor no está autorizado para la clave.Actualice el alcance de la clave API. |
IDEMPOTENCY_CONFLICT | 200 | Esta clave de consulta ya está asociada con otros parámetros.Para una nueva operación, cree otro Idempotency-Key. |
BAD_REF / SELF_REF | 400 | El código del software es desconocido, inhabilitado o pertenece al propio usuario.Transmita el código del propietario del software. |
INTERNAL_ERROR | 500 | Error temporal del servidor o proveedor.Repetir con retraso y lo mismo Idempotency-Key. |
ALLOCATION_PENDING | 200 | La solicitud de número ya está en curso. Reintenta con el mismo Idempotency-Key.La solicitud de número ya está en curso. Reintenta con el mismo Idempotency-Key. |
ALLOCATION_UNCERTAIN | 200 | El resultado de la asignación no está confirmado. El reintento automático está desactivado para evitar asignar un segundo número.El resultado de la asignación no está confirmado. El reintento automático está desactivado para evitar asignar un segundo número. |
REST devuelve un objeto {"error":{"code":"…","message":"…"}} y estados regulares HTTP 400/401/403/404/409/503.
{
"error": {
"code": "BAD_REQUEST",
"message": "Consulta los campos de solicitud.",
"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 nuevas integraciones
USDLos montos de tarifa se devuelven como cadenas decimales exactas con 8 casillas decimales: 0.00300000 USD.
La moneda del saldo es USD. Los esquemas de solicitud y respuesta están disponibles en OpenAPI.
/api/v1/catalogServicios y países/api/v1/tariffsSMS tasas de recompensa por país/api/v1/offersTarifas y recompensas/api/v1/servicesDirectorio/api/v1/countriesDirectorio/api/v1/operatorsDirectorio/api/v1/availability?country=1Disponibilidad de números/api/v1/activationsNueva sesión/api/v1/activations/batch?ids=42,43Comprobar varios números/api/v1/activationsÚltimas 200 sesiones: scope=history, esperando o todas/api/v1/activations/{id}Sesión y mensajes/api/v1/activations/{id}/sms?after_id=0&limit=100Nuevo SMS con cursor/api/v1/activations/{id}/retryEsperando a SMS/api/v1/activations/{id}/finishFinalización/api/v1/activations/{id}/cancelCancelar/api/v1/activations/repeatReedición de números/api/v1/keysTeclas API/api/v1/keysCrear una clave/api/v1/keys/{id}Cambiar nombre o policy/api/v1/keys/{id}Revocar clave/api/v1/referralsCódigo de referencia y ganancias/api/v1/summaryBalance y resumen/api/v1/balanceRetenido/api/v1/ledgerLibro mayor de ganancias/api/v1/withdrawalsSolicitudes de pago/api/v1/withdrawalsCrear una solicitud/api/v1/statisticsEstadísticas generales/api/v1/earnings/holdsRetención de gananciasRecibiendo solo SMS nuevo
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
}Guarde next_cursor y páselo como after_id. Si has_more=true, la página siguiente se puede leer inmediatamente. limit: 1–200. Sessions y SMS están disponibles sólo para el propietario.