---
title: "Partial authorizations"
description: "Allow shoppers to pay the remainder with a different payment method."
url: "https://docs.adyen.com/point-of-sale/partial-authorizations"
source_url: "https://docs.adyen.com/point-of-sale/partial-authorizations.md"
canonical: "https://docs.adyen.com/point-of-sale/partial-authorizations"
last_modified: "2023-09-08T09:19:00+02:00"
language: "en"
---

# Partial authorizations

Allow shoppers to pay the remainder with a different payment method.

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

To reduce the number of transactions that are declined due to insufficient funds, you can add partial authorizations to your Terminal API integration. With this, you ask the issuer to authorize the available amount when the card's balance is not enough for the full amount. You can then let the shopper pay the remainder with another card or in cash.

## Requirements

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

| Requirement          | Description                                                                                          |
| -------------------- | ---------------------------------------------------------------------------------------------------- |
| **Integration type** | Make sure that you have built a [Terminal API integration](/point-of-sale/get-started).              |
| **Limitations**      | Be aware that there is no guarantee that all issuers support partial authorizations.                 |
| **Setup steps**      | Consider configuring a [capture delay](/point-of-sale/capturing-payments#delayed-automatic-capture). |

## Risk with partial authorizations

When the issuer supports partial authorizations and the transaction succeeds, the terminal shows that the transaction is approved plus a warning that mentions how much was paid, out of the requested amount.

![Warning not paid in full](/images/6/9/4/0/0/6940012a78dc9d5b861a78398b3fcdbefe7a6bbe-screen-enpartial-auth.png)

Because the transaction is approved, the warning may be overlooked, and the shopper may leave without having paid the full amount. Therefore, it is very important to ensure that your POS app alerts your staff to the fact that there is an amount remaining to be paid.

Consider configuring a [capture delay](/point-of-sale/capturing-payments#delayed-automatic-capture). If the customer has second thoughts about the transaction, this gives you time to cancel the authorization before the amount is captured. This is easier than issuing a refund.

## How it works

To use partial authorizations, you need to:

1. Add the [tender option](/point-of-sale/add-data/tender-options) **AllowPartialAuthorisation** to your payment request.\
   When the requested amount is higher than the amount available in the account, this tender option asks the issuer to return an authorization for the available amount instead of declining the transaction.

2. Keep track of how much remains to be paid, and alert your staff.\
   The payment response returns the authorized amount. If this is less than the requested amount, you can [make another payment request to let the shopper pay the remainder](#partial-authorisation) with another card or in cash.

3. In your reconciliation process, connect multiple partial authorizations to the same transaction.

## Make the initial payment

To start a payment where partial authorization is possible:

1. [Make a payment request](/point-of-sale/basic-tapi-integration/make-a-payment#make-a-payment), 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 **Payment**.

     | 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-") | **Payment**                                                                                                                                                 |
     | `MessageType`     | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | **Request**                                                                                                                                                 |
     | `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. |
     | `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.                                                                                      |
     | `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 [SaleData](https://docs.adyen.com/api-explorer/terminal-api/latest/post/payment#request-SaleData) object with:

     | Parameter            | Required                                                                                    | Description                                                                                                                                                                                                                                                                                                                                                                                                                                              |
     | -------------------- | ------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
     | `SaleTransactionID`  | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | An object with:- `TransactionID`: your reference to identify a payment. We recommend using a unique value per payment. In your Customer Area and Adyen reports, this will show as the **merchant reference** for the transaction.
     - `TimeStamp`: date and time of the request in [UTC format](https://en.wikipedia.org/wiki/ISO_8601#Coordinated_Universal_Time_\(UTC\)).                                                                                |
     | `SaleReferenceID`    |                                                                                             | Unique reference, such as your order number plus a sequence number, that lets you identify partial authorizations that belong together. In your [Customer Area](https://ca-test.adyen.com/), this will appear as the **Merchant Order** for the transaction. For example, if the order number is *Order12345*, you specify **Order12345-1** in the first partial authorization request and **Order12345-2** in the second partial authorization request. |
     | `SaleToAcquirerData` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The **AllowPartialAuthorisation** tender option.See the instructions below.                                                                                                                                                                                                                                                                                                                                                                              |

     In `SaleData.SaleToAcquirerData`, specify the tender option in one of the following formats:\
     []()

     * Option 1: a JSON object converted to a Base64 encoded string.\
       Encode `{"tenderOption": "AllowPartialAuthorisation"}` to Base64, and pass the resulting string:\
       `"SaleToAcquirerData": "eyJ0ZW5kZXJPcHRpb24iOiAiQWxsb3dQYXJ0aWFsQXV0aG9yaXNhdGlvbiJ9"`

     * Option 2: a key-value pair:\
       `"SaleToAcquirerData": "tenderOption=AllowPartialAuthorisation"`

     The format that you use here will also be the format of the `AdditionalResponse` that you receive. If there are more tender options (for example, **ReceiptHandler** ) or other data elements that you need to pass in the `SaleToAcquirerData` field, refer to [Add information to a payment](/point-of-sale/add-data).

   - The [PaymentRequest.PaymentTransaction](https://docs.adyen.com/api-explorer/terminal-api/latest/post/payment#request-PaymentTransaction) object with:

     | Parameter    | Required                                                                                    | Description                                                                                                                                              |
     | ------------ | ------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
     | `AmountsReq` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | An object with:- `Currency`: The transaction [currency](/development-resources/currency-codes).
     - `RequestedAmount`: The purchase amount, with decimals. |

   The following example shows how to make a EUR 25.99 payment.

   **Payment with partial authorization tender option**

   ```json
   {
       "SaleToPOIRequest":{
           "MessageHeader":{
               "ProtocolVersion":"3.0",
               "MessageClass":"Service",
               "MessageCategory":"Payment",
               "MessageType":"Request",
               "ServiceID":"9267",
               "SaleID":"POSSystemID12345",
               "POIID":"V400m-324688179"
           },
           "PaymentRequest":{
               "SaleData":{
                   "SaleTransactionID":{
                       "TransactionID":"44740",
                       "TimeStamp":"2019-03-26T09:13:41+00:00"
                   },
                   "SaleReferenceID": "Order12345-1",
                   "SaleToAcquirerData": "tenderOption=AllowPartialAuthorisation"
               },
               "PaymentTransaction":{
                   "AmountsReq":{
                       "Currency":"EUR",
                       "RequestedAmount":25.99
                   }
               }
           }
       }
   }
   ```

2. In the [PaymentResponse](https://docs.adyen.com/api-explorer/terminal-api/latest/post/payment#responses-200), note the following:

   * `Response.Result`: If the payment was successful, **Success** indicates a full authorization, or **Partial** indicates a partial authorization.
   * `PaymentResult.AmountsResp.AuthorizedAmount`: The amount that was authorized. This may be less than the requested amount.
   * `AdditionalResponse`: Contains `posOriginalAmountValue` with the requested amount, and `posAuthAmountValue` with the authorized amount.
   * `SaleData.SaleReferenceID`: Your order number. If you are going to make another payment for the remainder, the `SaleReferenceID` of that other payment must be based on this one.

   The example below shows that the payment was successful but that only EUR 10.00 of the original EUR 25.99 was authorized.

   **Response for a partial authorization**

   ```json
   {
       "SaleToPOIResponse": {
           "MessageHeader": {...},
           "PaymentResponse": {
               "POIData": {
                   "POIReconciliationID": "1000",
                   "POITransactionID": {
                       "TimeStamp": "2021-11-16T11:26:19.000Z",
                       "TransactionID": "CWf3001637061979001.M32P3JBKR65ZGN82"
                   }
               },
               "PaymentReceipt": [...],
               "PaymentResult": {
                   "AmountsResp": {
                       "AuthorizedAmount": 10.00,
                       "Currency": "EUR"
                   },
                   ...,
                   "PaymentAcquirerData": {...},
                       ...
                   },
                   "PaymentInstrumentData": {
                       "CardData": {
                           "CardCountryCode": "826",
                           "EntryMode": [
                               "Contactless"
                           ],
                           "MaskedPan": "541333 **** 9999",
                           "PaymentBrand": "mc",
                           "SensitiveCardData": {
                               "CardSeqNumb": "33",
                               "ExpiryDate": "0228"
                           }
                       },
                       "PaymentInstrumentType": "Card"
                   }
               },
               "Response": {
                   "AdditionalResponse": "...&posOriginalAmountValue=2599...&posAuthAmountValue=1000",
                   "Result": "Partial"
               },
               "SaleData": {
                   "SaleReferenceID": "Order12345-1",
                   "SaleTransactionID": {
                       "TimeStamp": "2021-11-16T11:26:15.253Z",
                       "TransactionID": "644"
                   }
               }
           }
       }
   }
   ```

3. If the `Response.Result` is **Partial**, [make a follow-up payment](#partial-authorisation) or let the shopper pay the remainder in cash.

## (Optional) Make a follow-up payment

If the initial partial authorization did not cover the full amount, you can follow up with another payment for the remainder:

1. Calculate the remaining amount after the initial partial authorization: subtract the `AuthorizedAmount` in the response from the `RequestedAmount` in the request.\
   Alternatively, you can calculate the remaining amount using `posAuthAmountValue` and `posOriginalAmountValue` from the `AdditionalResponse`.

2. [Make a payment request](/point-of-sale/basic-tapi-integration/make-a-payment#make-a-payment), 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 **Payment**.

     | 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-") | **Payment**                                                                                                                                                 |
     | `MessageType`     | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | **Request**                                                                                                                                                 |
     | `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. |
     | `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.                                                                                      |
     | `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 [PaymentRequest.SaleData](https://docs.adyen.com/api-explorer/terminal-api/latest/post/payment#request-SaleData) object with:

     | Parameter            | Required                                                                                    | Description                                                                                                                                                                                                                                                                                                         |
     | -------------------- | ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
     | `SaleReferenceID`    |                                                                                             | Unique reference, such as your order number plus a sequence number, that lets you identify partial authorizations that belong together.For example, if you specified **Order12345-1** in the first partial authorization request with the gift card, you'd specify **Order12345-2** in this second payment request. |
     | `SaleToAcquirerData` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | The **AllowPartialAuthorisation** tender option.For the format, see the [initial partial authorization](#sale-to-acquirer-data).                                                                                                                                                                                    |

   - The [PaymentRequest.PaymentTransaction](https://docs.adyen.com/api-explorer/terminal-api/latest/post/payment#request-PaymentTransaction) object with:

     | Parameter                       | Required                                                                                    | Description                                                                                                                                           |
     | ------------------------------- | ------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
     | `PaymentTransaction.AmountsReq` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | An object with:- `Currency`: The transaction [currency](/development-resources/currency-codes).
     - `RequestedAmount`: The calculated remaining amount. |

   This example shows a payment request for the remaining EUR 15.99.

   **Follow-up payment for the remainder**

   ```json
   {
       "SaleToPOIRequest":{
           "MessageHeader":{
               "ProtocolVersion":"3.0",
               "MessageClass":"Service",
               "MessageCategory":"Payment",
               "MessageType":"Request",
               "ServiceID":"9267",
               "SaleID":"POSSystemID12345",
               "POIID":"V400m-324688179"
           },
           "PaymentRequest":{
               "SaleData":{
                   "SaleTransactionID":{
                       "TransactionID":"44740",
                       "TimeStamp":"2019-03-26T09:13:45+00:00"
                   },
                   "SaleReferenceID": "Order12345-2",
                   "SaleToAcquirerData": "tenderOption=AllowPartialAuthorisation"
               },
               "PaymentTransaction":{
                   "AmountsReq":{
                       "Currency":"EUR",
                       "RequestedAmount":15.99
                   }
               }
           }
       }
   }
   ```

3. When you receive the response, check if the `Response.Result` is now **Success**. That means the amount due is paid in full.

## Test partial authorizations

You can test the partial authorization flow using an amount ending in **139**:

1. [Make a payment request](/point-of-sale/basic-tapi-integration/make-a-payment#make-a-payment), including:

   * The [SaleData](https://docs.adyen.com/api-explorer/terminal-api/latest/post/payment#request-SaleData) object with:

     | Parameter            | Required | Description                                                                          |
     | -------------------- | -------- | ------------------------------------------------------------------------------------ |
     | `SaleReferenceID`    |          | Unique reference that lets you identify partial authorizations that belong together. |
     | `SaleToAcquirerData` |          | The **AllowPartialAuthorisation** tender option.                                     |

   * The [PaymentTransaction](https://docs.adyen.com/api-explorer/terminal-api/latest/post/payment#request-PaymentTransaction) object with:

     | Parameter                       | Required                                                                                    | Description                                                                                                                                                               |
     | ------------------------------- | ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
     | `PaymentTransaction.AmountsReq` | ![-white\_check\_mark-](/user/data/smileys/emoji/white_check_mark.png "-white_check_mark-") | An object with:- `Currency`: the transaction [currency](/development-resources/currency-codes).
     - `RequestedAmount`: an amount ending in **139**. For example, **41.39**. |

2. Check that the terminal indicates the transaction is approved and shows a warning about how much out of the requested amount was paid.\
   For example: **!  $ 40.39 out of $ 41.39**

3. Check that the [PaymentResponse](https://docs.adyen.com/api-explorer/terminal-api/latest/post/payment#responses-200) contains the following:

   * `PaymentResult.AmountsResp.AuthorizedAmount`: A value of 1 less than the requested amount. For example, **40.39** if the requested amount was **41.39**.

   * `Response.Result`: **Partial**.

4. Make a second payment request for the remaining amount, with a `SaleReferenceID` that allows you to identify the two partial authorizations as belonging together.

5. In your [Customer Area](https://ca-test.adyen.com/) and/or reports, find the two partial authorizations by their **Merchant Order**. The Merchant Order corresponds to the `SaleReferenceID` from the payment requests.

## See also

* [Pass tender options](/point-of-sale/add-data/tender-options)
* [Gift card payments](/point-of-sale/gift-cards-terminal-api/payment)
