Dokumentasi API
Nomor, pesan, dan penghasilan, langsung dari aplikasi Anda.
Mulailah dengan satu permintaan
Buat kunci API di dashboard Anda, ambil angka tersebut, dan periksa pesan setiap 20 detik. Pembayaran akan ditransfer ketika surat dengan kode SMS tiba; membacanya lagi tidak mempengaruhi saldo Anda.
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}'Alamat antarmuka alternatif yang kompatibel: /handler_api.php. Integrasi REST yang ada terus berfungsi.
Pembuat permintaan
Idempotency-Key: UUID · POST · 8–128
Pilih otomatis: kode terbanyak dalam satu jam terakhir, lalu 24 jam. Nomor habis: operator berikutnya.
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.Kunci tidak disimpan. Pemeriksaan ini tidak memberikan nomor.
REST untuk integrasi baru
Layanan dan negara
Pilih layanan dan negara. Bayaran per SMS bergantung pada negara.
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)
Dapatkan nomor
POST /api/v1/activations
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
Idempotency-Key: request-unique-001
{
"service": "go",
"country": 86
}Pilih otomatis: kode terbanyak dalam satu jam terakhir, lalu 24 jam. Nomor habis: operator berikutnya.
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: stringNomor tersebut berlaku selama 20 menit. SMS diperiksa setiap 20 detik. Anda dapat membatalkan segera.
Periksa beberapa nomor
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 · Ditahan
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 — Tersedia; held_balance — Ditahan. USD · 8
Hanya dana yang masa penahanannya telah berakhir yang dapat ditarik.
Klien siap pakai
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.phpKunci API pribadi pengguna.
Pilih layanan dan negara. Bayaran per SMS bergantung pada negara.
| Kode | Deskripsi |
|---|---|
getNumber / getNumberV2 | Dapatkan nomor |
getStatus / getStatusV2 | Dapatkan kode terbaru |
setStatus / finishActivation / cancelActivation | Kelola sesi |
getPrices / getNumbersStatus | Periksa ketersediaan |
getRewards (SMScash) | Hadiah untuk SMS |
getServicesList / getServices | Layanan |
getCountries / getOperators | Layanan dan negara |
getActiveActivations | Sesi |
getBalance | Saldo pengguna |
getHoldBalance (SMScash) | Ditahan |
cost = 0 USD · activationCost = 0 USDreward — Hadiah untuk 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.Nomor tersebut berlaku selama 20 menit. SMS diperiksa setiap 20 detik. Anda dapat membatalkan segera.
Autentikasi dan percobaan ulang
REST: tajuk Authorization: Bearer YOUR_API_KEY. Antarmuka yang Kompatibel: parameter api_key dan action. Gunakan HTTPS.
Untuk mengelola kunci API, masukkan akun Anda.
Frekuensi permintaan dan jumlah nomor telepon tidak dibatasi. Tidak ada kuota harian atau per jam.
Nomor tersebut berlaku selama 20 menit. SMS diperiksa setiap 20 detik. Anda dapat membatalkan segera.
Di REST, unik Idempotency-Key diperlukan untuk alokasi nomor, alokasi berulang, retry dan permintaan pembayaran. Ini opsional tetapi direkomendasikan di handler_api.php. Gunakan kembali kunci tersebut saat mencoba kembali permintaan jaringan; gunakan kunci baru untuk operasi baru.
Cakupan kunci API
Kunci dapat dikaitkan dengan layanan, negara, dan penyedia tertentu. Daftar kosong mengizinkan semua opsi yang tersedia.
{
"label": "Perangkat lunak saya",
"policy": {
"services": [
"go"
],
"countries": [
86
],
"providers": [
1
]
}
}PATCH /api/v1/keys/{id} mengubah nama dan policy seluruhnya. Rahasianya hanya ditampilkan saat dibuat.
10% totalnya. 5% + 5% dengan kode perangkat lunak.
Saat mengeluarkan nomor, harap berikan ref pemilik perangkat lunak. Permintaan tersebut disahkan oleh kunci pengguna. Kodenya ada di bagian "Referensi" dan di GET /api/v1/referrals → software_ref.
| Permintaan | Pengundang | Perangkat lunak |
|---|---|---|
| Tanpa ref | 10% | — |
| Dengan ref | 5% | 5% |
| Dengan ref, tidak ada referensi | — | 5% |
Platform ini membayar bonus tanpa mengurangi pendapatan pengguna. Pemilik perangkat lunak dan perujuk bisa menjadi orang yang sama. Seorang pengguna tidak dapat menggunakan kodenya sendiri.
Ketentuan tersebut ditetapkan saat sesi dibuat; membaca SMS dan retry tidak mengubahnya. Masukkan ref lagi untuk sesi ulang yang baru. Dalam perhitungan tarif, imbalan pengguna sebesar USD 0.003 memberikan USD 0.00015 per unit kepada pemilik perangkat lunak dan pihak yang mengarahkannya. Bonus totalnya adalah USD 0.00030.
perintah API
11 metode gaya XVBC ditambah saldo SMScash Anda.
GETgetNumberDapatkan nomor+
Membuat sesi dan mencadangkan nomor telepon yang tersedia untuk pengguna. Tarif imbalan dan penerima bagian referral ditetapkan saat alokasi; imbalan ditambahkan saat SMS berisi kode diterima.
Parameter
| Parameter | Ketik | Deskripsi |
|---|---|---|
api_key* | string | Kunci API pribadi pengguna. |
service* | string | Kode layanan yang tersedia. Jawabannya terbatas pada area kunci API. |
country* | integer | Ambil ID dari getCountries. |
operator | string | Ambil ID dari operators/getOperators (API). operator=1 · any/0 |
session_duration | integer | Sesi berlangsung 20 menit. Lakukan 20 atau abaikan parameter ini. |
with_operator | integer | 1 menambahkan ID operator ke respons; 0 atau tanpa parameter mengembalikan tiga segmen. |
ref | string | Kode publik pemilik perangkat lunak: 5% untuknya dan 5% untuk pengundang. Tanpa ref - 10% untuk pengundang. |
* Parameter yang diperlukan. Di semua permintaan, lewati juga action=getNumber.
Contoh permintaan
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)Tanggapan
ACCESS_NUMBER:42:380670000000:1EMPTY_POOL- Pilih otomatis: kode terbanyak dalam satu jam terakhir, lalu 24 jam. Nomor habis: operator berikutnya.
- Lulus Idempotency-Key: permintaan yang sama dengan kunci yang sama mengembalikan sesi sebelumnya. Mengubah parameter memanggil IDEMPOTENCY_CONFLICT.
- Negara numerik tanpa kumpulan menghasilkan EMPTY_POOL; format negara yang salah adalah BAD_COUNTRY.
- Kunci sesi yang dihapus tetap digunakan: mengulang alokasi dengan kunci tersebut akan menghasilkan SESSION_CLOSED dan tidak memberikan nomor lain.
- Hasil alokasi belum dikonfirmasi. Pengulangan otomatis dinonaktifkan agar tidak mengalokasikan nomor kedua.
GETgetNumbersStatusPeriksa ketersediaan+
Jumlah nomor telepon yang tersedia menurut layanan dan negara.
Parameter
| Parameter | Ketik | Deskripsi |
|---|---|---|
api_key* | string | Kunci API pribadi pengguna. |
country* | integer | Ambil ID dari getCountries. |
* Parameter yang diperlukan. Di semua permintaan, lewati juga action=getNumbersStatus.
Contoh permintaan
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())Tanggapan
{
"go_0": 0
}- Akhiran _0 berarti pilihan tanpa operator tertentu.
- Ketersediaan mengacu pada seluruh kumpulan nomor pemasok. Saluran yang dipilih diperiksa saat nomor dialokasikan.
GETgetStatusDapatkan kode terbaru+
Permintaan mudah untuk status sesi dan kode SMS terakhir. Angka nol di awal kode dipertahankan.
Parameter
| Parameter | Ketik | Deskripsi |
|---|---|---|
api_key* | string | Kunci API pribadi pengguna. |
id* | integer | ID sesi Anda, diterima saat nomor dikeluarkan. |
* Parameter yang diperlukan. Di semua permintaan, lewati juga action=getStatus.
Contoh permintaan
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)Tanggapan
STATUS_WAIT_CODESTATUS_OK:001234STATUS_CANCELNO_ACTIVATION- Lakukan pemodelan setiap 20 detik. Membaca pesan lagi tidak akan menghasilkan pembayaran tambahan.
- Setelah retry kode lama tidak dikembalikan: getStatus menunggu SMS berikutnya.
- Setelah angka tanpa SMS dihapus, getStatus dan getSms kembali ke STATUS_CANCEL; getSmsFull kembali ke status tertutup, telepon kosong, dan daftar SMS kosong. REST /activations/{id} dan /sms kembali ke 404 NO_ACTIVATION.
GETsetStatusKelola sesi+
Proses selesai, dibatalkan, atau dilanjutkan sedang menunggu SMS. Waktu habis sesi tetap sama.
Parameter
| Parameter | Ketik | Deskripsi |
|---|---|---|
api_key* | string | Kunci API pribadi pengguna. |
id* | integer | ID sesi Anda, diterima saat nomor dikeluarkan. |
status* | integer | 3 — tunggu kode berikutnya tanpa memperpanjang sesi; 6 — selesai setelah SMS; 8 — batalkan segera. |
* Parameter yang diperlukan. Di semua permintaan, lewati juga action=setStatus.
Contoh permintaan
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)Tanggapan
ACCESS_RETRY_GETACCESS_ACTIVATIONACCESS_CANCEL- Ulangi prosesnya selama 20 menit, menunggu kode berikutnya. Waktu masalah dan waktu habisnya tidak berubah.
- Untuk status=3 gunakan Idempotency-Key: mengulangi permintaan tidak akan mereset kode baru yang sudah diterima. Sejarah SMS tetap tersedia.
- Pembatalan tidak mengurangi imbalan yang sudah diperoleh.
- Hanya angka-angka dengan kode SMS yang disimpan dalam sejarah. Angka-angka yang dibatalkan dan berakhir masa berlakunya tanpa kode akan dihapus.
GETgetRepeatNumberKeluarkan nomor yang sama lagi+
Membuka sesi baru dengan nomor tertentu dari riwayat Anda. Anda dapat memilih layanan lain yang tersedia di negara yang sama.
Parameter
| Parameter | Ketik | Deskripsi |
|---|---|---|
api_key* | string | Kunci API pribadi pengguna. |
number* | string | Nomor lama Anda. Hanya angka dan tanda + di depan opsional yang diperbolehkan. |
service* | string | Kode layanan yang tersedia. Jawabannya terbatas pada area kunci API. |
session_duration | integer | Sesi berlangsung 20 menit. Lakukan 20 atau abaikan parameter ini. |
with_operator | integer | 1 menambahkan ID operator ke respons; 0 atau tanpa parameter mengembalikan tiga segmen. |
ref | string | Kode publik pemilik perangkat lunak: 5% untuknya dan 5% untuk pengundang. Tanpa ref - 10% untuk pengundang. |
operator | string | Ambil ID dari operators/getOperators (API). operator=1 · any/0 |
* Parameter yang diperlukan. Di semua permintaan, lewati juga action=getRepeatNumber.
Contoh permintaan
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)Tanggapan
ACCESS_NUMBER:43:380670000000NUMBER_IN_USE- Pertama, akhiri atau batalkan sesi Anda saat ini. Jika nomor sedang sibuk, penerbitan ulang tidak dilakukan.
- Sesi baru menerima ID baru dan tarif saat ini. SMS lama tidak disalin ke dalamnya. ref disetel lagi.
- SMScash hanya mengizinkan pengulangan nomor dari riwayat akun ini. Negara ini diidentifikasi berdasarkan nomor.
- Kunci sesi yang dihapus tetap digunakan: mengulang alokasi dengan kunci tersebut akan menghasilkan SESSION_CLOSED dan tidak memberikan nomor lain.
GETgetSmsFullDapatkan SMS sebagai JSON+
Riwayat terstruktur semua pesan dengan ID, pengirim, kode, teks dan negara, layanan dan data pemasok.
Parameter
| Parameter | Ketik | Deskripsi |
|---|---|---|
api_key* | string | Kunci API pribadi pengguna. |
id* | integer | ID sesi Anda, diterima saat nomor dikeluarkan. |
* Parameter yang diperlukan. Di semua permintaan, lewati juga action=getSmsFull.
Contoh permintaan
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())Tanggapan
{
"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"
}- Format pilihan untuk integrasi. Ingat sms[].id hanya memproses pesan baru.
- Status numerik SMScash: 1 - aktif, 6 - selesai, 8 - dibatalkan atau kedaluwarsa. status_name membedakan antara menunggu, diterima, selesai, dibatalkan, kadaluwarsa.
- Kode yang diterima tetap tersedia setelah sesi berakhir. Untuk volume yang besar, gunakan REST /activations/{id}/sms dengan after_id.
- Setelah angka tanpa SMS dihapus, getStatus dan getSms kembali ke STATUS_CANCEL; getSmsFull kembali ke status tertutup, telepon kosong, dan daftar SMS kosong. REST /activations/{id} dan /sms kembali ke 404 NO_ACTIVATION.
GETgetSmsDapatkan SMS sebagai string teks+
Mengembalikan seluruh riwayat SMS dalam format string untuk klien yang ada.
Parameter
| Parameter | Ketik | Deskripsi |
|---|---|---|
api_key* | string | Kunci API pribadi pengguna. |
id* | integer | ID sesi Anda, diterima saat nomor dikeluarkan. |
* Parameter yang diperlukan. Di semua permintaan, lewati juga action=getSms.
Contoh permintaan
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)Tanggapan
STATUS_OK:2026-10-09T12:00:00Z|001234|Код подтверждения: 001234STATUS_WAIT_CODESTATUS_CANCEL- Format pesan: waktu|kode|teks. Beberapa pesan dipisahkan oleh titik dua.
- Teks SMS sendiri mungkin berisi titik dua dan garis vertikal. Untuk penguraian yang andal, gunakan getSmsFull.
GETgetServicesLayanan+
Kode layanan yang tersedia. Jawabannya terbatas pada area kunci API.
Parameter
| Parameter | Ketik | Deskripsi |
|---|---|---|
api_key* | string | Kunci API pribadi pengguna. |
country | integer | Ambil ID dari getCountries. |
* Parameter yang diperlukan. Di semua permintaan, lewati juga action=getServices.
Contoh permintaan
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())Tanggapan
{
"go": {
"name": "Google",
"code": "go"
}
}- Direktori layanan tersebut dibagikan oleh pemasok. Ketersediaan jumlahnya diperiksa secara terpisah.
GETgetCountriesNegara+
ID, nama, dan kode panggilan untuk negara-negara dalam saluran yang dipilih.
Parameter
| Parameter | Ketik | Deskripsi |
|---|---|---|
api_key* | string | Kunci API pribadi pengguna. |
* Parameter yang diperlukan. Di semua permintaan, lewati juga action=getCountries.
Contoh permintaan
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())Tanggapan
{
"86": {
"id": 86,
"name": "Italy",
"phone_code": "39"
}
}GETgetOperatorsOperator+
Operator yang tersedia: ID API, nama, dan masa penahanan imbalan.
Parameter
| Parameter | Ketik | Deskripsi |
|---|---|---|
api_key* | string | Kunci API pribadi pengguna. |
country | integer | Ambil ID dari getCountries. |
operator | string | Ambil ID dari operators/getOperators (API). operator=1 · any/0 |
* Parameter yang diperlukan. Di semua permintaan, lewati juga action=getOperators.
Contoh permintaan
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())Tanggapan
{
"1": {
"id": 1,
"provider_id": 1,
"operator": 1,
"name": "Оператор 1",
"earnings_hold_days": 45
}
}- Ambil ID dari operators/getOperators (API).
GETgetRewardsHadiah untuk SMS+
Tarifnya bergantung pada negara. Semua jumlah dalam tabel adalah per SMS yang telah dibayar.
Parameter
| Parameter | Ketik | Deskripsi |
|---|---|---|
api_key* | string | Kunci API pribadi pengguna. |
country | integer | Ambil ID dari getCountries. |
service | string | Kode layanan yang tersedia. Jawabannya terbatas pada area kunci API. |
operator | string | Ambil ID dari operators/getOperators (API). operator=1 · any/0 |
* Parameter yang diperlukan. Di semua permintaan, lewati juga action=getRewards.
Contoh permintaan
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())Tanggapan
{
"59": {
"vi": {
"1": "0.01000000",
"3": "0.00500000"
}
}
}{}- USD jumlah tarif dikirimkan dalam bentuk string desimal yang tepat dengan 8 tempat desimal:
- Penyedia yang diaktifkan tersedia untuk kunci Anda.
- country ID → service code → operator ID → reward (USD)
GETgetBalanceSaldo pengguna+
Tambahan SMScash: saldo tersedia dengan mempertimbangkan akrual, bonus referensi, dan permintaan pembayaran.
Parameter
| Parameter | Ketik | Deskripsi |
|---|---|---|
api_key* | string | Kunci API pribadi pengguna. |
* Parameter yang diperlukan. Di semua permintaan, lewati juga action=getBalance.
Contoh permintaan
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)Tanggapan
ACCESS_BALANCE:0.00- getBalance mengembalikan saldo USD yang tersedia hingga 8 angka desimal.
- Hanya dana yang masa penahanannya telah berakhir yang dapat ditarik.
GETgetHoldBalanceDitahan+
Setelah SMS diterima, penghasilan ditahan selama jangka waktu yang ditentukan pemasok. Pada tanggal yang dijadwalkan, jumlah tersebut otomatis tersedia untuk ditarik.
Parameter
| Parameter | Ketik | Deskripsi |
|---|---|---|
api_key* | string | Kunci API pribadi pengguna. |
* Parameter yang diperlukan. Di semua permintaan, lewati juga action=getHoldBalance.
Contoh permintaan
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)Tanggapan
ACCESS_HOLD_BALANCE:34.50000001- SMScash · getHoldBalance · USD · 8
- Hanya dana yang masa penahanannya telah berakhir yang dapat ditarik.
Kode respons dan permintaan berulang
Di handler_api.php hasil bisnis biasanya datang dengan HTTP 200. Periksa teks isi. Direktori dan getSmsFull mengembalikan JSON jika berhasil; kesalahan selalu berupa teks.
| Kode | HTTP | Penyebab dan langkah selanjutnya |
|---|---|---|
TARIFF_NOT_CONFIGURED | 200 | Tarifnya belum ditetapkanAlokasi nomor akan dimulai setelah SMS reward dikonfigurasikan. |
COUNTRY_BLOCKED | 200 | Alokasi jumlah untuk negara ini terhambat.Pilih negara lain. |
BAD_SERVICE | 200 | Alokasi nomor untuk layanan ini diblokir.Pilih layanan lain. |
PROVIDER_NOT_READY | 200 | Alokasi nomor tidak tersedia saat iniSegarkan katalog API. |
BAD_KEY | 400 | Tidak ada api_key atau format tidak valid.Periksa kunci dalam permintaan. |
INVALID_API_KEY | 401 | Kuncinya tidak diketahui, dicabut atau akun dinonaktifkan.Buat kunci API yang valid. |
BAD_COUNTRY | 400 | negara hilang atau tidak ada angka positif.Ambil ID dari getCountries. |
BAD_SESSION_DURATION | 400 | Nomor telepon diberikan selama 20 menit tepatnya.session_duration yang benar. |
BAD_REQUEST | 400 | Parameter tidak valid atau Idempotency-Key.Harap perbaiki permintaan Anda. |
BAD_SERVICE / BAD_OPERATOR / INVALID_PROVIDER | 200 | Item direktori tidak dikenal atau dinonaktifkan.Segarkan katalog API. |
BAD_NUMBER | 200 | Format angka salah.Berikan nomornya dalam angka. |
BAD_ACTION / BAD_STATUS | 200 | Perintah, ID, atau operasi tidak diketahui.Periksa pengaturannya. |
EMPTY_POOL | 200 | Tidak ada nomor telepon yang cocok saat ini tersedia.Ulangi setelah 10-30 detik atau ubah filter. |
NUMBER_IN_USE | 200 | Nomor tertentu ditempati oleh sesi aktif.Akhiri sesi Anda atau pilih nomor lain. |
NO_ACTIVATION | 200 | Sesi atau nomor sebelumnya bukan milik akun Anda.Periksa ID dan kuncinya. |
SESSION_CLOSED / SMS_REQUIRED | 200 | Transisi negara saat ini tidak tersedia.Periksa kondisi dan ketersediaan SMS. |
SCOPE_BLOCKED | 200 | Layanan, negara, atau vendor tidak berwenang untuk kunci tersebut.Perbarui cakupan kunci API. |
IDEMPOTENCY_CONFLICT | 200 | Kunci kueri ini sudah dikaitkan dengan parameter lainnya.Untuk operasi baru, buat Idempotency-Key lainnya. |
BAD_REF / SELF_REF | 400 | Kode perangkat lunak tidak diketahui, dinonaktifkan, atau milik pengguna itu sendiri.Berikan kode pemilik perangkat lunak. |
INTERNAL_ERROR | 500 | Kesalahan server atau vendor sementara.Ulangi dengan penundaan dan Idempotency-Key yang sama. |
ALLOCATION_PENDING | 200 | Permintaan nomor sedang diproses. Coba lagi dengan Idempotency-Key yang sama.Permintaan nomor sedang diproses. Coba lagi dengan Idempotency-Key yang sama. |
ALLOCATION_UNCERTAIN | 200 | Hasil alokasi belum dikonfirmasi. Pengulangan otomatis dinonaktifkan agar tidak mengalokasikan nomor kedua.Hasil alokasi belum dikonfirmasi. Pengulangan otomatis dinonaktifkan agar tidak mengalokasikan nomor kedua. |
REST mengembalikan objek {"error":{"code":"…","message":"…"}} dan status HTTP reguler 400/401/403/404/409/503.
{
"error": {
"code": "BAD_REQUEST",
"message": "Periksa bidang permintaan.",
"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 untuk integrasi baru
USD jumlah tarif dikirimkan dalam bentuk string desimal yang tepat dengan 8 tempat desimal: 0.00300000 USD.
Mata uang saldo adalah USD. Skema permintaan dan respons tersedia di OpenAPI.
/api/v1/catalogLayanan dan negara/api/v1/tariffsSMS tingkat imbalan per negara/api/v1/offersTarif dan imbalan/api/v1/servicesDirektori/api/v1/countriesDirektori/api/v1/operatorsDirektori/api/v1/availability?country=1Ketersediaan nomor/api/v1/activationsSesi baru/api/v1/activations/batch?ids=42,43Periksa beberapa nomor/api/v1/activationsSesi terbaru 200: scope=history, menunggu atau semua/api/v1/activations/{id}Sesi dan pesan/api/v1/activations/{id}/sms?after_id=0&limit=100SMS baru dengan kursor/api/v1/activations/{id}/retryMenunggu SMS/api/v1/activations/{id}/finishPenyelesaian/api/v1/activations/{id}/cancelBatalkan/api/v1/activations/repeatPenerbitan ulang nomor/api/v1/keysKunci API/api/v1/keysBuat kunci/api/v1/keys/{id}Ganti nama atau policy/api/v1/keys/{id}Cabut kunci/api/v1/referralsKode referensi dan penghasilan/api/v1/summarySaldo dan Ringkasan/api/v1/balanceDitahan/api/v1/ledgerBuku besar pendapatan/api/v1/withdrawalsPermintaan pembayaran/api/v1/withdrawalsBuat permintaan/api/v1/statisticsStatistik umum/api/v1/earnings/holdsPenghasilan ditahanHanya menerima SMS baru
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": "Kode: 001234",
"sender": "Service",
"received_at": "2026-10-09T12:00:00Z"
}
],
"next_cursor": 101,
"has_more": false
}Simpan next_cursor dan sebarkan sebagai after_id. Jika has_more=true maka halaman selanjutnya bisa langsung dibaca. limit: 1–200. Sesi dan SMS hanya tersedia untuk pemiliknya.