توثيق API
أرقام ورسائل وأرباح مباشرة من تطبيقك.
ابدأ بطلب واحد
قم بإنشاء مفتاح API في لوحة التحكم الخاصة بك، حصل على رقم، وتحقق من الرسائل كل 20 ثوانٍ. يتم دفع المبلغ عند وصول SMS مع كود؛ قراءته مرة أخرى لا يؤثر على رصيدك.
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}'عنوان الواجهة البديل المتوافق: /handler_api.php. تستمر عمليات تكامل REST الموجودة في العمل.
منشئ الطلبات
Idempotency-Key: UUID · POST · 8–128
اختيار تلقائي: أكثر الرموز خلال الساعة الماضية، ثم خلال 24 ساعة. لا توجد أرقام: المشغل التالي.
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.لا يتم حفظ المفتاح. هذا التحقق لا يخصص أرقامًا.
REST لعمليات التكامل الجديدة
الخدمات والدول
اختر خدمة وبلداً. يعتمد المبلغ المدفوع لكل رسالة SMS على البلد.
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)
احصل على رقم
POST /api/v1/activations
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
Idempotency-Key: request-unique-001
{
"service": "go",
"country": 86
}اختيار تلقائي: أكثر الرموز خلال الساعة الماضية، ثم خلال 24 ساعة. لا توجد أرقام: المشغل التالي.
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: stringرقم الهاتف صالح لمدة 20 دقيقة. يتم التحقق من الرسائل كل 20 ثانية. يمكنك الإلغاء فورًا.
التحقق من عدة أرقام
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 messageالرصيد · معلّق
GET /api/v1/balance
Authorization: Bearer YOUR_API_KEY{
"currency": "USD",
"accounting_precision": 8,
"balance": "12.00000000",
"held_balance": "34.50000001",
"balance_minor": "1200000000",
"held_minor": "3450000001",
"as_of": "2026-10-12T20:00:00Z",
"next_release_at": "2026-11-26T20:00:00Z"
}balance — متاح; held_balance — معلّق. USD · 8
يمكن سحب الأموال التي انتهت مدة تعليقها فقط.
عملاء جاهزون للاستخدام
import {SmScash, SmScashError} from './smscash.mjs';
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.phpمفتاح API الشخصي للمستخدم.
اختر خدمة وبلداً. يعتمد المبلغ المدفوع لكل رسالة SMS على البلد.
| الكود | الوصف |
|---|---|
getNumber / getNumberV2 | احصل على رقم |
getStatus / getStatusV2 | احصل على أحدث رمز |
setStatus / finishActivation / cancelActivation | إدارة الجلسة |
getPrices / getNumbersStatus | تحقق من التوفر |
getRewards (SMScash) | مكافأة لSMS |
getServicesList / getServices | الخدمات |
getCountries / getOperators | الخدمات والدول |
getActiveActivations | الجلسات |
getBalance | رصيد المستخدم |
getHoldBalance (SMScash) | معلّق |
cost = 0 USD · activationCost = 0 USDreward — مكافأة ل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.رقم الهاتف صالح لمدة 20 دقيقة. يتم التحقق من الرسائل كل 20 ثانية. يمكنك الإلغاء فورًا.
المصادقة وإعادة المحاولة
REST: header Authorization: Bearer YOUR_API_KEY. واجهة متوافقة: المعلمات api_key و action. استخدم HTTPS.
لإدارة مفاتيح API، أدخل حسابك.
لا يوجد حد لمعدل الطلبات أو عدد أرقام الهاتف. ولا توجد حصص يومية أو ساعية.
رقم الهاتف صالح لمدة 20 دقيقة. يتم التحقق من الرسائل كل 20 ثانية. يمكنك الإلغاء فورًا.
في REST، فريدة من نوعها Idempotency-Key مطلوب لتخصيص الأرقام، وتكرار التخصيص، وطلبات retry والدفع. إنه اختياري ولكن يوصى به في handler_api.php. إعادة استخدام المفتاح عند إعادة محاولة طلب الشبكة؛ استخدم مفتاحًا جديدًا لعملية جديدة.
نطاق مفتاح API
يمكن ربط المفتاح بخدمات وبلدان ومزوّدين محددين. تسمح القوائم الفارغة بجميع الخيارات المتاحة.
{
"label": "برنامجي",
"policy": {
"services": [
"go"
],
"countries": [
86
],
"providers": [
1
]
}
}PATCH /api/v1/keys/{id} يغير الاسم وpolicy بالكامل. لا يظهر السر إلا عند إنشائه.
10% إجمالاً. 5% + 5% بالكود البرمجي.
عند إصدار الرقم يرجى تقديمه ref مالك البرنامج. يتم اعتماد الطلب بواسطة مفتاح المستخدم. الرمز موجود في قسم "الإحالات" وفي GET /api/v1/referrals → software_ref.
| طلب | المُحيل | البرمجيات |
|---|---|---|
| بدون ref | 10% | — |
| مع ref | 5% | 5% |
| مع ref، لا يوجد مرجع | — | 5% |
تقوم المنصة بدفع المكافأة دون التقليل من دخل المستخدم. يمكن أن يكون مالك البرنامج والمُحيل هو نفس الشخص. لا يمكن للمستخدم استخدام الكود الخاص به.
تتغير الشروط عند إنشاء جلسة؛ قراءة SMS وretry لا تغيّرها. قم بإعادة إدخال ref لإنشاء جلسة تكرارية جديدة. في حساب الرسوم، يُمنح مكافأة المستخدم USD 0.003 بمقدار USD 0.00015 لكل من مالك البرنامج والمصدر. الإجمالي للمكافأة هو USD 0.00030.
أوامر API
11 طريقة بأسلوب XVBC بالإضافة إلى رصيد SMScash الخاص بك.
GETgetNumberاحصل على رقم+
ينشئ جلسة ويحجز رقم هاتف متاحًا للمستخدم. تُحدَّد قيمة المكافأة ومستفيدو عمولات الإحالة عند تخصيص الرقم؛ وتُضاف المكافأة عند استلام رسالة SMS تحتوي على رمز.
المعلمات
| المعلمة | اكتب | الوصف |
|---|---|---|
api_key* | string | مفتاح API الشخصي للمستخدم. |
service* | string | رموز الخدمة المتاحة. تقتصر الإجابة على مساحة مفتاح API. |
country* | integer | خذ ID من getCountries. |
operator | string | خذ ID من operators/getOperators (API). operator=1 · any/0 |
session_duration | integer | الجلسة تستمر 20 دقيقة. اختار 20 أو تجاهل هذا المعامل. |
with_operator | integer | 1 يضيف معرّف المشغّل إلى الرد؛ 0 أو عدم تحديده يعيد ثلاثة أجزاء. |
ref | string | الرمز العام لصاحب البرنامج: 5% له و5% للداعي. بدون ref - 10% للمدعو. |
* المعلمة المطلوبة. في كافة الطلبات، قم أيضًا بتمرير action=getNumber.
طلب مثال
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)الردود
ACCESS_NUMBER:42:380670000000:1EMPTY_POOL- اختيار تلقائي: أكثر الرموز خلال الساعة الماضية، ثم خلال 24 ساعة. لا توجد أرقام: المشغل التالي.
- تمرير Idempotency-Key: نفس الطلب بنفس المفتاح يعيد الجلسة السابقة. تغيير المعلمات يستدعي IDEMPOTENCY_CONFLICT.
- بلد رقمي بدون تجمع يعطي EMPTY_POOL؛ تنسيق البلد الخاطئ هو BAD_COUNTRY.
- مفتاح الجلسة المحذوف لا يزال قيد الاستخدام: إعادة تشغيل التخصيص بذلك المفتاح يعطي SESSION_CLOSED ولا يُصدر رقمًا آخر.
- لم يتم تأكيد نتيجة الإصدار. أُوقف التكرار التلقائي لتجنب إصدار رقم ثانٍ.
GETgetNumbersStatusتحقق من التوفر+
عدد أرقام الهاتف المتاحة حسب الخدمة والبلد.
المعلمات
| المعلمة | اكتب | الوصف |
|---|---|---|
api_key* | string | مفتاح API الشخصي للمستخدم. |
country* | integer | خذ ID من getCountries. |
* المعلمة المطلوبة. في كافة الطلبات، قم أيضًا بتمرير action=getNumbersStatus.
طلب مثال
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())الردود
{
"go_0": 0
}- اللاحقة _0 تعني الاختيار بدون عامل تشغيل محدد.
- التوفر يشير إلى مجموعة أرقام المورد كاملة. يُفحص توفر القناة المختارة عند إصدار الرقم.
GETgetStatusاحصل على أحدث رمز+
طلب سهل لحالة الجلسة وآخر رمز SMS. يتم الاحتفاظ بالأصفار البادئة في الكود.
المعلمات
| المعلمة | اكتب | الوصف |
|---|---|---|
api_key* | string | مفتاح API الشخصي للمستخدم. |
id* | integer | ID لجلستك، تم استلامها عند إصدار الرقم. |
* المعلمة المطلوبة. في كافة الطلبات، قم أيضًا بتمرير action=getStatus.
طلب مثال
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)الردود
STATUS_WAIT_CODESTATUS_OK:001234STATUS_CANCELNO_ACTIVATION- قم بالاستطلاع كل 20 ثوانٍ. قراءة الرسالة مرة أخرى لا تؤدي إلى دفع مبلغ إضافي.
- بعد retry لن يتم إرجاع الكود القديم: getStatus ينتظر SMS التالي.
- بعد حذف الرقم الذي لا يحتوي على SMS,يعود getStatus وgetSms إلى STATUS_CANCEL؛ يعود getSmsFull إلى الحالة المغلقة، وهاتف فارغ وقائمة SMS فارغة. يعود REST، /activations/{id}، و/sms إلى 404 NO_ACTIVATION.
GETsetStatusإدارة الجلسة+
إنهاء، إلغاء أو استئناف الانتظار للـ SMS. يبقى انتهاء الدورة كما هو.
المعلمات
| المعلمة | اكتب | الوصف |
|---|---|---|
api_key* | string | مفتاح API الشخصي للمستخدم. |
id* | integer | ID لجلستك، تم استلامها عند إصدار الرقم. |
status* | integer | 3 — انتظر الكود التالي دون توسيع الجلسة؛ 6 — انتهِ بعد SMS؛ 8 — ألغِ فورًا. |
* المعلمة المطلوبة. في كافة الطلبات، قم أيضًا بتمرير action=setStatus.
طلب مثال
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)الردود
ACCESS_RETRY_GETACCESS_ACTIVATIONACCESS_CANCEL- يُعاد المحاولة ويتوقع الانتظار للكود التالي خلال 20 دقائق الأصلية. لا تتغير أوقات المشكلة والموت الأجل.
- بالنسبة إلى الحالة = 3، استخدم Idempotency-Key: لن يؤدي تكرار الطلب إلى إعادة تعيين الرمز الجديد الذي تم استلامه بالفعل. يظل تاريخ SMS متاحًا.
- الإلغاء لا يخصم الأرباح المكتسبة سابقًا.
- فقط الأرقام التي تحتوي على كود SMS تُحتفظ في التاريخ. الأرقام التي تم إلغاؤها أو انتهت صلاحيتها بدون كود يتم حذفها.
GETgetRepeatNumberإصدار نفس الرقم مرة أخرى+
فتح جلسة جديدة برقم محدد من سجلك. يمكنك اختيار خدمة أخرى متاحة في نفس البلد.
المعلمات
| المعلمة | اكتب | الوصف |
|---|---|---|
api_key* | string | مفتاح API الشخصي للمستخدم. |
number* | string | رقمك القديم يُسمح فقط بالأرقام والبادئة + الاختيارية. |
service* | string | رموز الخدمة المتاحة. تقتصر الإجابة على مساحة مفتاح API. |
session_duration | integer | الجلسة تستمر 20 دقيقة. اختار 20 أو تجاهل هذا المعامل. |
with_operator | integer | 1 يضيف معرّف المشغّل إلى الرد؛ 0 أو عدم تحديده يعيد ثلاثة أجزاء. |
ref | string | الرمز العام لصاحب البرنامج: 5% له و5% للداعي. بدون ref - 10% للمدعو. |
operator | string | خذ ID من operators/getOperators (API). operator=1 · any/0 |
* المعلمة المطلوبة. في كافة الطلبات، قم أيضًا بتمرير action=getRepeatNumber.
طلب مثال
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)الردود
ACCESS_NUMBER:43:380670000000NUMBER_IN_USE- أولاً، قم بإنهاء أو إلغاء جلستك الحالية. في حالة انشغال الرقم، لا يتم إعادة الإصدار.
- تتلقى الجلسة الجديدة ID الجديد والتعريفة الحالية. لم يتم نسخ SMS القديم فيه. تم ضبط ref مرة أخرى.
- يسمح SMScash بتكرار الأرقام فقط من تاريخ هذا الحساب. يتم تحديد الدولة بالرقم.
- مفتاح الجلسة المحذوف لا يزال قيد الاستخدام: إعادة تشغيل التخصيص بذلك المفتاح يعطي SESSION_CLOSED ولا يُصدر رقمًا آخر.
GETgetSmsFullاحصل على SMS كـ JSON+
سجل منظم لجميع الرسائل مع بيانات ID والمرسل والرمز والنص والبلد والخدمة والمورد.
المعلمات
| المعلمة | اكتب | الوصف |
|---|---|---|
api_key* | string | مفتاح API الشخصي للمستخدم. |
id* | integer | ID لجلستك، تم استلامها عند إصدار الرقم. |
* المعلمة المطلوبة. في كافة الطلبات، قم أيضًا بتمرير action=getSmsFull.
طلب مثال
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())الردود
{
"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"
}- التنسيق المفضل للتكامل. تذكر sms[].id لمعالجة الرسائل الجديدة فقط.
- الحالة الرقمية SMScash: 1 - نشط، 6 - مكتمل، 8 - ملغى أو منتهية الصلاحية. يميز status_name بين الانتظار والاستلام والانتهاء والإلغاء وانتهاء الصلاحية.
- الرموز المستلمة تظل متاحة بعد انتهاء الجلسة. بالنسبة للكميات الكبيرة، استخدم REST /activations/{id}/sms مع after_id.
- بعد حذف الرقم الذي لا يحتوي على SMS,يعود getStatus وgetSms إلى STATUS_CANCEL؛ يعود getSmsFull إلى الحالة المغلقة، وهاتف فارغ وقائمة SMS فارغة. يعود REST، /activations/{id}، و/sms إلى 404 NO_ACTIVATION.
GETgetSmsاحصل على SMS كسلسلة نصية+
إرجاع سجل SMS بالكامل بتنسيق سلسلة للعملاء الحاليين.
المعلمات
| المعلمة | اكتب | الوصف |
|---|---|---|
api_key* | string | مفتاح API الشخصي للمستخدم. |
id* | integer | ID لجلستك، تم استلامها عند إصدار الرقم. |
* المعلمة المطلوبة. في كافة الطلبات، قم أيضًا بتمرير action=getSms.
طلب مثال
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)الردود
STATUS_OK:2026-10-09T12:00:00Z|001234|Код подтверждения: 001234STATUS_WAIT_CODESTATUS_CANCEL- تنسيق الرسالة: الوقت|الرمز|النص. يتم فصل الرسائل المتعددة بنقطتين.
- قد يحتوي النص SMS نفسه على نقطتين وأشرطة عمودية. للحصول على تحليل موثوق، استخدم getSmsFull.
GETgetServicesالخدمات+
رموز الخدمة المتاحة. تقتصر الإجابة على مساحة مفتاح API.
المعلمات
| المعلمة | اكتب | الوصف |
|---|---|---|
api_key* | string | مفتاح API الشخصي للمستخدم. |
country | integer | خذ ID من getCountries. |
* المعلمة المطلوبة. في كافة الطلبات، قم أيضًا بتمرير action=getServices.
طلب مثال
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())الردود
{
"go": {
"name": "Google",
"code": "go"
}
}- مسار الخدمة يتم مشاركته بين الموردين. ويتم فحص توافر الأرقام بشكل منفصل.
GETgetCountriesالبلدان+
أرقام التعريف، الأسماء، ورموز الاتصال للدول في القناة المختارة.
المعلمات
| المعلمة | اكتب | الوصف |
|---|---|---|
api_key* | string | مفتاح API الشخصي للمستخدم. |
* المعلمة المطلوبة. في كافة الطلبات، قم أيضًا بتمرير action=getCountries.
طلب مثال
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())الردود
{
"86": {
"id": 86,
"name": "Italy",
"phone_code": "39"
}
}GETgetOperatorsمشغلي+
المشغّلون المتاحون: معرّف API والاسم ومدة حجز الأرباح.
المعلمات
| المعلمة | اكتب | الوصف |
|---|---|---|
api_key* | string | مفتاح API الشخصي للمستخدم. |
country | integer | خذ ID من getCountries. |
operator | string | خذ ID من operators/getOperators (API). operator=1 · any/0 |
* المعلمة المطلوبة. في كافة الطلبات، قم أيضًا بتمرير action=getOperators.
طلب مثال
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())الردود
{
"1": {
"id": 1,
"provider_id": 1,
"operator": 1,
"name": "Оператор 1",
"earnings_hold_days": 45
}
}- خذ ID من operators/getOperators (API).
GETgetRewardsمكافأة لSMS+
تختلف الأسعار حسب البلد. جميع قيم الجدول هي بالسعر المدفوع SMS.
المعلمات
| المعلمة | اكتب | الوصف |
|---|---|---|
api_key* | string | مفتاح API الشخصي للمستخدم. |
country | integer | خذ ID من getCountries. |
service | string | رموز الخدمة المتاحة. تقتصر الإجابة على مساحة مفتاح API. |
operator | string | خذ ID من operators/getOperators (API). operator=1 · any/0 |
* المعلمة المطلوبة. في كافة الطلبات، قم أيضًا بتمرير action=getRewards.
طلب مثال
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())الردود
{
"59": {
"vi": {
"1": "0.01000000",
"3": "0.00500000"
}
}
}{}- USD تُعاد قيم الضرائب كسلاسل عشرية دقيقة مع 8 مقعد عشري:
- مقدمي الخدمات الممكّنين المتاحين لمفتاحك.
- country ID → service code → operator ID → reward (USD)
GETgetBalanceرصيد المستخدم+
إضافة SMScash: الرصيد المتاح مع الأخذ في الاعتبار الاستحقاقات ومكافآت الإحالة وطلبات الدفع.
المعلمات
| المعلمة | اكتب | الوصف |
|---|---|---|
api_key* | string | مفتاح API الشخصي للمستخدم. |
* المعلمة المطلوبة. في كافة الطلبات، قم أيضًا بتمرير action=getBalance.
طلب مثال
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)الردود
ACCESS_BALANCE:0.00- يعيد getBalance الرصيد المتاح بعملة USD بدقة تصل إلى 8 منازل عشرية.
- يمكن سحب الأموال التي انتهت مدة تعليقها فقط.
GETgetHoldBalanceمعلّق+
بعد استلام SMS، تُعلّق الأرباح للمدة التي يحددها المورّد. وفي الموعد المحدد، يصبح المبلغ متاحًا للسحب تلقائيًا.
المعلمات
| المعلمة | اكتب | الوصف |
|---|---|---|
api_key* | string | مفتاح API الشخصي للمستخدم. |
* المعلمة المطلوبة. في كافة الطلبات، قم أيضًا بتمرير action=getHoldBalance.
طلب مثال
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)الردود
ACCESS_HOLD_BALANCE:34.50000001- SMScash · getHoldBalance · USD · 8
- يمكن سحب الأموال التي انتهت مدة تعليقها فقط.
رموز الاستجابة والطلبات المتكررة
عادةً ما تأتي نتائج الأعمال في handler_api.php مع HTTP 200. تحقق من النص الأساسي. تقوم الدلائل وgetSmsFull بإرجاع JSON إذا نجحت؛ الأخطاء هي دائما نص.
| الكود | HTTP | السبب والخطوة التالية |
|---|---|---|
TARIFF_NOT_CONFIGURED | 200 | لم يتم تحديد الأسعار بعدسيبدأ توزيع الأرقام بمجرد تكوين مكافآت SMS. |
COUNTRY_BLOCKED | 200 | تم حظر تخصيص الأرقام لهذا البلد.اختر دولة أخرى. |
BAD_SERVICE | 200 | تخصيص الأرقام لهذه الخدمة محظور.اختر خدمة أخرى. |
PROVIDER_NOT_READY | 200 | تخصيص الأرقام غير متاح حاليًاقم بتحديث كتالوجات API. |
BAD_KEY | 400 | لا يوجد api_key أو تنسيق غير صالح.تحقق من المفتاح في الطلب. |
INVALID_API_KEY | 401 | المفتاح غير معروف أو تم إبطاله أو تم تعطيل الحساب.قم بإنشاء مفتاح API صالح. |
BAD_COUNTRY | 400 | البلد مفقود أو ليس رقمًا موجبًا.خذ ID من getCountries. |
BAD_SESSION_DURATION | 400 | تُصدر أرقام الهواتف لمدة 20 دقيقة فقط.تصحيح session_duration. |
BAD_REQUEST | 400 | معلمة غير صالحة أو Idempotency-Key.يرجى تصحيح طلبك. |
BAD_SERVICE / BAD_OPERATOR / INVALID_PROVIDER | 200 | عنصر دليل غير معروف أو معطل.قم بتحديث كتالوجات API. |
BAD_NUMBER | 200 | تنسيق الرقم غير صحيح.إعطاء الرقم بالأرقام. |
BAD_ACTION / BAD_STATUS | 200 | أمر غير معروف، ID أو عملية.تحقق من الإعدادات. |
EMPTY_POOL | 200 | لا توجد أرقام هواتف مطابقة متاحة حاليًا.كرر ذلك بعد 10-30 ثانية أو قم بتغيير المرشحات. |
NUMBER_IN_USE | 200 | رقم محدد مشغول بجلسة نشطة.قم بإنهاء جلستك أو حدد رقمًا آخر. |
NO_ACTIVATION | 200 | الجلسة أو الرقم السابق لا ينتمي إلى حسابك.تحقق من ID والمفتاح. |
SESSION_CLOSED / SMS_REQUIRED | 200 | انتقال الحالة غير متاح حاليًا.التحقق من حالة وتوافر SMS. |
SCOPE_BLOCKED | 200 | الخدمة أو البلد أو البائع غير معتمد للحصول على المفتاح.قم بتحديث نطاق مفتاح API. |
IDEMPOTENCY_CONFLICT | 200 | مفتاح الاستعلام هذا مرتبط بالفعل بمعلمات أخرى.لعملية جديدة، قم بإنشاء Idempotency-Key آخر. |
BAD_REF / SELF_REF | 400 | رمز البرنامج غير معروف أو معطل أو يخص المستخدم نفسه.قم بتمرير رمز مالك البرنامج. |
INTERNAL_ERROR | 500 | خطأ مؤقت في الخادم أو البائع.كرر مع تأخير ونفس Idempotency-Key. |
ALLOCATION_PENDING | 200 | طلب إصدار الرقم قيد التنفيذ. أعد المحاولة باستخدام Idempotency-Key نفسه.طلب إصدار الرقم قيد التنفيذ. أعد المحاولة باستخدام Idempotency-Key نفسه. |
ALLOCATION_UNCERTAIN | 200 | لم يتم تأكيد نتيجة الإصدار. أُوقف التكرار التلقائي لتجنب إصدار رقم ثانٍ.لم يتم تأكيد نتيجة الإصدار. أُوقف التكرار التلقائي لتجنب إصدار رقم ثانٍ. |
تعيد REST كائنًا {"error":{"code":"…","message":"…"}} وحالات HTTP العادية 400/401/403/404/409/503.
{
"error": {
"code": "BAD_REQUEST",
"message": "التحقق من حقول الطلب.",
"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 لعمليات التكامل الجديدة
USD تُعاد قيم الضرائب كسلاسل عشرية دقيقة مع 8 مقعد عشري: 0.00300000 USD.
عملة الرصيد هي USD. مخططات الطلبات والاستجابات متاحة في OpenAPI.
/api/v1/catalogالخدمات والدول/api/v1/tariffsSMS معدلات المكافآت حسب الدولة/api/v1/offersالأسعار والمكافآت/api/v1/servicesالدليل/api/v1/countriesالدليل/api/v1/operatorsالدليل/api/v1/availability?country=1توفر العدد/api/v1/activationsجلسة جديدة/api/v1/activations/batch?ids=42,43التحقق من عدة أرقام/api/v1/activationsآخر جلسات 200: scope=history، في انتظار أو كلها/api/v1/activations/{id}الجلسة والرسائل/api/v1/activations/{id}/sms?after_id=0&limit=100SMS جديد مع المؤشر/api/v1/activations/{id}/retryفي انتظار SMS/api/v1/activations/{id}/finishالانتهاء/api/v1/activations/{id}/cancelإلغاء/api/v1/activations/repeatإعادة إصدار الرقم/api/v1/keysمفاتيح API/api/v1/keysقم بإنشاء مفتاح/api/v1/keys/{id}تغيير الاسم أو policy/api/v1/keys/{id}إبطال المفتاح/api/v1/referralsرمز الإحالة والأرباح/api/v1/summaryالرصيد والملخص/api/v1/balanceمعلّق/api/v1/ledgerدفتر الأرباح/api/v1/withdrawalsطلبات الدفع/api/v1/withdrawalsإنشاء طلب/api/v1/statisticsالإحصائيات العامة/api/v1/earnings/holdsالأرباح المعلّقةاستلام 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": "الكود: 001234",
"sender": "Service",
"received_at": "2026-10-09T12:00:00Z"
}
],
"next_cursor": 101,
"has_more": false
}احفظ next_cursor وقم بتمريره كـ after_id. إذا كانت has_more=true، فيمكن قراءة الصفحة التالية على الفور. limit: 1–200. الجلسات وSMS متاحة للمالك فقط.