List the items a customer can add to an autoship profile
Lists the variants the customer may add to the autoship profile, a page
at a time, in variant_id order. Send a listed variant_id to the
preview, then to the add.
A variant is listed when all of these hold:
- Its product belongs to the company, is active and public, is not a draft, archived, discarded or scheduled for later, and is not a bundle.
- The variant is active, not discarded, and physical (not digital).
- Its product offers the profile’s plan: an active link to an active plan.
- It is active in the country of the profile’s address.
- The company sells that country in the profile’s currency. When it does not, the list is empty.
- It is in stock for that country: it does not track quantity, it keeps selling at zero stock, or the country’s warehouse has some available.
- The profile does not already have it.
query keeps the variants that match every word, in any case, in the
product title, the variant title or display name, or the SKU. A blank
query keeps them all.
catalog_price is what one unit renews at on the profile’s plan at the
customer’s pricing tier. It is before automatic discounts and quantity
breaks. The preview prices the item exactly.
Requires a customer bearer token. The profile is the one whose members
are exactly subscription_tokens. Returns 404 when a token is not the
customer’s or Subscription Pro does not offer autoship profiles to the
company, 409 with meta.code profile_changed when the profile’s
members changed since the client read them, 422 when the profile has
no saved address (meta.code address_required), when the profile
refuses every item the list would hold (meta.code join_refused, the
preview’s reasons in errors.refusals, for example members that have no
pricing modes yet), when the cursor is invalid or expired, or when a
parameter is invalid, and 401 when unauthenticated.
curl --request POST \
--url https://api.fluid.app/api/checkout/v2026-04/subscription-profiles/items/eligible \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"subscription_tokens": [
"sb_7Qm2VxK9pRtL4wNc8HzJdF",
"sb_4Mw9Tc2Kd7Rx5Hb8Lq3Pn"
],
"query": "toner",
"page": {
"limit": 20
}
}
'import requests
url = "https://api.fluid.app/api/checkout/v2026-04/subscription-profiles/items/eligible"
payload = {
"subscription_tokens": ["sb_7Qm2VxK9pRtL4wNc8HzJdF", "sb_4Mw9Tc2Kd7Rx5Hb8Lq3Pn"],
"query": "toner",
"page": { "limit": 20 }
}
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({
subscription_tokens: ['sb_7Qm2VxK9pRtL4wNc8HzJdF', 'sb_4Mw9Tc2Kd7Rx5Hb8Lq3Pn'],
query: 'toner',
page: {limit: 20}
})
};
fetch('https://api.fluid.app/api/checkout/v2026-04/subscription-profiles/items/eligible', 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/subscription-profiles/items/eligible",
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([
'subscription_tokens' => [
'sb_7Qm2VxK9pRtL4wNc8HzJdF',
'sb_4Mw9Tc2Kd7Rx5Hb8Lq3Pn'
],
'query' => 'toner',
'page' => [
'limit' => 20
]
]),
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/subscription-profiles/items/eligible"
payload := strings.NewReader("{\n \"subscription_tokens\": [\n \"sb_7Qm2VxK9pRtL4wNc8HzJdF\",\n \"sb_4Mw9Tc2Kd7Rx5Hb8Lq3Pn\"\n ],\n \"query\": \"toner\",\n \"page\": {\n \"limit\": 20\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/checkout/v2026-04/subscription-profiles/items/eligible")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"subscription_tokens\": [\n \"sb_7Qm2VxK9pRtL4wNc8HzJdF\",\n \"sb_4Mw9Tc2Kd7Rx5Hb8Lq3Pn\"\n ],\n \"query\": \"toner\",\n \"page\": {\n \"limit\": 20\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/checkout/v2026-04/subscription-profiles/items/eligible")
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 \"subscription_tokens\": [\n \"sb_7Qm2VxK9pRtL4wNc8HzJdF\",\n \"sb_4Mw9Tc2Kd7Rx5Hb8Lq3Pn\"\n ],\n \"query\": \"toner\",\n \"page\": {\n \"limit\": 20\n }\n}"
response = http.request(request)
puts response.read_body{
"items": [
{
"variant_id": 4821,
"product_id": 912,
"name": "Dunder Mifflin Toner Cartridge",
"variant_title": "Black",
"image_url": "https://cdn.fluid.app/dundermifflin/toner-black.jpg",
"catalog_price": "90.0",
"currency_code": "USD"
}
],
"meta": {
"request_id": "0d6c3f92-8b1e-4a75-9d2c-4f7e1a5b8c30",
"timestamp": "2026-09-30T14:05:22Z",
"pagination": {
"cursor": null,
"limit": 20,
"prev_cursor": null,
"next_cursor": null,
"total_count": 1,
"total_pages": 1
}
}
}{
"message": "<string>"
}{
"error_message": "<string>",
"errors": "<string>",
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"code": "<string>"
}
}{
"error_message": "<string>",
"errors": "<string>",
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"code": "<string>"
}
}{
"error_message": "<string>",
"errors": "<string>",
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"code": "<string>"
}
}Authorizations
Bearer token authentication
Body
curl --request POST \
--url https://api.fluid.app/api/checkout/v2026-04/subscription-profiles/items/eligible \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"subscription_tokens": [
"sb_7Qm2VxK9pRtL4wNc8HzJdF",
"sb_4Mw9Tc2Kd7Rx5Hb8Lq3Pn"
],
"query": "toner",
"page": {
"limit": 20
}
}
'import requests
url = "https://api.fluid.app/api/checkout/v2026-04/subscription-profiles/items/eligible"
payload = {
"subscription_tokens": ["sb_7Qm2VxK9pRtL4wNc8HzJdF", "sb_4Mw9Tc2Kd7Rx5Hb8Lq3Pn"],
"query": "toner",
"page": { "limit": 20 }
}
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({
subscription_tokens: ['sb_7Qm2VxK9pRtL4wNc8HzJdF', 'sb_4Mw9Tc2Kd7Rx5Hb8Lq3Pn'],
query: 'toner',
page: {limit: 20}
})
};
fetch('https://api.fluid.app/api/checkout/v2026-04/subscription-profiles/items/eligible', 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/subscription-profiles/items/eligible",
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([
'subscription_tokens' => [
'sb_7Qm2VxK9pRtL4wNc8HzJdF',
'sb_4Mw9Tc2Kd7Rx5Hb8Lq3Pn'
],
'query' => 'toner',
'page' => [
'limit' => 20
]
]),
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/subscription-profiles/items/eligible"
payload := strings.NewReader("{\n \"subscription_tokens\": [\n \"sb_7Qm2VxK9pRtL4wNc8HzJdF\",\n \"sb_4Mw9Tc2Kd7Rx5Hb8Lq3Pn\"\n ],\n \"query\": \"toner\",\n \"page\": {\n \"limit\": 20\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/checkout/v2026-04/subscription-profiles/items/eligible")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"subscription_tokens\": [\n \"sb_7Qm2VxK9pRtL4wNc8HzJdF\",\n \"sb_4Mw9Tc2Kd7Rx5Hb8Lq3Pn\"\n ],\n \"query\": \"toner\",\n \"page\": {\n \"limit\": 20\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/checkout/v2026-04/subscription-profiles/items/eligible")
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 \"subscription_tokens\": [\n \"sb_7Qm2VxK9pRtL4wNc8HzJdF\",\n \"sb_4Mw9Tc2Kd7Rx5Hb8Lq3Pn\"\n ],\n \"query\": \"toner\",\n \"page\": {\n \"limit\": 20\n }\n}"
response = http.request(request)
puts response.read_body{
"items": [
{
"variant_id": 4821,
"product_id": 912,
"name": "Dunder Mifflin Toner Cartridge",
"variant_title": "Black",
"image_url": "https://cdn.fluid.app/dundermifflin/toner-black.jpg",
"catalog_price": "90.0",
"currency_code": "USD"
}
],
"meta": {
"request_id": "0d6c3f92-8b1e-4a75-9d2c-4f7e1a5b8c30",
"timestamp": "2026-09-30T14:05:22Z",
"pagination": {
"cursor": null,
"limit": 20,
"prev_cursor": null,
"next_cursor": null,
"total_count": 1,
"total_pages": 1
}
}
}{
"message": "<string>"
}{
"error_message": "<string>",
"errors": "<string>",
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"code": "<string>"
}
}{
"error_message": "<string>",
"errors": "<string>",
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"code": "<string>"
}
}{
"error_message": "<string>",
"errors": "<string>",
"meta": {
"request_id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"code": "<string>"
}
}