← Πίσω στο Billbook

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_income
  • category (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 είναι η πηγή αλήθειας για την πραγματική συμπεριφορά.