SMS API για προγραμματιστές
Συνδέστε το e-shop, το CRM ή το σύστημα κρατήσεών σας με ένα απλό JSON API πάνω από HTTPS. Στέλνετε SMS με μία κλήση και μαθαίνετε αν παραδόθηκαν χωρίς να στήσετε webhook, χωρίς δημόσιο URL και χωρίς στατική IP.
Δημιουργία λογαριασμού · Πλήρης τεκμηρίωση στα αγγλικά
Ξεκινήστε σε τρία βήματα
- Φτιάξτε λογαριασμό και μπείτε στη σελίδα API του panel. Δημιουργήστε ένα κλειδί. Εμφανίζεται μία μόνο φορά, γι' αυτό αποθηκεύστε το αμέσως.
- Στείλτε ένα SMS με την κλήση που ακολουθεί.
- Διαβάστε τις αναφορές παράδοσης από το
/v1/reports.
curl -X POST https://api.isms.gr/v1/messages \
-H "Authorization: Bearer YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"sender": "MyShop", "to": ["306900000000"], "text": "Your order is on its way", "client_ref": "order-1042"}'
Ταυτοποίηση και δικαιώματα
Κάθε αίτημα στέλνει το κλειδί στο header Authorization: Bearer <key>. Όλα τα αιτήματα γίνονται με HTTPS.
Κάθε κλειδί έχει μόνο τα δικαιώματα που του δώσατε:
| Δικαίωμα | Τι επιτρέπει |
|---|---|
send |
Αποστολή SMS και ανάγνωση υπολοίπου |
read |
Κατάσταση μηνυμάτων και αναφορές παράδοσης |
blacklist |
Προβολή και αλλαγή της λίστας αποκλεισμού (εξ ορισμού κλειστό) |
Έτσι δίνετε σε κάθε σύστημα μόνο ό,τι χρειάζεται, π.χ. σε ένα εργαλείο αναφορών μόνο read. Μπορείτε προαιρετικά να περιορίσετε ένα κλειδί σε συγκεκριμένες IP, αλλά δεν είναι απαραίτητο. Ένα κλειδί ανακαλείται αμέσως από το panel και από εκείνη τη στιγμή απαντά 401. Έχετε έως 10 ενεργά κλειδιά.
Αποστολή: POST /v1/messages
| Πεδίο | Υποχρεωτικό | Τι είναι |
|---|---|---|
sender |
ναι | Όνομα αποστολέα, έως 11 λατινικοί χαρακτήρες, ψηφία ή τελείες, ή έως 15 ψηφία. Πρέπει να είναι εγκεκριμένος στον λογαριασμό σας. |
to |
ναι | Λίστα κινητών με κωδικό χώρας, π.χ. 306900000000. Έως 1.000 ανά κλήση. |
text |
ναι | Το μήνυμα. |
unicode |
όχι | true για Unicode (70 χαρακτήρες ανά μέρος). Εξ ορισμού GSM (160 χαρακτήρες). |
schedule_at |
όχι | Ώρα αποστολής, ISO 8601. |
client_ref |
όχι | Δική σας αναφορά, 1 έως 64 χαρακτήρες. Βλ. παρακάτω. |
Αν ένας αριθμός είναι άκυρος ή χωρίς κωδικό χώρας, απορρίπτεται όλη η αίτηση και δεν στέλνεται ούτε χρεώνεται τίποτα. Η χρέωση γίνεται όταν το μήνυμα γίνει δεκτό, από το υπόλοιπο του λογαριασμού σας.
Παράδειγμα απάντησης:
{
"id": "KN-7K3M9-Q2XPD",
"client_ref": "order-1042",
"status": "queued",
"created_at": "2026-10-12T08:20:30Z",
"scheduled_at": null,
"cost": "0.03572",
"recipients": 1,
"counts": {"queued": 1, "sent": 0, "delivered": 0, "failed": 0, "unknown": 0, "blocked": 0},
"duplicate": false
}
Τα χρήματα επιστρέφονται πάντα ως κείμενο (string), σε ευρώ, και οι ώρες σε UTC.
Ασφαλείς επαναλήψεις με client_ref
Αν ένα αίτημα λήξει χωρίς απάντηση και δεν ξέρετε αν έφτασε, στείλτε το ξανά με το ίδιο client_ref. Δεν φεύγει δεύτερο SMS και δεν χρεώνεστε ξανά: παίρνετε πίσω το αρχικό μήνυμα με "duplicate": true. Το client_ref θυμόμαστε για πάντα.
Αναφορές παράδοσης χωρίς webhook
Εσείς ρωτάτε και εμείς σας δίνουμε μόνο ό,τι δεν έχετε ήδη πάρει. Γι' αυτό δεν χρειάζεστε δημόσιο URL ούτε στατική IP.
curl "https://api.isms.gr/v1/reports?limit=500" \
-H "Authorization: Bearer YOUR_KEY"
{
"reports": [
{"message_id": "KN-7K3M9-Q2XPD", "client_ref": "order-1042", "mobile": "306900000000",
"status": "delivered", "reason": null, "at": "2026-10-12T08:20:36Z"}
],
"count": 1,
"ack": "tVEgYU10LopOB6biUNbftQ",
"next_poll_after": 5
}
Πώς δουλεύει ο κύκλος:
- Η κλήση επιστρέφει ένα πακέτο αναφορών και ένα
ack. - Αφού αποθηκεύσετε το πακέτο, καλείτε ξανά με
?ack=<το ack>. Αυτό το επιβεβαιώνει και φέρνει το επόμενο. - Αν το σύστημά σας έπεσε πριν αποθηκεύσει, δεν στέλνετε
ackκαι παίρνετε το ίδιο πακέτο ξανά. Τίποτα δεν χάνεται. - Όταν δεν υπάρχει τίποτα νέο, η λίστα είναι άδεια και το
next_poll_afterλέει σε πόσα δευτερόλεπτα να ξαναρωτήσετε.
Κάθε SMS δίνει μία αναφορά με την τελική του κατάσταση, όχι τρεις ενδιάμεσες. Χρειάζεται δικαίωμα read.
Καταστάσεις παραληπτών
| Κατάσταση | Τι σημαίνει |
|---|---|
queued |
Έγινε δεκτό, δεν έχει δοθεί ακόμα στον πάροχο. |
sent |
Δόθηκε στον πάροχο, χωρίς τελικό αποτέλεσμα ακόμα. Μην το ξαναστείλετε, μπορεί να έχει ήδη παραδοθεί. |
delivered |
Τελική. Το κινητό το έλαβε. |
failed |
Τελική. Δεν παραδόθηκε. Το reason λέει γιατί. |
blocked |
Τελική. Ο αριθμός ήταν στη λίστα αποκλεισμού σας τη στιγμή που ήταν να σταλεί. |
unknown |
Τελική. Δεν ήρθε αποτέλεσμα σε 72 ώρες. Μπορεί να παραδόθηκε ή όχι. |
Για κάθε μήνυμα ξεχωριστά, μπορείτε να ρωτήσετε GET /v1/messages/{id} ή GET /v1/messages?client_ref=....
Λίστα αποκλεισμού από το σύστημά σας
Οι αριθμοί της λίστας αποκλεισμού δεν λαμβάνουν μηνύματα και δεν χρεώνονται. Όταν ένας πελάτης σας απαντήσει STOP, μπορείτε να τον προσθέσετε αυτόματα (δικαίωμα blacklist):
curl -X POST https://api.isms.gr/v1/blacklist \
-H "Authorization: Bearer YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"to": ["306900000000", "306900000001"]}'
Υπάρχουν επίσης GET /v1/blacklist (λίστα ή έλεγχος ενός αριθμού) και DELETE /v1/blacklist/{mobile}.
Υπόλοιπο
curl https://api.isms.gr/v1/credits -H "Authorization: Bearer YOUR_KEY"
{"credits": "12.34000", "currency": "EUR"}
Όρια
- 120 αιτήματα ανά λεπτό ανά κλειδί.
- Αναφορές: τουλάχιστον 5 δευτερόλεπτα ανάμεσα σε δύο κλήσεις.
- Έως 1.000 αριθμοί ανά αποστολή και έως 1 MB ανά αίτημα.
- Αν ξεπεράσετε τα όρια παίρνετε 429 με
Retry-After. Ένα κλειδί που τα ξεπερνά συνεχώς σταματά για 15 λεπτά. Αν ακολουθείτε τοRetry-Afterκαι τοnext_poll_after, δεν θα το δείτε ποτέ.
Σφάλματα
Κάθε σφάλμα είναι JSON, με σταθερό κωδικό που δεν αλλάζει:
{"error": "insufficient_balance", "message": "..."}
| HTTP | Κωδικοί | Τι κάνετε |
|---|---|---|
| 400 | invalid_json, invalid_request, invalid_sender, invalid_number, too_many_recipients, blocked |
Διορθώστε το αίτημα. Το blocked σημαίνει ότι το κείμενο το απέρριψε το φίλτρο spam. |
| 401 | unauthorized, invalid_key |
Λείπει, είναι άγνωστο ή ανακλήθηκε το κλειδί. |
| 402 | insufficient_balance |
Δεν φτάνει το υπόλοιπο. Δεν στάλθηκε ούτε χρεώθηκε τίποτα. |
| 403 | forbidden, account_inactive, ip_not_allowed |
Το κλειδί δεν έχει το δικαίωμα ή η IP δεν επιτρέπεται. |
| 404 | not_found |
Δεν υπάρχει τέτοιο μήνυμα. |
| 413 | too_large |
Το αίτημα ξεπερνά 1 MB. |
| 429 | rate_limited, too_soon, too_many_requests_for_message, locked |
Περιμένετε όσα δευτερόλεπτα λέει το Retry-After. |
| 503 | no_provider |
Προσωρινά δεν μπορούμε να στείλουμε. Δεν χρεώθηκε τίποτα. Ξαναδοκιμάστε με το ίδιο client_ref. |
Η πλήρης τεκμηρίωση, με όλα τα πεδία και τις λεπτομέρειες, είναι δημόσια στα αγγλικά: my.isms.gr/docs/api. Για απορίες, επικοινωνήστε μαζί μας.