Starting from December 31st 2024, all point-of-sale systems in Greece must be integrated with a payment terminal and an e-invoicing system. This ensures that all in-person transactions are recorded, matched to the sales of goods, and invoiced to the tax authorities (AADE).
To stay compliant with the Greek tax regulations, we accept the unique signature generated by your selected e-invoicing system and attach it to the unique identifier of the transaction. You can then pass the result the tax authorities, therefore proving the sale of goods for that transaction.
Requirements
Before you begin, take into account the following requirements, limitations, and preparations.
| Requirement | Description | 
|---|---|
| Integration type | Make sure that you have built a Terminal API integration with Adyen-provided payment terminals. | 
| Hardware | Terminal models on software version 1.109.10 or later. | 
| Limitations | Standalone payment terminals can no longer be used in Greece. | 
| Setup steps | Before you begin: 
 | 
How it works
- You start a transaction from your POS app.
- Your POS app retrieves a unique signature from the integrated e-invoicing system.
- Your POS app sends a payment request to the Adyen payment terminal with the e-invoicing signature.
- The payment terminal checks the e-invoicing signature using the public key of the e-invoicing system.
- We process the payment and the terminal returns the response with the unique transaction identifier for that e-invoicing signature.
- Your POS app sends the transaction result to the e-invoicing system which forwards the result to the Tax office.
Integrate with an e-invoicing provider
Adyen is able to receive the e-invoicing details in the Terminal API request and check them with the public key of the e-invoicing provider. However, you need to integrate your POS app with an e-invoicing system of your choice. How you retrieve the e-invoicing signature and send the transaction result is up to you.
Because e-invoicing systems use different message structures, you should refer to the integration documentation of the e-invoicing provider you selected.
Adyen supports the payment flow integrated through all the e-invoicing providers listed by AADE.
Make a payment
- 
From your POS app, retrieve the signature from the e-invoicing system for the payment terminal you will use and the purchase amount of the transaction. 
- 
Create a aadeDataJSON object with:- aadeProviderId: the unique identifier of the e-invoicing provider. Find the right provider code on the AADE website.
- aadeProviderSignature: the unique signature for the payment request retrieved from the e-invoicing system.- Do not send - aadeProviderSignaturein any other request other than the payment request.
- aadeProviderSignatureData: the data used to verify the signature with the public key of the e-invoicing system.- The e-invoicing timestamp inside - aadeProviderSignatureDatamust not be older than 24 hours.
 - TIDin the- aadeProviderSignatureDatamust be set to the- POIIDof the payment terminal.
 The- aadeProviderSignaturemust be unique for every transaction.
 
- 
Encode the aadeDataJSON object to Base64. You will pass the resulting string inSaleData.SaleToPOIData.
- 
Make a payment request with the Base64-encoded JSON object in the SaleToPOIData:The AmountsReq.RequestedAmountinside thePaymentRequestmust be equal to or lower than the amount payable in theaadeProviderSignature.
- 
If the payment is successful, from the AdditionalResponseof the payment response save the following:- aadeTransactionID: the unique identifier of the payment
- aadeProviderSignature: the signature from the e-invoicing system
 
- 
From your POS system, send the aadeTransactionIDand theaadeProviderSignatureto the e-invoicing system.
Refunds
If you need to refund a payment to a shopper, you can do a standard referenced refund using the ReversalRequest. To make an unreferenced refund, you need to include another unique signature from the e-invoicing system inside the Base64-encoded aadeData JSON object in the SaleToPOIData.
Errors
During the payment flow, Adyen payment terminals perform the following validations:
- Checks if the aadeProviderSignatureis unique for each payment request.
- Checks if the timestamp in the aadeProviderSignatureDatais older than 24 hours.
- Checks if the transaction amount is lower or equal to the amount payable in the aadeProviderSignatureData.
- If the terminal identifier in the aadeProviderSignatureData(TID) matches thePOIIDfrom theMessageHeader.
If any of these validations fails, the payment response returns an error with a Base64-encoded error message in the AdditionalResponse:
| Message | Description | 
|---|---|
| No AADE signature data received | There is no AADE data provided or some elements are missing. | 
| Invalid AADE provider signature | We cannot verify the signature using the public key of the e-invoicing provider. | 
| Untimely AADE provider signature | The timestamp in the signatureDatais either in the future or older than 24h. | 
| AADE amounts mismatch | The transaction amount in the request is not lower or equal to the amount in the aadeProviderSignatureData. | 
| AADE Terminal ID mismatch | The TIDin theaadeProviderSignatureDatadoesn't match thePOIIDof the terminal. | 
| Reused AADE provider signature | The unique signature has already been sent to the terminal. |