API και ενσωματώσεις (CRM, Make, n8n)
Σύνδεσε το CRM ή το ERP σου με το Sattotal μέσω κλειδιών API: συγχρόνισε πελάτες και προμηθευτές αυτόματα και με ασφάλεια
Το API του Sattotal επιτρέπει σε ένα άλλο πρόγραμμα —το CRM σου, το ERP σου, το Make, το n8n, το Zapier ή ένα δικό σου script— να διαβάζει και να δημιουργεί πελάτες και προμηθευτές στον οργανισμό σου, χωρίς να χρειάζεται κανείς να εισάγει CSV με το χέρι. Ελέγχεται με κλειδιά API που δημιουργεί ο διαχειριστής στο Ρυθμίσεις → API, καθένα με δικό του όνομα και με δικαιώματα ανά πόρο, και που μπορούν να ανακληθούν ανά πάσα στιγμή. Εδώ θα βρεις τι κάνει, πώς δημιουργείς το κλειδί, πώς καλείς το API και πώς στήνεις έναν συγχρονισμό με το Make βήμα βήμα.
Σύνδεσε το CRM και τις αυτοματοποιήσεις σου
Οποιοδήποτε εργαλείο μπορεί να κάνει ένα αίτημα HTTP (Make, n8n, Zapier, το δικό σου CRM ή ERP) μπορεί να διαβάζει, να δημιουργεί και να ενημερώνει πελάτες και προμηθευτές.
Κλειδιά με όνομα και δικαιώματα
Ένα κλειδί ανά ενσωμάτωση και, μέσα σε κάθε κλειδί, ένα δικαίωμα ανά πόρο: μπορείς να δώσεις ανάγνωση στους προμηθευτές χωρίς να δώσεις εγγραφή στους πελάτες. Έως 10 ενεργά κλειδιά ανά οργανισμό.
Αυξητικός συγχρονισμός
Με την παράμετρο actualizadoDesde φέρνεις μόνο τους πελάτες ή τους προμηθευτές που άλλαξαν από το προηγούμενο πέρασμα: ιδανικό για ένα σενάριο που τρέχει κάθε λίγα λεπτά.
Ασφαλές εκ σχεδιασμού
Το κλειδί εμφανίζεται μία μόνο φορά και αποθηκεύεται κρυπτογραφημένο με μη αναστρέψιμο τρόπο. Κάθε κλειδί έχει πρόσβαση μόνο στα δεδομένα του οργανισμού του και ανακαλείται αμέσως.
Ποιος μπορεί να το χρησιμοποιήσει
Τα κλειδιά τα δημιουργούν και τα ανακαλούν οι διαχειριστές του οργανισμού. Το API περιλαμβάνεται στα πλάνα επί πληρωμή (Basic, Pro και Enterprise) και στη δοκιμαστική περίοδο· στο δωρεάν πλάνο η οθόνη δείχνει ένα λουκέτο με την επιλογή αλλαγής πλάνου. Ένα κλειδί ενεργεί πάντα για λογαριασμό του οργανισμού, όχι ενός προσώπου: δεν κληρονομεί τα δικαιώματα κανενός τεχνικού ούτε εμφανίζεται ως χρήστης στην ομάδα.
Πώς δημιουργείς ένα κλειδί
Μπες στο Ρυθμίσεις → API
Από το πλαϊνό μενού, Ρυθμίσεις, κάρτα «API». Θα δεις τη λίστα με τα κλειδιά του οργανισμού σου (ενεργά και ανακληθέντα) και μια κάρτα «Πώς να συνδεθείτε» με το βασικό URL και ένα παράδειγμα.
Πάτησε «Νέο κλειδί»
Δώσε του ένα όνομα που να προσδιορίζει την ενσωμάτωση («CRM καταστήματος», «Make», «n8n»). Έτσι, αν κάποια μέρα χρειαστεί να το ανακαλέσεις, θα ξέρεις ποιο είναι.
Διάλεξε τα δικαιώματα
Τσέκαρε τους πόρους που χρειάζεται η ενσωμάτωση —Πελάτες, Προμηθευτές ή και τους δύο— και για καθέναν διάλεξε «Μόνο ανάγνωση» (προβολή) ή «Ανάγνωση και εγγραφή» (προβολή, δημιουργία, ενημέρωση και αρχειοθέτηση). Ένας πόρος που δεν τσεκάρεται είναι πόρος στον οποίο δεν φτάνει το κλειδί. Διάλεξε το ελάχιστο που χρειάζεται.
Αντίγραψε το κλειδί και φύλαξέ το στο εργαλείο σου
Το πλήρες κλειδί (ξεκινά με sat_) εμφανίζεται μία μόνο φορά. Αντίγραψέ το με το κουμπί και επικόλλησέ το στο Make, στο n8n ή στο CRM σου. Αν το χάσεις δεν μπορεί να ανακτηθεί: το ανακαλείς και δημιουργείς άλλο.
Ρυθμίσεις → API: λίστα κλειδιών και κλειδί που μόλις δημιουργήθηκε
CRM Make
sat_Ab3k…x9Zq
n8n
sat_Qm7t…p2Lk
Το κλειδί δημιουργήθηκε
sat_Ab3k9Zq2Xv8Lp1Mn4Rt7Wy0Cd5Fg6Hj3Kl8Sx9ZqΑντιγραφήΑυτή είναι η μόνη φορά που θα δεις το πλήρες κλειδί. Αν το χάσεις, ανάκαλεσέ το και δημιούργησε άλλο.
Δικαιώματα ενός κλειδιού
Μόνο ανάγνωση
Μπορεί να εμφανίζει λίστες και να προβάλλει αυτόν τον πόρο. Κάθε απόπειρα δημιουργίας, τροποποίησης ή αρχειοθέτησης λαμβάνει σφάλμα 403 με τον κωδικό PERMISO_DENEGADO και το δικαίωμα που του λείπει.
Ανάγνωση και εγγραφή
Εκτός από την προβολή, μπορεί να δημιουργεί, να ενημερώνει και να αρχειοθετεί σε αυτόν τον πόρο. Είναι το δικαίωμα που χρειάζεται ένας αμφίδρομος συγχρονισμός.
Τα δικαιώματα είναι ανά πόρο
Τα δικαιώματα είναι ανά πόρο, και αυτό φάνηκε ήδη: όταν προστέθηκαν οι προμηθευτές, τα κλειδιά που υπήρχαν —όλα για πελάτες— ΔΕΝ απέκτησαν πρόσβαση σε αυτούς. Χρειάστηκε να τσεκαριστεί. Το ίδιο θα ισχύει για κάθε πόρο που θα προστεθεί αργότερα: μια ενσωμάτωση δεν βλέπει ποτέ περισσότερα από όσα της παραχώρησες.
Πώς γίνεται η ταυτοποίηση
Στείλε το κλειδί σε κάθε αίτημα, από διακομιστή σε διακομιστή, στην κεφαλίδα Authorization: Bearer sat_…. Αν το εργαλείο σου δεν επιτρέπει κεφαλίδες εξουσιοδότησης, γίνεται δεκτό και στην κεφαλίδα x-api-key. Το βασικό URL είναι αυτό του Sattotal σου ακολουθούμενο από /api/v1 (το έχεις έτοιμο για αντιγραφή στην οθόνη Ρυθμίσεις → API).
GET /api/v1/me Authorization: Bearer sat_Ab3k9…x9Zq
Το API δεν έχει CORS σκόπιμα: είναι σχεδιασμένο για διακομιστές και εργαλεία αυτοματοποίησης, όχι για ιστοσελίδες ή εφαρμογές που τρέχουν στον browser των πελατών σου. Ένα κλειδί δεν πρέπει ποτέ να καταλήξει σε browser.
Τι μπορείς να κάνεις (endpoints)
Όλες οι απαντήσεις έχουν τη μορφή success + data (και pagination στις λίστες). Έναν πελάτη μπορείς να τον ζητήσεις με το id ή με τον κωδικό του (CLI-0007)· έναν προμηθευτή, μόνο με το id.
| Μέθοδος | Διαδρομή | Τι κάνει | Δικαίωμα |
|---|---|---|---|
| GET | /me | Επιστρέφει τον οργανισμό σου και το κλειδί με το οποίο καλείς. Χρησιμοποίησέ το για να «δοκιμάσεις τη σύνδεση» στο Make ή στο n8n. | Οποιοδήποτε |
| GET | /clientes | Σελιδοποιημένη λίστα πελατών. Φίλτρα: busqueda, tipo, activo και actualizadoDesde. Χωρίς activo επιστρέφει και τους αρχειοθετημένους. | Ανάγνωση |
| POST | /clientes | Δημιουργεί έναν πελάτη με τους ίδιους κανόνες όπως η φόρμα (φορολογικός αριθμός ανάλογα με τη χώρα σου, χωρίς διπλότυπα φορολογικού αριθμού ή email). | Εγγραφή |
| GET | /clientes/{id} | Επιστρέφει έναν πελάτη με βάση το id ή τον κωδικό. | Ανάγνωση |
| PATCH | /clientes/{id} | Ενημερώνει μόνο τα πεδία που στέλνεις. Το PUT γίνεται δεκτό ως συνώνυμο. | Εγγραφή |
| DELETE | /clientes/{id} | Αρχειοθετεί τον πελάτη (activo = false). Δεν διαγράφει τίποτα και μπορεί να επαναληφθεί χωρίς σφάλμα. | Εγγραφή |
| GET | /proveedores | Σελιδοποιημένη λίστα προμηθευτών. Φίλτρα: busqueda, activo, tipoProveedor, codigo και actualizadoDesde. Χωρίς activo επιστρέφει και τους αρχειοθετημένους. | Ανάγνωση |
| POST | /proveedores | Δημιουργεί έναν προμηθευτή. Μόνο το όνομα είναι υποχρεωτικό. Αν υπάρχει ήδη κάποιος με τον ίδιο φορολογικό αριθμό ή το ίδιο όνομα, απαντά 409 με το id του υπάρχοντος. | Εγγραφή |
| GET | /proveedores/{id} | Επιστρέφει έναν προμηθευτή με βάση το id του. Εδώ ο κωδικός ΔΕΝ ισχύει: δες την προειδοποίηση πιο κάτω. | Ανάγνωση |
| PATCH | /proveedores/{id} | Ενημερώνει μόνο τα πεδία που στέλνεις. Η λίστα επαφών αντικαθίσταται ολόκληρη. Το PUT γίνεται δεκτό ως συνώνυμο. | Εγγραφή |
| DELETE | /proveedores/{id} | Αρχειοθετεί τον προμηθευτή (activo = false). Δεν διαγράφει τίποτα και μπορεί να επαναληφθεί χωρίς σφάλμα. | Εγγραφή |
| GET | /reparaciones | Σελιδοποιημένη λίστα δελτίων, από την πιο πρόσφατη παραλαβή. Φίλτρα: cliente, estado, entradaDesde, entradaHasta και actualizadoDesde. | Ανάγνωση |
| GET | /reparaciones/{id} | Επιστρέφει ένα δελτίο με βάση το id ή τον αριθμό δελτίου. | Ανάγνωση |
| GET | /clientes/{id}/reparaciones | Τα δελτία ενός πελάτη (με βάση το id ή τον κωδικό του), με τα ίδια φίλτρα. | Ανάγνωση |
| GET | /clientes/{id}/resumen | Σύνοψη δραστηριότητας του πελάτη: πόσες επισκευές έχει (συνολικά, ανοιχτές και ανά κατάσταση), τι ποσό του έχει δοθεί σε προσφορές και πότε ήρθε για τελευταία φορά. | Ανάγνωση |
Πεδία του πελάτη
Τα πεδία είναι τα ίδια με την καρτέλα του πελάτη: nombre και tipo (particular ή empresa) είναι υποχρεωτικά· nif_cif, apellidos, razonSocial, email, telefono, telefonoSecundario, direccion (calle, numero, piso, codigoPostal, localidad, provincia, pais) και notas είναι προαιρετικά. Ο φορολογικός αριθμός αποθηκεύεται με κεφαλαία και το email με πεζά. Στην απάντηση όλα τα κλειδιά είναι πάντα παρόντα, με null όταν δεν υπάρχει τιμή, για να μη σπάει η αντιστοίχιση πεδίων στο εργαλείο σου. Προσοχή στο όνομα: το nombre είναι το μικρό όνομα (ή η επωνυμία, αν πρόκειται για επιχείρηση) και το επώνυμο μπαίνει χωριστά, στο apellidos, στον πληθυντικό.
Πεδία που δεν αναγνωρίζει το API
Αν το σώμα περιέχει κλειδί που δεν υπάρχει (για παράδειγμα firstName αντί για nombre ή apellido στον ενικό αντί για apellidos), το αίτημα δεν απορρίπτεται, αλλά η τιμή αυτή δεν αποθηκεύεται. Για να μην περάσει απαρατήρητο, η απάντηση στη δημιουργία και την επεξεργασία πελάτη περιλαμβάνει το avisos.camposIgnorados με τη λίστα αυτών των κλειδιών· τα πεδία της διεύθυνσης εμφανίζονται με τη διαδρομή τους, π.χ. direccion.ciudad. Αν το δείτε, ελέγξτε την αντιστοίχιση πεδίων της ενσωμάτωσής σας. Τα πεδία που επιστρέφει το ίδιο το API (id, codigo, createdAt…) δεν προκαλούν ποτέ προειδοποίηση, οπότε μπορείτε να διαβάσετε έναν πελάτη, να τον αλλάξετε και να τον στείλετε πίσω ολόκληρο.
POST /api/v1/clientes
{ "firstName": "Daniel", "nombre": "Florea", "tipo": "particular" }
201 Created
{
"success": true,
"data": { "nombre": "Florea", "apellidos": null, … },
"avisos": { "camposIgnorados": ["firstName"] }
}Παράδειγμα: δημιουργία πελάτη
Αίτημα
POST /api/v1/clientes
Authorization: Bearer sat_Ab3k9…x9Zq
Content-Type: application/json
{
"nombre": "Daniel",
"apellidos": "Florea",
"tipo": "empresa",
"razonSocial": "Assista Tech SRL",
"nif_cif": "RO12345678",
"codigoPersonalizado": "801",
"email": "daniel@example.com",
"telefono": "+40 700 000 000",
"direccion": { "localidad": "București", "pais": "RO" }
}Απάντηση (201)
{
"success": true,
"data": {
"id": "64b0…0001",
"codigo": "CLI-0042",
"codigoPersonalizado": "801",
"codigoVisible": "801",
"tipo": "empresa",
"nombre": "Daniel",
"apellidos": "Florea",
"razonSocial": "Assista Tech SRL",
"nif_cif": "RO12345678",
"email": "daniel@example.com",
"activo": true,
"createdAt": "2026-09-18T10:00:00.000Z",
"updatedAt": "2026-09-18T10:00:00.000Z"
}
}Προμηθευτές
Εκτός από τους πελάτες, το API εκθέτει και τον κατάλογο προμηθευτών: τα ίδια πέντε endpoints, τους ίδιους κωδικούς σφάλματος και τον ίδιο σταδιακό συγχρονισμό. Πρόκειται μόνο για τον κατάλογο: οι αγορές και τα τιμολόγια προμηθευτών μένουν εκεί όπου βρίσκονται ήδη, στο ERP σου ή στο Sattotal.
Πεδία του προμηθευτή
Μόνο το nombre είναι υποχρεωτικό. Προαιρετικά: codigo, cif, email, telefono, telefonoSecundario, web, direccion (σε μία μόνο γραμμή, δεν είναι αντικείμενο όπως στους πελάτες), ciudad, provincia, codigoPostal, pais, contactos, tipoProveedor (general, producto, servicio, logistica ή otro), formaPago, plazoPago (σε ημέρες· το 0 σημαίνει τοις μετρητοίς), cuentaCliente και notas. Κάθε επαφή έχει nombre —υποχρεωτικό—, cargo, telefono, email και notas· οι επαφές δεν έχουν δικό τους αναγνωριστικό.
Πώς ενημερώνονται οι επαφές
Η λίστα που στέλνεις ΑΝΤΙΚΑΘΙΣΤΑ αυτή που υπήρχε. Αν στείλεις κενή λίστα, σβήνονται όλες οι επαφές· αν δεν στείλεις το κλειδί (ή στείλεις null), μένουν όπως ήταν. Αυτό ακριβώς σου επιτρέπει να διαβάσεις έναν προμηθευτή, να του αλλάξεις ένα πεδίο και να τον στείλεις πίσω ολόκληρο χωρίς παράξενες παρενέργειες.
Αίτημα
POST /api/v1/proveedores
Authorization: Bearer sat_Ab3k9…x9Zq
Content-Type: application/json
{
"nombre": "Distribuciones Norte",
"cif": "B12345678",
"tipoProveedor": "producto",
"plazoPago": 30,
"cuentaCliente": "C-4471",
"contactos": [
{ "nombre": "Ana Ruiz", "cargo": "Ventas", "email": "ana@norte.es" }
]
}Απάντηση (201)
{
"success": true,
"data": {
"id": "64b0…0009",
"codigo": "PROV-004",
"nombre": "Distribuciones Norte",
"cif": "B12345678",
"tipoProveedor": "producto",
"plazoPago": 30,
"cuentaCliente": "C-4471",
"contactos": [
{ "nombre": "Ana Ruiz", "cargo": "Ventas",
"telefono": null, "email": "ana@norte.es", "notas": null }
],
"excluidoRecargoEquivalencia": false,
"activo": true,
"createdAt": "2026-09-19T08:00:00.000Z",
"updatedAt": "2026-09-19T08:00:00.000Z"
}
}Τα τραπεζικά στοιχεία δεν βγαίνουν από το API
Το IBAN και οι τραπεζικοί λογαριασμοί του προμηθευτή ούτε επιστρέφονται ούτε γίνονται δεκτοί, και αυτό είναι σκόπιμο: αν κάποιο κλειδί διέρρεε, δεν θα χρησίμευε για την απάτη αλλαγής λογαριασμού, τη συνηθέστερη με προμηθευτές. Επιστρέφεται όμως το cuentaCliente, που είναι ο ΔΙΚΟΣ ΣΟΥ κωδικός πελάτη σε εκείνον τον προμηθευτή και με τον οποίο ένα ERP συμφωνεί τις αγορές του.
Η προσαύξηση ισοδυναμίας είναι μόνο για ανάγνωση
Το πεδίο excluidoRecargoEquivalencia επιστρέφεται και μπορείς να το ξαναστείλεις με την ίδια τιμή (ώστε να μπορείς να στείλεις πίσω ολόκληρο το αντικείμενο), αλλά η αλλαγή του μέσω API απαντά 400: καθορίζει αν στις αγορές σου από αυτόν τον προμηθευτή εφαρμόζεται η προσαύξηση, δηλαδή μετακινεί τη φορολογητέα βάση των τιμολογίων αγοράς σου. Αλλάζει από την καρτέλα του προμηθευτή. Εκτός Ισπανίας δεν έχει καμία επίπτωση.
Ο κωδικός προμηθευτή δεν τον εντοπίζει
Σε αντίθεση με τον κωδικό πελάτη, ο κωδικός του προμηθευτή (PROV-004) δεν είναι μοναδικός: μπορεί να επαναληφθεί ακόμη και μέσα στο δικό σου συνεργείο. Γι' αυτό το GET /proveedores/{id} δέχεται μόνο το id. Αν το ERP σου κρατά μόνο τον κωδικό, χρησιμοποίησε το φίλτρο της λίστας: το GET /proveedores?codigo=PROV-004 επιστρέφει όλους όσους ταιριάζουν και αποφασίζεις εσύ.
Δελτία επισκευής (μόνο ανάγνωση)
Το API επιτρέπει επίσης την ανάγνωση των δελτίων επισκευής: αριθμός δελτίου, κατάσταση, ημερομηνίες, η συσκευή (τύπος, μάρκα, μοντέλο, σειριακός αριθμός, IMEI) και η προσφορά. Είναι μόνο για ανάγνωση: τα δελτία εξακολουθούν να δημιουργούνται και να αλλάζουν κατάσταση στο Sattotal, όπου υπογράφονται η απόδειξη παραλαβής και η παράδοση. Το κλειδί χρειάζεται επιλεγμένο τον πόρο Επισκευές· τα κλειδιά πελατών ή προμηθευτών δεν έχουν πρόσβαση σε αυτά.
Πεδία του δελτίου
Κάθε δελτίο περιέχει numeroFicha, estado, prioridad, ubicacion, averiaDeclarada, diagnostico, τις ημερομηνίες του κύκλου (παραλαβή, έναρξη και λήξη διάγνωσης και επισκευής, ειδοποίηση πελάτη, παράδοση και ultimoCambioEstado, δηλαδή πότε το δελτίο πέρασε στην τρέχουσα κατάστασή του), μια σύνοψη του πελάτη (id, codigo, codigoVisible, nombre, apellidos, razonSocial), τη συσκευή (id, codigo, tipo, marca, modelo, numeroSerie, imei, color), την προσφορά (numero, total, estado, fechaEnvio και fechaRespuesta, ή null αν δεν υπάρχει), τον τεχνικό στον οποίο έχει ανατεθεί (μόνο το όνομά του) και το plazoEntregaEstimado, δηλαδή τον χρόνο παράδοσης που αναφέρθηκε στον πελάτη στην απόδειξη παραλαβής. Οι εσωτερικές σημειώσεις, οι υπογραφές, οι φωτογραφίες, τα έγγραφα και οι κωδικοί της συσκευής δεν επιστρέφονται ποτέ.
Αίτημα
GET /api/v1/clientes/CLI-0042/reparaciones?estado=reparado Authorization: Bearer sat_Ab3k9…x9Zq
Απάντηση (201)
{
"success": true,
"data": [{
"id": "64b0…0042",
"numeroFicha": "ORD-2026-0042",
"estado": "reparado",
"prioridad": "normal",
"averiaDeclarada": "No carga",
"diagnostico": "Conector de carga dañado",
"fechas": {
"entrada": "2026-09-20T09:00:00.000Z",
"finReparacion": "2026-09-22T17:30:00.000Z",
"entrega": null
},
"cliente": { "id": "64b0…0001", "codigoVisible": "801", "nombre": "Daniel" },
"dispositivo": {
"tipo": "movil", "marca": "Apple", "modelo": "iPhone 13",
"numeroSerie": "F2LXX0000", "imei": "356789012345678"
},
"presupuesto": { "numero": "PRES-2026-0010", "total": 89.9, "estado": "aprobado" },
"tecnico": { "nombre": "Andrei Popescu" },
"plazoEntregaEstimado": "3 días laborables"
}],
"pagination": { "total": 1, "page": 1, "limit": 25, "totalPages": 1 }
}Εντοπισμός πελάτη από τον αριθμό που καλεί
Αν το CRM ή το τηλεφωνικό σου κέντρο ανοίγει την καρτέλα του πελάτη όταν μπαίνει μια κλήση, χρησιμοποίησε GET /clientes?telefono=<αριθμός>. Η αναζήτηση γίνεται στο κύριο και στο δεύτερο τηλέφωνο, όπως κι αν είναι γραμμένος ο αριθμός: τα κενά, οι παύλες και το διεθνές πρόθεμα (+30 ή 0030) αγνοούνται. Έτσι το «691 234 5678» βρίσκει έναν πελάτη αποθηκευμένο ως «+30 691-234-5678». Χρειάζονται τουλάχιστον 6 ψηφία.
Σύνοψη πελάτη για το CRM σου
Το GET /clientes/{id}/resumen επιστρέφει με μία μόνο κλήση ό,τι δείχνει συνήθως ένα CRM στην καρτέλα του πελάτη: totalReparaciones, reparacionesAbiertas (η συσκευή είναι ακόμη στο συνεργείο), porEstado, totalPresupuestado και totalPresupuestosAprobados (στο νόμισμα του συνεργείου, που έρχεται στο moneda), primeraReparacion, ultimaReparacion και ultimaActividad (η τελευταία αλλαγή σε οποιοδήποτε από τα δελτία του). Όπως και τα δελτία, απαιτεί τον πόρο Επισκευές.
Αίτημα
GET /api/v1/clientes?telefono=0722 123 456
→ { "data": [{ "id": "64b0…0001", "codigoVisible": "801", "telefono": "+40 722 123 456", … }] }
GET /api/v1/clientes/801/resumen
{
"success": true,
"data": {
"cliente": { "id": "64b0…0001", "codigoVisible": "801" },
"moneda": "RON",
"totalReparaciones": 7,
"reparacionesAbiertas": 1,
"porEstado": { "entregado": 6, "en_reparacion": 1 },
"totalPresupuestosAprobados": 1240.5,
"ultimaReparacion": "2026-10-02T09:15:00.000Z",
"ultimaActividad": "2026-10-06T16:40:00.000Z",
…
}
}Συγχρόνισε μόνο όσα άλλαξαν
Δεν χρειάζεται να φέρνεις τα πάντα σε κάθε πέρασμα. Αποθήκευσε στο εργαλείο σου την ημερομηνία και ώρα της τελευταίας εκτέλεσης και ζήτα μόνο τους πελάτες ή τους προμηθευτές που τροποποιήθηκαν από τότε, με την παράμετρο actualizadoDesde. Η απάντηση έρχεται ταξινομημένη κατά ημερομηνία τροποποίησης αύξουσα και με σταθερό κριτήριο ισοπαλίας, οπότε μπορείς να τη σελιδοποιήσεις χωρίς να χάσεις εγγραφές. Εμφανίζονται και οι αρχειοθετημένες (με activo = false), ώστε το CRM σου να μπορεί να αποτυπώσει την αρχειοθέτηση.
GET /api/v1/clientes?actualizadoDesde=2026-09-18T10:00:00Z&limit=100&page=1 Authorization: Bearer sat_Ab3k9…x9Zq
Πρώτο πέρασμα
Διάτρεξε το GET /clientes με limit=100 και page=1, 2, 3… μέχρι να εξαντληθεί το totalPages. Αποθήκευσε την ώρα έναρξης.
Επόμενα περάσματα
Ζήτα GET /clientes?actualizadoDesde=<αποθηκευμένη ώρα> και επεξεργάσου μόνο όσα έρθουν. Αποθήκευσε ξανά την ώρα έναρξης αυτού του περάσματος.
Σύνδεσε, μη διπλασιάζεις
Αποθήκευσε το id του Sattotal δίπλα στην εγγραφή του CRM σου. Αν κατά τη δημιουργία λάβεις 409 DUPLICADO, η απάντηση φέρνει existenteId: σύνδεσε αυτό αντί να δημιουργήσεις άλλο.
Σελιδοποίηση και αναζήτηση
Οι λίστες δέχονται page (από το 1) και limit (25 από προεπιλογή, 100 το μέγιστο· αν ζητήσεις περισσότερα περικόπτεται στα 100). Το πεδίο busqueda ψάχνει σε όνομα, επώνυμο, επωνυμία, φορολογικό αριθμό, email, κωδικό και τηλέφωνο.
Κωδικοί σφάλματος και τι να κάνεις
Όλες οι απαντήσεις σφάλματος έχουν success: false, ένα ενδεικτικό κείμενο και έναν σταθερό code σχεδιασμένο για αποφάσεις από πρόγραμμα. Αυτοί είναι όσοι μπορεί να λάβεις:
NO_AUTORIZADOΛείπει το κλειδί, έχει μορφή που δεν είναι δική μας ή δεν υπάρχει. Έλεγξε την κεφαλίδα Authorization.
CLAVE_REVOCADAΤο κλειδί ήταν έγκυρο αλλά ένας διαχειριστής το ανακάλεσε. Δημιούργησε ένα νέο στο Ρυθμίσεις → API και ενημέρωσέ το στο εργαλείο σου.
PLAN_REQUERIDOΟ οργανισμός βρίσκεται στο δωρεάν πλάνο. Το API λειτουργεί ξανά μόλις αλλάξεις σε πλάνο επί πληρωμή.
PERMISO_DENEGADOΤο κλειδί δεν έχει το απαραίτητο δικαίωμα για αυτή την ενέργεια. Η απάντηση δείχνει στο ambitoRequerido ποιο λείπει: δημιούργησε ένα κλειδί με αυτό το δικαίωμα.
NO_ENCONTRADOΔεν υπάρχει πελάτης ούτε προμηθευτής με αυτό το id στον οργανισμό σου. Όσοι ανήκουν σε άλλους οργανισμούς δεν είναι ποτέ ορατοί, και δεν γίνεται διάκριση ανάμεσα στο «δεν υπάρχει» και στο «δεν είναι δικός σου».
DUPLICADOΥπάρχει ήδη εγγραφή με αυτό το στοιχείο: φορολογικός αριθμός ή email στους πελάτες· φορολογικός αριθμός, όνομα ή κωδικός στους προμηθευτές. Η απάντηση φέρνει campo και existenteId για να μπορέσεις να τη συνδέσεις αντί να δημιουργήσεις άλλη.
VALIDACIONΚάποιο πεδίο δεν περνά την επικύρωση (ή το JSON είναι κακοσχηματισμένο). Στο details υπάρχει το πεδίο και ο λόγος, όπως και στη φόρμα.
IDENTIFICADOR_FISCAL_REQUERIDOΑυτός ο πελάτης χρειάζεται φορολογικό αριθμό: στη χώρα σου είναι υποχρεωτικός για τον τύπο πελάτη που έστειλες (για παράδειγμα, πάντα για εταιρείες).
RATE_LIMITΠάρα πολλά αιτήματα. Περίμενε τα δευτερόλεπτα που δείχνει η κεφαλίδα Retry-After και ξαναδοκίμασε.
API_DESACTIVADAΤο API είναι προσωρινά απενεργοποιημένο για συντήρηση. Ξαναδοκίμασε αργότερα.
Όρια
120 αιτήματα ανά λεπτό και κλειδί (υπεραρκετά για έναν περιοδικό συγχρονισμό· φρενάρει έναν τυχαίο βρόχο). 10 ενεργά κλειδιά ανά οργανισμό. Οι λίστες επιστρέφουν το πολύ 100 εγγραφές ανά σελίδα. Αν ο οργανισμός είναι στο δωρεάν πλάνο με εξαντλημένο το μηνιαίο όριο, η καταχώριση πελατών σταματά όπως και στην εφαρμογή.
Βήμα βήμα: συγχρονισμός πελατών με το Make
Ένα τυπικό σενάριο: κάθε 15 λεπτά, να φέρνεις στο CRM σου τους νέους ή τροποποιημένους πελάτες και προμηθευτές του Sattotal. Στο n8n είναι αντίστοιχο, με τον κόμβο HTTP Request και έναν κόμβο Schedule.
Δημιούργησε το κλειδί στο Sattotal
Ρυθμίσεις → API → Νέο κλειδί, δικαίωμα «Μόνο ανάγνωση» αν θα διαβάζεις μόνο, «Ανάγνωση και εγγραφή» αν θα δημιουργείς και πελάτες από το CRM. Αντίγραψε το κλειδί.
Module HTTP «Make a request»
URL: το βασικό σου URL + /clientes. Μέθοδος GET. Κεφαλίδα Authorization με τιμή Bearer και το κλειδί σου. Τσέκαρε το «Parse response» για να δουλέψεις με το JSON.
Δοκίμασε τη σύνδεση
Πρώτα από όλα, εκτέλεσε μία φορά ένα αίτημα στο /me: αν επιστρέψει τον οργανισμό σου και το όνομα του κλειδιού, η ταυτοποίηση είναι εντάξει.
Πρόσθεσε το αυξητικό φίλτρο
Αποθήκευσε την ημερομηνία της τελευταίας εκτέλεσης σε ένα Data store ή σε μια μεταβλητή και πέρασέ την ως actualizadoDesde στο URL. Προγραμμάτισε το σενάριο κάθε 15 λεπτά.
Αντιστοίχισε τα πεδία προς το CRM σου
Διάτρεξε το data[] και αντιστοίχισε id, codigo, nombre, apellidos, email, telefono, nif_cif και direccion. Αποθήκευσε το id του Sattotal στο CRM σου για να ενημερώνεις αντί να διπλασιάζεις.
Για να δημιουργείς πελάτες από το CRM, ένα ακόμη module HTTP με μέθοδο POST στο /clientes και το σώμα JSON του πελάτη. Αν λάβεις 409, χρησιμοποίησε το existenteId για να συνδέσεις.
Καλές πρακτικές ασφάλειας
Ένα κλειδί ανά ενσωμάτωση
Έτσι μπορείς να ανακαλέσεις ένα χωρίς να σπάσεις τα υπόλοιπα, και στη λίστα βλέπεις πότε χρησιμοποιήθηκε το καθένα για τελευταία φορά.
Ποτέ στον browser ούτε σε δημόσιο αποθετήριο
Φύλαξέ το στον χώρο διαπιστευτηρίων του εργαλείου σου (συνδέσεις του Make, credentials του n8n, μεταβλητές περιβάλλοντος). Αν το ανεβάσεις σε αποθετήριο ή σε ιστοσελίδα, θεώρησέ το διαρρευμένο.
Αν διαρρεύσει, ανάκαλεσέ το και δημιούργησε άλλο
Η ανάκληση είναι άμεση: το παλιό κλειδί αρχίζει να λαμβάνει 401 CLAVE_REVOCADA. Ενημέρωσε το νέο στο εργαλείο σου και τελείωσες.
Προδιαγραφή API
Η πλήρης τεχνική αναφορά (διαδρομές, παράμετροι, σχήματα και κωδικοί σφάλματος) δημοσιεύεται σε ανοιχτή μορφή στο /api/v1/openapi.json, χωρίς να χρειάζεται κλειδί. Από προεπιλογή είναι στα ισπανικά· πρόσθεσε ?lang= με τη γλώσσα σου για να την πάρεις μεταφρασμένη (για παράδειγμα ?lang=el ή /api/v1/openapi.json?lang=en). Μπορείς να την εισάγεις στο Postman, στο Insomnia, στο Make ή στο n8n για να έχεις όλες τις κλήσεις έτοιμες.
Συχνές ερωτήσεις
Έχασα το κλειδί, μπορώ να το ξαναδώ;
Όχι. Εμφανίζεται μόνο κατά τη δημιουργία και μετά αποθηκεύεται με μη αναστρέψιμο τρόπο. Ανάκαλεσέ το στο Ρυθμίσεις → API και δημιούργησε άλλο.
Υπάρχουν webhooks για να ενημερώνει το Sattotal το CRM μου όταν αλλάζει κάτι;
Όχι ακόμη. Ο συνιστώμενος τρόπος είναι να ρωτάς περιοδικά με την παράμετρο actualizadoDesde, που επιστρέφει μόνο όσα άλλαξαν.
Ποια δεδομένα εκθέτει το API;
Πελάτες και προμηθευτές: λίστα, δημιουργία, προβολή, ενημέρωση και αρχειοθέτηση. Τα δικαιώματα είναι ανά πόρο, οπότε ένα κλειδί που δημιουργήθηκε πριν υπάρξουν οι προμηθευτές δεν τους φτάνει μέχρι να του τους τσεκάρει ένας διαχειριστής. Επιπλέον, τα δελτία επισκευής μόνο για ανάγνωση (κατάσταση, ημερομηνίες, συσκευή και προσφορά), με δική τους άδεια.
Μπορώ να διαγράψω έναν πελάτη μέσω API;
Όχι, μόνο να τον αρχειοθετήσεις (activo = false), όπως και στην εφαρμογή. Ισχύει τόσο για πελάτες όσο και για προμηθευτές. Μια αρχειοθετημένη εγγραφή συνεχίζει να εμφανίζεται στον συγχρονισμό για να την αποτυπώσει το CRM σου.
Το API περιλαμβάνεται στο δωρεάν πλάνο;
Όχι. Περιλαμβάνεται στα Basic, Pro και Enterprise και στη δοκιμαστική περίοδο. Στο δωρεάν πλάνο μπορείς να συνεχίσεις να βλέπεις και να ανακαλείς τα κλειδιά που δημιούργησες.
Φτάνει μόνο το επώνυμο του πελάτη. Γιατί δεν αποθηκεύεται το μικρό όνομα;
Σχεδόν πάντα φταίει η αντιστοίχιση πεδίων: το μικρό όνομα πηγαίνει στο nombre και το επώνυμο στο apellidos. Αν το εργαλείο σας στέλνει το όνομα με άλλο κλειδί (firstName, name, apellido…), το API το απορρίπτει και σας το δείχνει στο avisos.camposIgnorados της απάντησης. Διορθώστε την αντιστοίχιση και στείλτε ξανά τον πελάτη με PATCH.
Μπορώ να βρω τον πελάτη από τον αριθμό που με καλεί;
Ναι. Κάλεσε GET /api/v1/clientes?telefono= με τον αριθμό όπως σου έρχεται: δεν έχει σημασία αν έχει διεθνές πρόθεμα, κενά ή παύλες, και η αναζήτηση γίνεται και στο δεύτερο τηλέφωνο. Με το id του πελάτη μπορείς μετά να ζητήσεις τα δελτία του (/clientes/{id}/reparaciones) και τη σύνοψή του (/clientes/{id}/resumen).
