---
title: "Donations using Giving"
description: "Let your shoppers donate to a nonprofit when they make an in-store purchase."
url: "https://docs.adyen.com/point-of-sale/donate"
source_url: "https://docs.adyen.com/point-of-sale/donate.md"
canonical: "https://docs.adyen.com/point-of-sale/donate"
last_modified: "2025-04-07T11:10:00+02:00"
language: "en"
---

# Donations using Giving

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

[View source](/point-of-sale/donate.md)

##### Read more

![Giving logo](/user/pages/docs/03.point-of-sale/15.donate/giving.svg?decoding=auto\&fetchpriority=auto) Learn more about Adyen Giving [on adyen.com](https://www.adyen.com/giving), see the most-asked questions on [Adyen Help ](https://help.adyen.com/knowledge/giving), or use Adyen Giving [in your online checkout](/online-payments/donations#how-it-works).

With Adyen Giving, you can give your shoppers the option to donate to a nonprofit organization when they make a purchase in your store. If a shopper chooses to donate, the donation amount is charged to the same payment method that was used for the original transaction.

Donations can be made using many popular [payment methods](#supported-payment-methods), and are settled directly to the nonprofit's bank account. Adyen covers all fees and the donation amount is transferred to the nonprofit in full.

## Requirements

Before you begin, take into account the following requirements, limitations, and preparations.

| Requirement                                     | Description                                                                                                                                                                                                                                                                                                                           |
| ----------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Integration type**                            | A Terminal API integration with payment terminals or a Standalone solution, using terminal software version 1.109 or later. Some terminals or features require software version 1.110 or later.                                                                                                                                       |
| **[Customer Area roles](/account/user-roles)**  | Make sure that you have the following roles:- **Donation campaigns viewer**: to view donation campaigns and access campaign insights.
- **Donation campaigns manager**: to [create, start, edit, and end donation campaigns](#donation-campaigns) and access campaign insights.These roles do not give access to payment information. |
| **[Webhooks](/development-resources/webhooks)** | Subscribe to the following webhook:- Standard webhooks
- **[Adyen Giving merchant webhook](/development-resources/webhooks/webhook-types#other-webhooks)**                                                                                                                                                                            |
| **Hardware**                                    | See [Terminals and supported options](#terminals) for a list of terminal models that support Giving, and the donation options that are supported on these terminals.                                                                                                                                                                  |
| **Limitations**                                 | Make sure that you are using payment methods and currencies that are supported by Giving. See:- [Supported payment methods and flows](#supported-payment-methods)
- [Supported countries/regions and currencies](#supported-currencies)                                                                                               |
| **Setup steps**                                 | Before you begin, make sure that the nonprofit you choose has been onboarded to Adyen, or pick one of our [pre-approved nonprofits](https://www.adyen.com/giving/nonprofit) that have already been onboarded.                                                                                                                         |

## How it works

To accept donations at the point of sale:

1. [Choose a nonprofit](#nonprofit-organizations).

2. [Set up your donation campaign](#donation-campaigns) in your Customer Area, under **Giving** > **Campaigns**.\
   You need to select:

   * The merchant accounts and stores that you want to make the campaign available to.

   * The nonprofit.

   * The [donation settings](#donation-settings).

3. Optionally [configure a donation campaign logo](#logo) to show as the standby screen on the payment terminal.

4. Start the donation campaign from the **Campaigns** overview in your Customer Area.\
   This overview shows all your donations campaigns and lets you start, edit, and end donation campaigns.

5. Make a payment.\
   If your setup is to ask for a donation automatically after each payment, there is nothing additional that you need to do.\
   Otherwise, [ask for a donation through the payment request](#use-tender-option) by adding a tender option.

6. [Receive Giving webhook messages](#webhook) to check the outcome of donations and inform shoppers by email or mobile messaging of the outcome of donations.\
   If you use the two-step interaction flow, you can also [retrieve the response for the donation transaction](#two-step-donation-response) so that you can provide the shopper with a receipt for their donation on the spot.

## Nonprofit organizations

You can choose one of our [pre-approved nonprofits](https://www.adyen.com/giving/nonprofit). Nonprofits that are not yet pre-approved must go through an onboarding process. You can contact us to request a new nonprofit, or for some regions you can do that from your Customer Area:

1. In your [Customer Area](https://ca-test.adyen.com/), go to **Giving** > **Campaigns**.
2. Select **Request nonprofit** and follow the prompts to provide the details of the new nonprofit.\
   At the step **Select nonprofit country** you will see the regions where you can request a new nonprofit in this way.

While setting up a donation campaign, you can also consult the **Nonprofit library** in your Customer Area for a list of pre-approved nonprofits by United Nations Sustainable Development Goal (UN SDG), region, and language. The available nonprofits depend on legal entity country and industry of the participating merchant accounts and stores.

## Donation campaigns

A donation campaign defines how and when shoppers can donate during a transaction. You set up and manage donation campaigns in the Customer Area, under **Giving** > **Campaigns**.

### Set up a campaign

The Campaigns user interface in the Customer Area guides you through setting up a donation campaign, and shows example screens. The main steps to create an Adyen Giving donation campaign are as follows:

1. Log in to your [Customer Area](https://ca-test.adyen.com/) and make sure you are on your company account.

2. Go to **Giving** > **Campaigns**.

3. Select **Create new campaign**.

4. Select the campaign details:

   * The nonprofit.
   * Either a specific cause, or "General fundraising".
   * The sales channel.

5. Configure your donation campaign:

   * The merchant accounts and stores that are participating.
   * The [donation type](#donation-type), currency, and [flow](/point-of-sale/donate/#how-it-works). When you choose fixed amounts and enter the amounts in your default currency, we automatically add equivalent amounts in other currencies if necessary for the selected merchant accounts and stores.
   * Screen timeouts.

6. Review the summary. When everything is correct, select **Create campaign**.

The campaign is now set up, but not active yet.

When you are ready to activate the campaign:

1. In your [Customer Area](https://ca-test.adyen.com/), go to **Giving** > **Campaigns**.
2. Find the tile for the campaign, and select **Start**.

![Campaign overview](/user/pages/reuse/donations/campaign-manager/campaign.png)

### Campaign lifecycle management

When you first create a campaign, it starts out as inactive. This gives you a chance to edit or delete it. Whenever you are ready, you can start it. Once a campaign is active, you can still make edits or choose to end it. Keep in mind that a campaign that was ended cannot be re-started.

When you edit the campaign details or change the state of a campaign, the terminals will not pick up the updates until they run their next [maintenance call](/point-of-sale/managing-terminals/maintain-performance#maintenance-calls). This usually happens overnight.

## Donation settings

With our Giving integration, you have the flexibility to choose a combination of donation moment, interaction flow, and donation type. You configure these choices in your [donation campaign](#donation-campaigns).

However, there are limitations to what choices are supported, depending on [terminal model](#terminals), [region and currency](#supported-currencies), and [payment method](#supported-payment-methods).

### Donation moment

You can choose when the payment terminal asks for a donation:

* **Automatically after every payment**. This is possible with all integrations, including standalone terminals.
* **[Through your payment request](#use-tender-option)**, so that you have control over when to ask for a donation. This is possible with a Terminal API integration.

### Interaction flow

Regardless of whether a donation is prompted automatically after every payment or through your payment request, you can choose to use a one-step flow or a two-step flow.

Technically, there are two transactions: one for the payment and one for the donation. But in the one-step flow, the payment and the donation are shown as a single transaction, and shoppers need to present their card only once.

In the two-step flow, shoppers need to present their card twice. With a Terminal API integration, this enables you to provide the shopper with a receipt for their donation, because you can [retrieve the full donation transaction response](#two-step-donation-response). The two-step flow also supports more payment methods than the one-step flow.

The effect on your payment terminals is as follows:

1. After you have set up and activated your donation campaign, both flows start in the same way:

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

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

2. From this moment, the flows are different:

   | One-step flow                                                                   | Two-step flow                                                                                                                              |
   | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
   |                                                                                 | The terminal screen shows that the payment is approved, and...                                                                             |
   | The terminal presents the [options to donate](#donation-type) to the nonprofit. | ... the terminal also presents the [options to donate](#donation-type) to the nonprofit.                                                   |
   | If the shopper chooses to donate, the terminal processes the donation.          | If the shopper chooses to donate, the terminal starts the donation transaction for the amount the shopper specified and asks for the card. |
   |                                                                                 | The shopper presents their card on the terminal to complete the donation transaction.                                                      |
   | The terminal shows a confirmation to thank the shopper.                         | The terminal shows a confirmation to thank the shopper.                                                                                    |
   | The terminal shows that the payment is approved.                                |                                                                                                                                            |

In both flows:

* If the shopper selects the donation option *Not now*, the terminal shows a confirmation screen with a message that no donation was made.
* The terminal does not prompt for a donation after a gift card payment.
* Donations are currently not possible while the internet connection is down, even if you enabled [offline payments](/point-of-sale/offline-payment). The terminal still prompts for a donation. But when the shopper chooses to donate, the terminal shows "Declined". The offline payment itself will be processed as expected.

### Donation type

You can present the following donation types on the payment terminal screen:

* **Fixed amounts**: configure up to three fixed amounts to present to shoppers.
* **Round up**: allow shoppers to 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.

The terminal always shows a *"Not now"* option that the shopper can select to skip donating.

The following example screens are for the two-step flow, showing that the payment was approved.

| Fixed amounts                                                                                                                              | Round up                                                                                                               | Round up and one fixed amount                                                                                                                                                          |
| ------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ![Screen with fixed amounts](/images/d/4/c/0/f/d4c0ff61a60d56914e956928e30c8b445a683283-screen-enfixed-amounts.png "Fixed amount options") | ![Round-up screen](/images/5/d/c/8/c/5dc8c04d312721d9ed5b6582a85138f3e2c19ba8-screen-enround-up.png "Round-up option") | ![Screen with round-up and one fixed amount](/images/c/0/8/4/b/c084b3e7a918a86e0989fd5fd94c4806612f80ef-screen-enround-up-and-fixed.png "Round-up option and one fixed amount option") |

## (Optional) Configure a logo

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

| Model                                            | Requirements                                  |
| ------------------------------------------------ | --------------------------------------------- |
| AMS 1                                            | Dimensions: 480 x 800 File size: max. 1 MB    |
| P630                                             | Dimensions: 320 x 480 File size: max. 1 MB    |
| e280                                             | Dimensions: 320 x 444 File size: max. 512 KB  |
| e285p                                            | Dimensions: 240 x 284 File size: max. 512 KB  |
| M400                                             | Dimensions: 854 x 432 File size: max. 512 KB  |
| M450                                             | Dimensions: 1280 x 800 File size: max. 100 MB |
| P400 Plus                                        | Dimensions: 320 x 450 File size: max. 512 KB  |
| S1E                                              | Dimensions: 720 x 1280 File size: max. 1 MB   |
| S1E2L                                            | Dimensions: 720 x 1280 File size: max. 1 MB   |
| S1F2                                             | Dimensions: 720 x 1280 File size: max. 1 MB   |
| S1F2L                                            | Dimensions: 720 x 1280 File size: max. 1 MB   |
| [SFO1](/point-of-sale/android-terminals/themes/) | Dimensions: 1280 x 800 File size: max. 100 MB |
| S1U2                                             | Dimensions: 720 x 1280 File size: max. 1 MB   |
| V240m Plus                                       | Dimensions: 320 x 450 File size: max. 512 KB  |
| V400c Plus                                       | Dimensions: 320 x 450 File size: max. 512 KB  |
| V400m                                            | Dimensions: 320 x 450 File size: max. 512 KB  |

![Terminal screen with Giving logo](/images/b/6/2/e/4/b62e43ac56c3798bf697330c036cc3182c17adde-pos-logo.png)

## (Optional) 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](/point-of-sale/add-data/tender-options) `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 payment request](/point-of-sale/basic-tapi-integration/make-a-payment) that contains a [SaleData.SaleToAcquirerData](https://docs.adyen.com/api-explorer/terminal-api/latest/post/payment#request-SaleData-SaleToAcquirerData) parameter with the [tender option](/point-of-sale/add-data/tender-options) **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](/point-of-sale/add-data) for instructions.

   #### JSON

   ```json
   {
       "SaleToPOIRequest": {
           "PaymentRequest": {
               "SaleData": {
                   "SaleTransactionID": {
                       "TransactionID": "997",
                       "TimeStamp": "2020-12-02T16:16:48.000Z"
                   },
                   "SaleToAcquirerData": "tenderOption=AskGiving"
               },
               "PaymentTransaction": {
                   "AmountsReq": {
                       "Currency": "EUR",
                       "RequestedAmount": 155.75
                   }
               }
           },
           "MessageHeader": {
               "ProtocolVersion": "3.0",
               "MessageClass": "Service",
               "MessageCategory": "Payment",
               "MessageType": "Request",
               "ServiceID": "0110123015",
               "SaleID": "POSSystemID12345",
               "POIID": "M400-260193322"
           }
       }
   }
   ```

   #### Java

   ```java
   String serviceID = "YOUR_UNIQUE_ATTEMPT_ID";
       String saleID = "YOUR_CASH_REGISTER_ID";
       String POIID = "YOUR_TERMINAL_ID";
       String transactionID = "YOUR_UNIQUE_TRANSACTION_ID";

       SaleToPOIRequest saleToPOIRequest = new SaleToPOIRequest();
       MessageHeader messageHeader = new MessageHeader();
       messageHeader.setProtocolVersion("3.0");
       messageHeader.setMessageClass( MessageClassType.SERVICE );
       messageHeader.setMessageCategory( MessageCategoryType.PAYMENT );
       messageHeader.setMessageType( MessageType.REQUEST );
       messageHeader.setServiceID(serviceID);
       messageHeader.setSaleID(saleID);
       messageHeader.setPOIID(POIID);
       saleToPOIRequest.setMessageHeader(messageHeader);

       PaymentRequest paymentRequest = new PaymentRequest();
       SaleData saleData = new SaleData();
       TransactionIdentification saleTransactionID = new TransactionIdentification();
       saleTransactionID.setTransactionID(transactionID);
       saleTransactionID.setTimeStamp(DatatypeFactory.newInstance().newXMLGregorianCalendar(new GregorianCalendar()));
       saleData.setSaleTransactionID(saleTransactionID);
       saleData.setSaleToAcquirerData("tenderOption=AskGiving");
       paymentRequest.setSaleData(saleData);

       PaymentTransaction paymentTransaction = new PaymentTransaction();
       AmountsReq amountsReq = new AmountsReq();
       amountsReq.setCurrency("EUR");
       amountsReq.setRequestedAmount( BigDecimal.valueOf(155.75) );
       paymentTransaction.setAmountsReq(amountsReq);
       paymentRequest.setPaymentTransaction(paymentTransaction);
       saleToPOIRequest.setPaymentRequest(paymentRequest);
       terminalAPIRequest.setSaleToPOIRequest(saleToPOIRequest);
   ```

2. If you use the two-step flow, in the [PaymentResponse](https://docs.adyen.com/api-explorer/terminal-api/latest/post/payment#responses-200) note the `AdditionalResponse` data which you can use in a subsequent `TransactionStatusRequest` to [retrieve the donation response](#two-step-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 in the two-step flow, 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 of by your POS app.

   **Payment response in two-step flow**

   ```json
   {
       "SaleToPOIResponse": {
           "MessageHeader": {...},
           "PaymentResponse": {
               "POIData": {...},
               "PaymentReceipt": [...],
               "PaymentResult": {
                   "AmountsResp": {
                       "AuthorizedAmount": 155.75,
                       "Currency": "EUR"
                   },
                   ...,
                   "PaymentAcquirerData": {...},
                   "PaymentInstrumentData": {...}
               },
               "Response": {
                   "AdditionalResponse": "...adyen_giving_sale_id=AdyenGiving...adyen_giving_service_id=8ha5925831",
                   "Result": "Success"
               },
               "SaleData": {
                   "SaleTransactionID": {
                       "TimeStamp": "2020-12-02T16:16:48.163Z",
                       "TransactionID": "997"
                   }
               }
           }
       }
   }
   ```

## (Optional) Get the two-step donation response

If you are using the two-step flow in a Terminal API integration, you can retrieve the full response for the donation transaction 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](#use-tender-option).

A reason to retrieve the donation response is that this includes a `PaymentReceipt` object that you can use to generate a shopper receipt for the donation.

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

1. [Make a transaction status request](/point-of-sale/basic-tapi-integration/verify-transaction-status), specifying:

   * The standard [`SaleToPOIRequest.MessageHeader` ](/point-of-sale/design-your-integration/terminal-api#request-message-header)object, with `MessageClass` set to **Service** and `MessageCategory` set to **TransactionStatus**.

     | Parameter         | Required                                                                                    | Description                                                                                                                                                 |
     | ----------------- | ------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
     | `ProtocolVersion` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | **3.0**                                                                                                                                                     |
     | `MessageClass`    | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | **Service**                                                                                                                                                 |
     | `MessageCategory` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | **TransactionStatus**                                                                                                                                       |
     | `MessageType`     | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | **Request**                                                                                                                                                 |
     | `SaleID`          | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | Your unique ID for the POS system component to send this request from.                                                                                      |
     | `ServiceID`       | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-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-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The unique ID of the terminal to send this request to. Format: *\[device model]-\[serial number]*.                                                          |

   - The [TransactionStatusRequest](https://docs.adyen.com/api-explorer/terminal-api/latest/post/transactionstatus) object with:

     * `ReceiptReprintFlag`: **true**

     * `DocumentQualifier`: The 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. Use this parameter to retrieve the response for a specific donation instead of the latest donation made on the terminal.       |

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

   #### JSON

   ```json
   {
       "SaleToPOIRequest": {
           "MessageHeader": {
               "ProtocolVersion": "3.0",
               "MessageClass": "Service",
               "MessageCategory": "TransactionStatus",
               "MessageType": "Request",
               "SaleID": "POSSystemID12345",
               "ServiceID": "29246",
               "POIID": "M400-260193322"
           },
           "TransactionStatusRequest": {
               "ReceiptReprintFlag": true,
               "DocumentQualifier": [
                   "CashierReceipt",
                   "CustomerReceipt"
               ],
               "MessageReference": {
                   "MessageCategory": "Payment",
                   "SaleID": "AdyenGiving",
                   "ServiceID": "8ha5925831"
               }
           }
       }
   }
   ```

   #### Java

   ```java
   String serviceID = "YOUR_UNIQUE_ATTEMPT_ID";
       String saleID = "YOUR_CASH_REGISTER_ID";
       String POIID = "YOUR_TERMINAL_ID";
       String transactionID = "YOUR_UNIQUE_TRANSACTION_ID";

       SaleToPOIRequest saleToPOIRequest = new SaleToPOIRequest();
       MessageHeader messageHeader = new MessageHeader();
       messageHeader.setProtocolVersion("3.0");
       messageHeader.setMessageClass( MessageClassType.SERVICE );
       messageHeader.setMessageCategory( MessageCategoryType.TRANSACTIONSTATUS );
       messageHeader.setMessageType( MessageType.REQUEST );
       messageHeader.setServiceID(serviceID);
       messageHeader.setSaleID(saleID);
       messageHeader.setPOIID(POIID);
       saleToPOIRequest.setMessageHeader(messageHeader);

       TransactionStatusRequest transactionStatusRequest = new TansactionStatusRequest();
       transactionStatusRequest.setReceiptReprintFlag(true);
       transactionStatusRequest.setDocumentQualifier("CashierReceipt", "CustomerReceipt");

       MessageReference messageReference = new MessageReference();
       messageReference.setMessageCategory("Payment");
       messageReference.setSaleID("AdyenGiving");
       messageReference.setServiceID("8ha5925831");
       transactionStatusRequest.setMessageReference(messageReference);
       saleToPOIRequest.setTransactionStatusRequest(transactionStatusRequest);
       terminalAPIRequest.setSaleToPOIRequest(saleToPOIRequest);
   ```

2. In the [TransactionStatusResponse](https://docs.adyen.com/api-explorer/terminal-api/latest/post/transactionstatus#responses-200-Response), note the `RepeatedMessageResponse`. This contains the response for the donation transaction. Use the `RepeatedMessageResponse.PaymentReceipt` object to generate a shopper receipt for the donation.

   **Transaction status response with the donation response**

   ```json
   {
       "SaleToPOIResponse": {
           "MessageHeader": {
               "MessageCategory": "TransactionStatus",
               "MessageClass": "Service",
               "MessageType": "Response",
               "POIID": "M400-260193322",
               "SaleID": "POSSystemID12345",
               "ServiceID": "29246"
           },
           "TransactionStatusResponse": {
               "MessageReference": {
                   "MessageCategory": "Payment",
                   "SaleID": "AdyenGiving"
               },
               "RepeatedMessageResponse": {
                   "MessageHeader": {
                       "DeviceID": "6",
                       "MessageCategory": "Payment",
                       "MessageClass": "Service",
                       "MessageType": "Response",
                       "POIID": "M400-260193322",
                       "SaleID": "AdyenGiving",
                       "ServiceID": "8ha5925831"
                   },
                   "RepeatedResponseMessageBody": {
                       "PaymentResponse": {
                           "POIData": {
                               "POIReconciliationID": "1001",
                               "POITransactionID": {
                                   "TimeStamp": "2020-12-02T16:16:48.000Z",
                                   "TransactionID": "6JuQ001604433524001.NC6HT9CRT65ZGN82"
                               }
                           },
                           "PaymentReceipt": [
                               {
                                   "DocumentQualifier": "CashierReceipt",
                                   ...
                               },
                               {
                                   "DocumentQualifier": "CustomerReceipt",
                                   ...
                               }
                           ],
                           "PaymentResult": {
                               "AmountsResp": {
                                   "AuthorizedAmount": 5,
                                   "Currency": "EUR"
                               },
                               "OnlineFlag": true,
                               "PaymentAcquirerData": {...},
                               "PaymentInstrumentData": {...}
                           },
                           "Response": {
                               "AdditionalResponse": "...",
                               "Result": "Success"
                           },
                           "SaleData": {
                               "SaleTransactionID": {
                                   "TimeStamp": "2020-11-03T19:58:44.000Z",
                                   "TransactionID": "6JuQ001604433524001"
                               }
                           }
                       }
                   }
               },
               "Response": {
                   "AdditionalResponse": "...",
                   "Result": "Success"
               }
           }
       }
   }
   ```

## Giving webhook

You can get the outcome of each donation in a webhook message. This enables you to inform shoppers by email or mobile messaging about their donation, provided you have the shopper's contact details.

To receive these webhook messages, enable the [Adyen Giving merchant webhook](/development-resources/webhooks/webhook-types#other-webhooks), which includes `eventCode`: **DONATION**.

For a successful donation, the event contains:

* `success`: **true**.
* `originalReference`: use this value to associate the donation with the shopper's original transaction.

**Successful donation webhook event**

```json
{
  "live": "false",
  "notificationItems": [
    {
      "NotificationRequestItem": {
        "additionalData": {
          "originalMerchantAccountCode": "YOUR_MERCHANT_ACCOUNT"
        },
        "amount": {
          "currency": "EUR",
          "value": 500
        },
        "originalReference": "V4HZ4RBFJGXXGN82",
        "eventCode": "DONATION",
        "eventDate": "2022-07-07T13:18:13+02:00",
        "merchantAccountCode": "CHARITY_DONATION_ACCOUNT",
        "merchantReference": "YOUR_DONATION_REFERENCE",
        "paymentMethod": "visa",
        "pspReference": "Z58FGTKBRCQ2WN27",
        "reason": "033899:1111:03/2030",
        "success": "true"
      }
    }
  ]
}
```

## Supported terminals and donation 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.109 or later, and some terminals or features require software version 1.110 or later. A combination of **Round up** and **Fixed amounts** in the **one-step** flow is only available for terminals on software version 1.124 or later.

| Model                                                                        | Fixed amounts                                                                               | Round up                                                                                                            | Two step                                                                                    | One step                                                                                                            |
| ---------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
| [AMS1](/point-of-sale/user-manuals/ams1-user-manual)                         | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") Requires 1.110 or later | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-")                         |
| [P630](/point-of-sale/user-manuals/p630-user-manual)                         | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-")                         | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-")                         |
| [e280](/point-of-sale/user-manuals/e280-user-manual)                         | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-")                         | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-")                         |
| [e285p](/point-of-sale/user-manuals/e285-user-manual)                        | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-")                         | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-")                         |
| [M400](/point-of-sale/user-manuals/m400-user-manual)                         | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-")                         | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-")                         |
| [M450](/point-of-sale/user-manuals/m450-user-manual) Requires 1.110 or later | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-")                         | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-")                         |
| [P400 Plus](/point-of-sale/user-manuals/p400-plus-user-manual)               | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-")                         | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-")                         |
| [S1E](/point-of-sale/user-manuals/s1e-user-manual)                           | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") Requires 1.110 or later | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-")                         |
| [S1E2L](/point-of-sale/user-manuals/s1e2l-user-manual)                       | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") Requires 1.110 or later | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-")                         |
| [S1F2](/point-of-sale/user-manuals/s1f2-user-manual)                         | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") Requires 1.110 or later | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-")                         |
| [S1U2](/point-of-sale/user-manuals/s1u2-user-manual)                         | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") Requires 1.110 or later | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-")                         |
| [SFO1](/point-of-sale/user-manuals/sfo1-user-manual) Requires 1.110 or later | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") Requires 1.110 or later | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") Requires 1.125 or later |
| [V240m Plus](/point-of-sale/user-manuals/v240m-user-manual)                  | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-")                         | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-")                         |
| [V400c Plus](/point-of-sale/user-manuals/v400c-user-manual)                  | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-")                         | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-")                         |
| [V400m](/point-of-sale/user-manuals/v400m-user-manual)                       | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-")                         | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-")                         |

## Supported regions and currencies

Giving is available in the following countries/regions and currencies.

Supported currencies may vary between nonprofits depending on where they are registered.

| Country/region          | Currencies                                       |
| ----------------------- | ------------------------------------------------ |
| Asia-Pacific[ 1](#note) | AUD, JPY, HKD, NZD, SGD                          |
| Europe                  | CHF, CZK, DKK, EUR, HUF, ISK, NOK, PLN, RON, SEK |
| United Arab Emirates    | AED                                              |
| North America           | CAD, USD                                         |
| Mexico                  | MXN                                              |
| United Kingdom          | GBP                                              |

[]()1Fundraising in Singapore is only possible for local nonprofits.

## Supported payment methods and flows

The following table show the payment methods that support donations at the point of sale. Note that not all of these payment methods are supported for [ecommerce donations](/online-payments/donations#supported-payment-methods).

| Payment method                                          | In-person donations                                                                         |                                                                                             |
| ------------------------------------------------------- | ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- |
|                                                         | Two step flow                                                                               | One step flow                                                                               |
| American Express                                        | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") |
| Apple Pay [1](#wallets-one-step)                        | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") |
| Bancontact                                              | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") |                                                                                             |
| Cartes Bancaires In-person only for French non-profits. | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") |
| China UnionPay                                          | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") |
| Diners                                                  | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") |
| Discover                                                | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") |
| eftpos                                                  | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") |                                                                                             |
| girocard                                                | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") |                                                                                             |
| Google Pay [1](#wallets-one-step)                       | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") |
| Interac                                                 | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") |                                                                                             |
| JCB                                                     | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") |
| Mastercard                                              | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") |
| Maestro                                                 | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") |                                                                                             |
| Maestro USA                                             | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") |                                                                                             |
| Visa                                                    | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") |
| Visa Debit                                              | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") |

[]()1 For Apple Pay and Google Pay, the one-step flow is only available when the cards in the wallet support the one-step flow.

## See also

* [Giving for online payments](/online-payments/donations)
* [Transaction status request](/point-of-sale/basic-tapi-integration/verify-transaction-status)
* [Tender options](/point-of-sale/add-data/tender-options)
* [Add information to a payment](/point-of-sale/add-data)
