Subscriptions
Remove subscription discount
Detaches the discount {id} from the subscription {token}. Requires a
droplet token or an admin’s bearer token; an admin also needs the
subscriptions.update permission. Returns 422 when it cannot be
removed, 403 when not permitted, 404 when the subscription or
discount is not found, and 401 when unauthenticated.
DELETE
/
api
/
checkout
/
v2026-04
/
subscriptions
/
{token}
/
discounts
/
{id}
Remove subscription discount
curl --request DELETE \
--url https://api.fluid.app/api/checkout/v2026-04/subscriptions/{token}/discounts/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"removed_detail": "Customer asked to stop the promotion"
}
'import requests
url = "https://api.fluid.app/api/checkout/v2026-04/subscriptions/{token}/discounts/{id}"
payload = { "removed_detail": "Customer asked to stop the promotion" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.delete(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'DELETE',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({removed_detail: 'Customer asked to stop the promotion'})
};
fetch('https://api.fluid.app/api/checkout/v2026-04/subscriptions/{token}/discounts/{id}', 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/checkout/v2026-04/subscriptions/{token}/discounts/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "DELETE",
CURLOPT_POSTFIELDS => json_encode([
'removed_detail' => 'Customer asked to stop the promotion'
]),
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/checkout/v2026-04/subscriptions/{token}/discounts/{id}"
payload := strings.NewReader("{\n \"removed_detail\": \"Customer asked to stop the promotion\"\n}")
req, _ := http.NewRequest("DELETE", 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.delete("https://api.fluid.app/api/checkout/v2026-04/subscriptions/{token}/discounts/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"removed_detail\": \"Customer asked to stop the promotion\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/checkout/v2026-04/subscriptions/{token}/discounts/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Delete.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"removed_detail\": \"Customer asked to stop the promotion\"\n}"
response = http.request(request)
puts response.read_body{
"subscription_discount": {
"id": 6127,
"company_id": 1405,
"subscription_id": 48213,
"discount_id": 1932,
"discount_version_id": 2408,
"attached_by_member_id": "9c41e7b2-3a5d-4f18-8e6c-2b7d0a9f4c13",
"attached_by_droplet_installation_id": null,
"duration": "repeating",
"duration_cycles": 3,
"applied_cycles": 1,
"removed_reason": "manual",
"removed_detail": "Customer asked to stop the promotion",
"attached_via": "manual_member",
"notes": "Loyalty thank-you for Holly.",
"starts_at": "2026-09-02T14:10:05Z",
"removed_at": "2026-09-30T15:34:48Z",
"created_at": "2026-09-02T14:10:05Z",
"updated_at": "2026-09-30T15:34:48Z",
"discount": {
"id": 1932,
"code": "BEETS10"
},
"discount_version": {
"id": 2408,
"version_number": 1,
"code": "BEETS10",
"price_discount_type": "percentage",
"flat_value": null,
"percentage_value": 10,
"apply_to_volume": false
},
"attached_by": {
"kind": "member",
"id": "9c41e7b2-3a5d-4f18-8e6c-2b7d0a9f4c13",
"label": "Pam Beesly"
}
},
"meta": {
"request_id": "1a4c7e2b-9d3f-4b61-8e5a-3c7b1d9f2e84",
"timestamp": "2026-09-30T15:34:48Z"
}
}{
"message": "<string>"
}{
"message": "<string>",
"error": "<string>",
"error_message": "<string>",
"errors": "<string>",
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"error_message": "<string>",
"errors": "<string>",
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"code": "<string>",
"blocked_date": "2026-11-30",
"blocked_day": 30,
"allowed_date": "2026-11-28",
"payment_uuid": "<string>",
"error_details": [
{
"code": "<string>",
"field": "<string>",
"payment": "not_attempted",
"message": "<string>"
}
],
"coded_recovery": true
}
}{
"error_message": "<string>",
"errors": "<string>",
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"code": "<string>",
"blocked_date": "2026-11-30",
"blocked_day": 30,
"allowed_date": "2026-11-28",
"payment_uuid": "<string>",
"error_details": [
{
"code": "<string>",
"field": "<string>",
"payment": "not_attempted",
"message": "<string>"
}
],
"coded_recovery": true
}
}Authorizations
Bearer token authentication
Body
application/json
⌘I
Remove subscription discount
curl --request DELETE \
--url https://api.fluid.app/api/checkout/v2026-04/subscriptions/{token}/discounts/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"removed_detail": "Customer asked to stop the promotion"
}
'import requests
url = "https://api.fluid.app/api/checkout/v2026-04/subscriptions/{token}/discounts/{id}"
payload = { "removed_detail": "Customer asked to stop the promotion" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.delete(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'DELETE',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({removed_detail: 'Customer asked to stop the promotion'})
};
fetch('https://api.fluid.app/api/checkout/v2026-04/subscriptions/{token}/discounts/{id}', 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/checkout/v2026-04/subscriptions/{token}/discounts/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "DELETE",
CURLOPT_POSTFIELDS => json_encode([
'removed_detail' => 'Customer asked to stop the promotion'
]),
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/checkout/v2026-04/subscriptions/{token}/discounts/{id}"
payload := strings.NewReader("{\n \"removed_detail\": \"Customer asked to stop the promotion\"\n}")
req, _ := http.NewRequest("DELETE", 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.delete("https://api.fluid.app/api/checkout/v2026-04/subscriptions/{token}/discounts/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"removed_detail\": \"Customer asked to stop the promotion\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/checkout/v2026-04/subscriptions/{token}/discounts/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Delete.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"removed_detail\": \"Customer asked to stop the promotion\"\n}"
response = http.request(request)
puts response.read_body{
"subscription_discount": {
"id": 6127,
"company_id": 1405,
"subscription_id": 48213,
"discount_id": 1932,
"discount_version_id": 2408,
"attached_by_member_id": "9c41e7b2-3a5d-4f18-8e6c-2b7d0a9f4c13",
"attached_by_droplet_installation_id": null,
"duration": "repeating",
"duration_cycles": 3,
"applied_cycles": 1,
"removed_reason": "manual",
"removed_detail": "Customer asked to stop the promotion",
"attached_via": "manual_member",
"notes": "Loyalty thank-you for Holly.",
"starts_at": "2026-09-02T14:10:05Z",
"removed_at": "2026-09-30T15:34:48Z",
"created_at": "2026-09-02T14:10:05Z",
"updated_at": "2026-09-30T15:34:48Z",
"discount": {
"id": 1932,
"code": "BEETS10"
},
"discount_version": {
"id": 2408,
"version_number": 1,
"code": "BEETS10",
"price_discount_type": "percentage",
"flat_value": null,
"percentage_value": 10,
"apply_to_volume": false
},
"attached_by": {
"kind": "member",
"id": "9c41e7b2-3a5d-4f18-8e6c-2b7d0a9f4c13",
"label": "Pam Beesly"
}
},
"meta": {
"request_id": "1a4c7e2b-9d3f-4b61-8e5a-3c7b1d9f2e84",
"timestamp": "2026-09-30T15:34:48Z"
}
}{
"message": "<string>"
}{
"message": "<string>",
"error": "<string>",
"error_message": "<string>",
"errors": "<string>",
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"error_message": "<string>",
"errors": "<string>",
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"code": "<string>",
"blocked_date": "2026-11-30",
"blocked_day": 30,
"allowed_date": "2026-11-28",
"payment_uuid": "<string>",
"error_details": [
{
"code": "<string>",
"field": "<string>",
"payment": "not_attempted",
"message": "<string>"
}
],
"coded_recovery": true
}
}{
"error_message": "<string>",
"errors": "<string>",
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"code": "<string>",
"blocked_date": "2026-11-30",
"blocked_day": 30,
"allowed_date": "2026-11-28",
"payment_uuid": "<string>",
"error_details": [
{
"code": "<string>",
"field": "<string>",
"payment": "not_attempted",
"message": "<string>"
}
],
"coded_recovery": true
}
}