SMS aktyvinimo API

Du būdai: su sms-activate protokolu suderinamas endpoint, kad esama programinė įranga pereitų pakeitus URL ir raktą, ir JSON REST API naujoms integracijoms. Abu naudoja tą patį API raktą iš jūsų skydelio.

Gaukite API raktą

Sukurkite paskyrą, atidarykite skydelį ir sugeneruokite raktą skiltyje API prieiga. Laikykite jį paslaptyje: bet kas, turintis raktą, gali leisti jūsų likutį.

Registruotis

Įprasta eiga

  1. Iškvieskite getNumber su paslauga ir šalimi.
  2. Naudokite numerį tikslinėje programėlėje.
  3. Kas kelias sekundes tikrinkite getStatus, kol gausite STATUS_OK.
  4. Iškvieskite setStatus su 6 užbaigti arba su 8 atšaukti, jei kodas neatėjo.

Su sms-activate suderinamas endpoint

Siųskite GET arba POST užklausas su parametrais api_key ir action. Atsakymai yra paprastas tekstas, lygiai kaip sms-activate.

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

Veiksmai

VeiksmasParametraiAtsakymas
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 reikšmės

3
Prašyti naujo kodo tuo pačiu numeriu
6
Užbaigti aktyvinimą
8
Atšaukti ir grąžinti pinigus (galima praėjus dviem minutėms po pirkimo)

JSON REST API

Siųskite raktą Authorization antraštėje kaip "Bearer KEY". Sumos yra eilutės JAV doleriais su keturiais skaitmenimis po kablelio.

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'ai

Nurodykite URL savo skydelio skiltyje API prieiga. Kiekvienam įvykiui siunčiame POST užklausą su JSON turiniu. Atsakykite bet kokia 2xx būsena per 10 sekundžių; kitaip bandysime dar kartą po 1, 5, 30, 120, 360 ir 720 minučių.

activation.sms_received
Gautas kodas jūsų pirktam numeriui.
activation.cancelled
Numeris atšauktas arba baigė galioti, o pinigai grąžinti į jūsų balansą.
rental.sms_received
Gauta SMS žinutė nuomojamu numeriu.
rental.ended
Nuoma baigėsi arba buvo atšaukta.

Turinio pavyzdys

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

Parašo tikrinimas

Kiekviena užklausa turi antraštę X-Webhook-Signature, pvz., t=1730000000,v1=…, kur v1 yra šešioliktainis "t.body" HMAC-SHA256, apskaičiuotas jūsų pasirašymo raktu. Atmeskite užklausą, jei parašas nesutampa arba t senesnis nei 5 minutės.

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

Klaidos

BAD_KEY
API raktas neteisingas arba buvo pakeistas.
NO_NUMBERS
Šiai paslaugai ir šaliai šiuo metu nėra likučio.
NO_BALANCE
Jūsų likučio nepakanka šiam numeriui.
EARLY_CANCEL_DENIED
Atšaukti galima praėjus dviem minutėms po pirkimo.
NO_ACTIVATION
Aktyvinimo ID neegzistuoja arba nepriklauso jums.