API għall-attivazzjoni bl-SMS

Żewġ modi: endpoint kompatibbli mal-protokoll sms-activate, biex is-software eżistenti jaqleb billi tbiddel l-URL u ċ-ċavetta, u JSON REST API għal integrazzjonijiet ġodda. It-tnejn jużaw l-istess ċavetta tal-API mill-panel tiegħek.

Ikseb iċ-ċavetta tal-API tiegħek

Oħloq kont, iftaħ il-panel u oħloq ċavetta taħt Aċċess għall-API. Żommha sigrieta: kull min għandu ċ-ċavetta jista' jonfoq il-bilanċ tiegħek.

Irreġistra

Fluss tipiku

  1. Sejjaħ getNumber b'servizz u pajjiż.
  2. Uża n-numru fl-app fil-mira.
  3. Staqsi lil getStatus kull ftit sekondi sakemm tieħu STATUS_OK.
  4. Sejjaħ setStatus b'6 biex tlesti, jew b'8 biex tikkanċella jekk ma wasalx kodiċi.

Endpoint kompatibbli ma' sms-activate

Ibgħat talbiet GET jew POST bil-parametri api_key u action. It-tweġibiet huma test sempliċi, eżatt bħal sms-activate.

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

Azzjonijiet

AzzjoniParametriTweġiba
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":{…}}

Valuri ta' setStatus

3
Itlob kodiċi ieħor fuq l-istess numru
6
Temm l-attivazzjoni
8
Ikkanċella u rifużjoni (possibbli żewġ minuti wara x-xiri)

JSON REST API

Ibgħat iċ-ċavetta fl-header Authorization bħala "Bearer KEY". L-ammonti huma strings f'dollari Amerikani b'erba' deċimali.

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

Webhooks

Issettja URL taħt Aċċess għall-API fil-panel tiegħek. Għal kull avveniment nibagħtu POST b'korp JSON. Wieġeb bi kwalunkwe status 2xx fi żmien 10 sekondi; inkella nerġgħu nippruvaw wara 1, 5, 30, 120, 360 u 720 minuta.

activation.sms_received
Wasal kodiċi għal numru li xtrajt.
activation.cancelled
Numru tħassar jew skada u l-flus marru lura fil-bilanċ tiegħek.
rental.sms_received
Wasal SMS fuq numru mikri.
rental.ended
Kiri ntemm jew tħassar.

Eżempju ta' korp

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

Iċċekkjar tal-firma

Kull talba għandha header X-Webhook-Signature bħal t=1730000000,v1=…, fejn v1 huwa l-HMAC-SHA256 eżadeċimali ta' "t.body" magħmul bis-sigriet tal-firma tiegħek. Irrifjuta t-talba jekk il-firma ma taqbilx jew jekk t huwa eqdem minn 5 minuti.

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

Żbalji

BAD_KEY
Iċ-ċavetta tal-API hija ħażina jew ġiet sostitwita.
NO_NUMBERS
Bħalissa m'hemmx stokk għal dan is-servizz u dan il-pajjiż.
NO_BALANCE
Il-bilanċ tiegħek mhuwiex biżżejjed għal dan in-numru.
EARLY_CANCEL_DENIED
Tista' tikkanċella żewġ minuti wara x-xiri.
NO_ACTIVATION
L-id tal-attivazzjoni ma jeżistix jew mhuwiex tiegħek.