Το EMDI web API είναι ένας τρόπος να επικοινωνήσει το πρόγραμμά σου με την EMDI web (επαφές, προϊόντα, ραντεβού, παραστατικά) χωρίς να ανοίγεις την οθόνη με το χέρι.

Στέλνεις ένα μήνυμα σε μορφή JSON (κείμενο με δομή) και παίρνεις πίσω απάντηση JSON. Τα ονόματα των πεδίων είναι στα Αγγλικά (π.χ. name, city).

Πριν ξεκινήσεις

  1. Στο admin πακέτων, ενεργοποίησε το EMDI web API για το προϊόν.
  2. Στην EMDI web άνοιξε Ρυθμίσεις → Εφαρμογές → Σύνδεσμοι εφαρμογής API.
  3. Πάτησε δημιουργία κλειδιού, αποθήκευσε το HTTP Key.
  4. Αν άλλαξες πακέτο, κάνε αποσύνδεση και ξανασύνδεση στην EMDI web.
  5. Κράτα πρόχειρα: το όνομα χρήστη και το HTTP Key (μην τα δημοσιεύεις).

Η πρώτη σου κλήση

Όλες οι κλήσεις καλούν την ίδια διεύθυνση:

https://web.sbzsystems.com/apps/api/call.php?user=YOUR_USER&key=YOUR_HTTPKEY

Αντικατέστησε YOUR_USER και YOUR_HTTPKEY με τα δικά σου διαπιστευτήρια.

  1. Άνοιξε ένα τερματικό (ή το Postman αν προτιμάς).
  2. Αντέγραψε την εντολή cURL από κάτω.
  3. Εκτέλεσέ την. Αν όλα πάνε καλά, θα δεις "success": true και το αποτέλεσμα.
  4. Αν δεις σφάλμα, διάβασε το error.message — συνήθως λέει τι λείπει (λάθος κλειδί κ.λπ.).

Αυτή η πρώτη κλήση φέρνει τις λίστες αναφοράς:

Επιτυχημένη απάντηση (παράδειγμα):

Αποτυχημένη απάντηση (παράδειγμα):

Όριο χρήσης

Μπορείς να κάνεις μέχρι 60 κλήσεις ανά λεπτό (ανά χρήστη και IP). Αν ξεπεράσεις το όριο, περίμενε λίγο και ξαναδοκίμασε.

Κατάλογος ενεργειών

Πάτησε μία ενέργεια στον πίνακα για να πας κατευθείαν στο παράδειγμα από κάτω. Κάθε ενέργεια έχει όνομα τύπου contact.get. Πάντα στέλνεις ολόκληρο το JSON (όχι μόνο το action). Κάτω από κάθε αίτημα βλέπεις και παράδειγμα απάντησης.

POSTmeta.lookups· λίστες αναφοράς
https://web.sbzsystems.com/apps/api/call.php?user=YOUR_USER&key=YOUR_HTTPKEY

Χρησιμοποίησέ το πρώτο. Σου φέρνει τις λίστες που χρειάζεσαι μετά (π.χ. είδη παραστατικών, ΦΠΑ, σχέσεις). Αν βάλεις cities, φέρνει και πόλεις.

Πεδίο Τι σημαίνει
action τι θέλεις να κάνεις — εδώ πάντα meta.lookups
with προαιρετικό: βάλε [“cities”] αν θέλεις και πόλεις

Παράδειγμα απάντησης:

POSTcontact.get· μία επαφή
https://web.sbzsystems.com/apps/api/call.php?user=YOUR_USER&key=YOUR_HTTPKEY

Διαβάζει μία επαφή με τον εσωτερικό αριθμό της (id). Άλλαξε το 123 με πραγματικό id από τη βάση σου.

Πεδίο Τι σημαίνει
action contact.get
id ο αριθμός της επαφής (Aa)

Παράδειγμα απάντησης:

POSTcontact.list· λίστα επαφών
https://web.sbzsystems.com/apps/api/call.php?user=YOUR_USER&key=YOUR_HTTPKEY

Φέρνει πολλές επαφές. Το limit λέει πόσες (μέχρι 200). Το offset λέει από ποια θέση να ξεκινήσεις (0 = από την αρχή).

Πεδίο Τι σημαίνει
action contact.list
active 1 = μόνο ενεργές, 0 = ανενεργές
limit πόσες εγγραφές να φέρει
offset πόσες να παραλείψει από την αρχή

Παράδειγμα απάντησης:

POSTcontact.save· νέα ή ενημέρωση επαφής
https://web.sbzsystems.com/apps/api/call.php?user=YOUR_USER&key=YOUR_HTTPKEY

Με id = 0 δημιουργείς νέα. Με match = code ψάχνει αν υπάρχει ήδη ο κωδικός και τον ενημερώνει. Αν η πόλη ή η σχέση δεν υπάρχει ακόμα, το σύστημα την δημιουργεί.

Πεδίο Τι σημαίνει
action contact.save
id 0 = νέα επαφή
match code = ψάξε/ενημέρωσε με κωδικό
data τα στοιχεία της επαφής (όνομα, πόλη, …)

Παράδειγμα απάντησης:

POSTcontact.delete· διαγραφή επαφής
https://web.sbzsystems.com/apps/api/call.php?user=YOUR_USER&key=YOUR_HTTPKEY

Διαγράφει την επαφή. Αν έχει παραστατικά ή είναι κλειδωμένη από myDATA, η κλήση αποτυγχάνει (δεν σβήνει τίποτα).

Πεδίο Τι σημαίνει
action contact.delete
id ο αριθμός της επαφής

Παράδειγμα απάντησης:

POSTproduct.get· ένα προϊόν
https://web.sbzsystems.com/apps/api/call.php?user=YOUR_USER&key=YOUR_HTTPKEY

Διαβάζει ένα προϊόν (και barcodes αν υπάρχουν). Άλλαξε το id.

Πεδίο Τι σημαίνει
action product.get
id ο αριθμός του προϊόντος

Παράδειγμα απάντησης:

POSTproduct.list· λίστα προϊόντων
https://web.sbzsystems.com/apps/api/call.php?user=YOUR_USER&key=YOUR_HTTPKEY

Φέρνει προϊόντα με φίλτρα. Μπορείς να φιλτράρεις με κωδικό.

Πεδίο Τι σημαίνει
action product.list
code κωδικός προϊόντος (προαιρετικό)
active 1 = ενεργά
limit / offset σελίδωση

Παράδειγμα απάντησης:

POSTproduct.save· νέο ή ενημέρωση προϊόντος
https://web.sbzsystems.com/apps/api/call.php?user=YOUR_USER&key=YOUR_HTTPKEY

Ίδια λογική με τις επαφές: id 0 = νέο, match:code = ενημέρωση με κωδικό. Το ποσοστό ΦΠΑ (vat_rate) πρέπει να υπάρχει ήδη στις ρυθμίσεις ΦΠΑ.

Πεδίο Τι σημαίνει
action product.save
id 0 = νέο
match code
data στοιχεία προϊόντος

Παράδειγμα απάντησης:

POSTproduct.delete· διαγραφή προϊόντος
https://web.sbzsystems.com/apps/api/call.php?user=YOUR_USER&key=YOUR_HTTPKEY

Διαγράφει το προϊόν. Αν χρησιμοποιείται σε παραστατικά, αποτυγχάνει.

Πεδίο Τι σημαίνει
action product.delete
id ο αριθμός του προϊόντος

Παράδειγμα απάντησης:

POSTcalendar.get· ένα ραντεβού
https://web.sbzsystems.com/apps/api/call.php?user=YOUR_USER&key=YOUR_HTTPKEY

Διαβάζει ένα ραντεβού με το id του.

Πεδίο Τι σημαίνει
action calendar.get
id ο αριθμός του ραντεβού

Παράδειγμα απάντησης:

POSTcalendar.list· λίστα ραντεβού
https://web.sbzsystems.com/apps/api/call.php?user=YOUR_USER&key=YOUR_HTTPKEY

Φέρνει ραντεβού ανάμεσα σε δύο ημερομηνίες. Η μορφή ημερομηνίας είναι όπως: 2026-09-01 00:00:00.

Πεδίο Τι σημαίνει
action calendar.list
start / end από / έως
contact_id προαιρετικά μόνο για μία επαφή
limit / offset σελίδωση

Παράδειγμα απάντησης:

POSTcalendar.save· νέο ή ενημέρωση ραντεβού
https://web.sbzsystems.com/apps/api/call.php?user=YOUR_USER&key=YOUR_HTTPKEY

Για νέο ραντεβού βάλε id 0 και υποχρεωτικά start μέσα στο data.

Πεδίο Τι σημαίνει
action calendar.save
id 0 = νέο
data.start ημερομηνία/ώρα έναρξης (υποχρεωτικό σε νέο)

Παράδειγμα απάντησης:

POSTcalendar.delete· διαγραφή ραντεβού
https://web.sbzsystems.com/apps/api/call.php?user=YOUR_USER&key=YOUR_HTTPKEY

Διαγράφει το ραντεβού.

Πεδίο Τι σημαίνει
action calendar.delete
id ο αριθμός του ραντεβού

Παράδειγμα απάντησης:

POSTdocument.get· ένα παραστατικό
https://web.sbzsystems.com/apps/api/call.php?user=YOUR_USER&key=YOUR_HTTPKEY

Διαβάζει παραστατικό μαζί με τις γραμμές του. Αν είναι κλειδωμένο στο myDATA, το βλέπεις αλλά δεν μπορείς να το αλλάξεις.

Πεδίο Τι σημαίνει
action document.get
id ο αριθμός του παραστατικού

Παράδειγμα απάντησης:

POSTdocument.list· λίστα παραστατικών
https://web.sbzsystems.com/apps/api/call.php?user=YOUR_USER&key=YOUR_HTTPKEY

Φέρνει παραστατικά. Με include_lines true παίρνεις και τις γραμμές ειδών.

Πεδίο Τι σημαίνει
action document.list
contact_id / doc_type_id φίλτρα
date_from / date_to ημερομηνίες
include_lines true = με γραμμές

Παράδειγμα απάντησης:

POSTdocument.save· νέο ή ενημέρωση παραστατικού
https://web.sbzsystems.com/apps/api/call.php?user=YOUR_USER&key=YOUR_HTTPKEY

Για νέο παραστατικό χρειάζεσαι: είδος παραστατικού (doc_type_id), επαφή (contact_id) και τουλάχιστον μία γραμμή στο lines. Πάρε τα σωστά id από το meta.lookups. Είδη με φορολογική διαβίβαση (tax_docs) δεν δημιουργούνται από το API.

Πεδίο Τι σημαίνει
action document.save
id 0 = νέο
data.doc_type_id είδος παραστατικού
data.contact_id επαφή
data.lines γραμμές ειδών (τουλάχιστον μία σε νέο)

Παράδειγμα απάντησης:

POSTdocument.delete· διαγραφή παραστατικού
https://web.sbzsystems.com/apps/api/call.php?user=YOUR_USER&key=YOUR_HTTPKEY

Διαγράφει παραστατικό και γραμμές. Αν είναι κλειδωμένο myDATA, αποτυγχάνει.

Πεδίο Τι σημαίνει
action document.delete
id ο αριθμός του παραστατικού

Παράδειγμα απάντησης:

Σημειώσεις

  • Ξεκίνα πάντα με meta.lookups πριν φτιάξεις παραστατικά.
  • Το id είναι ο εσωτερικός αριθμός και code είναι ο κωδικός που βλέπεις στην οθόνη.
  • Για ενημέρωση με κωδικό χρησιμοποίησε "match": "code".
  • Παραστατικά κλειδωμένα στο myDATA δεν αλλάζουν ούτε διαγράφονται από το API.