curl -sS -X POST "$FLUIDE_BASE_URL/api/v1/cohorts/string/memberships" \
-H "Authorization: Bearer $FLUIDE_ACCESS_TOKEN" \
-H "X-Fluide-Api-Key: $FLUIDE_API_KEY" \
-H "X-Fluide-Client-Id: fluide-developer" \
-H "Content-Type: application/json" \
-d '{}'const baseUrl = process.env.FLUIDE_BASE_URL;
const response = await fetch(`${baseUrl}/api/v1/cohorts/string/memberships`, {
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',
'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",
}
response = requests.post(
f"{base_url}/api/v1/cohorts/string/memberships",
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/cohorts/string/memberships"))
.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("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/cohorts/string/memberships");
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',
'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"
]
}
}Invite
curl -sS -X POST "$FLUIDE_BASE_URL/api/v1/cohorts/string/memberships" \
-H "Authorization: Bearer $FLUIDE_ACCESS_TOKEN" \
-H "X-Fluide-Api-Key: $FLUIDE_API_KEY" \
-H "X-Fluide-Client-Id: fluide-developer" \
-H "Content-Type: application/json" \
-d '{}'const baseUrl = process.env.FLUIDE_BASE_URL;
const response = await fetch(`${baseUrl}/api/v1/cohorts/string/memberships`, {
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',
'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",
}
response = requests.post(
f"{base_url}/api/v1/cohorts/string/memberships",
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/cohorts/string/memberships"))
.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("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/cohorts/string/memberships");
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',
'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.
Path Parameters
cohortId identifier
Body
Business organization id (kind = BUSINESS) — Fluide Business ID (FBI) for tenants already on Fluide.
Invite by email when the business is not on Fluide yet; queues a join link to fluide-admin.
Optional company id under the business.
1000Operations data scope flag.
Financials data scope flag.
FACS data scope flag.
HR module scope (defaults from operations when omitted).
Payroll module scope (defaults from operations when omitted).
Accounting / books scope (defaults from financials when omitted).
Insurance / benefits reads (reserved).