curl --request PATCH \
--url https://api.withflex.com/v1/subscriptions/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"subscription": {
"cancel_at_period_end": false,
"trial_end": "2026-06-15T14:30:00Z",
"items": [],
"proration_behavior": "always_invoice",
"cancel_at": "2026-06-15T14:30:00Z",
"metadata": {
"order_id": "8842",
"channel": "shopify"
},
"coupon": "string"
}
}
'import requests
url = "https://api.withflex.com/v1/subscriptions/{id}"
payload = { "subscription": {
"cancel_at_period_end": False,
"trial_end": "2026-06-15T14:30:00Z",
"items": [],
"proration_behavior": "always_invoice",
"cancel_at": "2026-06-15T14:30:00Z",
"metadata": {
"order_id": "8842",
"channel": "shopify"
},
"coupon": "string"
} }
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({
subscription: {
cancel_at_period_end: false,
trial_end: '2026-06-15T14:30:00Z',
items: [],
proration_behavior: 'always_invoice',
cancel_at: '2026-06-15T14:30:00Z',
metadata: {order_id: '8842', channel: 'shopify'},
coupon: 'string'
}
})
};
fetch('https://api.withflex.com/v1/subscriptions/{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.withflex.com/v1/subscriptions/{id}",
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([
'subscription' => [
'cancel_at_period_end' => false,
'trial_end' => '2026-06-15T14:30:00Z',
'items' => [
],
'proration_behavior' => 'always_invoice',
'cancel_at' => '2026-06-15T14:30:00Z',
'metadata' => [
'order_id' => '8842',
'channel' => 'shopify'
],
'coupon' => 'string'
]
]),
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.withflex.com/v1/subscriptions/{id}"
payload := strings.NewReader("{\n \"subscription\": {\n \"cancel_at_period_end\": false,\n \"trial_end\": \"2026-06-15T14:30:00Z\",\n \"items\": [],\n \"proration_behavior\": \"always_invoice\",\n \"cancel_at\": \"2026-06-15T14:30:00Z\",\n \"metadata\": {\n \"order_id\": \"8842\",\n \"channel\": \"shopify\"\n },\n \"coupon\": \"string\"\n }\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.withflex.com/v1/subscriptions/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"subscription\": {\n \"cancel_at_period_end\": false,\n \"trial_end\": \"2026-06-15T14:30:00Z\",\n \"items\": [],\n \"proration_behavior\": \"always_invoice\",\n \"cancel_at\": \"2026-06-15T14:30:00Z\",\n \"metadata\": {\n \"order_id\": \"8842\",\n \"channel\": \"shopify\"\n },\n \"coupon\": \"string\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.withflex.com/v1/subscriptions/{id}")
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 \"subscription\": {\n \"cancel_at_period_end\": false,\n \"trial_end\": \"2026-06-15T14:30:00Z\",\n \"items\": [],\n \"proration_behavior\": \"always_invoice\",\n \"cancel_at\": \"2026-06-15T14:30:00Z\",\n \"metadata\": {\n \"order_id\": \"8842\",\n \"channel\": \"shopify\"\n },\n \"coupon\": \"string\"\n }\n}"
response = http.request(request)
puts response.read_body{
"subscription": {
"subscription_id": "fsub_01J9XR8M3K7VZ8N2YB4WJ6T0RA",
"created_at": "2026-06-15T14:30:00Z",
"items": [
{}
],
"status": "incomplete",
"cancel_at_period_end": false,
"current_period_end": "string",
"current_period_start": "string",
"metadata": {
"order_id": "8842",
"channel": "shopify"
},
"test_mode": false,
"client_secret": {},
"proration_behavior": "always_invoice",
"trial_start": "string",
"trial_end": "string",
"cancel_at": "2026-06-15T14:30:00Z",
"canceled_at": "2026-06-15T14:30:00Z",
"discounts": [
{}
]
}
}{
"code": "string",
"detail": "string"
}{
"code": "string",
"detail": "string"
}{
"code": "string",
"detail": "string"
}{
"code": "string",
"detail": "string"
}{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string"
}
]
}{
"code": "string",
"detail": "string"
}Update Subscription
Updates an existing subscription. Any omitted field is left unchanged, and an empty request body is a no-op that simply returns the current subscription.
The change is first applied in Stripe and then mirrored to Flex, so the response
reflects the resulting status and billing period. Updating items switches each item to
the supplied recurring price (or to a newly created price when price_data is given, in
which case a new Price is created in Stripe and Flex); item prices must be recurring.
proration_behavior controls how mid-cycle changes are prorated (create_prorations by
default). Supplied metadata is merged into any existing metadata. Passing an empty
string for coupon removes the current coupon.
curl --request PATCH \
--url https://api.withflex.com/v1/subscriptions/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"subscription": {
"cancel_at_period_end": false,
"trial_end": "2026-06-15T14:30:00Z",
"items": [],
"proration_behavior": "always_invoice",
"cancel_at": "2026-06-15T14:30:00Z",
"metadata": {
"order_id": "8842",
"channel": "shopify"
},
"coupon": "string"
}
}
'import requests
url = "https://api.withflex.com/v1/subscriptions/{id}"
payload = { "subscription": {
"cancel_at_period_end": False,
"trial_end": "2026-06-15T14:30:00Z",
"items": [],
"proration_behavior": "always_invoice",
"cancel_at": "2026-06-15T14:30:00Z",
"metadata": {
"order_id": "8842",
"channel": "shopify"
},
"coupon": "string"
} }
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({
subscription: {
cancel_at_period_end: false,
trial_end: '2026-06-15T14:30:00Z',
items: [],
proration_behavior: 'always_invoice',
cancel_at: '2026-06-15T14:30:00Z',
metadata: {order_id: '8842', channel: 'shopify'},
coupon: 'string'
}
})
};
fetch('https://api.withflex.com/v1/subscriptions/{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.withflex.com/v1/subscriptions/{id}",
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([
'subscription' => [
'cancel_at_period_end' => false,
'trial_end' => '2026-06-15T14:30:00Z',
'items' => [
],
'proration_behavior' => 'always_invoice',
'cancel_at' => '2026-06-15T14:30:00Z',
'metadata' => [
'order_id' => '8842',
'channel' => 'shopify'
],
'coupon' => 'string'
]
]),
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.withflex.com/v1/subscriptions/{id}"
payload := strings.NewReader("{\n \"subscription\": {\n \"cancel_at_period_end\": false,\n \"trial_end\": \"2026-06-15T14:30:00Z\",\n \"items\": [],\n \"proration_behavior\": \"always_invoice\",\n \"cancel_at\": \"2026-06-15T14:30:00Z\",\n \"metadata\": {\n \"order_id\": \"8842\",\n \"channel\": \"shopify\"\n },\n \"coupon\": \"string\"\n }\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.withflex.com/v1/subscriptions/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"subscription\": {\n \"cancel_at_period_end\": false,\n \"trial_end\": \"2026-06-15T14:30:00Z\",\n \"items\": [],\n \"proration_behavior\": \"always_invoice\",\n \"cancel_at\": \"2026-06-15T14:30:00Z\",\n \"metadata\": {\n \"order_id\": \"8842\",\n \"channel\": \"shopify\"\n },\n \"coupon\": \"string\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.withflex.com/v1/subscriptions/{id}")
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 \"subscription\": {\n \"cancel_at_period_end\": false,\n \"trial_end\": \"2026-06-15T14:30:00Z\",\n \"items\": [],\n \"proration_behavior\": \"always_invoice\",\n \"cancel_at\": \"2026-06-15T14:30:00Z\",\n \"metadata\": {\n \"order_id\": \"8842\",\n \"channel\": \"shopify\"\n },\n \"coupon\": \"string\"\n }\n}"
response = http.request(request)
puts response.read_body{
"subscription": {
"subscription_id": "fsub_01J9XR8M3K7VZ8N2YB4WJ6T0RA",
"created_at": "2026-06-15T14:30:00Z",
"items": [
{}
],
"status": "incomplete",
"cancel_at_period_end": false,
"current_period_end": "string",
"current_period_start": "string",
"metadata": {
"order_id": "8842",
"channel": "shopify"
},
"test_mode": false,
"client_secret": {},
"proration_behavior": "always_invoice",
"trial_start": "string",
"trial_end": "string",
"cancel_at": "2026-06-15T14:30:00Z",
"canceled_at": "2026-06-15T14:30:00Z",
"discounts": [
{}
]
}
}{
"code": "string",
"detail": "string"
}{
"code": "string",
"detail": "string"
}{
"code": "string",
"detail": "string"
}{
"code": "string",
"detail": "string"
}{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string"
}
]
}{
"code": "string",
"detail": "string"
}Authorizations
Use a Bearer token to access this API.
Path Parameters
"fsub_01J9XR8M3K7VZ8N2YB4WJ6T0RA"
Query Parameters
If true, expands the customer object in the response.
false
Comma-separated list of related objects to expand in the response.
Supported keys: customer; latest_invoice (alias invoice); payment_method; price (alias product); and discounts. Combine discounts with coupons (expand=discounts,coupons) to hydrate each discount's nested source.coupon into a full object instead of a bare ID.
Unrecognized keys are ignored rather than rejected: a misspelled or guessed key (e.g. coupon) returns the same response as no expand at all, with no error.
Body
An envelope wrapping a single subscription object.
An envelope wrapping a single subscription object.
The subscription payload carried by the request or response.
Show child attributes
Show child attributes
{
"cancel_at_period_end": false,
"trial_end": "2026-06-15T14:30:00Z",
"items": [
{
"price": "fprice_01J9XR8M3K7VZ8N2YB4WJ6T0RA"
}
],
"proration_behavior": "always_invoice",
"cancel_at": "2026-06-15T14:30:00Z",
"metadata": { "order_id": "8842", "channel": "shopify" },
"coupon": "string"
}
Response
An envelope wrapping a single subscription object.
An envelope wrapping a single subscription object.
The subscription payload carried by the request or response.
Show child attributes
Show child attributes
{
"subscription_id": "fsub_01J9XR8M3K7VZ8N2YB4WJ6T0RA",
"created_at": "2026-06-15T14:30:00Z",
"items": [
{
"subscription_item_id": "fsubi_01J9XR8M3K7VZ8N2YB4WJ6T0RA",
"quantity": 2500,
"created_at": "2026-06-15T14:30:00Z",
"updated_at": "2026-06-15T14:30:00Z",
"test_mode": false
}
],
"latest_invoice": "fin_01J9XR8M3K7VZ8N2YB4WJ6T0RA",
"customer": "fcus_01J9XR8M3K7VZ8N2YB4WJ6T0RA",
"status": "incomplete",
"cancel_at_period_end": false,
"current_period_end": "string",
"current_period_start": "string",
"metadata": { "order_id": "8842", "channel": "shopify" },
"test_mode": false,
"client_secret": {
"setup_secret": "string",
"payment_secret": "string"
},
"proration_behavior": "always_invoice",
"trial_start": "string",
"trial_end": "string",
"cancel_at": "2026-06-15T14:30:00Z",
"canceled_at": "2026-06-15T14:30:00Z",
"default_payment_method": "fpm_01J9XR8M3K7VZ8N2YB4WJ6T0RA",
"discounts": [
{
"discount_id": "fdi_01J9XR8M3K7VZ8N2YB4WJ6T0RA",
"checkout_session": "fcs_01J9XR8M3K7VZ8N2YB4WJ6T0RA",
"customer": "fcus_01J9XR8M3K7VZ8N2YB4WJ6T0RA",
"subscription": "fsub_01J9XR8M3K7VZ8N2YB4WJ6T0RA",
"invoice": "fin_01J9XR8M3K7VZ8N2YB4WJ6T0RA",
"source": {},
"promo_code": "fpromo_01J9XR8M3K7VZ8N2YB4WJ6T0RA",
"test_mode": false,
"start": "string"
}
]
}