API za SMS aktivaciju

Dva načina: endpoint kompatibilan s protokolom sms-activate, pa postojeći softver prelazi promjenom URL-a i ključa, te JSON REST API za nove integracije. Oba koriste isti API ključ iz vašeg panela.

Nabavite API ključ

Izradite račun, otvorite panel i generirajte ključ u odjeljku API pristup. Čuvajte ga u tajnosti: tko god ima ključ, može trošiti vaš saldo.

Registracija

Tipičan tijek

  1. Pozovite getNumber s uslugom i zemljom.
  2. Upotrijebite broj u ciljnoj aplikaciji.
  3. Provjeravajte getStatus svakih nekoliko sekundi dok ne dobijete STATUS_OK.
  4. Pozovite setStatus sa 6 za završetak ili s 8 za otkazivanje ako kod nije stigao.

Endpoint kompatibilan sa sms-activate

Šaljite GET ili POST zahtjeve s parametrima api_key i action. Odgovori su običan tekst, točno kao kod sms-activate.

https://smsrota.com/stubs/handler_api.php?api_key=KEY&action=getNumber&service=wa&country=187

Radnje

RadnjaParametriOdgovor
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":{…}}

Vrijednosti setStatus

3
Zatražite novi kod na isti broj
6
Završite aktivaciju
8
Otkažite i vratite novac (moguće dvije minute nakon kupnje)

JSON REST API

Pošaljite ključ u zaglavlju Authorization kao "Bearer KEY". Iznosi su nizovi u američkim dolarima s četiri decimale.

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

Webhookovi

Postavite URL u odjeljku API pristup na svojoj ploči. Za svaki događaj šaljemo POST s JSON tijelom. Odgovorite bilo kojim 2xx statusom unutar 10 sekundi; inače pokušavamo ponovno nakon 1, 5, 30, 120, 360 i 720 minuta.

activation.sms_received
Stigao je kod za broj koji ste kupili.
activation.cancelled
Broj je otkazan ili je istekao i novac je vraćen na vaš saldo.
rental.sms_received
Stigao je SMS na unajmljeni broj.
rental.ended
Najam je završio ili je otkazan.

Primjer tijela

{
  "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"
  }
}

Provjera potpisa

Svaki zahtjev ima zaglavlje X-Webhook-Signature poput t=1730000000,v1=…, gdje je v1 heksadecimalni HMAC-SHA256 od "t.body" izračunat vašim tajnim ključem. Odbijte zahtjev ako se potpis ne podudara ili je t stariji od 5 minuta.

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));
}

Pogreške

BAD_KEY
API ključ je pogrešan ili je zamijenjen.
NO_NUMBERS
Trenutno nema dostupnosti za ovu uslugu i zemlju.
NO_BALANCE
Vaš saldo nije dovoljan za ovaj broj.
EARLY_CANCEL_DENIED
Otkazivanje je moguće dvije minute nakon kupnje.
NO_ACTIVATION
ID aktivacije ne postoji ili nije vaš.