API ενεργοποίησης SMS

Δύο τρόποι: ένα endpoint συμβατό με το πρωτόκολλο sms-activate, ώστε το υπάρχον λογισμικό να αλλάζει με URL και κλειδί, και ένα JSON REST API για νέες ενσωματώσεις. Και τα δύο χρησιμοποιούν το ίδιο κλειδί API από τον πίνακά σας.

Πάρτε το κλειδί API σας

Δημιουργήστε λογαριασμό, ανοίξτε τον πίνακα και δημιουργήστε κλειδί στην Πρόσβαση API. Κρατήστε το μυστικό: όποιος έχει το κλειδί μπορεί να ξοδέψει το υπόλοιπό σας.

Εγγραφή

Τυπική ροή

  1. Καλέστε getNumber με υπηρεσία και χώρα.
  2. Χρησιμοποιήστε τον αριθμό στην εφαρμογή-στόχο.
  3. Ρωτάτε getStatus κάθε λίγα δευτερόλεπτα μέχρι να λάβετε STATUS_OK.
  4. Καλέστε setStatus με 6 για ολοκλήρωση ή με 8 για ακύρωση αν δεν ήρθε κωδικός.

Endpoint συμβατό με sms-activate

Στείλτε αιτήματα GET ή POST με τις παραμέτρους api_key και action. Οι απαντήσεις είναι απλό κείμενο, ακριβώς όπως στο sms-activate.

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

Ενέργειες

ΕνέργειαΠαράμετροιΑπάντηση
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

3
Ζητήστε νέο κωδικό στον ίδιο αριθμό
6
Ολοκλήρωση της ενεργοποίησης
8
Ακύρωση και επιστροφή (δυνατή δύο λεπτά μετά την αγορά)

JSON REST API

Στείλτε το κλειδί στην κεφαλίδα Authorization ως "Bearer KEY". Τα ποσά είναι συμβολοσειρές σε δολάρια ΗΠΑ με τέσσερα δεκαδικά.

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

Ορίστε ένα URL στην ενότητα Πρόσβαση API του πίνακά σας. Για κάθε συμβάν στέλνουμε POST με σώμα JSON. Απαντήστε με οποιαδήποτε κατάσταση 2xx μέσα σε 10 δευτερόλεπτα· αλλιώς ξαναδοκιμάζουμε μετά από 1, 5, 30, 120, 360 και 720 λεπτά.

activation.sms_received
Έφτασε κωδικός για έναν αριθμό που αγοράσατε.
activation.cancelled
Ένας αριθμός ακυρώθηκε ή έληξε και τα χρήματα επέστρεψαν στο υπόλοιπό σας.
rental.sms_received
Έφτασε SMS σε έναν ενοικιασμένο αριθμό.
rental.ended
Μια ενοικίαση έληξε ή ακυρώθηκε.

Παράδειγμα σώματος

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

Έλεγχος της υπογραφής

Κάθε αίτημα έχει κεφαλίδα X-Webhook-Signature όπως t=1730000000,v1=…, όπου v1 είναι το δεκαεξαδικό HMAC-SHA256 του "t.body" με το μυστικό υπογραφής σας. Απορρίψτε το αίτημα αν η υπογραφή δεν ταιριάζει ή αν το t είναι παλαιότερο από 5 λεπτά.

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

Σφάλματα

BAD_KEY
Το κλειδί API είναι λάθος ή αντικαταστάθηκε.
NO_NUMBERS
Δεν υπάρχει διαθεσιμότητα για αυτή την υπηρεσία και χώρα αυτή τη στιγμή.
NO_BALANCE
Το υπόλοιπό σας δεν αρκεί για αυτόν τον αριθμό.
EARLY_CANCEL_DENIED
Η ακύρωση είναι δυνατή δύο λεπτά μετά την αγορά.
NO_ACTIVATION
Το αναγνωριστικό ενεργοποίησης δεν υπάρχει ή δεν είναι δικό σας.