Αυθεντικοποίηση & όρια
Bearer token
Κάθε αίτημα στο https://app.syncore.gr/api/v1 χρειάζεται header:
Authorization: Bearer <TOKEN>
Το token είναι personal access token του χρήστη που το δημιούργησε (Προφίλ → API tokens). Δουλεύει μόνο όταν:
- ο χρήστης ανήκει σε επιχείρηση (διαχειριστής ή χρήστης καταστήματος) και ο λογαριασμός του είναι ενεργός,
- η επιχείρηση έχει ενεργή συνδρομή (ή συνδρομή σε καθυστέρηση πληρωμής),
- το token δεν έχει λήξει ή ανακληθεί.
Αλλιώς η απάντηση είναι 401, 402 ή 403 — δες Σφάλματα. Κάθε κλήση καταγράφεται (μέθοδος, διαδρομή, κωδικός, χρόνος).
Δικαιώματα (abilities)
Κάθε token έχει μία ή περισσότερες abilities. Ένα endpoint χωρίς την ability του token απαντά 403.
| Ability | Τι επιτρέπει |
|---|---|
products:read |
Λίστα και λεπτομέρειες προϊόντων |
products:write |
Ενεργοποίηση / απενεργοποίηση προϊόντων |
prices:read |
Τελικές τιμές, κανόνες τιμών |
prices:write |
Χειροκίνητη τιμή, δημιουργία / αλλαγή / διαγραφή κανόνων τιμών |
inventory:read |
Δικό σου απόθεμα |
inventory:write |
Ορισμός αποθέματος (ένα SKU ή μαζικά) |
orders:read |
Λίστα και λεπτομέρειες παραγγελιών |
orders:write |
Νέα παραγγελία, αλλαγή κατάστασης, αποστολή |
suppliers:read |
Οι προμηθευτές σου |
channels:read |
Κανάλια πώλησης |
feeds:read |
Διευθύνσεις feeds |
invoices:read |
Παραστατικά Oxygen |
webhooks:manage |
Διαχείριση webhook endpoints |
Το PATCH /products/{id} με manual_price χρειάζεται και prices:write.
Τα tokens του MCP έχουν ξεχωριστές abilities (mcp, mcp:write) και δεν δουλεύουν στο REST API — δες MCP.
Όρια αιτημάτων (rate limits)
Το όριο μετριέται ανά λεπτό, ανά επιχείρηση (όλα τα tokens μαζί) και εξαρτάται από το πλάνο:
| Πλάνο | Αιτήματα / λεπτό |
|---|---|
| Marketplace only | 60 |
| E-shop sync | 300 |
| Full ecosystem | 1000 |
| Χωρίς πλάνο | 60 |
Επιπλέον, κάθε token μπορεί να έχει δικό του χαμηλότερο όριο (το ορίζεις στο Προφίλ κατά τη δημιουργία ή αργότερα). Τότε ισχύουν και τα δύο όρια.
Κάθε απάντηση έχει headers για το πιο αυστηρό όριο:
X-RateLimit-Limit: 300
X-RateLimit-Remaining: 287
Όταν ξεπεραστεί, η απάντηση είναι 429 με Retry-After (δευτερόλεπτα):
HTTP/1.1 429 Too Many Requests
Retry-After: 42
X-RateLimit-Limit: 300
X-RateLimit-Remaining: 0
{"message": "Πάρα πολλά αιτήματα. Δοκίμασε ξανά σε λίγο."}
Περίμενε όσο λέει το Retry-After πριν ξαναδοκιμάσεις. Για πολλές αλλαγές αποθέματος χρησιμοποίησε το μαζικό POST /inventory/bulk (έως 500 SKU ανά αίτημα).
Όρια πλάνου και API
| Όριο | Τιμή |
|---|---|
| Αποτελέσματα ανά σελίδα | 25 προεπιλογή, έως 100 |
| Μαζικό απόθεμα | έως 500 SKU ανά αίτημα |
| Γραμμές παραγγελίας | έως 500 ανά παραγγελία |
| Webhook endpoints | έως 10 ανά επιχείρηση |
| Ενεργά προϊόντα | όσα επιτρέπει το πλάνο σου |
Η ενεργοποίηση προϊόντος πάνω από το όριο του πλάνου απαντά 422 με errors.enabled = ["plan_limit"].