Terminal-2 icon

Generate receipts

Learn how to generate transaction receipts.

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.

See also