Πληρωμή με κάρτα / IRIS¶
Με την απόφαση Α.1155/2023, όταν το τερματικό POS μιας επιχείρησης είναι «κλειδωμένο» (διασυνδεδεμένο), η χρέωση της κάρτας ή του IRIS γίνεται μόνο με Υπογραφή Παρόχου. Ο Πάροχος δίνει την υπογραφή, το POS τη χρησιμοποιεί για να χρεώσει, και μετά ολοκληρώνετε το παραστατικό.
Ποιος το χρειάζεται
Μόνο όσοι έχουν POS υποχρεωμένο σε διασύνδεση. Αυτό το ορίζει η ΑΑΔΕ ανά επιχείρηση και τερματικό, και ο Πάροχος δεν μπορεί να το γνωρίζει. Γι' αυτό υπάρχει η παράμετρος skipSignature.
skipSignature: ο διακόπτης¶
SendInvoices?skipSignature= |
Τι γίνεται με πληρωμή type 7 (κάρτα) ή 8 (IRIS) |
|---|---|
true (default) |
Το παραστατικό εκδίδεται αμέσως (MARK, UID, AuthCode). Δεν επιστρέφεται υπογραφή. Για POS που δεν είναι κλειδωμένο. |
false |
Το παραστατικό μένει σε αναμονή, δεν πάει ακόμη στην ΑΑΔΕ. Επιστρέφεται providerSignature για το POS. Για κλειδωμένο POS. |
Αν το παραστατικό δεν έχει πληρωμή 7 ή 8, το skipSignature δεν έχει καμία επίδραση.
Ροή 1: έκδοση και πληρωμή μαζί (ταμείο)¶
sequenceDiagram
autonumber
participant APP as Ταμείο / ERP
participant NP as Novus Provider
participant POS as POS / NSP (τράπεζα)
participant AADE as ΑΑΔΕ
APP->>NP: SendInvoices?skipSignature=false<br/>paymentMethods: type 7, terminalId, posNspId
NP-->>APP: providerSignature[].signatures[].token (+ data)
APP->>POS: χρέωση με το token
POS-->>APP: transactionId, τελικό paymentType (κάρτα ή IRIS)
APP->>NP: CompletionPosInvoices [ signatureToken, transactionId, paymentAmount, paymentType ]
NP->>AADE: διαβίβαση παραστατικού + πληρωμής
NP-->>APP: MARK, UID, AuthCode, invoiceUrl
Βήμα 1: στείλτε το παραστατικό με skipSignature=false και, στην πληρωμή, τα terminalId και posNspId:
Βήμα 2: η απάντηση έχει την υπογραφή:
"providerSignature": [
{
"invoiceUid": "5E1F953760F9496F5520A961DA3BE07B30ED07F8",
"signatures": [
{
"token": "3045022100F0B3EAEAAC535A0C6549B42619C65895...",
"data": "5E1F953760F9496F5520A961DA3BE07B30ED07F8;;20260924155441;10000;2400;12400;12400;TID00001",
"createdDate": "2026-09-24T12:54:41Z",
"expiryDate": "2026-09-25T12:54:41Z",
"isExpired": false,
"paymentBalance": 124,
"issuerVatNumber": "123456789"
}
]
}
]
token: το περνάτε αυτούσιο στο API του NSP/τράπεζας. Είναι ήδη στη μορφή που θέλει ο NSP (HEX ή BASE64, βάσει τουposNspId). Μην το μετατρέπετε.data: τα δεδομένα που υπογράφηκαν. Μερικοί NSP τα ζητούν μαζί με το token.- Ισχύς: 24 ώρες. Για συναλλαγές εστίασης (
specialInvoiceCategory = 12) η ισχύς είναι 2 ώρες.
Βήμα 3: χρεώστε στο POS. Ο πελάτης μπορεί να αλλάξει τρόπο (π.χ. από κάρτα σε IRIS). Κρατήστε το transactionId και τον τελικό τύπο πληρωμής.
Βήμα 4: ολοκληρώστε:
[
{
"signatureToken": "<providerSignature[0].signatures[0].token από το SendInvoices>",
"transactionId": "123456788555",
"paymentAmount": 124,
"tipAmount": 0,
"paymentType": 7
}
]
| Πεδίο | Υποχρεωτικό | Σημείωση |
|---|---|---|
signatureToken |
ναι | Το token του βήματος 2. |
transactionId |
ναι | Από το POS/NSP. |
paymentAmount |
ναι | > 0 και όχι μεγαλύτερο από το paymentBalance της υπογραφής. |
tipAmount |
όχι | Φιλοδώρημα. |
paymentType |
όχι | Ο τελικός τύπος από το POS: 7 ή 8. Αν λείπει, θεωρείται 7. |
Η απάντηση έχει την ίδια μορφή με το SendInvoices, με MARK, UID, AuthCode και invoiceUrl.
Ροή 2: πληρωμή παλιού παραστατικού (επί πιστώσει)¶
Το παραστατικό εκδόθηκε νωρίτερα (π.χ. type: 5, επί πιστώσει) και τώρα εξοφλείται με κάρτα.
POST /api/v1/Provider/AskSignatureForOldInvoice?terminalId=TID00001&posNspId=1. Το body είναι σκέτο το MARK:400001930000001. Η απάντηση επιστρέφειtoken,data,paymentBalance.- Χρέωση στο POS με το token.
POST /api/v1/Provider/CompletionAskSignatureForOldInvoice?signatureToken=…&transactionId=…&paymentAmount=…&tipAmount=0&paymentType=7. Το body είναι πάλι σκέτο το MARK.
Λεπτομέρειες: Other endpoints.
Σφάλματα που θα δείτε¶
| Μήνυμα | Τι σημαίνει |
|---|---|
If one of the payment methods requires pos then the Terminal Id (tid) field is required. |
Λείπει το terminalId με skipSignature=false. |
If one of the payment methods requires pos then the Pos Nsp Id fields is required. |
Λείπει το posNspId. |
The transactionId field is required. |
Completion χωρίς transactionId. |
One ore more of the tokens is not verified. |
Λάθος ή αλλοιωμένο token. |
One ore more of the signature token balance is not enough. |
Το paymentAmount ξεπερνά το υπόλοιπο της υπογραφής. |
The paymentType field only accepts values 7 or 8. |
Άλλος τύπος στο completion. |
Καλό να ξέρετε¶
- Κάθε γραμμή πληρωμής με υπογραφή χρεώνει 0,25 credits επιπλέον (Credits).
- Το ζητούμενο
paymentTypeστοSendInvoicesδεν είναι οριστικό. Το τελικό δηλώνεται στο completion. - Αν τυπώνετε δικό σας παραστατικό, γράψτε το
transactionIdκαι την υπογραφή που χρησιμοποιήθηκε, για κάθε ποσό (κανόνες εκτύπωσης). - Σε μελλοντική έκδοση το
skipSignatureθα καταργηθεί και η υπογραφή θα επιστρέφεται πάντα για τύπους 7/8.
Αποδείξεις POS (8.4 / 8.5)¶
Για επιχειρήσεις που εισπράττουν ή επιστρέφουν ποσά μέσω POS (π.χ. για λογαριασμό τρίτων, με thirdPartyCollection).
11.1 με πληρωμή κάρτας (για skipSignature=false)
{
"invoice": [
{
"issuer": {
"vatNumber": "123456789",
"country": "GR",
"branch": 0
},
"invoiceHeader": {
"series": "A",
"aa": "1101",
"issueDate": "2026-09-24",
"invoiceType": "11.1",
"currency": "EUR"
},
"paymentMethods": [
{
"type": 7,
"amount": 124,
"terminalId": "TID00001",
"posNspId": 1
}
],
"invoiceDetails": [
{
"lineNumber": 1,
"lineCode": "655-000023",
"quantity": 1,
"measurementUnitLabel": "ΤΜΧ",
"lineUnitPrice": 120,
"totalNetPriceBeforeDiscount": 120,
"totalDiscountValue": 20,
"netValue": 100,
"vatCategory": 1,
"vatCategoryPercent": 24,
"vatAmount": 24,
"lineDescription": "Αντικατάσταση Λέβητα",
"incomeClassification": [
{
"classificationType": "E3_561_003",
"classificationCategory": "category1_1",
"amount": 100
}
]
}
],
"invoiceSummary": {
"totalNetValue": 100,
"totalVatAmount": 24,
"totalWithheldAmount": 0,
"totalFeesAmount": 0,
"totalStampDutyAmount": 0,
"totalOtherTaxesAmount": 0,
"totalDeductionsAmount": 0,
"totalGrossValue": 124,
"incomeClassification": [
{
"classificationType": "E3_561_003",
"classificationCategory": "category1_1",
"amount": 100
}
]
},
"providerAdditionalInvoiceDetails": {
"issuer": {
"name": "TEST ISSUER ΙΚΕ",
"profession": "Εμπόριο ειδών θέρμανσης",
"taxoffice": "Α' Αθηνών",
"addressStreet": "Οδός Δοκιμής",
"addressNumber": "1",
"addressPostalCode": "10431",
"addressCity": "Αθήνα",
"addressCountry": "Ελλάδα",
"phone": "2100000000",
"email": "info@example.com",
"webSite": "www.example.com",
"registryNumber": "ΓΕΜΗ: 000000000000",
"emtyLine2": "IBAN: GR00 0000 0000 0000 0000 0000 000"
},
"additionalDetails": {
"documentLabel": "Απόδειξη Λιανικής Πώλησης",
"documentLanguageCode": "EL",
"documentSizeCode": 1,
"documentComments": "Εξόφληση εντός 30 ημερών.",
"paymentMethodInvoiceLabel": "Κάρτα"
}
}
}
]
}
8.4 — Απόδειξη Είσπραξης POS
{
"invoice": [
{
"issuer": {
"vatNumber": "123456789",
"country": "GR",
"branch": 0
},
"invoiceHeader": {
"series": "A",
"aa": "1012",
"issueDate": "2026-09-24",
"invoiceType": "8.4",
"currency": "EUR",
"multipleConnectedMarks": [
400001930000001
]
},
"paymentMethods": [
{
"type": 7,
"amount": 10,
"terminalId": "TID00001",
"posNspId": 1
}
],
"invoiceDetails": [
{
"lineNumber": 1,
"lineCode": "#0001",
"quantity": 1,
"measurementUnitLabel": "LT",
"lineUnitPrice": 20,
"totalNetPriceBeforeDiscount": 20,
"totalDiscountValue": 10,
"netValue": 10,
"vatCategory": 8,
"vatCategoryPercent": 0,
"vatAmount": 0,
"lineDescription": "Είδος δοκιμής",
"incomeClassification": [
{
"classificationCategory": "category1_95",
"amount": 10
}
]
}
],
"invoiceSummary": {
"totalNetValue": 10,
"totalVatAmount": 0,
"totalWithheldAmount": 0,
"totalFeesAmount": 0,
"totalStampDutyAmount": 0,
"totalOtherTaxesAmount": 0,
"totalDeductionsAmount": 0,
"totalGrossValue": 10,
"incomeClassification": [
{
"classificationCategory": "category1_95",
"amount": 10
}
]
},
"providerAdditionalInvoiceDetails": {
"issuer": {
"name": "TEST ISSUER ΙΚΕ",
"profession": "Εμπόριο ειδών θέρμανσης",
"taxoffice": "Α' Αθηνών",
"addressStreet": "Οδός Δοκιμής",
"addressNumber": "1",
"addressPostalCode": "10431",
"addressCity": "Αθήνα",
"addressCountry": "Ελλάδα",
"phone": "2100000000",
"email": "info@example.com",
"webSite": "www.example.com",
"registryNumber": "ΓΕΜΗ: 000000000000",
"emtyLine2": "IBAN: GR00 0000 0000 0000 0000 0000 000"
},
"additionalDetails": {
"documentLabel": "Απόδειξη Είσπραξης POS",
"documentLanguageCode": "EL",
"documentSizeCode": 0,
"paymentMethodInvoiceLabel": "POS"
}
}
}
]
}
8.5 — Απόδειξη Επιστροφής POS
{
"invoice": [
{
"issuer": {
"vatNumber": "123456789",
"country": "GR",
"branch": 0
},
"invoiceHeader": {
"series": "A",
"aa": "1013",
"issueDate": "2026-09-24",
"invoiceType": "8.5",
"currency": "EUR"
},
"paymentMethods": [
{
"type": 7,
"amount": 10,
"terminalId": "TID00001",
"posNspId": 1
}
],
"invoiceDetails": [
{
"lineNumber": 1,
"lineCode": "#0001",
"quantity": 1,
"measurementUnitLabel": "LT",
"lineUnitPrice": 20,
"totalNetPriceBeforeDiscount": 20,
"totalDiscountValue": 10,
"netValue": 10,
"vatCategory": 8,
"vatCategoryPercent": 0,
"vatAmount": 0,
"lineDescription": "Είδος δοκιμής",
"incomeClassification": [
{
"classificationCategory": "category1_95",
"amount": 10
}
]
}
],
"invoiceSummary": {
"totalNetValue": 10,
"totalVatAmount": 0,
"totalWithheldAmount": 0,
"totalFeesAmount": 0,
"totalStampDutyAmount": 0,
"totalOtherTaxesAmount": 0,
"totalDeductionsAmount": 0,
"totalGrossValue": 10,
"incomeClassification": [
{
"classificationCategory": "category1_95",
"amount": 10
}
]
},
"providerAdditionalInvoiceDetails": {
"issuer": {
"name": "TEST ISSUER ΙΚΕ",
"profession": "Εμπόριο ειδών θέρμανσης",
"taxoffice": "Α' Αθηνών",
"addressStreet": "Οδός Δοκιμής",
"addressNumber": "1",
"addressPostalCode": "10431",
"addressCity": "Αθήνα",
"addressCountry": "Ελλάδα",
"phone": "2100000000",
"email": "info@example.com",
"webSite": "www.example.com",
"registryNumber": "ΓΕΜΗ: 000000000000",
"emtyLine2": "IBAN: GR00 0000 0000 0000 0000 0000 000"
},
"additionalDetails": {
"documentLabel": "Απόδειξη Επιστροφής POS",
"documentLanguageCode": "EL",
"documentSizeCode": 0,
"paymentMethodInvoiceLabel": "POS"
}
}
}
]
}