Terminal-2 icon

Donations using Giving

Let your shoppers donate to a nonprofit when they make an in-store purchase.

  Read more

Learn more about Giving on adyen.com.

With Giving, you can give your shoppers the option to donate to a nonprofit organization after they made a purchase in your store.

Before the nonprofit can receive donations, they need to be onboarded and Giving needs to be configured. The payment terminal will then prompt for a donation either:

  • Automatically after every payment. This is possible with all integrations and with standalone terminals.
  • Through your payment request, so that you have control over when to ask for a donation. This is possible with a Terminal API integration.

Donations can be made using many popular payment methods, and are settled directly to the nonprofit's bank account.

Donation amount options and results

You can present the following donation options to the shopper on the payment terminal screen:

  • Fixed amounts: configure up to three fixed amounts to present to your customers.
  • Round-up: this option lets shoppers donate by rounding up the transaction amount of their purchase. You can enable the round-up feature on its own, or together with one fixed amount.

To be informed about your customers' donations, you can get the outcome of each donation in an Adyen Giving merchant webhook.

How it works

You configure your donation campaigns in our Campaign Manager. The Campaign Manager contains an overview of all your donations campaigns and allows you to start, edit, and end donation campaigns.
Regardless of whether a donation is prompted automatically after every payment or through your payment request, you can choose between a one or a two step card interaction. Two step flow is the default interaction for donations.

Two step flow

  1. You initiate a payment for the goods your shopper is purchasing.
  2. The shopper presents their card on the payment terminal and completes the payment.
  3. The terminal screen shows that the payment is Approved and presents the options to donate.

    The terminal doesn't prompt for a donation when it is offline or after a gift card payment.

  4. If the shopper chooses to donate, the terminal starts a new transaction (the donation) for the amount the shopper specified asking for the card to be presented.
    If the shopper chooses Not now, the flow stops.
  5. The shopper completes the donation transaction.

One step flow

  1. You initiate a payment for the goods your shopper is purchasing.

  2. The shopper presents their card on the payment terminal and completes the payment.

  3. The terminal presents the options to donate to the nonprofit.

    The terminal doesn't prompt for a donation when it is offline or after a gift card payment.

  4. If the shopper chooses to donate, the terminal processes the donation.
    If the shopper selects Not now, the donation flow stops.

  5. The terminal screen shows that the initial purchase is Approved.

Requirements

Giving is supported with Terminal API and Classic integrations and also with standalone terminals.

Below is an overview of the supported terminals, donation options, shopper interaction flow, and payment methods.

Terminals and supported options

The following table shows the payment terminal models that support Giving, and the donation options that are supported on those terminals. The payment terminals must be on software version 1.108 or later.

Model Fixed amounts Round up Two step One step
AMS1 -white_check_mark- -x- -white_check_mark- -white_check_mark-
P630 -white_check_mark- -white_check_mark- -white_check_mark- -white_check_mark-
e280 -white_check_mark- -white_check_mark- -white_check_mark- -white_check_mark-
e285p -white_check_mark- -white_check_mark- -white_check_mark- -white_check_mark-
M400 -white_check_mark- -white_check_mark- -white_check_mark- -white_check_mark-
P400 Plus -white_check_mark- -white_check_mark- -white_check_mark- -white_check_mark-
S1E -white_check_mark- -x- -white_check_mark- -white_check_mark-
S1E2L -white_check_mark- -x- -white_check_mark- -white_check_mark-
S1F2 -white_check_mark- -x- -white_check_mark- -white_check_mark-
S1U2 -white_check_mark- -x- -white_check_mark- -white_check_mark-
V240m Plus -white_check_mark- -white_check_mark- -white_check_mark- -white_check_mark-
V400c Plus -white_check_mark- -white_check_mark- -white_check_mark- -white_check_mark-
V400m -white_check_mark- -white_check_mark- -white_check_mark- -white_check_mark-

Supported payment methods

In-store donations are supported for the following payment methods:

  • Credit and debit cards: American Express, Bancontact, Cartes Bancaires, China UnionPay, Diners, Discover, JCB, Mastercard (Maestro), Visa, Visa Debit.
  • Wallets: Apple Pay and Google Pay.

    The one step donation flow only works with payment methods that combine online, in-store, and recurring payment functionalities.

User roles

To configure your campaigns in the Campaign Manager, you need the following roles:

User role Access
Donation campaigns viewer The user can view donation campaigns and campaign insights. This role does not give access to payment information.
Donation campaigns manager The user can create campaigns from a template, start, edit, and end donation campaigns and campaign insights. This role does not give access to payment information.

To check if your Customer Area user has the roles, go to your Customer Area > Settings > Users. If you need additional roles, contact your admin user.

Choosing a nonprofit

You can donate to one of our pre-approved nonprofits or choose another nonprofit. Nonprofits that are not yet pre-approved must go through the onboarding process.

Configure your donation campaign

To create a new donation campaign:

  1. Go to your Customer Area > Giving > Campaign templates. This includes configurations for the participating merchant accounts, the donation options, the campaign text on the terminal display, card tap flow, and screen timeouts.
  2. Select Save when you are done.
  3. Select Start to activate your campaign. The campaign is live on your payment terminals after the next scheduled reboot at the restart hour (at 06:00 AM by default). It is possible to change the restart hour.
  4. Optionally, configure your terminal's standby screen to show a logo for your donation campaign. Follow the instructions in the Customer Area under In-person payments > Terminal Settings > Customisation > Logo.

If you want to enable the one step flow, or if your campaign templates do not show in the LIVE environment, please reach out to your Adyen contact.

You can configure your terminal's standby screen to show a logo for your donation campaign. Follow the instructions in the Customer Area under In-person payments > Terminal Settings > Customisation > Logo.

ModelRequirements
AMS 1Dimensions: 480 x 800 File size: max. 1 MB
P630Dimensions: 320 x 480 File size: max. 1 MB
e280Dimensions: 320 x 444 File size: max. 512 KB
e285pDimensions: 240 x 284 File size: max. 512 KB
M400Dimensions: 854 x 432 File size: max. 512 KB
P400 PlusDimensions: 320 x 450 File size: max. 512 KB
S1EDimensions: 720 x 1280 File size: max. 1 MB
S1E2LDimensions: 720 x 1280 File size: max. 1 MB
S1F2Dimensions: 720 x 1280 File size: max. 1 MB
S1F2LDimensions: 720 x 1280 File size: max. 1 MB
S1U2Dimensions: 720 x 1280 File size: max. 1 MB
V240m PlusDimensions: 320 x 450 File size: max. 512 KB
V400c PlusDimensions: 320 x 450 File size: max. 512 KB
V400mDimensions: 320 x 450 File size: max. 512 KB

Ask for a donation through a payment request

If Giving is configured to prompt for a donation through your payment request instead of automatically, you can use the tender option AskGiving in your Terminal API payment request to control when the shopper is asked for a donation.

To ensure that the terminal prompts the shopper for a donation after their payment:

  1. Make a PaymentRequest that contains a SaletoAcquirerData field with the tender option AskGiving specified in one of the following formats:

    • Option 1: A JSON object {"tenderOption": "AskGiving"} converted to a Base64 encoded string:
      "SaleToAcquirerData": "eyJ0ZW5kZXJPcHRpb24iOiAiQXNrR2l2aW5nIn0="

    • Option 2: tenderOption=AskGiving:
      "SaleToAcquirerData": "tenderOption=AskGiving"

    The format that you use here will also be the format of the AdditionalResponse that you receive.

    If there are more tender options and other data elements that you need to pass in the SaleToAcquirerData field, see Add information to a payment for instructions.

  2. In the response, note the AdditionalResponse data which you can use in a subsequent TransactionStatusRequest to retrieve the donation response:

    • adyen_giving_sale_id: the donation sale ID, which is fixed to AdyenGiving.
    • adyen_giving_service_id: the donation service ID. For example, 8ha5925831.

    Other than the above AdditionalResponse data, the payment response is the same as the response you receive for an approved payment without AskGiving tender option. The payment response contains no details of the donation, because the donation is a separate transaction that is initiated by the terminal instead or by your POS app.

Retrieve the donation response

In a Terminal API integration, you can retrieve the donation result through a transaction status request. You can do this regardless of whether you automatically prompt for a donation after every payment, or prompt for a donation through your payment request.

It is only possible to retrieve the donation response in the two step flow.

The transaction status request returns the response of the donation transaction, including a PaymentReceipt object that you can use to generate a shopper receipt for the donation.

  1. To start a TransactionStatusRequest , make a POST request to a Terminal API endpoint, specifying:

    • MessageHeader: the standard SaleToPOIRequest.MessageHeader object. Specify:

      Parameter Required Description
      ProtocolVersion -white_check_mark- 3.0
      MessageClass -white_check_mark- Service
      MessageCategory -white_check_mark- TransactionStatus
      MessageType -white_check_mark- Request
      SaleID -white_check_mark- Your unique ID for the POS system component to send this request from.
      ServiceID -white_check_mark- Your unique ID for this request, consisting of 1-10 alphanumeric characters. Must be unique within the last 48 hours for the terminal (POIID) being used.
      POIID -white_check_mark- The unique ID of the terminal to send this request to. Format: [device model]-[serial number].
    • TransactionStatusRequest: the request body with:

      • ReceiptReprintFlag: true

      • DocumentQualifier: receipt data you want to receive in the response. Can be one or both of:

        • CashierReceipt: cashier receipt, including signature data.
        • CustomerReceipt: shopper receipt.

      • MessageReference: this object identifies what you want to receive:

        Parameter Description
        MessageCategory Payment.
        SaleID AdyenGiving. If you specify this SaleID and omit the ServiceID, you will get the response for the latest donation made on the terminal that you route the transaction status request to.
        ServiceID The adyen_giving_service_id from the original payment response. This parameter returns the response for a specific donation.

    The example below shows how to check the status of a donation with the adyen_giving_service_id 8ha5925831.

  2. In the TransactionStatusResponse , note the RepeatedMessageResponse. This contains the response for the donation transaction.

Receive the Giving webhook

You get the donation outcome of each donation in a webhook. To receive these webhooks, enable the Adyen Giving merchant webhook, which includes eventCode: DONATION.

For a successful donation, the event contains success: true.

Use the originalReference to associate the donation to the shopper's original transaction.

To generate a shopper receipt for the donation, retrieve the donation response, using a TransactionStatusRequest.

See also