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.
RegistracijaTipičan tijek
- Pozovite getNumber s uslugom i zemljom.
- Upotrijebite broj u ciljnoj aplikaciji.
- Provjeravajte getStatus svakih nekoliko sekundi dok ne dobijete STATUS_OK.
- 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
| Radnja | Parametri | Odgovor |
|---|---|---|
| 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":{…}} |
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/eventsWebhookovi
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š.