Τεκμηρίωση API
Βήμα 2 – Έκδοση τιμολογίου
Εκδώστε ένα Τιμολόγιο Πώλησης (1.1) με πληρωμή σε μετρητά, συμπληρώνοντας μόνο τον ΑΦΜ του εκδότη.
Σε αυτό το βήμα εκδίδετε ένα πραγματικό παραστατικό στο περιβάλλον δοκιμών: ένα Τιμολόγιο Πώλησης (1.1) αξίας 12,40 €, πληρωμένο με μετρητά. Όλες οι τιμές είναι έτοιμες. Συμπληρώνετε μόνο τον ΑΦΜ του εκδότη.
1. Ετοιμάστε το σώμα του αιτήματος
Αποθηκεύστε το παρακάτω ως invoice.json:
{
"document": {
"provider": "flexy",
"document_type": "invoice",
"series": "A",
"aa": "YYYYMMDDHHMMSS",
"date": "YYYY-MM-DD",
"provider_details": {
"document_type": "1.1",
"payment_method_type": 3
},
"issuer": {
"legal_name": "Δοκιμαστικός Εκδότης",
"legal_number": "<ΑΦΜ>",
"address": {
"address_line": "Πανεπιστημίου 123",
"city": "Αθήνα",
"zip": "10678",
"country": "GR"
}
},
"counterpart": {
"legal_name": "Δοκιμαστικός Πελάτης",
"legal_number": "801434350",
"address": {
"address_line": "Σταδίου 456",
"city": "Θεσσαλονίκη",
"zip": "54625",
"country": "GR"
}
},
"items": [
{
"title": "Προϊόν δοκιμής",
"description": "Γραμμή δοκιμής",
"quantity": "1",
"unit_measure": "ΤΕΜ",
"unit_value": "10.00",
"unit_total": "10.00",
"taxes": [
{
"title": "ΦΠΑ 24%",
"value_type": "percentage",
"value": "24.00",
"tax_sign": "+",
"on_vat": true,
"provider_details": { "provider_code": "1" }
}
],
"provider_details": {
"classification_category": "category1_1",
"classification_type": "E3_561_001",
"vat_classification_category": "1"
}
}
],
"totals": {
"line_extension_amount": "10.00",
"tax_exclusive_amount": "10.00",
"tax_amount": "2.40",
"tax_inclusive_amount": "12.40",
"payable_amount": "12.40"
},
"tax_breakdown": [
{
"tax_category_id": "S",
"tax_rate_percent": "24.00",
"taxable_amount": "10.00",
"tax_amount": "2.40"
}
]
}
}Συμπληρώνετε μόνο τον ΑΦΜ του εκδότη. Το date και το aa τα συμπληρώνει η σελίδα κάθε φορά που
την ανοίγετε:
| Πεδίο | Τιμή |
|---|---|
issuer.legal_number | Εσείς: στη θέση του <ΑΦΜ> βάλτε τον ΑΦΜ της επιχείρησης που εκδίδει το τιμολόγιο (9 ψηφία). |
date | Η σελίδα: η σημερινή ημερομηνία (ώρα Ελλάδας), σε μορφή ΕΕΕΕ-ΜΜ-ΗΗ. |
aa | Η σελίδα: η τρέχουσα ημερομηνία και ώρα με δευτερόλεπτα, π.χ. 20261004153012 για 4/10/2026 15:30:12. Έτσι κάθε αποστολή έχει νέο αύξοντα αριθμό· για νέα αποστολή, ανανεώστε τη σελίδα. |
2. Στείλτε το
curl https://provider-staging.flexy.gr/api/v1/documents/ \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
--data-binary @invoice.json
3. Η απάντηση
Όταν η ΑΑΔΕ καταχωρήσει το παραστατικό, το API απαντά με HTTP 201:
{
"document": {
"document_type": "invoice",
"aa": "20261004102731",
"series": "A",
"issue_date": "2026-10-04",
"id": "969950c9-2bfa-48c8-ba15-ebe12d02b743",
"provider": "flexy",
"status": "success",
"mydata_mark": 400001972081610,
"mydata_uid": "A2C1DBB4600F9CF22CCE6370CEDF72036220B39A",
"qr_code_url": "https://mydataapidev.aade.gr/TimologioQR/QRInfo?q=…",
"issuer_vat_number": "<ΑΦΜ>",
"counterpart_vat_number": "801434350",
"total_gross_value": "12.40"
// … και άλλα πεδία, π.χ. το document_data με όλο το παραστατικό όπως το στείλατε
}
}
| Πεδίο | Τι σημαίνει |
|---|---|
status | success: η ΑΑΔΕ καταχώρησε το παραστατικό. |
mydata_mark | Ο ΜΑΡΚ (Μοναδικός Αριθμός Καταχώρησης) που έδωσε η ΑΑΔΕ. |
mydata_uid | Το UID του παραστατικού στο myDATA. |
qr_code_url | Ο σύνδεσμος του QR, που ανοίγει το παραστατικό στην ΑΑΔΕ. |
id | Το αναγνωριστικό του παραστατικού στη Flexy. |
Τι περιέχει το παράδειγμα
| Τιμή | Σημασία |
|---|---|
provider: "flexy" | Η Flexy διαβιβάζει το παραστατικό στην ΑΑΔΕ ως πάροχος. |
provider_details.document_type: "1.1" | Τιμολόγιο Πώλησης. |
provider_details.payment_method_type: 3 | Πληρωμή με μετρητά (κωδικός myDATA 3) για όλο το πληρωτέο ποσό. |
issuer | Η επιχείρηση που εκδίδει το τιμολόγιο. Από τα στοιχεία της, η ΑΑΔΕ λαμβάνει τον ΑΦΜ· το όνομα και η διεύθυνση μπορούν να μείνουν ως έχουν. |
counterpart | Ο πελάτης του τιμολογίου: ένας δοκιμαστικός πελάτης (ΑΦΜ 801434350). Πρέπει να διαφέρει από τον εκδότη. |
items | Μία γραμμή: 1 τεμάχιο × 10,00 €, ΦΠΑ 24% (κατηγορία ΦΠΑ 1), χαρακτηρισμός εσόδων category1_1 / E3_561_001 (πωλήσεις χονδρικής). |
totals, tax_breakdown | 10,00 € καθαρή αξία + 2,40 € ΦΠΑ = 12,40 €. Πρέπει να συμφωνούν με τις γραμμές. |
Κάτι δεν πάει καλά
| HTTP | code | Αιτία | Τι κάνετε |
|---|---|---|---|
400 | required | Λείπει πεδίο. Το attr λέει ποιο, π.χ. aa ή items.0.description. | Προσθέστε το πεδίο. |
400 | invalid | Τα ποσά δεν συμφωνούν μεταξύ τους ή η ημερομηνία είναι μελλοντική. Το detail εξηγεί τι ακριβώς. | Διορθώστε ό,τι αναφέρει το detail. |
400 | provider_validation_error | Η ΑΑΔΕ απέρριψε το παραστατικό· το detail έχει το μήνυμά της. Με It has already been sent for another invoice, αυτό το aa έχει ήδη σταλεί. Με Issuer must be different from counterpart, ο εκδότης έχει τον ΑΦΜ του πελάτη. | Για νέο aa, ανανεώστε τη σελίδα και στείλτε ξανά. Αλλιώς διορθώστε ό,τι αναφέρει το detail. |
403 | onboarding_not_approved | Η εγγραφή σας δεν έχει εγκριθεί ακόμη. | Γράψτε μας στο [email protected]. |
500 | error | Σφάλμα στη μεριά της Flexy, π.χ. ο λογαριασμός δοκιμών σας δεν έχει ρυθμιστεί πλήρως. | Γράψτε μας στο [email protected]. |
Για σφάλματα 401 δείτε το βήμα 1.
Συνεχίστε στο βήμα 3: το ίδιο τιμολόγιο, πληρωμένο με κάρτα.