SMS aktivasyon API'si
İki yol var: sms-activate protokolüyle uyumlu bir uç nokta (mevcut yazılımlar URL ve anahtarı değiştirerek geçer) ve yeni entegrasyonlar için bir JSON REST API. İkisi de panelindeki aynı API anahtarını kullanır.
API anahtarını al
Hesap oluştur, paneli aç ve API erişimi bölümünde anahtar oluştur. Gizli tut: anahtara sahip olan herkes bakiyeni harcayabilir.
Kayıt olTipik akış
- Bir servis ve ülkeyle getNumber çağır.
- Numarayı hedef uygulamada kullan.
- STATUS_OK alana kadar birkaç saniyede bir getStatus sorgula.
- Bitirmek için setStatus'u 6 ile, kod gelmediyse iptal için 8 ile çağır.
sms-activate uyumlu uç nokta
api_key ve action parametreleriyle GET veya POST isteği gönder. Yanıtlar sms-activate'teki gibi düz metindir.
https://smsrota.com/stubs/handler_api.php?api_key=KEY&action=getNumber&service=wa&country=187
İşlemler
| İşlem | Parametreler | Yanıt |
|---|---|---|
| getBalance | — | ACCESS_BALANCE:12.5000 |
| getPrices | service?, country? | {"187":{"wa":{"cost":0.4,"count":1563}}} |
| getNumber | service, country, maxPrice? | ACCESS_NUMBER:48151623:15550123456 |
| getStatus | id | STATUS_WAIT_CODE · STATUS_WAIT_RETRY:code · STATUS_OK:code · STATUS_CANCEL |
| setStatus | id, status | ACCESS_RETRY_GET · ACCESS_ACTIVATION · ACCESS_CANCEL |
| getRentNumber | service, country, rent_time (4/24/72/168/720) | {"status":"success","phone":{"id":31,"endDate":"…","number":"447700900001"}} |
| getRentStatus | id | {"status":"success","quantity":"1","values":{"0":{"phoneFrom":"WhatsApp","text":"…"}}} |
| setRentStatus | id, status (1 = finish, 2 = cancel) | {"status":"success"} |
| continueRentNumber | id, rent_time | {"status":"success","phone":{…}} |
setStatus değerleri
- 3
- Aynı numaraya başka bir kod iste
- 6
- Aktivasyonu tamamla
- 8
- İptal et ve iade al (satın aldıktan iki dakika sonra mümkün)
JSON REST API
Anahtarı Authorization başlığında "Bearer KEY" olarak gönder. Tutarlar dört ondalıklı ABD doları cinsinden metindir.
GET https://smsrota.com/v1/balance
GET https://smsrota.com/v1/prices?service=wa
POST https://smsrota.com/v1/activations {"service":"wa","country":"187"}
GET https://smsrota.com/v1/activations/:id
POST https://smsrota.com/v1/activations/:id/retry
POST https://smsrota.com/v1/activations/:id/complete
POST https://smsrota.com/v1/activations/:id/cancel
GET https://smsrota.com/v1/rent/prices?service=wa&hours=24
POST https://smsrota.com/v1/rentals {"service":"full","country":"16","hours":24}
GET https://smsrota.com/v1/rentals/:id
POST https://smsrota.com/v1/rentals/:id/extend {"hours":24}
POST https://smsrota.com/v1/rentals/:id/finish
POST https://smsrota.com/v1/rentals/:id/cancel
POST https://smsrota.com/v1/rentals/:id/dispute {"reason":"no_sms"}
PUT https://smsrota.com/v1/webhook {"url":"https://example.com/sms-webhook"}
POST https://smsrota.com/v1/webhook/test
GET https://smsrota.com/v1/webhook/eventsWebhook'lar
Panelinde API erişimi bölümünden bir URL gir. Her olay için JSON gövdeli bir POST gönderiyoruz. 10 saniye içinde herhangi bir 2xx durum koduyla yanıt ver; yoksa 1, 5, 30, 120, 360 ve 720 dakika sonra yeniden deneriz.
- activation.sms_received
- Satın aldığın bir numaraya kod geldi.
- activation.cancelled
- Bir numara iptal edildi ya da süresi doldu ve para bakiyene geri döndü.
- rental.sms_received
- Kiraladığın bir numaraya SMS geldi.
- rental.ended
- Bir kiralama bitti ya da iptal edildi.
Örnek gövde
{
"id": "evt_1042",
"type": "activation.sms_received",
"createdAt": "2026-11-01T10:00:00.000Z",
"data": {
"activationId": 48151623,
"service": "wa",
"country": "187",
"phone": "15550123456",
"code": "123456"
}
}İmzayı kontrol etme
Her istekte t=1730000000,v1=… biçiminde bir X-Webhook-Signature başlığı bulunur; v1, imzalama anahtarınla oluşturulan "t.body" değerinin onaltılık HMAC-SHA256 özetidir. İmza eşleşmiyorsa ya da t 5 dakikadan eskiyse isteği reddet.
import { createHmac, timingSafeEqual } from "node:crypto";
// rawBody: the request body exactly as received, before JSON parsing.
function verify(rawBody, header, secret) {
const { t, v1 } = Object.fromEntries(header.split(",").map((p) => p.split("=")));
const expected = createHmac("sha256", secret).update(`${t}.${rawBody}`).digest("hex");
const fresh = Math.abs(Date.now() / 1000 - Number(t)) < 300;
return fresh && v1.length === expected.length && timingSafeEqual(Buffer.from(v1), Buffer.from(expected));
}Hatalar
- BAD_KEY
- API anahtarı yanlış veya değiştirilmiş.
- NO_NUMBERS
- Bu servis ve ülke için şu anda stok yok.
- NO_BALANCE
- Bakiyen bu numara için yetersiz.
- EARLY_CANCEL_DENIED
- İptal, satın aldıktan iki dakika sonra mümkündür.
- NO_ACTIVATION
- Aktivasyon kimliği yok ya da sana ait değil.