getBalance
Hesap bakiyesi (dolar).
Yalnızca api_key ve action.
GET https://relysms.pro/stubs/handler_api.php?api_key=KEY&action=getBalanceYanıt
ACCESS_BALANCE:25.00Yazılımınız bir aktivasyon servisiyle handler_api.php üzerinden çalışıyorsa RelySMS ile de çalışır: sunucu adresini ve anahtarı değiştirin. Aynı işlemler, aynı yanıtlar; bizim fiyatlarımız ve iadelerimiz.
https://relysms.pro/stubs/handler_api.phpHer istek tek bir adrese yapılan GET veya POST'tur; parametreler sorgu dizesinde ya da form gövdesindedir. Anahtar api_key'de, işlem action'da gönderilir.
getBalanceHesap bakiyesi (dolar).
Yalnızca api_key ve action.
GET https://relysms.pro/stubs/handler_api.php?api_key=KEY&action=getBalanceYanıt
ACCESS_BALANCE:25.00getNumberBir ülkede bir servis için numara al. Hemen tahsil edilir; kod gelmezse iade edilir. Yanıt: ACCESS_NUMBER:sipariş_no:telefon.
| Parametre | Zorunlu | Açıklama |
|---|---|---|
service | evet | Servis kodu (getServicesList), örneğin tg. |
country | evet | Ülke kodu (getCountries). |
maxPrice | hayır | Dolar cinsinden azami fiyat. Daha pahalıysa — güncel fiyatla WRONG_MAX_PRICE, tahsilat yok. |
GET https://relysms.pro/stubs/handler_api.php?api_key=KEY&action=getNumber&service=tg&country=187&maxPrice=0.80Yanıt
ACCESS_NUMBER:1042:15550001111Olası hatalar: BAD_SERVICE, BAD_COUNTRY, NO_NUMBERS, NO_BALANCE, WRONG_MAX_PRICE:0.59, LIMIT_ACTIVATIONS, RATE_LIMIT, BANNED
getNumberV2getNumber ile aynı, ancak fiyat ve süre bilgisini içeren JSON yanıtı döner.
| Parametre | Zorunlu | Açıklama |
|---|---|---|
service | evet | Servis kodu. |
country | evet | Ülke kodu. |
maxPrice | hayır | Dolar cinsinden azami fiyat. |
GET https://relysms.pro/stubs/handler_api.php?api_key=KEY&action=getNumberV2&service=tg&country=187&maxPrice=0.80Yanıt
{
"activationId": 1042,
"phoneNumber": "15550001111",
"activationCost": 0.59,
"countryCode": "187",
"canGetAnotherSms": true,
"activationTime": "2026-10-27T10:00:00.000Z",
"activationEndTime": "2026-10-27T10:20:00.000Z"
}Olası hatalar: BAD_SERVICE, BAD_COUNTRY, NO_NUMBERS, NO_BALANCE, WRONG_MAX_PRICE:0.59, LIMIT_ACTIVATIONS, RATE_LIMIT
getStatusSipariş durumu: kod bekleniyor, kod geldi (kodla birlikte) veya iptal edildi.
| Parametre | Zorunlu | Açıklama |
|---|---|---|
id | evet | getNumber'dan gelen sipariş numarası. |
GET https://relysms.pro/stubs/handler_api.php?api_key=KEY&action=getStatus&id=1042Yanıt
STATUS_OK:48213Olası hatalar: NO_ACTIVATION
setStatusSipariş üzerinde işlem: hazır, yeni kod, tamamla, iptal (bkz. Durumlar).
| Parametre | Zorunlu | Açıklama |
|---|---|---|
id | evet | Sipariş numarası. |
status | evet | 1, 3, 6 veya 8. |
GET https://relysms.pro/stubs/handler_api.php?api_key=KEY&action=setStatus&id=1042&status=6Yanıt
ACCESS_ACTIVATIONOlası hatalar: NO_ACTIVATION, BAD_STATUS, EARLY_CANCEL_DENIED, ERROR_SQL
getActiveActivationsAnahtarın tüm açık siparişleri: numara, durum, gelen kodlar ve metinler.
Yalnızca api_key ve action.
GET https://relysms.pro/stubs/handler_api.php?api_key=KEY&action=getActiveActivationsYanıt
{
"status": "success",
"activeActivations": [
{
"activationId": 1042,
"serviceCode": "tg",
"phoneNumber": "15550001111",
"activationCost": 0.59,
"activationStatus": "2",
"smsCode": ["48213"],
"smsText": ["Telegram code: 48213"],
"activationTime": "2026-10-27T10:00:00.000Z",
"countryCode": "187"
}
]
}getPricesDolar cinsinden fiyatlarımız ve yaklaşık numara sayısı. Parametresiz — satıştaki her şey.
| Parametre | Zorunlu | Açıklama |
|---|---|---|
service | hayır | Yalnızca bu servis. |
country | hayır | Yalnızca bu ülke. |
GET https://relysms.pro/stubs/handler_api.php?api_key=KEY&action=getPrices&service=tg&country=187Yanıt
{ "187": { "tg": { "cost": 0.59, "count": 1000 } } }Olası hatalar: BAD_SERVICE, BAD_COUNTRY
getCountriesProtokol kodları ve Rusça, İngilizce adlarıyla ülke listesi.
Yalnızca api_key ve action.
GET https://relysms.pro/stubs/handler_api.php?api_key=KEY&action=getCountriesYanıt
{ "187": { "id": 187, "rus": "США", "eng": "United States", "visible": 1 } }getServicesListProtokol kodlarıyla servis listesi.
Yalnızca api_key ve action.
GET https://relysms.pro/stubs/handler_api.php?api_key=KEY&action=getServicesListYanıt
{ "status": "success", "services": [{ "code": "tg", "name": "Telegram" }] }setStatus'taki status değerleri:
status=1 → ACCESS_READY — Numara servise girildi, kod bekleniyor. Hiçbir şeyi değiştirmez; uyumluluk için duruyor.status=3 → ACCESS_RETRY_GET — Aynı numaraya bir kod daha isteyin — ilk koddan sonra, sipariş açıkken. Ücretsiz. Yeni kod gelene kadar getStatus STATUS_WAIT_RETRY döner.status=6 → ACCESS_ACTIVATION — Koddan sonra siparişi tamamla. Numaraya artık yeni SMS gelmez.status=8 → ACCESS_CANCEL — Kodu gelmemiş siparişi iptal et (en erken 2 dakika sonra). Para bakiyeye döner.getStatus yanıtları:
STATUS_WAIT_CODE — Henüz kod yok — 5–10 saniye sonra tekrar sorun.STATUS_OK:48213 — Kod geldi; iki noktadan sonra kodun kendisi (kod yoksa SMS metni) yer alır.STATUS_WAIT_RETRY:48213 — Bir kod daha istendi, henüz gelmedi; iki noktadan sonra önceki kod var.STATUS_CANCEL — Kodsuz iptal edildi veya kapandı; para bakiyeye döndü.Hatalar, bu protokolde olağan olduğu gibi düz metin olarak gelir. RATE_LIMIT dışındakilerin hepsi 200 durum koduyla döner.
NO_KEY | api_key gönderilmedi. |
BAD_KEY | Anahtar yanlış veya kapatılmış ya da hesap engellenmiş. |
BAD_ACTION | Bilinmeyen işlem. |
BAD_SERVICE | Böyle bir servis kodu yok. |
BAD_COUNTRY | Böyle bir ülke kodu yok. |
NO_NUMBERS | Bu eşleşme için şu an numara yok; tahsilat yapılmadı. |
NO_BALANCE | Bakiye $20'nin (API eşiği) veya numara fiyatının altında. |
WRONG_MAX_PRICE | Fiyat maxPrice'ı aşıyor; iki noktadan sonra güncel fiyat yer alır. |
LIMIT_ACTIVATIONS | Çok fazla açık sipariş — bir kısmını tamamlayın veya iptal edin. |
RATE_LIMIT | Çok sık; HTTP 429. Bir saniye sonra tekrar deneyin. |
BANNED | Hesap engellendi — destekle iletişime geçin. |
NO_ACTIVATION | Bu anahtar için bu numarada sipariş yok. |
BAD_STATUS | Bu işlem şu an sipariş için geçerli değil (örneğin kodsuz tamamlama). |
EARLY_CANCEL_DENIED | İptal, alımdan 2 dakika sonra mümkündür. |
ERROR_SQL | Bizim tarafta geçici bir hata — isteği bir dakika sonra yineleyin. |
Kodlar protokolün standart kodlarıdır: tg — Telegram, wa — WhatsApp vb.; 187 numaralı ülke — ABD. Tam listeleri getServicesList ve getCountries verir — kodları eski tablolardan değil, oradan alın: servisler ve ülkeler stokla birlikte değişir.
handler_api.php ile aynı numaralar ve aynı kurallar, JSON olarak: servisler adıyla (telegram), ülkeler ISO koduyla (US), HTTP durumları ve programın dallanabileceği hata kodları. Yeni kod için bunu kullanın; handler_api.php kullanan yazılımı olduğu gibi bırakın.
https://relysms.pro/api/v1Anahtarı başlıkta gönderin: Authorization: Bearer <anahtar> (veya X-Api-Key: <anahtar>). Asla URL'de değil — URL'ler loglara düşer. Sınırlar, $20 eşiği ve katalog handler_api.php ile aynıdır.
POST /orders ve /orders/batch isteklerine kendi değerinizle (UUID, en fazla 255 karakter) Idempotency-Key başlığı ekleyin. Bağlantı koparsa ve isteği aynı anahtarla tekrarlarsanız ilk yanıtı alırsınız (Idempotent-Replayed: true başlığıyla) ve hiçbir şey iki kez alınmaz. Aynı anahtar farklı gövdeyle reddedilir; ilki hâlâ sürerken gelen tekrar idempotency_in_progress alır. Başarılı yanıtlar 24 saat saklanır; başarısız bir alım hiçbir şey tahsil etmedi ve aynı anahtarla tekrarlanabilir.
POST /orders/batch tek istekte bir servis ve ülke için en fazla 20 numara alır — saniyede 5'ten hızlı almanın yolu budur. Alımlar sırayla yapılır; ilk başarısız alım partiyi durdurur, yanıtta alınanlar ve stoppedBy içinde sebep yer alır. Hiçbir şey alınamadıysa yanıt o hatanın kendisidir.
GET /orders önce en yenileri döndürür. next null değilse sonraki sayfa için onu before olarak gönderin.
GET /orders/{id} ile sürekli sorgulamak yerine PUT /webhook ile bir HTTPS adresi belirleyin; API ile alınan bir siparişte bir şey olduğunda oraya POST göndeririz. Gövdede siparişin gönderim anındaki hâli yer alır. 10 saniye içinde herhangi bir 2xx ile yanıt verin; bir sipariş birden fazla olay üretebilir ve aynı olay yeniden denemeden sonra iki kez gelebilir, bu yüzden teslimat id'sini esas alın.
order.code_received — Kod geldi (her yeni kod bunu yeniden gönderir).order.finished — Sipariş tamamlandı — sizin tarafınızdan ya da koddan sonra süre dolunca.order.cancelled — Kodsuz iptal edildi; para bakiyeye döndü.order.expired — Süre kodsuz doldu; para bakiyeye döndü.ping — POST /webhook/test'ten gelen deneme; order null.POST /relysms-hook HTTP/1.1
Content-Type: application/json
X-RelySMS-Event: order.code_received
X-RelySMS-Delivery: cm…
X-RelySMS-Signature: t=1793095272,v1=5f2b…
{
"id": "cm…",
"event": "order.code_received",
"createdAt": "2026-10-27T10:01:12.000Z",
"order": { "id": 1042, "status": "received", "codes": [{ "code": "48213", … }], … }
}Her istekte X-RelySMS-Signature: t=<unix zamanı>,v1=<imza> başlığı vardır. İmza, "t.gövde" dizesinin (ham gövde, bayt bayt) webhook sırrınızla HMAC-SHA256'sıdır, hex olarak. Gövdeye güvenmeden önce imzayı ve t'nin 5 dakikadan eski olmadığını kontrol edin.
Python
import hashlib, hmac, time
def verify(secret: str, body: bytes, header: str, tolerance=300) -> bool:
parts = dict(p.split("=", 1) for p in header.split(","))
t, sig = parts.get("t", ""), parts.get("v1", "")
if not t.isdigit() or abs(time.time() - int(t)) > tolerance:
return False
expected = hmac.new(secret.encode(), f"{t}.".encode() + body, hashlib.sha256).hexdigest()
return hmac.compare_digest(expected, sig)Node.js
import { createHmac, timingSafeEqual } from "node:crypto";
export function verify(secret, rawBody, header, tolerance = 300) {
const parts = Object.fromEntries(header.split(",").map((p) => p.split("=", 2)));
const t = Number(parts.t);
if (!Number.isInteger(t) || Math.abs(Date.now() / 1000 - t) > tolerance) return false;
const expected = createHmac("sha256", secret).update(`${t}.${rawBody}`).digest("hex");
return expected.length === parts.v1?.length && timingSafeEqual(Buffer.from(expected), Buffer.from(parts.v1));
}Sunucunuz 2xx dönmezse 10 saniye, 1 dakika, 5 dakika, 30 dakika, 2 saat ve 6 saat sonra yeniden deneriz — toplam 7 deneme — sonra bırakırız. GET /webhook/deliveries neyin gittiğini ve neyin başarısız olduğunu gösterir.
GET /balanceDolar cinsinden bakiye ve API ile alım için yetip yetmediği.
curl -H "Authorization: Bearer $KEY" https://relysms.pro/api/v1/balanceYanıt
{ "balance": 25, "currency": "USD", "canBuy": true, "apiMinimum": 20 }GET /servicesSatıştaki tüm servisler: bizim id'miz, adı ve handler_api.php kodu.
| Parametre | Zorunlu | Açıklama |
|---|---|---|
lang query | hayır | Adların dili: en (varsayılan), ru, uk, zh, es, pt, id, vi, tr, ar, fr. |
curl -H "Authorization: Bearer $KEY" "https://relysms.pro/api/v1/services?lang=en"Yanıt
{ "services": [{ "id": "telegram", "name": "Telegram", "protocolCode": "tg" }] }GET /countriesSatıştaki tüm ülkeler: ISO kodu, adı ve handler_api.php kodu.
| Parametre | Zorunlu | Açıklama |
|---|---|---|
lang query | hayır | Adların dili: en (varsayılan), ru, uk, zh, es, pt, id, vi, tr, ar, fr. |
curl -H "Authorization: Bearer $KEY" "https://relysms.pro/api/v1/countries?lang=en"Yanıt
{ "countries": [{ "id": "US", "name": "United States", "protocolCode": 187 }] }GET /pricesDolar cinsinden fiyatlarımız ve yaklaşık numara sayısı. Parametresiz — satıştaki her şey.
| Parametre | Zorunlu | Açıklama |
|---|---|---|
service query | hayır | /services'ten servis id'si, örneğin telegram. |
country query | hayır | /countries'ten ülke ISO kodu, örneğin US. |
curl -H "Authorization: Bearer $KEY" "https://relysms.pro/api/v1/prices?service=telegram"Yanıt
{ "prices": [{ "service": "telegram", "country": "US", "price": 0.59, "stock": 1000 }] }Olası hatalar: unknown_service, unknown_country
POST /ordersNumara al. Hemen tahsil edilir; kod gelmezse iade edilir.
| Parametre | Zorunlu | Açıklama |
|---|---|---|
service body | evet | /services'ten servis id'si, örneğin telegram. |
country body | evet | /countries'ten ülke ISO kodu, örneğin US. |
maxPrice body | hayır | Dolar cinsinden azami fiyat, sayı olarak. Üstündeyse — güncel fiyatla price_above_max, tahsilat yok. |
curl -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-H "Idempotency-Key: 7c1f0e2a-run-1" \
-d '{"service":"telegram","country":"US","maxPrice":0.8}' \
https://relysms.pro/api/v1/ordersYanıt
{
"order": {
"id": 1042,
"service": "telegram",
"country": "US",
"phone": "15550001111",
"price": 0.59,
"status": "waiting",
"refunded": false,
"codes": [],
"awaitingAnotherCode": false,
"createdAt": "2026-10-27T10:00:00.000Z",
"expiresAt": "2026-10-27T10:20:00.000Z",
"cancelableAt": "2026-10-27T10:02:00.000Z"
}
}Olası hatalar: bad_request, unknown_service, unknown_country, no_numbers, insufficient_balance, below_api_minimum, price_above_max, too_many_open_orders, buying_too_fast, idempotency_key_reused, idempotency_in_progress
POST /orders/batchTek istekte bir servis ve ülke için en fazla 20 numara al.
| Parametre | Zorunlu | Açıklama |
|---|---|---|
service body | evet | /services'ten servis id'si, örneğin telegram. |
country body | evet | /countries'ten ülke ISO kodu, örneğin US. |
quantity body | evet | Kaç numara, 1 ile 20 arası. |
maxPrice body | hayır | Dolar cinsinden azami fiyat, sayı olarak. Üstündeyse — güncel fiyatla price_above_max, tahsilat yok. |
curl -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-H "Idempotency-Key: 7c1f0e2a-batch-1" \
-d '{"service":"telegram","country":"US","quantity":5}' \
https://relysms.pro/api/v1/orders/batchYanıt
{
"orders": [{ "id": 1043, "phone": "15550001112", … }, { "id": 1044, … }],
"requested": 5,
"placed": 2,
"stoppedBy": { "code": "no_numbers", "message": "…" }
}Olası hatalar: bad_request, unknown_service, unknown_country, no_numbers, insufficient_balance, below_api_minimum, price_above_max, too_many_open_orders, buying_too_fast, idempotency_key_reused, idempotency_in_progress
GET /ordersSiparişleriniz, en yeniler önce: varsayılan olarak açık olanlar ya da tümü.
| Parametre | Zorunlu | Açıklama |
|---|---|---|
status query | hayır | open (varsayılan) — bekleyen veya kodu gelmiş; all — tüm siparişler. |
limit query | hayır | Sayfa başına sipariş, 1 ile 100 arası (varsayılan 50). |
before query | hayır | Önceki sayfanın next değeri. |
curl -H "Authorization: Bearer $KEY" "https://relysms.pro/api/v1/orders?status=all&limit=50"Yanıt
{ "orders": [{ "id": 1042, … }], "next": "1001" }Olası hatalar: bad_request
GET /orders/{id}Kodlarıyla tek bir sipariş. Durum waiting iken 5–10 saniyede bir sorgulayın.
| Parametre | Zorunlu | Açıklama |
|---|---|---|
id path | evet | Alım yanıtındaki sipariş id'si. |
curl -H "Authorization: Bearer $KEY" https://relysms.pro/api/v1/orders/1042Yanıt
{
"order": {
"id": 1042,
"status": "received",
"codes": [{ "code": "48213", "text": "Telegram code: 48213", "receivedAt": "2026-10-27T10:01:12.000Z" }],
…
}
}Olası hatalar: not_found
POST /orders/{id}/finishKodu gelmiş siparişi tamamla. Numaraya artık SMS gelmez. Tekrarlamak zararsızdır.
| Parametre | Zorunlu | Açıklama |
|---|---|---|
id path | evet | Alım yanıtındaki sipariş id'si. |
curl -X POST -H "Authorization: Bearer $KEY" https://relysms.pro/api/v1/orders/1042/finishYanıt
{ "order": { "id": 1042, "status": "finished", … } }Olası hatalar: not_found, invalid_state
POST /orders/{id}/another-codeAynı numaraya bir kod daha — ilk koddan sonra, sipariş açıkken. Ücretsiz. Yeni kod gelene kadar siparişte awaitingAnotherCode = true.
| Parametre | Zorunlu | Açıklama |
|---|---|---|
id path | evet | Alım yanıtındaki sipariş id'si. |
curl -X POST -H "Authorization: Bearer $KEY" https://relysms.pro/api/v1/orders/1042/another-codeYanıt
{ "order": { "id": 1042, "status": "received", "awaitingAnotherCode": true, … } }Olası hatalar: not_found, invalid_state, try_later
POST /orders/{id}/cancelKodu gelmemiş siparişi alımdan 2 dakika sonra iptal et. Para hemen döner.
| Parametre | Zorunlu | Açıklama |
|---|---|---|
id path | evet | Alım yanıtındaki sipariş id'si. |
curl -X POST -H "Authorization: Bearer $KEY" https://relysms.pro/api/v1/orders/1042/cancelYanıt
{ "order": { "id": 1042, "status": "cancelled", "refunded": true, … } }Olası hatalar: not_found, invalid_state, too_early_to_cancel
GET /webhookWebhook adresi ve imza sırrı ya da null.
curl -H "Authorization: Bearer $KEY" https://relysms.pro/api/v1/webhookYanıt
{ "webhook": { "url": "https://example.com/relysms-hook", "secret": "whsec_…", "createdAt": "2026-10-27T10:00:00.000Z" } }PUT /webhookAdresi belirle veya değiştir. Sır bir kez oluşturulur ve korunur; rotateSecret yenisini üretir.
| Parametre | Zorunlu | Açıklama |
|---|---|---|
url body | evet | Sunucunuzun HTTPS adresi. Özel ve yerel adresler reddedilir. |
rotateSecret body | hayır | true — yeni bir imza sırrı üret. |
curl -X PUT -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-d '{"url":"https://example.com/relysms-hook"}' \
https://relysms.pro/api/v1/webhookYanıt
{ "webhook": { "url": "https://example.com/relysms-hook", "secret": "whsec_…", "createdAt": "2026-10-27T10:00:00.000Z" } }Olası hatalar: bad_request, invalid_webhook_url
DELETE /webhookWebhook'u kaldır. Henüz gönderilmemiş olaylar atılır.
curl -X DELETE -H "Authorization: Bearer $KEY" https://relysms.pro/api/v1/webhookYanıt
{ "webhook": null }POST /webhook/testAdresi ve imzayı denemek için ping olayı gönder.
curl -X POST -H "Authorization: Bearer $KEY" https://relysms.pro/api/v1/webhook/testYanıt
{ "delivery": { "id": "cm…" } }Olası hatalar: not_found
GET /webhook/deliveriesSon 20 teslimat: olay, durum, deneme sayısı, sunucunuzun son yanıtı.
curl -H "Authorization: Bearer $KEY" https://relysms.pro/api/v1/webhook/deliveriesYanıt
{
"deliveries": [{
"id": "cm…", "event": "order.code_received", "orderId": 1042,
"status": "pending", "attempts": 2, "lastHttpStatus": 502, "lastError": "HTTP 502",
"createdAt": "2026-10-27T10:01:12.000Z", "deliveredAt": null, "nextAttemptAt": "2026-10-27T10:02:22.000Z"
}]
}Siparişin status alanı:
waiting — Numara sizin, henüz kod gelmedi.received — Kod geldi; codes içinde. Sipariş açıkken başka kodlar da gelebilir.finished — Siparişi tamamladınız (ya da koddan sonra süresi doldu).cancelled — Kodsuz iptal edildi; refunded true ve para bakiyede.expired — Süre kodsuz doldu; para bakiyeye döndü.Hata, bir HTTP durumu ve program için code, insanlar için message içeren bir JSON'dur. Bazılarında ek alanlar vardır (price, cancelableAt, apiMinimum).
{ "error": { "code": "price_above_max", "message": "The price is above maxPrice.", "price": 0.59 } }missing_key | 401 | Authorization veya X-Api-Key içinde anahtar yok. |
invalid_key | 401 | Anahtar yanlış, değiştirilmiş ya da hesap engellenmiş. |
bad_request | 400 | Gövde veya bir parametre hatalı; message hangisi olduğunu söyler. |
unknown_service | 400 | Böyle bir servis id'si yok. |
unknown_country | 400 | Böyle bir ülke kodu yok. |
idempotency_key_invalid | 400 | Idempotency-Key boş ya da 255 karakterden uzun. |
invalid_webhook_url | 400 | Webhook adresi HTTPS değil, geçerli bir URL değil ya da özel veya yerel bir sunucuyu gösteriyor. |
insufficient_balance | 402 | Bakiye fiyatın altında. |
below_api_minimum | 402 | Bakiye $20'nin altında — API yalnızca $20'den itibaren alır. |
account_blocked | 403 | Hesap engellendi — destekle iletişime geçin. |
not_found | 404 | Bu anahtar için bu id'de sipariş yok. |
no_numbers | 409 | Bu eşleşme için şu an numara yok; tahsilat yapılmadı. |
price_above_max | 409 | Fiyat maxPrice'ı aşıyor; güncel fiyat price alanında. |
too_many_open_orders | 409 | Çok fazla açık sipariş — bir kısmını tamamlayın veya iptal edin. |
invalid_state | 409 | Bu durumda yapılamaz (örneğin kodsuz tamamlama). |
too_early_to_cancel | 409 | İptal, alımdan 2 dakika sonra, cancelableAt anından itibaren mümkündür. |
idempotency_in_progress | 409 | Bu Idempotency-Key ile bir istek hâlâ sürüyor; biraz sonra tekrarlayın. |
idempotency_key_reused | 422 | Bu Idempotency-Key başka bir istek için kullanılmış. |
rate_limited | 429 | Saniyede 20'den fazla istek; ne zaman tekrarlanacağını Retry-After söyler. |
buying_too_fast | 429 | Saniyede 5'ten fazla alım; /orders/batch kullanın. |
try_later | 503 | Geçici olarak olmadı — bir dakika sonra tekrar deneyin. |
Numara al, kodu bekle, siparişi tamamla.
Python
import time, uuid, requests
BASE = "https://relysms.pro/api/v1"
S = requests.Session()
S.headers["Authorization"] = "Bearer rs_your_key"
r = S.post(f"{BASE}/orders",
json={"service": "telegram", "country": "US", "maxPrice": 0.8},
headers={"Idempotency-Key": str(uuid.uuid4())}, timeout=30)
if r.status_code != 201:
raise SystemExit(r.json()["error"]) # no_numbers, below_api_minimum, …
order = r.json()["order"]
print("number:", order["phone"])
while order["status"] == "waiting": # up to 20 minutes
time.sleep(10)
order = S.get(f"{BASE}/orders/{order['id']}", timeout=30).json()["order"]
if order["status"] == "received":
print("code:", order["codes"][-1]["code"])
S.post(f"{BASE}/orders/{order['id']}/finish", timeout=30)
# "expired" or "cancelled": the money is back on the balanceNode.js
const BASE = "https://relysms.pro/api/v1";
const headers = { Authorization: "Bearer rs_your_key", "Content-Type": "application/json" };
const res = await fetch(`${BASE}/orders`, {
method: "POST",
headers: { ...headers, "Idempotency-Key": crypto.randomUUID() },
body: JSON.stringify({ service: "telegram", country: "US", maxPrice: 0.8 }),
});
if (res.status !== 201) throw new Error((await res.json()).error.code);
let { order } = await res.json();
console.log("number:", order.phone);
while (order.status === "waiting") {
await new Promise((r) => setTimeout(r, 10_000));
({ order } = await (await fetch(`${BASE}/orders/${order.id}`, { headers })).json());
}
if (order.status === "received") {
console.log("code:", order.codes.at(-1).code);
await fetch(`${BASE}/orders/${order.id}/finish`, { method: "POST", headers });
}Tam döngü: numara al, kodu bekle, siparişi tamamla.
curl
KEY=rs_your_key
BASE=https://relysms.pro/stubs/handler_api.php
curl "$BASE?api_key=$KEY&action=getBalance"
curl "$BASE?api_key=$KEY&action=getNumber&service=tg&country=187&maxPrice=0.80"
# → ACCESS_NUMBER:1042:15550001111
curl "$BASE?api_key=$KEY&action=getStatus&id=1042"
# → STATUS_WAIT_CODE … then STATUS_OK:48213
curl "$BASE?api_key=$KEY&action=setStatus&id=1042&status=6"Python
import time, requests
BASE = "https://relysms.pro/stubs/handler_api.php"
KEY = "rs_your_key"
def call(action, **params):
r = requests.get(BASE, params={"api_key": KEY, "action": action, **params}, timeout=30)
r.raise_for_status()
return r.text
answer = call("getNumber", service="tg", country="187", maxPrice="0.80")
if not answer.startswith("ACCESS_NUMBER"):
raise SystemExit(answer) # NO_NUMBERS, NO_BALANCE, …
_, order_id, phone = answer.split(":")
print("number:", phone)
for _ in range(120): # up to 20 minutes, every 10 s
status = call("getStatus", id=order_id)
if status.startswith("STATUS_OK:"):
print("code:", status.split(":", 1)[1])
call("setStatus", id=order_id, status=6)
break
if status == "STATUS_CANCEL":
break # refunded automatically
time.sleep(10)Node.js
const BASE = "https://relysms.pro/stubs/handler_api.php";
const KEY = "rs_your_key";
async function call(action, params = {}) {
const url = new URL(BASE);
url.search = new URLSearchParams({ api_key: KEY, action, ...params });
const res = await fetch(url);
return res.text();
}
const answer = await call("getNumber", { service: "tg", country: "187", maxPrice: "0.80" });
if (!answer.startsWith("ACCESS_NUMBER")) throw new Error(answer);
const [, id, phone] = answer.split(":");
console.log("number:", phone);
for (let i = 0; i < 120; i++) {
const status = await call("getStatus", { id });
if (status.startsWith("STATUS_OK:")) {
console.log("code:", status.slice("STATUS_OK:".length));
await call("setStatus", { id, status: "6" });
break;
}
if (status === "STATUS_CANCEL") break; // refunded automatically
await new Promise((r) => setTimeout(r, 10_000));
}Sunucu adresini https://relysms.pro/stubs/handler_api.php olarak, anahtarı da hesabınızdaki anahtarla değiştirin. Servis ve ülke kodları aynı kalır.
API ile alım için bakiye $20 veya üzeri olmalı. Hesap ve Mini App'te böyle bir eşik yok.
Süre dolduğunda kendiliğinden bakiyeye döner; 2 dakika sonra iptal ederseniz hemen döner.
Evet, süre açıkken: setStatus=3, ardından yeniden getStatus.
Hayır: tüm alımlar gerçek. Ucuz bir eşleşmeyle başlayın ve akışı tek numarada deneyin.
Hesap → Bakiye → API → Yenisini çıkar. Eskisi hemen çalışmaz olur.
ChatGPT, Claude ve diğer modeller için tek metin hâlinde tam belgeler /tr/developers.md adresinde, kısa harita /llms.txt'de. Bağlantıyı modele verin ve RelySMS'i kodunuza bağlamasını isteyin.
https://relysms.pro/tr/developers.md adresini oku ve RelySMS'i betiğime bağla.