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 ol

Tipik akış

  1. Bir servis ve ülkeyle getNumber çağır.
  2. Numarayı hedef uygulamada kullan.
  3. STATUS_OK alana kadar birkaç saniyede bir getStatus sorgula.
  4. 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

İşlemParametrelerYanıt
getBalance—ACCESS_BALANCE:12.5000
getPricesservice?, country?{"187":{"wa":{"cost":0.4,"count":1563}}}
getNumberservice, country, maxPrice?ACCESS_NUMBER:48151623:15550123456
getStatusidSTATUS_WAIT_CODE · STATUS_WAIT_RETRY:code · STATUS_OK:code · STATUS_CANCEL
setStatusid, statusACCESS_RETRY_GET · ACCESS_ACTIVATION · ACCESS_CANCEL
getRentNumberservice, country, rent_time (4/24/72/168/720){"status":"success","phone":{"id":31,"endDate":"…","number":"447700900001"}}
getRentStatusid{"status":"success","quantity":"1","values":{"0":{"phoneFrom":"WhatsApp","text":"…"}}}
setRentStatusid, status (1 = finish, 2 = cancel){"status":"success"}
continueRentNumberid, 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/events

Webhook'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.