API Απομακρυσμένης Λογιστικής
Τελευταία ενημέρωση: 10 Μαΐου 2026
Καταχωρήστε εγγραφές από cURL, Συντομεύσεις iOS ή σενάρια αυτοματισμού χρησιμοποιώντας ένα προσωπικό token API. Το token είναι μόνο για εγγραφή — μπορεί να εισάγει συναλλαγές και να διαβάζει τις λίστες κατηγοριών / ετικετών, αλλά δεν μπορεί να διαβάσει ή να διαγράψει δεδομένα συναλλαγών.
1. Αποκτήστε ένα token
Συνδεθείτε ως admin, ανοίξτε Ρυθμίσεις → 🔑 API Απομακρυσμένης Λογιστικής και κάντε κλικ στο «Δημιουργία token».
Το token σε απλό κείμενο εμφανίζεται μόνο μία φορά — αντιγράψτε το αμέσως. Ο διακομιστής αποθηκεύει μόνο το hash SHA-256, οπότε ένα χαμένο token μπορεί να αντικατασταθεί μόνο με περιστροφή (που ακυρώνει το παλιό).
Μορφή token: bb_<userId>_<secret>. Στείλτε το σε κάθε αίτημα ως Authorization: Bearer <token>.
2. POST /api/ingest — εισαγωγή μίας συναλλαγής
Το σώμα του αιτήματος είναι ένα αντικείμενο JSON με τα εξής πεδία:
title(string, υποχρεωτικό) — όνομα συναλλαγήςamount(number, υποχρεωτικό) — πρέπει να είναι θετικόtype(string, προαιρετικό, προεπιλογήexpense) — ένα απόexpense/income/prepaid_expense/pending_incomecategory(string, προαιρετικό) — όνομα κατηγορίαςnote(string, προαιρετικό) — ελεύθερη σημείωσηcreated_at(string, προαιρετικό) — ISO 8601· προεπιλογή τώρα
curl -X POST https://billbook.me/api/ingest \
-H "Authorization: Bearer bb_<userId>_<secret>" \
-H "Content-Type: application/json" \
-d '{"title":"Coffee","amount":120,"type":"expense","category":"Food"}'
# response: 201
{ "id": "...", "created_at": "..." }3. GET /api/ingest/categories — λίστα κατηγοριών
Επιστρέφει τα ονόματα κατηγοριών του admin με τη σειρά του αναπτυσσόμενου μενού του πίνακα. Η απάντηση περιέχει μόνο τα ονόματα — χωρίς ids, user ids ή δεδομένα συναλλαγών.
curl https://billbook.me/api/ingest/categories \
-H "Authorization: Bearer bb_<userId>_<secret>"
# response: 200
{ "categories": ["Food", "Rent", "..."] }4. GET /api/ingest/tags — πρόσφατα χρησιμοποιημένες ετικέτες
Επιστρέφει τα πιο πρόσφατα ενημερωμένα προθέματα ετικετών (οι ενδείξεις #XXX που είναι ενσωματωμένες στους τίτλους). Προεπιλογή 20· χρησιμοποιήστε ?limit= για παράκαμψη (μέγ. 100).
Επιστρέφει έναν κενό πίνακα αντί για σφάλμα αν ο πίνακας tag_prefixes δεν υπάρχει ακόμη.
curl "https://billbook.me/api/ingest/tags?limit=20" \
-H "Authorization: Bearer bb_<userId>_<secret>"
# response: 200
{ "tags": ["#management-fee", "#travel", "..."] }5. Κωδικοί σφαλμάτων
Όλα τα σφάλματα είναι JSON: { "error": "μήνυμα" }.
401— λείπει εξουσιοδότηση, κακοδιαμορφωμένο token, ανακλήθηκε ή δεν ταιριάζει402— η συνδρομή έληξε· απαιτείται ανανέωση για εγγραφή405— μη υποστηριζόμενη μέθοδος (π.χ. GET στο/api/ingest)501— λείπει τοSUPABASE_SERVICE_ROLE_KEYαπό τον διακομιστή500— άλλο εσωτερικό σφάλμα
6. Ασφάλεια και όρια
Εκ σχεδιασμού, το token μπορεί να γράφει μόνο στον δικό του οργανισμό — δεν μπορεί να υποδυθεί άλλα orgs ούτε να διαβάσει υπάρχοντα δεδομένα:
- Το
user_idείναι πάντα ο κάτοχος του token· δεν μπορεί να πλαστογραφηθεί - Το
org_idείναι πάντα το org του κατόχου· οι εγγραφές μεταξύ orgs είναι αδύνατες - Τα tokens εκδίδονται μόνο στον ρόλο admin (manager / staff λαμβάνουν 403)
- Οι απαντήσεις δεν διαρρέουν ποτέ άλλες γραμμές — επιστρέφεται μόνο
{ id, created_at } - Η ανάκληση είναι άμεση· περιστρέψτε ανά πάσα στιγμή από τις Ρυθμίσεις
7. Παράδειγμα Συντόμευσης iOS
Προσθέστε μια ενέργεια «Λήψη περιεχομένων URL», URL https://billbook.me/api/ingest, μέθοδος POST, κεφαλίδες Authorization: Bearer bb_... και Content-Type: application/json, και σώμα αιτήματος ως JSON: {"title":"Καφές","amount":120,"type":"expense"}. Συνδέστε τα title και amount με την είσοδο της Συντόμευσης ή μεταβλητές «Ερώτηση κάθε φορά».
Αυτό το έγγραφο είναι μια γρήγορη αναφορά· ο κώδικας του backend είναι η πηγή αλήθειας για την πραγματική συμπεριφορά.