**Last updated**: 30 March 2026 | [**Change log**](/products/card-payments/changelog/)

# Manage payments

New API Version
This documentation is for version 7 of the Card Payments API. If you're using [version 6](/products/card-payments/v6/authorize-a-payment), you can find information on how to upgrade in our [migration guide](/products/card-payments/v7-migration-guide).

This document gives an overview on how to cancel, settle, refund or reverse payments.

Best practice
To manage your payments we recommend using our [events service](/products/events) to receive the latest status of your payment to your server in real-time.

br
## Increase an authorization

You can send an incremental authorization request to increase an initial estimated authorization amount (submitted with `estimated`: "true").

POST to the `cardPayments:increaseAuthorizedAmount` action link, returned in your estimated authorization response, to increase the authorization amount.

Note
You can only increase an authorized amount which is not `settled`.

### Incremental authorization request

Send the amount to cancel and the authorization currency in the body.

`POST`  `https://try.access.worldpay-bsh.securedataplatform.com/payments/authorizations/incrementalAuthorizations/eyJrIjoiazNhYjYzMiJ9`


```json
{
  "value": {
    "amount": 125,
    "currency": "GBP"
  }
}
```

### Incremental authorization response

#### Successful response

In the response you get:

* a `202` HTTP code which confirms the request was successfully received.
* an "outcome": "authorized"
* an issuer authorization code
* a scheme reference
* links to: [settle](/products/card-payments/manage-payments#settle-an-authorization), [partially settle](/products/card-payments/manage-payments#partially-settle-an-authorization), [cancel](/products/card-payments/manage-payments#cancel-an-authorization), [partially cancel](/products/card-payments/manage-payments#partially-cancel-an-authorization) or [query a payment](/products/card-payments/query-a-payment)


Note
You must use the latest next action links returned by the incremental authorization response to settle (full/partial) and cancel (full/partial) the increased authorized amount.

Using the next action links returned in your estimated authorization response will not use any increased amounts.


```json
{
    "outcome": "authorized",
    "balance": {
        "totalAuthorized": 1100,
        "currency": "GBP"
    },
    "issuer": {
        "authorizationCode": "T91252"
    },
    "scheme": {
        "reference": "MCCRU3I5U0701  "
    },
    "_links": {
        "cardPayments:increaseAuthorizedAmount": {
            "href": "https://try.access.worldpay-bsh.securedataplatform.com/payments/authorizations/incrementalAuthorizations/eyJrIjoiazNhYjYzMiJ9"
        },
        "cardPayments:cancel": {
            "href": "https://try.access.worldpay-bsh.securedataplatform.com/payments/authorizations/cancellations/eyJrIjoiazNhYjYzMiJ9"
        },
        "cardPayments:partialCancel": {
            "href": "https://try.access.worldpay-bsh.securedataplatform.com/payments/authorizations/cancellations/partials/eyJrIjoiazNhYjYzMiJ9"
        },
        "cardPayments:settle": {
            "href": "https://try.access.worldpay-bsh.securedataplatform.com/payments/settlements/full/eyJrIjoiazNhYjYzMiJ9"
        },
        "cardPayments:partialSettle": {
            "href": "https://try.access.worldpay-bsh.securedataplatform.com/payments/settlements/partials/eyJrIjoiazNhYjYzMiJ9"
        },
        "cardPayments:events": {
            "href": "https://try.access.worldpay-bsh.securedataplatform.com/payments/events/eyJrIjoiazNhYjYzMiJ9"
        },
        "curies": [
           {
             "name": "cardPayments",
              "href": "https://try.access.worldpay-bsh.securedataplatform.com/rels/cardPayments/{rel}",
              "templated": true
           }
         ]
     }
}
```

#### Refused response

In the response you get:

* a `202` HTTP code which confirms the request was successfully received.
* an "outcome": "refused"
* a `refusalCode`
* a `refusalDescription` which gives additional context on the refusal


br
## Cancel an authorization

If you don't want to proceed with a payment, you can send a cancel request.

POST to the `cardPayments:cancel` action link, returned in any of your authorization responses, to cancel the authorization.

Note
You can only cancel a payment which is `authorized`. If the payment is settled, you must create a [refund](#fully-refund-a-payment).

### Cancel request

`POST`  `https://try.access.worldpay-bsh.securedataplatform.com/payments/authorizations/cancellations/eyJrIjoiazNhYjYzMiJ9`

Note
No request body is needed for this request.

### Cancel response

In the response you get a `202` HTTP code which confirms we have received your request. The request has not processed at this stage. You must [query](/products/card-payments/query-a-payment) the payment to check the status.
You can find a link for this in the response body.

Best practice
If you're using our [events service](/products/events), as per our best practice, you should already have the latest payment status.


```json
{
    "_links": {
        "cardPayments:events": {
            "href": "https://try.access.worldpay-bsh.securedataplatform.com/payments/events/eyJrIjoiazNhYjYzMiJ9"
        },
        "curies": [
            {
                "name": "cardPayments",
                "href": "https://try.access.worldpay-bsh.securedataplatform.com/rels/cardPayments/{rel}",
                "templated": true
            }
        ]
    }
}
```

br
## Partially cancel an authorization

If you don't want to proceed with the full payment cancellation, you can send a partial cancel request.

POST to the `cardPayments:partialCancel` action link, returned in any of your authorization responses, to cancel the authorization.

Note
You can only cancel a payment which is `authorized`. If the payment is settled, you must create a [refund](#fully-refund-a-payment).

### Partial cancel request

Send the amount to cancel and the authorization currency in the body.

`POST`  `https://try.access.worldpay-bsh.securedataplatform.com/payments/authorizations/cancellations/partials/eyJrIjoiazNhYjYzMiJ9`


```json
{
  "value": {
    "amount": 125,
    "currency": "GBP"
  },
  "reference": "partial-cancel-reference"
}
```

### Partial cancel response

In the response you get a `202` HTTP code which confirms we have received your request. The request has not processed at this stage. You must [query](/products/card-payments/query-a-payment) the payment to check the status.
You can find a link for this in the response body.

Best practice
If you're using our [events service](/products/events/), as per our best practice, you should already have the latest payment status.


```json
{
  "_links": {
    "cardPayments:events": {
      "href": "https://try.access.worldpay-bsh.securedataplatform.com/payments/events/eyJrIjoiazNhYjYzMiJ9"
    },
    "cardPayments:partialCancel": {
      "href": "https://try.access.worldpay-bsh.securedataplatform.com/payments/authorizations/cancellations/partials/eyJrIjoiazNhYjYzMiJ9"
    },
    "cardPayments:partialSettle": {
      "href": "https://try.access.worldpay-bsh.securedataplatform.com/payments/settlements/partials/eyJrIjoiazNhYjYzMiJ9"
    },
    "curies": [
      {
        "name": "cardPayments",
        "href": "https://try.access.worldpay-bsh.securedataplatform.com/rels/cardPayments/{rel}",
        "templated": true
      }
    ]
  }
}
```

br
## Settle an authorization

To receive all the funds from the customer, send us a settle request.

You can only do this if you set `"requestAutoSettlement"` to `false` in your initial request.

POST to the `cardPayments:settle` action link, returned in any of the authorization responses, to settle an authorization.

### Settle request

`POST`  `https://try.access.worldpay-bsh.securedataplatform.com/payments/settlements/full/eyJrIjoiazNhYjYzMiJ9`

Note
No request body is needed for this request.

Marketplaces can optionally provide a body containing [marketplace data](/products/reference/formatting#marketplace-format) for settlement requests:


```json
{
    "merchant": {
        "marketplace": {
            "sellerCountryCode": "GB",
            "splitFundingReference": "Your split funding reference"
        }
    }
}
```

When you make your settle request, the payment event changes to `sentForSettlement`.

### Settle response

In the response you get a `202` HTTP code which confirms we have received your request. The request has not processed at this stage. You must [query](/products/card-payments/query-a-payment) the payment to check the status.
You can find a link for this in the response body, as well as links to [refund and partially refund](#fully-refund-a-payment).

Best practice
If you're using our [events service](/products/events), as per our best practice, you should already have the latest payment status.

We also return:

* `paymentId` - a unique identifier generated by us for a single payment. Generated at authorization, and maintained through successive payment actions
* `commandId` - a unique identifier generated by us for a single instance of an interaction (command) with our API



```json
{
  "paymentId": "pay7TLP6nGrpumEKxy7NiuOx0",
  "commandId": "cmdp9D1t-ENYQxVnJkh0YPRC0",
  "_links": {
    "cardPayments:refund": {
      "href": "/payments/settlements/refunds/full/:linkData"
    },
    "cardPayments:partialRefund": {
      "href": "/payments/settlements/refunds/partials/:linkData"
    },
    "cardPayments:reverse": {
      "href": "/payments/authorizations/reversals/:linkData"
    },
    "cardPayments:events": {
      "href": "/payments/events/:linkData"
    },
    "curies": [
      {
        "name": "payments",
        "href": "/rels/payments/{rel}",
        "templated": true
      }
    ]
  }
}
```

br
## Partially settle an authorization

To receive a portion of the funds of a payment, send us a request to partially settle an authorization.

You can only do this, if you set `"requestAutoSettlement"` to `false` in your initial request.

POST to the `cardPayments:partialSettle` action link, returned in your [authorization response](/products/card-payments/authorize-a-payment#response), to partially settle an authorization. Specify the amount and the required settlement currency in the body.

Note
We do not validate that the currency and amount is the same as the original payment.

### Partial settle request

`POST`  `https://try.access.worldpay-bsh.securedataplatform.com/payments/settlements/partials/eyJrIjoiazNhYjYzMiJ9`

Standard

```json
{
    "sequence": {
        "number": 1,
        "total": 2
    },
    "value": {
        "amount": 125,
        "currency": "GBP"
    },
    "reference": "partial-settle-reference"
}
```

Split funding

```json
{
    "sequence": {
        "number": 1,
        "total": 2
    },
    "value": {
        "currency": "GBP",
        "amount": 200
    },
    "reference": "test1",
    "merchant": {
        "marketplace": {
            "splitFundingReference": "Your split funding reference"
        }
    }
}
```

Marketplace

```json
{
    "sequence": {
        "number": 1,
        "total": 2
    },
    "value": {
        "currency": "GBP",
        "amount": 200
    },
    "reference": "test1",
    "merchant": {
        "marketplace": {
            "sellerCountryCode": "GB",
            "splitFundingReference": "Your split funding reference"
        }
    }
}
```

Partial settlement request parameters:


```json
{
  "$ref": "#/components/schemas/payments_partialSettle",
  "components": {
    "schemas": {
      "value": {
        "required": [
          "amount",
          "currency"
        ],
        "type": "object",
        "description": "An object that contains information about the value of the payment.",
        "properties": {
          "amount": {
            "type": "integer",
            "description": "The payment amount. This is a whole number with an exponent e.g. if exponent is two, 250 is 2.50.",
            "example": 250
          },
          "currency": {
            "type": "string",
            "minLength": 3,
            "maxLength": 3,
            "pattern": "^[A-Z]$",
            "description": " The three character currency code. See list of [supported currencies](/products/reference/supported-countries-currencies#iso-currency-codes).",
            "example": "USD"
          }
        }
      },
      "shipping": {
        "type": "object",
        "description": "An object containing shipping details.",
        "properties": {
          "sender": {
            "type": "object",
            "properties": {
              "address": {
                "type": "object",
                "description": "An object containing sender's (shipped from) address.",
                "properties": {
                  "postalCode": {
                    "maxLength": 10,
                    "minLength": 1,
                    "pattern": "^[a-zA-Z0-9 ]*$",
                    "type": "string"
                  }
                }
              }
            }
          },
          "recipient": {
            "type": "object",
            "properties": {
              "address": {
                "type": "object",
                "description": "An object containing recipient's shipping address.",
                "properties": {
                  "countryCode": {
                    "maxLength": 2,
                    "minLength": 2,
                    "pattern": "^[A-Z]*$",
                    "type": "string"
                  },
                  "postalCode": {
                    "maxLength": 10,
                    "minLength": 1,
                    "pattern": "^[a-zA-Z0-9 ]*$",
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      },
      "order": {
        "type": "object",
        "description": "An object containing details about the order.",
        "properties": {
          "taxExempt": {
            "type": "boolean",
            "description": "A flag to indicate whether the purchase is exempt from tax. Must be set to `true` if `order.salesTax` is 0."
          },
          "orderDate": {
            "type": "object",
            "description": "Date of the order.",
            "properties": {
              "day": {
                "type": "integer"
              },
              "month": {
                "type": "integer"
              },
              "year": {
                "type": "integer"
              }
            },
            "required": [
              "day",
              "month",
              "year"
            ]
          },
          "items": {
            "description": "Array of order items. You can send up to 99 individual order objects within this array.",
            "items": {
              "type": "object",
              "required": [
                "name"
              ],
              "properties": {
                "commodityCode": {
                  "maxLength": 12,
                  "minLength": 1,
                  "type": "string",
                  "description": "Commodity code as defined by the National Institute of Governmental Purchasing.",
                  "pattern": "^[A-Za-z0-9@!£*#$)(-+_=.,/;:'\"]{1,12}$",
                  "example": "ABC123@#"
                },
                "totalTaxAmount": {
                  "type": "integer",
                  "description": "Total tax amount for the item(s)."
                },
                "unitCost": {
                  "type": "integer",
                  "description": "The price of one unit of the item purchased."
                },
                "totalAmount": {
                  "type": "integer",
                  "description": "Total cost of the item(s) including tax."
                },
                "totalAmountNoTax": {
                  "type": "integer",
                  "description": "Total cost of the item(s) excluding tax."
                },
                "unitOfMeasure": {
                  "maxLength": 8,
                  "minLength": 1,
                  "type": "string",
                  "description": "The unit of measure of the purchased item. Explains how to interpret `items.quantity` field, e.g. quantity = 15, unitOfMeasure = kg.",
                  "pattern": "^[A-Za-z0-9@!£*#$)(+_=.,/;:'\"-]{1,8}$"
                },
                "name": {
                  "maxLength": 26,
                  "minLength": 1,
                  "type": "string",
                  "description": "Name of the item(s).",
                  "pattern": "^[A-Za-z0-9 @!£*#$)(+_=.,/;:'\"-]{1,26}$"
                },
                "quantity": {
                  "type": "integer",
                  "description": "Number of items purchased."
                },
                "productCode": {
                  "maxLength": 12,
                  "minLength": 1,
                  "type": "string",
                  "description": "Merchant defined product code.",
                  "pattern": "^[A-Za-z0-9@!£*#\\$)(+_=.,/;:'\"-]{1,12}$"
                },
                "totalDiscountAmount": {
                  "type": "integer",
                  "description": "Total discount amount for the item(s)."
                }
              }
            },
            "type": "array"
          },
          "dutyAmount": {
            "type": "integer",
            "description": "Total amount of duty costs for the order."
          },
          "salesTax": {
            "type": "integer",
            "description": "Total amount of sales tax for the order. Must be provided if `merchant.taxReference` is supplied."
          },
          "shippingAmount": {
            "type": "integer",
            "description": "Total amount of shipping costs for the order."
          },
          "invoiceReference": {
            "maxLength": 15,
            "minLength": 1,
            "type": "string",
            "description": "Invoice reference for the order.",
            "pattern": "^[A-Za-z0-9 @!£*#\\$)\\(+_=.,/;:'\"-]{1,15}$"
          },
          "discountAmount": {
            "type": "integer",
            "description": "Total amount of discounts for the order."
          }
        }
      },
      "industryData": {
        "type": "object",
        "description": "An object containing industry specific order data.",
        "properties": {
          "type": {
            "enum": [
              "airline"
            ],
            "type": "string"
          },
          "airlineName": {
            "type": "string",
            "description": "The name of the airline (displayed as it would be on a bill).",
            "example": "Cobb Air",
            "minLength": 1,
            "maxLength": 256,
            "pattern": "^[A-Za-z0-9 @!£*#\\$()\\+\\-_=.,\\/;:'\"]+$"
          },
          "ticket": {
            "type": "object",
            "description": "An object containing ticket details.",
            "properties": {
              "number": {
                "type": "string",
                "description": "The ticket number.",
                "example": "123",
                "minLength": 1,
                "maxLength": 16,
                "pattern": "^[A-Za-z0-9]+$"
              },
              "issuerAddress": {
                "type": "object",
                "description": "An object containing the ticket issuer's address.",
                "properties": {
                  "address1": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 255,
                    "pattern": "^[A-Za-z0-9 ]+$"
                  },
                  "city": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 100,
                    "pattern": "^[A-Za-z0-9 ]+$"
                  },
                  "countryCode": {
                    "type": "string",
                    "minLength": 2,
                    "maxLength": 2,
                    "pattern": "^[A-Z]{2}$"
                  },
                  "postalCode": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 10,
                    "pattern": "^[A-Za-z0-9 ]+$"
                  }
                },
                "required": [
                  "address1",
                  "city",
                  "countryCode",
                  "postalCode"
                ]
              },
              "flightDetails": {
                "description": "An array with objects containing flight details. Each object represents one leg of a flight and you can submit up to four flight legs within this array.",
                "items": {
                  "type": "object",
                  "properties": {
                    "fareClassCode": {
                      "type": "string",
                      "description": "The code used by airlines to identity a fare type.",
                      "minLength": 1,
                      "maxLength": 15,
                      "pattern": "^[A-Za-z0-9]+$"
                    },
                    "departureAirport": {
                      "type": "string",
                      "description": "The three letter IATA Airport Code for the departure airport.",
                      "example": "LHR",
                      "minLength": 3,
                      "maxLength": 3,
                      "pattern": "^[A-Z]{3}$"
                    },
                    "arrivalAirport": {
                      "type": "string",
                      "description": "The three letter IATA Airport Code for the destination airport.",
                      "example": "SYD",
                      "minLength": 3,
                      "maxLength": 3,
                      "pattern": "^[A-Z]{3}$"
                    },
                    "carrierCode": {
                      "type": "string",
                      "description": "Same as `industryData.airlineCode`, the code represents the airline for the specific flight leg.",
                      "example": "M1",
                      "minLength": 2,
                      "maxLength": 2,
                      "pattern": "^[A-Z]{2}$"
                    },
                    "fareBasisCode": {
                      "type": "string",
                      "description": "An optional extension to the `fareClassCode` for custom codes.",
                      "example": "TMYA",
                      "minLength": 1,
                      "maxLength": 15,
                      "pattern": "^[A-Za-z0-9]+$"
                    },
                    "flightCode": {
                      "type": "string",
                      "description": "The flight code.",
                      "example": "501",
                      "minLength": 1,
                      "maxLength": 5,
                      "pattern": "^[0-9]+$"
                    },
                    "departureDate": {
                      "type": "object",
                      "description": "An object containing the date of the departure.",
                      "properties": {
                        "day": {
                          "type": "integer"
                        },
                        "month": {
                          "type": "integer"
                        },
                        "year": {
                          "type": "integer"
                        }
                      },
                      "required": [
                        "day",
                        "month",
                        "year"
                      ]
                    },
                    "stopOver": {
                      "type": "boolean",
                      "description": "Set to `true` if this flight leg is a stopover, connecting different destinations."
                    },
                    "taxAmount": {
                      "type": "integer",
                      "description": "The tax amount for this specific flight leg.",
                      "example": 3500
                    }
                  },
                  "required": [
                    "carrierCode",
                    "flightCode",
                    "departureAirport",
                    "arrivalAirport",
                    "departureDate",
                    "fareClassCode",
                    "taxAmount"
                  ]
                },
                "type": "array"
              },
              "restricted": {
                "type": "boolean",
                "description": "Typically, restricted airfares require approval and e-ticket processing within 24 hours of making the reservation, are not transferable if cancelled, and can have specific requirements on when or whether a cancelled ticket can be rebooked. You must define if the ticket is restricted, but this does not affect the payment flows."
              },
              "issueDate": {
                "type": "object",
                "description": "An object containing the ticket's issue date.",
                "properties": {
                  "day": {
                    "type": "integer"
                  },
                  "month": {
                    "type": "integer"
                  },
                  "year": {
                    "type": "integer"
                  }
                },
                "required": [
                  "day",
                  "month",
                  "year"
                ]
              }
            },
            "required": [
              "number",
              "restricted",
              "issuerAddress"
            ]
          },
          "agentName": {
            "type": "string",
            "description": "The name of the travel agent.",
            "example": "J Small and Co",
            "minLength": 1,
            "maxLength": 26,
            "pattern": "^[A-Za-z0-9 @!£*#\\$()\\+\\-_=.,\\/;:'\"]+$"
          },
          "agentCode": {
            "type": "string",
            "description": "The IATA travel agency code.",
            "example": "12345678",
            "minLength": 1,
            "maxLength": 8,
            "pattern": "^[0-9]+$"
          },
          "invoiceReference": {
            "type": "string",
            "description": "Billing Settlement Plan invoice reference.",
            "minLength": 1,
            "maxLength": 14,
            "pattern": "^[A-Za-z0-9]+$"
          },
          "airlineCode": {
            "type": "string",
            "description": "The two character IATA airline code.",
            "example": "CA",
            "minLength": 2,
            "maxLength": 2,
            "pattern": "^[A-Z]{2}$"
          },
          "passenger": {
            "type": "object",
            "description": "An object containing passenger details.",
            "properties": {
              "code": {
                "type": "string",
                "minLength": 1,
                "maxLength": 15,
                "pattern": "^[A-Za-z0-9]+$"
              },
              "firstName": {
                "type": "string",
                "minLength": 1,
                "maxLength": 60,
                "pattern": "^[A-Za-z @!£*#\\$()\\+\\-_=.,\\/;:'\"]+$"
              },
              "lastName": {
                "type": "string",
                "minLength": 1,
                "maxLength": 60,
                "pattern": "^[A-Za-z @!£*#\\$()\\+\\-_=.,\\/;:'\"]+$"
              }
            },
            "required": [
              "code",
              "firstName",
              "lastName"
            ]
          }
        },
        "required": [
          "type",
          "ticket",
          "airlineName",
          "airlineCode",
          "agentCode",
          "passenger"
        ]
      },
      "payments_partialSettle": {
        "required": [
          "value",
          "reference"
        ],
        "type": "object",
        "properties": {
          "reference": {
            "type": "string",
            "maxLength": 128,
            "minLength": 1,
            "pattern": "^[-A-Za-z0-9]*$",
            "description": "A reference generated by you to identify a payment throughout its lifecycle.",
            "example": "partial-settle-reference"
          },
          "value": {
            "allOf": [
              {
                "$ref": "#/components/schemas/value"
              },
              {
                "type": "object",
                "properties": {
                  "surchargeAmount": {
                    "type": "integer",
                    "description": "The charging amount representing the processing and service fees. Ensure that the `surchargeAmount` complies with local regulations and card network rules before applying. {% admonition type=\"info\" name=\"Note\" %} The `surchargeAmount` is included in the partial settlement amount, e.g. if the `value.surchargeAmount` is $20 and the `value.amount` is $100, then the actual cost of goods/services is $80. {% /admonition %}"
                  }
                }
              }
            ]
          },
          "merchant": {
            "type": "object",
            "description": "Contains information about the merchant.",
            "properties": {
              "taxReference": {
                "type": "string",
                "description": "Merchant's tax reference."
              },
              "marketplace": {
                "type": "object",
                "description": "Supply additional data for marketplace use cases.",
                "properties": {
                  "sellerCountryCode": {
                    "maxLength": 2,
                    "minLength": 2,
                    "pattern": "^[A-Z]{2}$",
                    "type": "string",
                    "description": "Your seller's country code in [ISO 3166-1 Alpha-2 format](/products/reference/supported-countries-currencies#iso-country-codes). Required if the seller is located in a different country to the marketplace's domicile.",
                    "example": "FR"
                  },
                  "splitFundingReference": {
                    "maxLength": 256,
                    "minLength": 1,
                    "pattern": "^[-A-Za-z0-9_!@#$%()*=.:;?\\[\\]{}~`/+]*$",
                    "type": "string",
                    "description": "A reference that you can use to split acquiring funding into your secondary bank account. Available for marketplaces and other merchant types. Not available for North America or Latin America payments. Contact your Worldpay Implementation Manager to enable."
                  }
                }
              }
            }
          },
          "customer": {
            "type": "object",
            "description": "Additional customer data.",
            "properties": {
              "reference": {
                "type": "string",
                "description": "Merchant-generated customer reference."
              }
            }
          },
          "shipping": {
            "$ref": "#/components/schemas/shipping"
          },
          "order": {
            "$ref": "#/components/schemas/order"
          },
          "industryData": {
            "$ref": "#/components/schemas/industryData"
          },
          "sequence": {
            "type": "object",
            "required": [
              "number",
              "total"
            ],
            "description": "The sequence number and total number of expected partial settlement requests for the payment.",
            "properties": {
              "number": {
                "type": "integer"
              },
              "total": {
                "type": "integer"
              }
            }
          }
        }
      }
    }
  }
}
```

### Partial settle response

In the response you get a `202` HTTP code which confirms we have received your request. The request has not processed at this stage. You must [query](/products/card-payments/query-a-payment) the payment to check the status.
You can find a link for this in the response body, as well as links to [refund, partially refund](#fully-refund-a-payment), [partially settle](#partially-settle-an-authorization) and [cancel](#cancel-an-authorization) your payment.

Best practice
If you're using our [events service](/products/events), as per our best practice, you should already have the latest payment status.

We also return:

* `paymentId` - a unique identifier generated by us for a single payment. Generated at authorization, and maintained through successive payment actions
* `commandId` - a unique identifier generated by us for a single instance of an interaction (command) with our API



```json
{
  "paymentId": "payymIRjUAvh-rWc-7phWocp0",
  "commandId": "cmdpsIok1vBZ_CDqWplJPl2_0",
  "_links": {
    "cardPayments:refund": {
      "href": "/payments/settlements/refunds/full/:linkData"
    },
    "cardPayments:partialRefund": {
      "href": "/payments/settlements/refunds/partials/:linkData"
    },
    "cardPayments:partialSettle": {
      "href": "/payments/settlements/partials/:linkData"
    },
    "cardPayments:reverse": {
      "href": "/payments/authorizations/reversals/:linkData"
    },
    "cardPayments:cancel": {
      "href": "/payments/authorizations/cancellations/:linkData"
    },
    "cardPayments:events": {
      "href": "/payments/events/:linkData"
    },
    "curies": [
      {
        "name": "payments",
        "href": "/rels/payments/{rel}",
        "templated": true
      }
    ]
  }
}
```

br
## Fully refund a payment

Send a refund request to return the full `settled` amount to your customer.

`POST` to the `cardPayments:refund` action link received in your [full](#settle-response) settlement, [partial](#partially-settle-response) settlement or [customerInitiatedTransactions](/products/card-payments/authorize-a-payment) response (where you have requested auto settlement).

### Full refund request

`POST` `https://try.access.worldpay-bsh.securedataplatform.com/payments/settlements/refunds/full/eyJrIjoiazNhYjYzMiJ9`

Note
No request body is needed for this request.

### Full refund response

In the response you get a `202` HTTP code which confirms we have received your request. The request has not processed at this stage. You must [query](/products/card-payments/query-a-payment) the payment to check the status.
You can find a link for this in the response body.

Best practice
If you're using our [events service](/products/events), as per our best practice, you should already have the latest payment status.

We also return:

* `paymentId` - a unique identifier generated by us for a single payment. Generated at authorization, and maintained through successive payment actions
* `commandId` - a unique identifier generated by us for a single instance of an interaction (command) with our API



```json
{
  "paymentId": "payqRdrJboocTc1dCVdAu4Vd0",
  "commandId": "cmddn9j_SEC7N4_ynTDRBWc-0",
  "_links": {
    "cardPayments:events": {
      "href": "/payments/events/:linkData"
    },
    "curies": [
      {
        "name": "payments",
        "href": "/rels/payments/{rel}",
        "templated": true
      }
    ]
  }
}
```

## Partially refund a payment

Send a partial refund request to return a portion of the `settled` amount to your customer.

`POST` your request to the `cardPayments:partialRefund` action link, returned in your [settlement](#settle-an-authorization) or [customerInitiatedTransactions](/products/card-payments/authorize-a-payment) response.

### Partial refund request

Send the `amount` to refund and the authorization `currency` in the body.

`POST` `https://try.access.worldpay-bsh.securedataplatform.com/payments/settlements/refunds/partials/eyJrIjoiazNhYjYzMiJ9`

Standard

```json
{
    "value": {
        "amount": 125,
        "currency": "GBP"
    },
    "reference": "partial-refund-reference"
}
```

Split funding

```json
{
    "value": {
        "amount": 125,
        "currency": "GBP"
    },
    "reference": "partial-refund-reference",
    "merchant": {
        "marketplace": {
            "splitFundingReference": "Your split funding reference"
        }
    }
}
```

Partial refund request parameters:


```json
{
  "$ref": "#/components/schemas/payments_partialRefund",
  "components": {
    "schemas": {
      "value": {
        "required": [
          "amount",
          "currency"
        ],
        "type": "object",
        "description": "An object that contains information about the value of the payment.",
        "properties": {
          "amount": {
            "type": "integer",
            "description": "The payment amount. This is a whole number with an exponent e.g. if exponent is two, 250 is 2.50.",
            "example": 250
          },
          "currency": {
            "type": "string",
            "minLength": 3,
            "maxLength": 3,
            "pattern": "^[A-Z]$",
            "description": " The three character currency code. See list of [supported currencies](/products/reference/supported-countries-currencies#iso-currency-codes).",
            "example": "USD"
          }
        }
      },
      "payments_partialRefund": {
        "required": [
          "value",
          "reference"
        ],
        "type": "object",
        "properties": {
          "reference": {
            "type": "string",
            "maxLength": 128,
            "minLength": 1,
            "pattern": "^[-A-Za-z0-9]*$",
            "description": "A reference generated by you to identify a payment throughout its lifecycle.",
            "example": "partial-refund-reference"
          },
          "value": {
            "allOf": [
              {
                "$ref": "#/components/schemas/value"
              },
              {
                "type": "object",
                "properties": {
                  "surchargeAmount": {
                    "type": "integer",
                    "description": "The charging amount representing processing and service fees of the original transaction. {% admonition type=\"info\" name=\"Note\" %} The surcharge fee is included in the partial refund amount, e.g. if the `value.surchargeAmount` was $20 and the `value.amount` was $100, then the actual cost of goods/services was $80. {% /admonition %}"
                  },
                  "convenienceAmount": {
                    "type": "integer",
                    "description": "The charging amount representing the offer of a convenient payment method or channel (such as online booking fee) of the original transaction. {% admonition type=\"info\" name=\"Note\" %} Convenience fee is included in the partial refund amount, e.g. if the `value.convenienceAmount` was $20 and the `value.amount` was $100, then the actual cost of goods/services was $80. {% /admonition %}"
                  }
                }
              }
            ]
          },
          "merchant": {
            "type": "object",
            "description": "Contains information about the merchant.",
            "properties": {
              "marketplace": {
                "type": "object",
                "description": "Supply additional data for marketplace use cases.",
                "properties": {
                  "splitFundingReference": {
                    "maxLength": 256,
                    "minLength": 1,
                    "pattern": "^[-A-Za-z0-9_!@#$%()*=.:;?\\[\\]{}~`/+]*$",
                    "type": "string",
                    "description": "A reference that you can use to split acquiring funding into your secondary bank account. Available for marketplaces and other merchant types. Not available for North America or Latin America payments. Contact your Worldpay Implementation Manager to enable."
                  }
                }
              }
            }
          },
          "fastRefund": {
            "type": "object",
            "description": "Allows you to request a faster refund.",
            "required": [
              "enabled"
            ],
            "properties": {
              "enabled": {
                "type": "boolean",
                "description": "Set to `true` to request fast refund."
              },
              "fallbackToStandard": {
                "type": "boolean",
                "description": "Request to fall back to standard refund processing in case the fast refund fails. Must be present if fast refund is set to `true`."
              }
            }
          }
        }
      }
    }
  }
}
```

### Partial refund response

In the response you get a `202` HTTP code which confirms we have received your request. The request has not processed at this stage. You must [query](/products/card-payments/query-a-payment) the payment to check the status.
You can find a link for this in the response body.

Best practice
If you're using our [events service](/products/events), as per our best practice, you should already have the latest payment status.

We also return:

* `paymentId` - a unique identifier generated by us for a single payment. Generated at authorization, and maintained through successive payment actions
* `commandId` - a unique identifier generated by us for a single instance of an interaction (command) with our API



```json
{
  "paymentId": "payleHRjF9Ca-mxSJNcJ6V3K0",
  "commandId": "cmdzEVdGDvH72FI1i2ypIf3B0",
  "_links": {
    "cardPayments:events": {
      "href": "/payments/events/:linkData"
    },
    "curies": [
      {
        "name": "payments",
        "href": "/rels/payments/{rel}",
        "templated": true
      }
    ]
  }
}
```

## Online refunds

Online refunds allow you to provide notice to cardholders that a refund attempt has been either successfully authorized or refused by the issuer. 
The response for online refunds is the same as for standard refunds: you get a `202` HTTP code which confirms we have received your request.

However, the [event webhook](/products/events#events-supported) will contain a `refund.onlineRefundAuthorization` code for a successful online refund, or a `refund.refusal` object for a refused online refund.

## Fast Refunds

Fast Refunds allow you to credit a cardholder's account within 30 minutes, where your customer's card account accepts fast funds disbursements.

[See example of fast refund request](/products/card-payments/features/fast-refunds)

br
## Reverse a payment

Your reversal request is processed as a cancel or refund request. This depends on the time passed after your [customerInitiatedTransactions](/products/card-payments/authorize-a-payment) request was submitted. For US entities the payment is refunded one day after a successful request. Any other payment moves to refunded after 15 minutes.

`POST` to the `cardPayments:reversal` action link received in your [customerInitiatedTransactions](/products/card-payments/authorize-a-payment#response) or [merchantInitiatedTransactions](/products/card-payments/repeat-payments#response) response.

### Reversal request

`POST` `https://try.access.worldpay-bsh.securedataplatform.com/payments/sales/reversals/eyJrIjoiazNhYjYzMiJ9`

Note
No request body is needed for this request.

### Reversal response

In the response you get a `202` HTTP code which confirms we have received your request. The request has not processed at this stage. You must [query](/products/card-payments/query-a-payment) the payment to check if it was canceled or refunded.
You can find a link for this in the response body.

Best practice
If you're using our [events service](/products/events), as per our best practice, you should already have the latest payment status.

We also return:

* `paymentId` - a unique identifier generated by us for a single payment. Generated at authorization, and maintained through successive payment actions
* `commandId` - a unique identifier generated by us for a single instance of an interaction (command) with our API



```json
{
  "paymentId": "payqRdrJboocTc1dCVdAu4Vd0",
  "commandId": "cmddn9j_SEC7N4_ynTDRBWc-0",
  "_links": {
    "cardPayments:events": {
      "href": "/payments/events/:linkData"
    },
    "curies": [
      {
        "name": "payments",
        "href": "/rels/payments/{rel}",
        "templated": true
      }
    ]
  }
}
```

**Next steps**

[Query a payment](/products/card-payments/query-a-payment)