Transactions
Cancel authorized Bread payment transaction
Cancels an authorized Bread (Buy Now, Pay Later) payment before capture. This endpoint releases the payment authorization and frees up the customer’s credit line.
Use Cases:
- Cancel order before fulfillment (customer cancellation, fraud detection, inventory unavailable)
- Partial order modifications (reduce authorization when items are out of stock)
- Apply post-authorization discounts
- Release holds when order cannot be fulfilled
Key Features:
- Supports full or partial cancellation amounts
- Automatically fetches remaining authorized amount from Bread if not specified
- Creates audit trail via customer notes
- Only works with authorized (not yet captured) Bread payments
Important Notes:
- This endpoint is specifically for Bread BNPL payments only
- Can only cancel payments with “authorize” action (not captured payments)
- Requires company admin authentication
- Does NOT settle/capture before cancelling - it voids the authorization directly
Supported integrations: the order’s payment method must be Bread or Affirm; any other integration returns 422. An Affirm authorization is always voided for the full order total, so amount and currency_code apply to Bread only. On success the order’s financial status becomes voided and the new cancel or void payment is returned. Requires the transactions.update permission.
PATCH
/
api
/
v202506
/
payments
/
cancel
/
{order_token}
Cancel authorized Bread payment transaction
curl --request PATCH \
--url https://api.fluid.app/api/v202506/payments/cancel/{order_token} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"amount": 54.99,
"currency_code": "USD"
}
'import requests
url = "https://api.fluid.app/api/v202506/payments/cancel/{order_token}"
payload = {
"amount": 54.99,
"currency_code": "USD"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({amount: 54.99, currency_code: 'USD'})
};
fetch('https://api.fluid.app/api/v202506/payments/cancel/{order_token}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.fluid.app/api/v202506/payments/cancel/{order_token}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'amount' => 54.99,
'currency_code' => 'USD'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.fluid.app/api/v202506/payments/cancel/{order_token}"
payload := strings.NewReader("{\n \"amount\": 54.99,\n \"currency_code\": \"USD\"\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.fluid.app/api/v202506/payments/cancel/{order_token}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"amount\": 54.99,\n \"currency_code\": \"USD\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/v202506/payments/cancel/{order_token}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"amount\": 54.99,\n \"currency_code\": \"USD\"\n}"
response = http.request(request)
puts response.read_body{
"payment": {
"id": 5521131,
"slug": "fpi_1hs7ka3vq9ez5mw2rc8tbn",
"action": "cancel",
"status": "success",
"company_id": 1405,
"company_name": "Dunder Mifflin Paper Company",
"customer_id": 48213,
"customer_name": "Holly Flax",
"cart_id": 881204,
"subscription_id": null,
"card_id": null,
"parent_id": 5520988,
"amount": "54.99",
"currency_code": "USD",
"country_code": "US",
"integration_class": "Bread",
"adapter_class": null,
"transaction_id": "9b1e4c27-3a5f-4d08-8e6b-2c7f1a9d5e34",
"refunded_amount": "0.0",
"last_refunded_at": null,
"voided_at": null,
"created_at": "2026-09-30T14:15:21.604Z",
"updated_at": "2026-09-30T14:15:22.011Z",
"response_status": null,
"response_message": null,
"decline_class": null,
"processing_fee": null,
"platform_fee": null,
"fee_status": null,
"invoice_id": null,
"cart_token": "ct_7RkPz3WfLq9TnX2bVh5cJd",
"latency": "0.84 seconds",
"order_source": "web",
"test_transaction": false,
"card_display": null,
"wallet_type": null,
"payment_instrument_type": null,
"payment_account": {
"id": 318,
"uuid": "pa_4tzq8k1m6wbx0rj7c2vnd9hy5slpe3fa",
"name": "Bread",
"display_name": "Pay over time with Bread",
"reporting_name": "Dunder Mifflin Bread Pay",
"integration_class": "Bread",
"adapter_class": null
},
"am_authorization": null
},
"meta": {
"request_id": "c0a8012e-7f3b-4d6a-9e21-5b8d4f2a6c17",
"timestamp": "2026-09-30T14:15:22Z"
}
}{
"message": "<string>",
"error_message": "<string>",
"errors": "<string>",
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"pagination": {
"cursor": "<string>",
"limit": 123,
"prev_cursor": "<string>",
"next_cursor": "<string>",
"total_count": 123
}
}
}{
"error_message": "<string>",
"errors": "<string>",
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"pagination": {
"cursor": "<string>",
"limit": 123,
"prev_cursor": "<string>",
"next_cursor": "<string>",
"total_count": 123
}
}
}Authorizations
Body
application/json
⌘I
Cancel authorized Bread payment transaction
curl --request PATCH \
--url https://api.fluid.app/api/v202506/payments/cancel/{order_token} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"amount": 54.99,
"currency_code": "USD"
}
'import requests
url = "https://api.fluid.app/api/v202506/payments/cancel/{order_token}"
payload = {
"amount": 54.99,
"currency_code": "USD"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({amount: 54.99, currency_code: 'USD'})
};
fetch('https://api.fluid.app/api/v202506/payments/cancel/{order_token}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.fluid.app/api/v202506/payments/cancel/{order_token}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'amount' => 54.99,
'currency_code' => 'USD'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.fluid.app/api/v202506/payments/cancel/{order_token}"
payload := strings.NewReader("{\n \"amount\": 54.99,\n \"currency_code\": \"USD\"\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.fluid.app/api/v202506/payments/cancel/{order_token}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"amount\": 54.99,\n \"currency_code\": \"USD\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/v202506/payments/cancel/{order_token}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"amount\": 54.99,\n \"currency_code\": \"USD\"\n}"
response = http.request(request)
puts response.read_body{
"payment": {
"id": 5521131,
"slug": "fpi_1hs7ka3vq9ez5mw2rc8tbn",
"action": "cancel",
"status": "success",
"company_id": 1405,
"company_name": "Dunder Mifflin Paper Company",
"customer_id": 48213,
"customer_name": "Holly Flax",
"cart_id": 881204,
"subscription_id": null,
"card_id": null,
"parent_id": 5520988,
"amount": "54.99",
"currency_code": "USD",
"country_code": "US",
"integration_class": "Bread",
"adapter_class": null,
"transaction_id": "9b1e4c27-3a5f-4d08-8e6b-2c7f1a9d5e34",
"refunded_amount": "0.0",
"last_refunded_at": null,
"voided_at": null,
"created_at": "2026-09-30T14:15:21.604Z",
"updated_at": "2026-09-30T14:15:22.011Z",
"response_status": null,
"response_message": null,
"decline_class": null,
"processing_fee": null,
"platform_fee": null,
"fee_status": null,
"invoice_id": null,
"cart_token": "ct_7RkPz3WfLq9TnX2bVh5cJd",
"latency": "0.84 seconds",
"order_source": "web",
"test_transaction": false,
"card_display": null,
"wallet_type": null,
"payment_instrument_type": null,
"payment_account": {
"id": 318,
"uuid": "pa_4tzq8k1m6wbx0rj7c2vnd9hy5slpe3fa",
"name": "Bread",
"display_name": "Pay over time with Bread",
"reporting_name": "Dunder Mifflin Bread Pay",
"integration_class": "Bread",
"adapter_class": null
},
"am_authorization": null
},
"meta": {
"request_id": "c0a8012e-7f3b-4d6a-9e21-5b8d4f2a6c17",
"timestamp": "2026-09-30T14:15:22Z"
}
}{
"message": "<string>",
"error_message": "<string>",
"errors": "<string>",
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"pagination": {
"cursor": "<string>",
"limit": 123,
"prev_cursor": "<string>",
"next_cursor": "<string>",
"total_count": 123
}
}
}{
"error_message": "<string>",
"errors": "<string>",
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"pagination": {
"cursor": "<string>",
"limit": 123,
"prev_cursor": "<string>",
"next_cursor": "<string>",
"total_count": 123
}
}
}