FlexyΤεκμηρίωση API

Τεκμηρίωση 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 ──▶ ΑΑΔΕ
  1. Υπογραφή πληρωμής. Πριν χρεώσετε την κάρτα, ζητάτε από τη Flexy την υπογραφή πληρωμής για το τιμολόγιο που πρόκειται να εκδώσετε. Η υπογραφή περιέχει το UID του τιμολογίου (προκύπτει από ΑΦΜ, ημερομηνία, τύπο, σειρά και αριθμό), τα ποσά του και το ποσό της πληρωμής.
  2. Πληρωμή. Στέλνετε τη χρέωση στον πάροχο πληρωμών σας (π.χ. Viva) μαζί με την υπογραφή. Όταν εγκριθεί, ο πάροχος σας επιστρέφει το payment id της συναλλαγής (Μοναδική Ταυτότητα Πληρωμής).
  3. Τιμολόγιο. Εκδίδετε το τιμολόγιο μέσω 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 και η τρέχουσα ημερομηνία και ώρα, ίδια με του τιμολογίου παρακάτω.
providerflexy: την υπογραφή την εκδίδει η 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, duration0 για την έδρα· 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].type7: πληρωμή με κάρτα σε 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
  }
}

Κάτι δεν πάει καλά

HTTPcodeΑιτίαΤι κάνετε
400requiredΛείπει πεδίο. Το attr λέει ποιο, π.χ. terminal_id.Προσθέστε το πεδίο.
400invalidΣτην υπογραφή, άγνωστος provider, π.χ. viva αντί για flexy. Στο τιμολόγιο, ποσά ή ημερομηνία που δεν στέκουν. Το detail εξηγεί τι ακριβώς.Διορθώστε ό,τι αναφέρει το detail.

Για τα σφάλματα που επιστρέφει η ΑΑΔΕ στο τιμολόγιο δείτε το βήμα 2 και για σφάλματα 401 το βήμα 1.

Για έτοιμα αιτήματα για κάθε τύπο παραστατικού δείτε τα Παραδείγματα.