Upcoming Deliveries
curl --request GET \
--url https://api.flowiq.live/v1/subscriptions/upcoming \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.flowiq.live/v1/subscriptions/upcoming"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.flowiq.live/v1/subscriptions/upcoming', 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.flowiq.live/v1/subscriptions/upcoming",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.flowiq.live/v1/subscriptions/upcoming"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.flowiq.live/v1/subscriptions/upcoming")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.flowiq.live/v1/subscriptions/upcoming")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"organization_id": "a4234f32-19d5-4f09-92fe-55f00f94bea8",
"from": "2026-11-02",
"to": "2026-11-08",
"data": [
{
"test": false,
"subscription_id": "3f2c6a1e-8b0d-4c55-9f7e-1d2a3b4c5d6e",
"delivery_number": 2,
"date": "2026-12-07",
"scheduled_for": "2026-12-07T08:00:02+00:00",
"status": "scheduled",
"items": [
{
"variant_id": "44112233445566",
"sku": "LL-MWL-15",
"title": "Men's Weight Loss 15 pack",
"quantity": 1,
"unit_price": "1650.00"
}
],
"shipping_address": {
"first_name": "Jane",
"last_name": "Doe",
"address1": "1 Main Road",
"city": "Gqeberha",
"province": "Eastern Cape",
"zip": "6001",
"country": "South Africa",
"phone": "+27820000000"
},
"shopify_order_id": null,
"shopify_order_name": null,
"charged_amount": null,
"estimate": {
"goods": "1485.00",
"discount_percent": 10,
"discount": "165.00",
"delivery_fee": "299.00",
"total": "1784.00"
},
"failure_reason": null,
"customer": {
"contact_id": "9b8a7c6d-1e2f-4a3b-8c9d-0e1f2a3b4c5d",
"name": "Jane Doe",
"email": "jane@example.com",
"phone": "27820000000",
"shopify_customer_id": "7712345678901"
},
"rhythm": {
"label": "every 6 weeks",
"interval_value": 6,
"interval_unit": "weeks"
},
"subscription_status": "active"
}
],
"pagination": {
"page": 1,
"limit": 50,
"total": 1,
"has_more": false
}
}{
"error": "Range too long",
"message": "At most 62 days per request; page through longer periods"
}{
"error": "Unauthorized",
"message": "Invalid API key"
}{
"error": "Forbidden",
"message": "This connection does not have \"read\" permission"
}{
"error": "Rate limited",
"message": "240 requests per minute per key."
}Subscriptions
Upcoming Deliveries
Every subscription delivery scheduled in a date range, earliest first, with customer, shipping address, items and estimated amount.
GET
/
v1
/
subscriptions
/
upcoming
Upcoming Deliveries
curl --request GET \
--url https://api.flowiq.live/v1/subscriptions/upcoming \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.flowiq.live/v1/subscriptions/upcoming"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.flowiq.live/v1/subscriptions/upcoming', 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.flowiq.live/v1/subscriptions/upcoming",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.flowiq.live/v1/subscriptions/upcoming"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.flowiq.live/v1/subscriptions/upcoming")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.flowiq.live/v1/subscriptions/upcoming")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"organization_id": "a4234f32-19d5-4f09-92fe-55f00f94bea8",
"from": "2026-11-02",
"to": "2026-11-08",
"data": [
{
"test": false,
"subscription_id": "3f2c6a1e-8b0d-4c55-9f7e-1d2a3b4c5d6e",
"delivery_number": 2,
"date": "2026-12-07",
"scheduled_for": "2026-12-07T08:00:02+00:00",
"status": "scheduled",
"items": [
{
"variant_id": "44112233445566",
"sku": "LL-MWL-15",
"title": "Men's Weight Loss 15 pack",
"quantity": 1,
"unit_price": "1650.00"
}
],
"shipping_address": {
"first_name": "Jane",
"last_name": "Doe",
"address1": "1 Main Road",
"city": "Gqeberha",
"province": "Eastern Cape",
"zip": "6001",
"country": "South Africa",
"phone": "+27820000000"
},
"shopify_order_id": null,
"shopify_order_name": null,
"charged_amount": null,
"estimate": {
"goods": "1485.00",
"discount_percent": 10,
"discount": "165.00",
"delivery_fee": "299.00",
"total": "1784.00"
},
"failure_reason": null,
"customer": {
"contact_id": "9b8a7c6d-1e2f-4a3b-8c9d-0e1f2a3b4c5d",
"name": "Jane Doe",
"email": "jane@example.com",
"phone": "27820000000",
"shopify_customer_id": "7712345678901"
},
"rhythm": {
"label": "every 6 weeks",
"interval_value": 6,
"interval_unit": "weeks"
},
"subscription_status": "active"
}
],
"pagination": {
"page": 1,
"limit": 50,
"total": 1,
"has_more": false
}
}{
"error": "Range too long",
"message": "At most 62 days per request; page through longer periods"
}{
"error": "Unauthorized",
"message": "Invalid API key"
}{
"error": "Forbidden",
"message": "This connection does not have \"read\" permission"
}{
"error": "Rate limited",
"message": "240 requests per minute per key."
}Use it to plan picking, packing and dispatch ahead of the charge.
Basic Usage
curl "https://api.flowiq.live/v1/subscriptions/upcoming?from=2026-11-02&to=2026-11-08" \
-H "Authorization: Bearer fiq_YOUR_API_KEY"
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
from | string | No | First day, YYYY-MM-DD (South African date). Default today |
to | string | No | Last day, inclusive. Default 14 days after from. At most 62 days per request |
include | string | No | scheduled (default): deliveries that will be charged. all: also paused and skipped ones |
page | integer | No | Page number, default 1 |
limit | integer | No | Per page, default 100, max 500 |
Response
Success (200)
Each item is a delivery object plus the subscription’scustomer, rhythm and subscription_status.
{
"organization_id": "a4234f32-…",
"from": "2026-11-02",
"to": "2026-11-08",
"data": [
{
"subscription_id": "3f2c6a1e-8b0d-4c55-9f7e-1d2a3b4c5d6e",
"delivery_number": 4,
"date": "2026-11-03",
"scheduled_for": "2026-11-03T08:00:02+00:00",
"status": "scheduled",
"customer": { "name": "Jane Doe", "email": "jane@example.com", "phone": "27820000000", "shopify_customer_id": "7712345678901", "contact_id": "9b8a7c6d-…" },
"shipping_address": { "first_name": "Jane", "last_name": "Doe", "address1": "1 Main Road", "city": "Gqeberha", "province": "Eastern Cape", "zip": "6001", "country": "South Africa", "phone": "+27820000000" },
"items": [{ "variant_id": "44112233445566", "sku": "LL-MWL-15", "title": "Men's Weight Loss 15 pack", "quantity": 1, "unit_price": "1650.00" }],
"rhythm": { "label": "every 6 weeks", "interval_value": 6, "interval_unit": "weeks" },
"subscription_status": "active",
"estimate": { "goods": "1402.50", "discount_percent": 15, "discount": "247.50", "delivery_fee": "299.00", "total": "1701.50" },
"shopify_order_id": null,
"charged_amount": null
}
],
"pagination": { "page": 1, "limit": 100, "total": 1, "has_more": false }
}
A delivery is charged and its Shopify order created on its date. Until then the items, address and date can still change (the customer can skip, pause or edit), so read this list close to when you plan, and take the Shopify order as final.
Integration Example
async function deliveriesNextWeek(apiKey) {
const day = (d) => d.toISOString().slice(0, 10);
const from = new Date();
const to = new Date(Date.now() + 7 * 86400000);
const url = new URL("https://api.flowiq.live/v1/subscriptions/upcoming");
url.searchParams.set("from", day(from));
url.searchParams.set("to", day(to));
url.searchParams.set("limit", "500");
const res = await fetch(url, { headers: { Authorization: `Bearer ${apiKey}` } });
const body = await res.json();
if (!res.ok) throw new Error(body.message);
return body.data;
}
Authorizations
Your FlowIQ organisation API key (Settings → API Keys), sent as a bearer token. Format: Bearer fiq_YOUR_API_KEY
Query Parameters
First day, YYYY-MM-DD (South African date). Default today
Last day, inclusive. Default 14 days after from; at most 62 days per request
scheduled (default) = deliveries that will be charged; all = also paused and skipped
Available options:
scheduled, all Page number
Required range:
x >= 1Per page (max 500)
Required range:
1 <= x <= 500
