API ενεργοποίησης SMS
Δύο τρόποι: ένα endpoint συμβατό με το πρωτόκολλο sms-activate, ώστε το υπάρχον λογισμικό να αλλάζει με URL και κλειδί, και ένα JSON REST API για νέες ενσωματώσεις. Και τα δύο χρησιμοποιούν το ίδιο κλειδί API από τον πίνακά σας.
Πάρτε το κλειδί API σας
Δημιουργήστε λογαριασμό, ανοίξτε τον πίνακα και δημιουργήστε κλειδί στην Πρόσβαση API. Κρατήστε το μυστικό: όποιος έχει το κλειδί μπορεί να ξοδέψει το υπόλοιπό σας.
ΕγγραφήΤυπική ροή
- Καλέστε getNumber με υπηρεσία και χώρα.
- Χρησιμοποιήστε τον αριθμό στην εφαρμογή-στόχο.
- Ρωτάτε getStatus κάθε λίγα δευτερόλεπτα μέχρι να λάβετε STATUS_OK.
- Καλέστε 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 |
| 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":{…}} |
Τιμές 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/eventsWebhooks
Ορίστε ένα 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
- Το αναγνωριστικό ενεργοποίησης δεν υπάρχει ή δεν είναι δικό σας.