Terminal-2 icon

Greece tax regulations

Stay compliant when accepting in-person payments in Greece on Adyen payment terminals.

Starting from June 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.

How it works

  1. You start a transaction from your POS app.
  2. Your POS app retrieves a unique signature from the integrated e-invoicing system.
  3. Your POS app sends a payment request to the Adyen payment terminal with the e-invoicing signature.
  4. The payment terminal checks the e-invoicing signature using the public key of the e-invoicing system.
  5. We process the payment and the terminal returns the response with the unique transaction identifier for that e-invoicing signature.
  6. Your POS app sends the transaction result to the e-invoicing system which forwards the result to the Tax office.

Standalone payment terminals can no longer be used in Greece.

Requirements

To make in-person payments using Adyen payment terminals connected to the e-invoicing system:

  • Ask our Support Team to configure for your merchant account:
    • Country/region: Greece
    • Timezone: Europe/Athens

      You can check this in your Customer Area under Terminal settings > Customization.

  • Update your payment terminals to software version 1.107.7 or later.
  • Create an integration able to request a signature from the e-invoicing provider and pass it in the payment request.

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 structure, you should refer to the integration documentation of the e-invoicing provider you selected.

Adyen currently supports the payment flow integrated through the following e-invoicing providers:

Make a payment

  1. 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.

  2. Create a aadeData JSON 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 aadeProviderSignature in 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 aadeProviderSignature must not be older than 24 hours.
      TID in the aadeProviderSignature must be set to the POIID of the payment terminal.
      The aadeProviderSignature must be unique for every transaction.

  3. Encode the aadeData JSON object to Base64. You will pass the resulting string in SaleData.SaleToPOIData.

  4. Make a payment request with the Base64-encoded JSON object in the SaleToPOIData:

    The AmountsReq.RequestedAmount inside the PaymentRequest must be equal to or lower than the amount payable in the aadeProviderSignature.

  5. If the payment is successful, from the AdditionalResponse of the payment response save the following:

    • aadeTransactionID: the unique identifier of the payment
    • aadeProviderSignature: the signature from the e-invoicing system
  6. From your POS system, send the aadeTransactionID and the aadeProviderSignature to the e-invoicing system.

If you need to refund a payment to a shopper, you can do a standard referenced refund using the ReversalRequest. However, to make an unreferenced refund, you make a payment request with a negative amount and 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 aadeProviderSignature is unique for each payment request.
  • Checks if the timestamp in the aadeProviderSignature is older than 24 hours.
  • Checks if the transaction amount is lower or equal to the amount payable in the aadeProviderSignature.
  • If the terminal identifier in the aadeProviderSignature (TID) matches the POIID from the MessageHeader.

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 signatureData is 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 signatureData.
AADE Terminal ID mismatch The TID in the signatureData doesn't match the POIID of the terminal.
Reused AADE provider signature The unique signature has already been sent to the terminal.