Stop collecting money from this merchant's customers
Switches collection off. Renewals, checkout and API charges all stop; refunds and the completion of already-authorized payments continue, so no customer is left with a stranded hold. Subscriptions are held rather than cancelled.
A root admin’s pause is owned by Fluid and the merchant cannot lift it. A pause a merchant sets itself can be lifted by either party.
curl --request POST \
--url https://api.fluid.app/api/payment/v2026-04/merchants/{merchant_id}/billing_pause \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"billing_pause": {
"reason": "Scranton branch closing for the quarterly inventory audit"
}
}
'import requests
url = "https://api.fluid.app/api/payment/v2026-04/merchants/{merchant_id}/billing_pause"
payload = { "billing_pause": { "reason": "Scranton branch closing for the quarterly inventory audit" } }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
billing_pause: {reason: 'Scranton branch closing for the quarterly inventory audit'}
})
};
fetch('https://api.fluid.app/api/payment/v2026-04/merchants/{merchant_id}/billing_pause', 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/payment/v2026-04/merchants/{merchant_id}/billing_pause",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'billing_pause' => [
'reason' => 'Scranton branch closing for the quarterly inventory audit'
]
]),
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/payment/v2026-04/merchants/{merchant_id}/billing_pause"
payload := strings.NewReader("{\n \"billing_pause\": {\n \"reason\": \"Scranton branch closing for the quarterly inventory audit\"\n }\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.fluid.app/api/payment/v2026-04/merchants/{merchant_id}/billing_pause")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"billing_pause\": {\n \"reason\": \"Scranton branch closing for the quarterly inventory audit\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/payment/v2026-04/merchants/{merchant_id}/billing_pause")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"billing_pause\": {\n \"reason\": \"Scranton branch closing for the quarterly inventory audit\"\n }\n}"
response = http.request(request)
puts response.read_body{
"data": {
"paused": true,
"paused_at": "2026-09-22T18:00:00Z",
"paused_by": "merchant",
"reason": "Scranton branch closing for the quarterly inventory audit"
},
"meta": {
"request_id": "0192a3f4-c8d9-75e6-a708-6d7e8f9a0b12",
"timestamp": "2026-09-22T18:00:00Z"
}
}{
"status": "error",
"message": "<string>",
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
},
"errors": "<string>"
}{
"message": "<string>",
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
},
"status": "<string>"
}{
"message": "<string>",
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"status": "error",
"message": "<string>",
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
},
"errors": "<string>"
}{
"status": "error",
"message": "<string>",
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
},
"errors": "<string>"
}Authorizations
Merchant API key (fp_live_* for live, fp_test_* for sandbox) or an
admin-tier JWT (company admin or root admin). Non-admin JWTs are
rejected with 403; live API keys additionally require the merchant's
API access to be enabled.
A company admin, company token or partner token also needs the role
grant for the action, or gets 403: gateways.view, .create,
.update or .delete (or the matching apm.* grant) for gateway
configuration, transactions.update for purchase, authorize, verify,
capture, void and credit, and transactions.view to read transactions.
API keys, root admins and droplet tokens are not checked against roles.
Path Parameters
Company ID of the merchant. The lookup resolves by company ID only, the same as the configuration endpoint.
Body
Show child attributes
Show child attributes
curl --request POST \
--url https://api.fluid.app/api/payment/v2026-04/merchants/{merchant_id}/billing_pause \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"billing_pause": {
"reason": "Scranton branch closing for the quarterly inventory audit"
}
}
'import requests
url = "https://api.fluid.app/api/payment/v2026-04/merchants/{merchant_id}/billing_pause"
payload = { "billing_pause": { "reason": "Scranton branch closing for the quarterly inventory audit" } }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
billing_pause: {reason: 'Scranton branch closing for the quarterly inventory audit'}
})
};
fetch('https://api.fluid.app/api/payment/v2026-04/merchants/{merchant_id}/billing_pause', 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/payment/v2026-04/merchants/{merchant_id}/billing_pause",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'billing_pause' => [
'reason' => 'Scranton branch closing for the quarterly inventory audit'
]
]),
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/payment/v2026-04/merchants/{merchant_id}/billing_pause"
payload := strings.NewReader("{\n \"billing_pause\": {\n \"reason\": \"Scranton branch closing for the quarterly inventory audit\"\n }\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.fluid.app/api/payment/v2026-04/merchants/{merchant_id}/billing_pause")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"billing_pause\": {\n \"reason\": \"Scranton branch closing for the quarterly inventory audit\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/payment/v2026-04/merchants/{merchant_id}/billing_pause")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"billing_pause\": {\n \"reason\": \"Scranton branch closing for the quarterly inventory audit\"\n }\n}"
response = http.request(request)
puts response.read_body{
"data": {
"paused": true,
"paused_at": "2026-09-22T18:00:00Z",
"paused_by": "merchant",
"reason": "Scranton branch closing for the quarterly inventory audit"
},
"meta": {
"request_id": "0192a3f4-c8d9-75e6-a708-6d7e8f9a0b12",
"timestamp": "2026-09-22T18:00:00Z"
}
}{
"status": "error",
"message": "<string>",
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
},
"errors": "<string>"
}{
"message": "<string>",
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
},
"status": "<string>"
}{
"message": "<string>",
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"status": "error",
"message": "<string>",
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
},
"errors": "<string>"
}{
"status": "error",
"message": "<string>",
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
},
"errors": "<string>"
}