--- title: "Greece tax regulations" description: "Stay compliant when accepting in-person payments in Greece on Adyen payment terminals." url: "https://docs.adyen.com/point-of-sale/basic-tapi-integration/make-a-payment/greece-tax" source_url: "https://docs.adyen.com/point-of-sale/basic-tapi-integration/make-a-payment/greece-tax.md" canonical: "https://docs.adyen.com/point-of-sale/basic-tapi-integration/make-a-payment/greece-tax" last_modified: "2024-11-28T09:43:00+01:00" language: "en" --- # Greece tax regulations Stay compliant when accepting in-person payments in Greece on Adyen payment terminals. [View source](/point-of-sale/basic-tapi-integration/make-a-payment/greece-tax.md) 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](https://www.aade.gr/)). 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. In case of a loss of connection to the e-invoicing system, you can use [autonomous mode](#autonomous-mode) to process transactions while remaining compliant with [Greek tax regulations](https://www.aade.gr/egkyklioi-kai-apofaseis/1102-01-07-2024). ## Requirements Before you begin, take into account the following requirements, limitations, and preparations. | Requirement | Description | | -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Integration type** | A [Terminal API integration](/point-of-sale/get-started) with payment terminals on software version **1.109.10** or later. | | **Limitations** | Take into account the following limitations:- Standalone payment terminals can no longer be used in Greece. - [Autonomous mode](#autonomous-mode) requires software version **1.124** or later. | | **Setup steps** | Before you begin:- Contact our [Support Team](https://ca-test.adyen.com/ca/ca/contactUs/support.shtml?form=other) and ask them to configure the following settings for your merchant account: * Country/region: **Greece** * Timezone: **Europe/Athens** - You need to create an integration able to request a signature from your [e-invoicing provider](#integrate-with-an-e-invoicing-provider) and pass it in the payment request. | ## How it works 1. You start a transaction from your POS app. 2. From your POS app, you retrieve the signature from the e-invoicing system. If you cannot retrieve the signature, you can still continue to make a payment with [autonomous mode](#autonomous-mode). 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. ## 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](https://www.aade.gr/mydata/adeiodotimena-logismika-parohon-ilektronikis-timologisis). ## 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. If you cannot connect to the e-invoicing provider to retrieve the signature, use [autonomous mode](#autonomous-mode). 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](https://www.aade.gr/mydata/adeiodotimena-logismika-parohon-ilektronikis-timologisis). * `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 `aadeProviderSignatureData` must not be older than 24 hours.\ `TID` in the `aadeProviderSignatureData` must be set to the `POIID` of the payment terminal.\ The `aadeProviderSignature` must be unique for every transaction. **JSON object** ```json { "aadeData":{ "aadeProviderId":"001", "aadeProviderSignatureData":"7BED034B3DF5FE405ADD17C35C65B568598CEF2F;;20240705053825;12400;10000;2400;12400;V400m-324688179", "aadeProviderSignature":"MEYCIQDIuVbyCxdhMV3MhUINtdvtHK5mfIS4jx/ws2GpEvzh1QIhAMvFvldE8RmpcFhd4gmS4s2FRzu4wGVIT07KcoVaA//2" } } ``` 3. Encode the `aadeData` JSON object to Base64. You will pass the resulting string in `SaleData.SaleToPOIData`. **Converted to a Base64-encoded string** ```raw ewogICAiYWFkZURhdGEiOnsKICAgICAgImFhZGVQcm92aWRlcklkIjoiMDAxIiwKICAgICAgImFhZGVQcm92aWRlclNpZ25hdHVyZURhdGEiOiI3QkVEMDM0QjNERjVGRTQwNUFERDE3QzM1QzY1QjU2ODU5OENFRjJGOzsyMDI0MDcwNTA1MzgyNTsxMjQwMDsxMDAwMDsyNDAwOzEyNDAwO1Y0MDBtLTMyNDY4ODE3OSIsCiAgICAgICJhYWRlUHJvdmlkZXJTaWduYXR1cmUiOiJNRVlDSVFESXVWYnlDeGRoTVYzTWhVSU50ZHZ0SEs1bWZJUzRqeC93czJHcEV2emgxUUloQU12RnZsZEU4Um1wY0ZoZDRnbVM0czJGUnp1NHdHVklUMDdLY29WYUEvLzIiCiAgIH0KfQ== ``` 4. [Make a payment request](/point-of-sale/basic-tapi-integration/make-a-payment/) with: | Parameter | Required | Description | | ---------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- | | [SaleToPOIData](https://docs.adyen.com/api-explorer/terminal-api/latest/post/payment#request-SaleData-SaleToPOIData) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | Your Base64-encoded JSON object. | | [AmountsReq.RequestedAmount](https://docs.adyen.com/api-explorer/terminal-api/latest/post/payment#request-PaymentTransaction-AmountsReq) | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | Must be equal to or lower than the amount payable in the `aadeProviderSignature`. | **Payment request** ```json { "SaleToPOIRequest":{ "MessageHeader":{ "MessageCategory":"Payment", "MessageClass":"Service", "MessageType":"Request", "POIID":"V400m-324688179", "ProtocolVersion":"3.0", "SaleID":"POSSystemID12345", "ServiceID":"0207111104" }, "PaymentRequest":{ "PaymentTransaction":{ "AmountsReq":{ "Currency":"EUR", "RequestedAmount":10 } }, "SaleData":{ "SaleReferenceID":"ref", "SaleToAcquirerData":"tenderOption=ReceiptHandler", "SaleToPOIData":"ewogICAiYWFkZURhdGEiOnsKICAgICAgImFhZGVQcm92aWRlcklkIjoiMDAxIiwKICAgICAgImFhZGVQcm92aWRlclNpZ25hdHVyZURhdGEiOiI3QkVEMDM0QjNERjVGRTQwNUFERDE3QzM1QzY1QjU2ODU5OENFRjJGOzsyMDI0MDcwNTA1MzgyNTsxMjQwMDsxMDAwMDsyNDAwOzEyNDAwO1Y0MDBtLTMyNDY4ODE3OSIsCiAgICAgICJhYWRlUHJvdmlkZXJTaWduYXR1cmUiOiJNRVlDSVFESXVWYnlDeGRoTVYzTWhVSU50ZHZ0SEs1bWZJUzRqeC93czJHcEV2emgxUUloQU12RnZsZEU4Um1wY0ZoZDRnbVM0czJGUnp1NHdHVklUMDdLY29WYUEvLzIiCiAgIH0KfQ==", "SaleTransactionID":{ "TimeStamp":"2024-07-05T11:33:49+02:00", "TransactionID":"197112" } } } } } ``` 5. If the payment is successful, from the `AdditionalResponse` of the [PaymentResponse](https://docs.adyen.com/api-explorer/terminal-api/latest/post/payment#responses-200) save the following: * `aadeTransactionID`: the unique identifier of the payment * `aadeProviderSignature`: the signature from the e-invoicing system **Payment response** ```json { "SaleToPOIResponse":{ "MessageHeader":{ "MessageCategory":"Payment", "MessageClass":"Service", "MessageType":"Response", "POIID":"V400m-324688179", "ProtocolVersion":"3.0", "SaleID":"POSSystemID12345", "ServiceID":"0207111104" }, "PaymentResponse":{ "POIData":{ "POIReconciliationID":"1000", "POITransactionID":{ "TimeStamp":"2024-07-05T09:33:49.000Z", "TransactionID":"CfCi001720172029001.W623FK4LSWHGTZ65" } }, "PaymentReceipt":[ { ... } ], "PaymentResult":{ "AmountsResp":{ "AuthorizedAmount":8, "Currency":"EUR" }, "CustomerLanguage":"nl", "OnlineFlag":true, "PaymentAcquirerData":{ "AcquirerPOIID":"V400m-324688179", "AcquirerTransactionID":{ "TimeStamp":"2024-07-05T09:33:49.000Z", "TransactionID":"W623FK4LSWHGTZ65" }, "ApprovalCode":"123456", "MerchantID":"YOUR_MERCHANT_ACCOUNT" }, "PaymentInstrumentData":{ "CardData":{ "CardCountryCode":"056", "EntryMode":[ "Contactless" ], "MaskedPan":"541333 9999", "PaymentBrand":"mc", "SensitiveCardData":{ "CardSeqNumb":"xxxx", "ExpiryDate":"xxxx" } }, "PaymentInstrumentType":"Card" } }, "Response":{ "AdditionalResponse":"aadeTransactionID=651%3BCfCi001720172029001.W623FK4LSWHGTZ65%3B123456&aadeProviderSignature=MEYCIQDIuVbyCxdhMV3MhUINtdvtHK5mfIS4jx%2Fws2GpEvzh1QIhAMvFvldE8RmpcFhd4gmS4s2FRzu4wGVIT07KcoVaA%2F%2F2& (...)", "Result":"Success" }, "SaleData":{ "SaleReferenceID":"ref", "SaleTransactionID":{ "TimeStamp":"2024-07-05T09:33:49.000Z", "TransactionID":"197112" } } } } } ``` 6. From your POS system, send the `aadeTransactionID` and the `aadeProviderSignature` to the e-invoicing system. ### Make a payment without e-invoicing signature Autonomous mode allows payment terminals to be able to process transactions in case of a loss of connection to the e-invoicing system. You can still make a payment without the unique e-invoicing signature. Adyen reaches AADE with the JSON data you create to process payment without the signature. When you are able to retrieve the signature again, use the [Make a payment](/point-of-sale/basic-tapi-integration/make-a-payment/greece-tax#make-a-payment) flow that you would normally use to make a payment in Greece. When you are unable to retrieve the e-invoicing signature: 1. Create the JSON object with: **JSON object** ```json { "aadeData":{ "unbound_pos":"1" } } ``` 2. Encode the `aadeData` JSON object to Base64. You will pass the resulting string in `SaleData.SaleToPOIData`. **Converted to a Base64-encoded string** ```raw ewogICJhYWRlRGF0YSI6ewogICAgInVuYm91bmRfcG9zIjoiMSIKICB9Cn0= ``` 3. [Make a payment request](/point-of-sale/basic-tapi-integration/make-a-payment/) with: | Parameter | Required | Description | | ------------------------ | ------------------------------------------------------------------------------------------- | -------------------------------- | | `SaleData.SaleToPOIData` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | Your Base64-encoded JSON object. | **Payment request** ```json { "SaleToPOIRequest":{ "MessageHeader":{ "MessageCategory":"Payment", "MessageClass":"Service", "MessageType":"Request", "POIID":"V400m-324688179", "ProtocolVersion":"3.0", "SaleID":"POSSystemID12345", "ServiceID":"0207111104" }, "PaymentRequest":{ "PaymentTransaction":{ "AmountsReq":{ "Currency":"EUR", "RequestedAmount":10 } }, "SaleData":{ "SaleReferenceID":"ref", "SaleToAcquirerData":"tenderOption=ReceiptHandler", "SaleToPOIData":"ewogICJhYWRlRGF0YSI6ewogICAgInVuYm91bmRfcG9zIjoiMSIKICB9Cn0=", "SaleTransactionID":{ "TimeStamp":"2024-07-05T11:33:49+02:00", "TransactionID":"197112" } } } } } ``` 4. The example result below indicates that the payment was successful. **Successful payment response** ```json { "SaleToPOIResponse":{ "MessageHeader":{ "MessageCategory":"Payment", "MessageClass":"Service", "MessageType":"Response", "POIID":"V400m-324688179", "ProtocolVersion":"3.0", "SaleID":"POSSystemID12345", "ServiceID":"0207111104" }, "PaymentResponse":{ "POIData":{ "POIReconciliationID":"1000", "POITransactionID":{ "TimeStamp":"2024-07-05T09:33:49.000Z", "TransactionID":"CfCi001720172029001.W623FK4LSWHGTZ65" } }, "PaymentReceipt":[ { ... } ], "PaymentResult":{ "AmountsResp":{ "AuthorizedAmount":8, "Currency":"EUR" }, "CustomerLanguage":"nl", "OnlineFlag":true, "PaymentAcquirerData":{ "AcquirerPOIID":"V400m-324688179", "AcquirerTransactionID":{ "TimeStamp":"2024-07-05T09:33:49.000Z", "TransactionID":"W623FK4LSWHGTZ65" }, "ApprovalCode":"123456", "MerchantID":"YOUR_MERCHANT_ACCOUNT" }, "PaymentInstrumentData":{ "CardData":{ "CardCountryCode":"056", "EntryMode":[ "Contactless" ], "MaskedPan":"541333 9999", "PaymentBrand":"mc", "SensitiveCardData":{ "CardSeqNumb":"xxxx", "ExpiryDate":"xxxx" } }, "PaymentInstrumentType":"Card" } }, "Response":{ "AdditionalResponse":"(...)", "Result":"Success" }, "SaleData":{ "SaleReferenceID":"ref", "SaleTransactionID":{ "TimeStamp":"2024-07-05T09:33:49.000Z", "TransactionID":"197112" } } } } } ``` If Adyen cannot reach AADE to process the payment without signature, note the following in the response: * `Result`: **Failure** * The `AdditionalResponse` includes the failure message **Autonomous mode: Failed to connect to AADE**. ## Refunds If you need to refund a payment to a shopper, you can do a standard [referenced refund](/point-of-sale/basic-tapi-integration/refund-payment/referenced/) using the `ReversalRequest`. To make an [unreferenced refund](/point-of-sale/basic-tapi-integration/refund-payment/unreferenced/), you need to include another unique signature from the e-invoicing system inside the Base64-encoded `aadeData` JSON object in the `SaleToPOIData`. In case of a loss of connection to the e-invoicing system, you can still process an [unreferenced refund](/point-of-sale/basic-tapi-integration/refund-payment/unreferenced/) using autonomous mode. To make an unreferenced refund, you need to create a new Base64-encoded JSON object with `unbound_pos`, and include in the `SaleData.SaleToPOIData`. **JSON object** ```json { "aadeData":{ "unbound_pos":"1" } } ``` ## 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 `aadeProviderSignatureData` is 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 the `POIID` from the `MessageHeader`. If any of these validations fails, the [payment response](/point-of-sale/basic-tapi-integration/make-a-payment/#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 `aadeProviderSignatureData`. | | `AADE Terminal ID mismatch` | The `TID` in the `aadeProviderSignatureData` doesn't match the `POIID` of the terminal. | | `Reused AADE provider signature` | The unique signature has already been sent to the terminal. | **Example error** ```json { "Response":{ "AdditionalResponse":"eyJtZXNzYWdlIjoiU2FsZVRvUE9JRGF0YTogTm90QWxsb3dlZCBWYWx1ZTogVW50aW1lbHkgQUFERSBwcm92aWRlciBzaWduYXR1cmUsIFJlYXNvbjogTmV4b0FkeWVuVmFsaWRhdGlvbkZhaWx1cmUifQ==", "ErrorCondition":"NotAllowed", "Result":"Failure" } } ``` **Decoded AdditionalResponse message** ```json { "message": "SaleToPOIData: NotAllowed Value: Untimely AADE provider signature, Reason: NexoAdyenValidationFailure" } ``` ## See also * [Implement the payment flow](/point-of-sale/basic-tapi-integration)