Τεκμηρίωση API
Βήμα 3 – Πληρωμή με κάρτα
Το ίδιο τιμολόγιο με το βήμα 2, πληρωμένο με κάρτα σε τερματικό POS.
Σε αυτό το βήμα εκδίδετε το ίδιο Τιμολόγιο Πώλησης (1.1) των 12,40 € με το βήμα 2, αυτή τη φορά πληρωμένο με κάρτα σε τερματικό POS. Στο παράδειγμα ο πάροχος πληρωμών είναι η Viva.
Πώς λειτουργεί
Μια πληρωμή με κάρτα δένεται με το τιμολόγιο μέσω μιας υπογραφής πληρωμής που εκδίδει η Flexy ως πάροχος. Η ροή έχει τρία βήματα:
1. ERP ── στοιχεία τιμολογίου ──────▶ Flexy ⇒ υπογραφή πληρωμής
2. ERP ── χρέωση + υπογραφή ────────▶ Viva (POS) ⇒ payment id
3. ERP ── τιμολόγιο + payment id ───▶ Flexy ──▶ ΑΑΔΕ
- Υπογραφή πληρωμής. Πριν χρεώσετε την κάρτα, ζητάτε από τη Flexy την υπογραφή πληρωμής για το τιμολόγιο που πρόκειται να εκδώσετε. Η υπογραφή περιέχει το UID του τιμολογίου (προκύπτει από ΑΦΜ, ημερομηνία, τύπο, σειρά και αριθμό), τα ποσά του και το ποσό της πληρωμής.
- Πληρωμή. Στέλνετε τη χρέωση στον πάροχο πληρωμών σας (π.χ. Viva) μαζί με την υπογραφή. Όταν εγκριθεί, ο πάροχος σας επιστρέφει το payment id της συναλλαγής (Μοναδική Ταυτότητα Πληρωμής).
- Τιμολόγιο. Εκδίδετε το τιμολόγιο μέσω Flexy, με τρόπο πληρωμής κάρτα και το payment id.
Ο ΑΦΜ, η σειρά, το aa και η ημερομηνία πρέπει να είναι ίδια στην υπογραφή και στο τιμολόγιο. Η
σελίδα βάζει το ίδιο aa και την ίδια ημερομηνία και στα δύο αιτήματα· για νέα δοκιμή, ανανεώστε τη
σελίδα.
1. Εκδώστε την υπογραφή πληρωμής
Αποθηκεύστε το παρακάτω ως signature.json:
{
"signature": {
"provider": "flexy",
"nsp": "Viva",
"issuer_vat_number": "<ΑΦΜ>",
"branch_code": 0,
"invoice_type": "1.1",
"invoice_series": "A",
"invoice_number": "YYYYMMDDHHMMSS",
"invoice_issued_at": "YYYY-MM-DDTHH:MM:SS+HH:MM",
"invoice_net_amount": "10.00",
"invoice_vat_amount": "2.40",
"invoice_total_amount": "12.40",
"payment_amount": "12.40",
"duration": 1,
"terminal_id": "<TID>"
}
}| Πεδίο | Τιμή |
|---|---|
issuer_vat_number | Εσείς: στη θέση του <ΑΦΜ> βάλτε τον ΑΦΜ του εκδότη, τον ίδιο που θα βάλετε στο τιμολόγιο. |
terminal_id | Εσείς: στη θέση του <TID> βάλτε τον κωδικό του τερματικού POS που θα χρεώσει την κάρτα. |
invoice_number, invoice_issued_at | Η σελίδα: το aa και η τρέχουσα ημερομηνία και ώρα, ίδια με του τιμολογίου παρακάτω. |
provider | flexy: την υπογραφή την εκδίδει η Flexy. |
nsp | Ο πάροχος πληρωμών που θα εκτελέσει τη χρέωση· στο παράδειγμα η Viva. Τιμές: Viva, WebEcr, WorldLine, Edps, EpaySoftPos (ή ο αριθμός τους, 1–5). |
invoice_net_amount, invoice_vat_amount, invoice_total_amount | Τα ποσά του τιμολογίου: 10,00 € + 2,40 € ΦΠΑ = 12,40 €. |
payment_amount | Το ποσό που θα χρεωθεί στην κάρτα: 12,40 €. |
branch_code, duration | 0 για την έδρα· 1 (ημέρα). |
Στείλτε το:
curl https://provider-staging.flexy.gr/api/v1/signatures/ \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
--data-binary @signature.json
Η απάντηση (HTTP 201):
{
"signature": {
"id": "2f43ec5f-e511-4b2b-b818-9003ecf13f7b",
"status": "success",
"uid": "EF50AEE3A2C75459A308044547F252385F5CD83E",
"nsp_name": "Viva",
"nsp_value": 1,
"unsigned_text": "EF50AEE3A2C75459A308044547F252385F5CD83E;;20261004171639;1240;1000;240;1240;<TID>",
"signed_text": "S2WwpkPyI1rzAc/EelAwVZMeMJIYigB2nMt2/TtdMQwjqbyXWoRu70uy6VsG9d0Bkc9hTFvXFnDkArBLPC15BA==",
"signature_hex": "4b65b0a643f2235af301cfc47a503055…",
"timestamp": "20261004171639",
"expires_at": "2026-10-07T02:16:39.267373Z",
"seconds_until_expiration": 216000
// … και τα στοιχεία που στείλατε
}
}
| Πεδίο | Τι σημαίνει |
|---|---|
uid | Το UID του τιμολογίου. Είναι το ίδιο mydata_uid που θα πάρει το τιμολόγιο στο βήμα 3. |
unsigned_text | Τα στοιχεία που υπέγραψε η Flexy, χωρισμένα με ;: UID, ΜΑΡΚ (κενό), ώρα υπογραφής (ώρα Ελλάδας), ποσό πληρωμής, καθαρή αξία, ΦΠΑ, σύνολο (σε λεπτά) και TID. Η σειρά αλλάζει ανά nsp: για WebEcr και WorldLine το ποσό πληρωμής μπαίνει μετά το σύνολο· για EpaySoftPos τα ποσά είναι σε ευρώ (12.40) και η ώρα YYYY-MM-DDTHH:MM:SS.000. |
signed_text | Η υπογραφή, σε Base64. |
signature_hex | Η ίδια υπογραφή, σε δεκαεξαδική μορφή. |
expires_at | Πότε λήγει η υπογραφή: η χρέωση πρέπει να γίνει πριν από αυτή τη στιγμή. Για τιμολόγιο 1.1 η υπογραφή ισχύει 60 ώρες. |
Δώστε στον πάροχο πληρωμών τα στοιχεία της υπογραφής που ζητά: συνήθως το unsigned_text μαζί με το
signed_text ή το signature_hex.
2. Χρεώστε την κάρτα μέσω του παρόχου πληρωμών
Στείλτε τη χρέωση των 12,40 € στο τερματικό σας μέσω του παρόχου πληρωμών (π.χ. Viva), μαζί με την υπογραφή του βήματος 1, με τον τρόπο που ορίζει ο πάροχος. Όταν ο πελάτης πληρώσει, ο πάροχος σας επιστρέφει το payment id της συναλλαγής.
Αν η πληρωμή δεν εγκριθεί, μην εκδώσετε το τιμολόγιο με τρόπο πληρωμής κάρτα.
3. Εκδώστε το τιμολόγιο με το payment id
Το τιμολόγιο είναι το ίδιο με του βήματος 2· αλλάζει μόνο ο τρόπος πληρωμής. Αποθηκεύστε το
παρακάτω ως invoice.json:
{
"document": {
"provider": "flexy",
"document_type": "invoice",
"series": "A",
"aa": "YYYYMMDDHHMMSS",
"date": "YYYY-MM-DD",
"provider_details": {
"document_type": "1.1",
"payment_methods": [
{ "type": 7, "amount": "12.40", "transaction_id": "<PAYMENT ID>" }
]
},
"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"
}
]
}
}| Πεδίο | Τιμή |
|---|---|
issuer.legal_number | Εσείς: στη θέση του <ΑΦΜ> βάλτε τον ΑΦΜ του εκδότη, τον ίδιο με της υπογραφής. |
provider_details.payment_methods[0].transaction_id | Εσείς: στη θέση του <PAYMENT ID> βάλτε το payment id που σας επέστρεψε ο πάροχος πληρωμών. |
provider_details.payment_methods[0].type | 7: πληρωμή με κάρτα σε POS (κωδικός myDATA). |
provider_details.payment_methods[0].amount | Το ποσό που πληρώθηκε με κάρτα: όλο το πληρωτέο, 12,40 €. |
Στείλτε το:
curl https://provider-staging.flexy.gr/api/v1/documents/ \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
--data-binary @invoice.json
Όταν η ΑΑΔΕ καταχωρήσει το τιμολόγιο, το API απαντά με HTTP 201, όπως στο βήμα 2:
{
"document": {
"aa": "20261004171639",
"issue_date": "2026-10-04",
"provider": "flexy",
"status": "success",
"mydata_mark": 400001972099593,
"mydata_uid": "EF50AEE3A2C75459A308044547F252385F5CD83E",
"qr_code_url": "https://mydataapidev.aade.gr/TimologioQR/QRInfo?q=…",
"issuer_vat_number": "<ΑΦΜ>",
"counterpart_vat_number": "801434350",
"total_gross_value": "12.40"
// … και το document_data με όλο το παραστατικό, μαζί με το payment id
}
}
Κάτι δεν πάει καλά
| HTTP | code | Αιτία | Τι κάνετε |
|---|---|---|---|
400 | required | Λείπει πεδίο. Το attr λέει ποιο, π.χ. terminal_id. | Προσθέστε το πεδίο. |
400 | invalid | Στην υπογραφή, άγνωστος provider, π.χ. viva αντί για flexy. Στο τιμολόγιο, ποσά ή ημερομηνία που δεν στέκουν. Το detail εξηγεί τι ακριβώς. | Διορθώστε ό,τι αναφέρει το detail. |
Για τα σφάλματα που επιστρέφει η ΑΑΔΕ στο τιμολόγιο δείτε το βήμα 2 και για
σφάλματα 401 το βήμα 1.
Για έτοιμα αιτήματα για κάθε τύπο παραστατικού δείτε τα Παραδείγματα.