When you make a Terminal API transaction from your POS app, the API response includes receipt data. This contains values you can add to the receipt that you print, show, or email to your shopper.
Standalone terminals are not integrated in a POS system. They have a built-in printer that automatically prints a compliant receipt.
Generating compliant receipts
Card schemes have very specific requirements on what should be included on a receipt. These requirements differ per scheme and country/region, and can change. Receipts generated by Adyen have been certified as compliant by the card schemes that we support.
We strongly recommend generating receipts using the Adyen-generated receipt data without alterations.
Card schemes will occasionally visit stores to verify that the receipts are fully compliant. Non-compliant receipts can result in payments being charged back.
If you override this receipt data, or validate values against a hard-coded list, it is your responsibility to ensure that scheme requirements are met at all times.
Receipt data
When you make a payment using our Terminal API, the payment result contains a PaymentReceipt
object. This object includes:
CustomerReceipt
: you can use this data to generate a receipt for the shopper.CashierReceipt
: you can use this data to generate a merchant receipt. You can also use this data to collect the shopper's signature, or for reconciliation purposes.
Each receipt consists of multiple key-value pairs, which are generated dynamically depending on the:
- Transaction type.
- Result. For example, approved or declined.
- Cardholder verification method (CVM).
- Card issuer country/region.
- Country/region of your store.
- Payment method.
The following table shows all the keys that can appear in Adyen-generated receipt data.
Key | Description |
---|---|
header1 |
First header line of your receipt. You can customize this. |
header2 |
Second header line of your receipt. You can customize this. |
aac |
Decline cryptogram generated by the card. |
accountType |
Bank account used for the authorization. For example, chequing or savings account. |
additionalEmvData |
Set of EMV details. |
aid |
Application Identifier (the scheme product). |
approved |
Final state for approved transactions. |
refused |
Final state for declined transactions. |
void |
Final state for transactions that were cancelled by the merchant, shopper, or terminal. |
atc |
Application Transaction Counter. |
authCode |
Authorization code from the issuer. |
authResponseCode |
Authorization response code from the issuer. |
buyerId |
Identification of the wallet used for authorization. |
cardholderHeader |
Receipt type indicator. For example, CARDHOLDER COPY (or the localized text). |
cardholderName |
Name of the cardholder. This key is not present by default. When enabled, it is included only on the merchant receipt. To enable this key, contact our Support Team. |
cardType |
Terminal-determined value for the type of card. |
cashbackAmount |
Amount to be provided to the shopper in cash. |
charityAmount |
Amount donated to charity by the shopper. |
cid |
Cryptogram Information Data. |
cnpj |
Identification number issued for the National Registry of Legal Entities. |
currentBalanceAmount |
Balance on the cardholder's bank account. |
cvmRes |
When applicable, indicates the PIN has been verified. |
dccexpl |
Explanation of the DCC process, for shopper consent. |
dccmarkup |
Markup on the sourced exchange rate for DCC. |
dccrate |
Exchange rate used to calculate the DCC conversion (including markup). |
dccshopperamount |
Amount after DCC conversion was applied. |
dccsource |
Source of the base exchange rate (proxied by Adyen, excluding markup). |
discountAmount |
Discount applied by the merchant. |
expiryDate |
Expiry date of the card. If you want |
filler |
Generic filler to create blocks of elements that go together. |
gratuityAmount |
Amount for gratuity. |
mid |
Merchant Identification. |
mref |
Merchant-determined reference for the transaction. |
originalAmount |
Starting amount of the transaction before gratuity, adjustments, and such. |
pan |
The last four digits of the masked PAN. |
panSeq |
PAN sequence number or sequence number of the issued card. |
paymentMethod |
Payment method on the brand or scheme level, as provided by Adyen. For example, visa , maestro . |
paymentMethodVariant |
Payment method on the product level, as provided by Adyen. For example, visastandarddebit , vpay . |
posEntryMode |
Method of obtaining the PAN, such as ICC, NFC, MSR, or MKE. |
preferredName |
Issuer-determined label for the application on the card. |
productType |
Product used for paying, such as Credit or Debit. |
ptid |
Hardware (terminal) identifier sent to the schemes. |
retain |
Retention message. |
rrn |
Retrieval Reference Number. |
stan |
System Trace Audit Number. |
tid |
Terminal identifier. |
tokenTxVariant |
Description of the token variant, such as ApplePay or SamsungPay. |
totalAmount |
Total amount to be debited or credited. |
txdate |
Terminal date of the transaction, in the local time zone. |
txRef |
Reference for the transaction, provided by the merchant. |
txtime |
Terminal time of the transaction, in the local time zone. |
txtype |
Transaction type: GOODS_SERVICES, REFUND, and so on. |
walletDccAmount |
Amount after DCC was applied by the scheme. |
walletDccRate |
Rate applied by the scheme to calculate DCC. |
walletOperationType |
Similar to paymentMethod . For example, alipay or wechatpay . |
walletTransactionReference |
Reference that the scheme assigned to the transaction. |
sigline |
Line to indicate a signature needs to be placed above it. |
signature |
Room for shopper signature on the merchant receipt. |
merchantSigline |
Line for merchant signature on the shopper receipt. |
thanks |
'Thank you' message (or the localized text). |
QRCode |
QR code value. You can customize this. |
URL encoding
If the Terminal API request includes characters from a non-Latin script, those characters are URL-encoded. To ensure those characters appear correctly on the printed receipt, you first need to URL-decode the PaymentReceipt
object from the payment response.
Displaying virtual receipts
If you are using a wide-screen multimedia payment terminal, such as the M400, you can show line items or receipts on the display of the terminal.
Terminals with a built-in printer
Some payment terminals, like the V400m or V400c, have a built-in printer. Such terminals automatically print the receipt using the Terminal API receipt data.
You can optionally add your company logo to this receipt.
If you do not want to print the receipt on the terminal, specify the tender option ReceiptHandler in your payment requests. Without that tender option, a terminal with a built-in printer will print the receipt. With that tender option, a terminal with a built-in printer will not print the receipt. You can then let your POS app send the receipt data to your receipt printer, or email the receipt to the shopper.
To let the shopper decide whether to print the receipt:
-
In your Customer Area, go to In-person payments > Terminal settings > Receipts and enable Prompt before printing. The terminal will then show a screen like the following after a transaction.