curl -sS -X POST "$FLUIDE_BASE_URL/api/v1/payments/billing" \ -H "Authorization: Bearer $FLUIDE_ACCESS_TOKEN" \ -H "X-Fluide-Api-Key: $FLUIDE_API_KEY" \ -H "X-Fluide-Client-Id: fluide-developer" \ -H "X-Workspace-Id: $FLUIDE_WORKSPACE_ID" \ -H "X-Acting-Company-Id: $FLUIDE_COMPANY_ID" \ -H "Content-Type: application/json" \ -d '{}'const baseUrl = process.env.FLUIDE_BASE_URL; const response = await fetch(`${baseUrl}/api/v1/payments/billing`, { method: 'POST', headers: { Authorization: `Bearer ${process.env.FLUIDE_ACCESS_TOKEN}`, 'X-Fluide-Api-Key': process.env.FLUIDE_API_KEY, 'X-Fluide-Client-Id': 'fluide-developer', 'X-Workspace-Id': process.env.FLUIDE_WORKSPACE_ID, 'X-Acting-Company-Id': process.env.FLUIDE_COMPANY_ID, 'Content-Type': 'application/json', }, body: JSON.stringify({}),
}); if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());import os
import requests base_url = os.environ["FLUIDE_BASE_URL"]
headers = { "Authorization": f"Bearer {os.environ['FLUIDE_ACCESS_TOKEN']}", "X-Fluide-Api-Key": os.environ["FLUIDE_API_KEY"], "X-Fluide-Client-Id": "fluide-developer", "X-Workspace-Id": os.environ["FLUIDE_WORKSPACE_ID"], "X-Acting-Company-Id": os.environ["FLUIDE_COMPANY_ID"],
} response = requests.post( f"{base_url}/api/v1/payments/billing", headers=headers, json={}, timeout=30,
)
response.raise_for_status()
print(response.json())import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse; String baseUrl = System.getenv("FLUIDE_BASE_URL");
HttpClient client = HttpClient.newHttpClient();
HttpRequest.Builder builder = HttpRequest.newBuilder() .uri(URI.create(baseUrl + "/api/v1/payments/billing")) .header("Authorization", "Bearer " + System.getenv("FLUIDE_ACCESS_TOKEN")) .header("X-Fluide-Api-Key", System.getenv("FLUIDE_API_KEY")) .header("X-Fluide-Client-Id", "fluide-developer") .header("X-Workspace-Id", System.getenv("FLUIDE_WORKSPACE_ID")) .header("X-Acting-Company-Id", System.getenv("FLUIDE_COMPANY_ID")) .header("Content-Type", "application/json") .POST(HttpRequest.BodyPublishers.ofString("{}")) .build();
HttpResponse<String> response = client.send(builder.build(), HttpResponse.BodyHandlers.ofString());
if (response.statusCode() >= 400) throw new RuntimeException("HTTP " + response.statusCode() + ": " + response.body());
System.out.println(response.body());<?php
$baseUrl = getenv("FLUIDE_BASE_URL");
$ch = curl_init($baseUrl . "/api/v1/payments/billing");
curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_HTTPHEADER => [ 'Authorization: Bearer ' . getenv('FLUIDE_ACCESS_TOKEN'), 'X-Fluide-Api-Key: ' . getenv('FLUIDE_API_KEY'), 'X-Fluide-Client-Id: fluide-developer', 'X-Workspace-Id: ' . getenv('FLUIDE_WORKSPACE_ID'), 'X-Acting-Company-Id: ' . getenv('FLUIDE_COMPANY_ID'), 'Content-Type: application/json', ], CURLOPT_POSTFIELDS => "{}",
]);
$response = curl_exec($ch);
if ($response === false) throw new RuntimeException(curl_error($ch));
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status >= 400) throw new RuntimeException("HTTP $status: $response");
echo $response;{
"success": true,
"message": "Operation completed successfully",
"data": {}
}{
"success": false,
"message": "Validation failed",
"code": "VALIDATION_FAILED",
"statusCode": 400,
"timestamp": "2026-06-03T12:00:00.000Z",
"errors": {
"from": [
"from must be a valid date"
]
}
}{
"success": false,
"message": "Validation failed",
"code": "VALIDATION_FAILED",
"statusCode": 400,
"timestamp": "2026-06-03T12:00:00.000Z",
"errors": {
"from": [
"from must be a valid date"
]
}
}{
"success": false,
"message": "Validation failed",
"code": "VALIDATION_FAILED",
"statusCode": 400,
"timestamp": "2026-06-03T12:00:00.000Z",
"errors": {
"from": [
"from must be a valid date"
]
}
}{
"success": false,
"message": "Validation failed",
"code": "VALIDATION_FAILED",
"statusCode": 400,
"timestamp": "2026-06-03T12:00:00.000Z",
"errors": {
"from": [
"from must be a valid date"
]
}
}Create or sync organization billing (plan, pricing band, provider ids)
curl -sS -X POST "$FLUIDE_BASE_URL/api/v1/payments/billing" \ -H "Authorization: Bearer $FLUIDE_ACCESS_TOKEN" \ -H "X-Fluide-Api-Key: $FLUIDE_API_KEY" \ -H "X-Fluide-Client-Id: fluide-developer" \ -H "X-Workspace-Id: $FLUIDE_WORKSPACE_ID" \ -H "X-Acting-Company-Id: $FLUIDE_COMPANY_ID" \ -H "Content-Type: application/json" \ -d '{}'const baseUrl = process.env.FLUIDE_BASE_URL; const response = await fetch(`${baseUrl}/api/v1/payments/billing`, { method: 'POST', headers: { Authorization: `Bearer ${process.env.FLUIDE_ACCESS_TOKEN}`, 'X-Fluide-Api-Key': process.env.FLUIDE_API_KEY, 'X-Fluide-Client-Id': 'fluide-developer', 'X-Workspace-Id': process.env.FLUIDE_WORKSPACE_ID, 'X-Acting-Company-Id': process.env.FLUIDE_COMPANY_ID, 'Content-Type': 'application/json', }, body: JSON.stringify({}),
}); if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
console.log(await response.json());import os
import requests base_url = os.environ["FLUIDE_BASE_URL"]
headers = { "Authorization": f"Bearer {os.environ['FLUIDE_ACCESS_TOKEN']}", "X-Fluide-Api-Key": os.environ["FLUIDE_API_KEY"], "X-Fluide-Client-Id": "fluide-developer", "X-Workspace-Id": os.environ["FLUIDE_WORKSPACE_ID"], "X-Acting-Company-Id": os.environ["FLUIDE_COMPANY_ID"],
} response = requests.post( f"{base_url}/api/v1/payments/billing", headers=headers, json={}, timeout=30,
)
response.raise_for_status()
print(response.json())import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse; String baseUrl = System.getenv("FLUIDE_BASE_URL");
HttpClient client = HttpClient.newHttpClient();
HttpRequest.Builder builder = HttpRequest.newBuilder() .uri(URI.create(baseUrl + "/api/v1/payments/billing")) .header("Authorization", "Bearer " + System.getenv("FLUIDE_ACCESS_TOKEN")) .header("X-Fluide-Api-Key", System.getenv("FLUIDE_API_KEY")) .header("X-Fluide-Client-Id", "fluide-developer") .header("X-Workspace-Id", System.getenv("FLUIDE_WORKSPACE_ID")) .header("X-Acting-Company-Id", System.getenv("FLUIDE_COMPANY_ID")) .header("Content-Type", "application/json") .POST(HttpRequest.BodyPublishers.ofString("{}")) .build();
HttpResponse<String> response = client.send(builder.build(), HttpResponse.BodyHandlers.ofString());
if (response.statusCode() >= 400) throw new RuntimeException("HTTP " + response.statusCode() + ": " + response.body());
System.out.println(response.body());<?php
$baseUrl = getenv("FLUIDE_BASE_URL");
$ch = curl_init($baseUrl . "/api/v1/payments/billing");
curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_HTTPHEADER => [ 'Authorization: Bearer ' . getenv('FLUIDE_ACCESS_TOKEN'), 'X-Fluide-Api-Key: ' . getenv('FLUIDE_API_KEY'), 'X-Fluide-Client-Id: fluide-developer', 'X-Workspace-Id: ' . getenv('FLUIDE_WORKSPACE_ID'), 'X-Acting-Company-Id: ' . getenv('FLUIDE_COMPANY_ID'), 'Content-Type: application/json', ], CURLOPT_POSTFIELDS => "{}",
]);
$response = curl_exec($ch);
if ($response === false) throw new RuntimeException(curl_error($ch));
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($status >= 400) throw new RuntimeException("HTTP $status: $response");
echo $response;{
"success": true,
"message": "Operation completed successfully",
"data": {}
}{
"success": false,
"message": "Validation failed",
"code": "VALIDATION_FAILED",
"statusCode": 400,
"timestamp": "2026-06-03T12:00:00.000Z",
"errors": {
"from": [
"from must be a valid date"
]
}
}{
"success": false,
"message": "Validation failed",
"code": "VALIDATION_FAILED",
"statusCode": 400,
"timestamp": "2026-06-03T12:00:00.000Z",
"errors": {
"from": [
"from must be a valid date"
]
}
}{
"success": false,
"message": "Validation failed",
"code": "VALIDATION_FAILED",
"statusCode": 400,
"timestamp": "2026-06-03T12:00:00.000Z",
"errors": {
"from": [
"from must be a valid date"
]
}
}{
"success": false,
"message": "Validation failed",
"code": "VALIDATION_FAILED",
"statusCode": 400,
"timestamp": "2026-06-03T12:00:00.000Z",
"errors": {
"from": [
"from must be a valid date"
]
}
}Authorizations
Access token JWT. Use as Authorization: Bearer . In the API playground, paste the JWT only.
Developer API key (fl_dev_...). Required on every API call with a machine access token.
First-party client audience. Must match the fluide_client_id claim on the JWT. Use fluide-developer for Connect.
Headers
Partner / ISV only: UUID of the workspace that owns the client company. Required together with X-Acting-Company-Id when scoping product APIs to a merchant. See /getting-started/multi-tenancy.
Partner / ISV only: UUID of the client company to act on. Must belong to the workspace in X-Workspace-Id.
Body
flex, starter, business, growth, enterprise trial, active, past_due, suspended, canceled Fluide Business cadence; annual list = monthly × 12 × 90% (CB-PB-2026.1)
monthly, annual Start or refresh a 30-day free trial window for Fluide Business SaaS
ISO 4217 billing currency
XAF, XOF, NGN, USD, KES, GHS, ZAR, UGX, RWF, TZS, ZMW, MAD, TND, EGP, DZD, LYD, ETB, BIF, DJF, ERN, SSP, LRD, SLE, GMD, GNF, CVE, SCR, KMF, STN, MGA, CDF, BWP, NAD, MUR, MWK, LSL, SZL, MZN, AOA, MRU, SDG, EUR "XAF"
stripe, flutterwave External provider customer id
External provider recurring contract id where applicable
Promo code applied to recurring BASE invoices