Read the member's Exigo figures
Returns one operation’s figures for the signed-in member from their company’s Exigo connector. The member is always the bearer’s member and their Exigo id comes from their membership, never from the request. The company must have Exigo member data turned on, and the membership must be rep-eligible; the team list (team) is for rep members, company admins and root admins. summary is titles, volumes and the estimated payout; team is the people directly below the member; earnings is commissions, payouts and manual adjustments; plan is the company’s title ladders, the same for every member; activity is recent orders, enrollments and titles with performance metrics. Answers are cached briefly per member, operation, month, pages and opened person, names included.
curl --request GET \
--url https://api.fluid.app/api/member/v2026-10/exigo/{operation} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.fluid.app/api/member/v2026-10/exigo/{operation}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.fluid.app/api/member/v2026-10/exigo/{operation}', 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/member/v2026-10/exigo/{operation}",
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.fluid.app/api/member/v2026-10/exigo/{operation}"
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.fluid.app/api/member/v2026-10/exigo/{operation}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/member/v2026-10/exigo/{operation}")
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{
"status": 200,
"exigo": {
"operation": "summary",
"status": "ready",
"as_of": "2026-10-21T15:04:05Z",
"stale": false,
"is_estimate": true,
"figures": {
"operation": "summary",
"customer_id": 4021,
"path": [
{
"customer_id": 4021,
"name": "Sam Example",
"private": false
}
],
"period": {
"id": 24,
"name": "October 2026",
"start": "2026-10-01",
"end": "2026-10-31"
},
"titles": {
"circle_pay": "Silver",
"circle_highest": "Gold",
"team_pay": null,
"team_highest": "Gold II"
},
"volumes": {
"personal_points": 1250.5,
"group_points": 8800,
"qualified_legs": 2
},
"pending": {
"group_points": 640.25
},
"labels": {
"volumes": {
"personal_points": "Personal Points",
"group_points": "Group Points",
"qualified_legs": "Qualified Legs"
},
"pending": {
"group_points": "Scheduled Group Points"
}
},
"title_tracks": [
{
"track": "circle",
"label": "Circle",
"paid_as": "Silver",
"highest": "Gold"
},
{
"track": "team",
"label": "Team",
"paid_as": null,
"highest": "Gold II",
"highest_label": "Highest Team Rank"
}
],
"estimated_payout": {
"circle": 100,
"team": 25.5,
"total": 125.5
},
"teams": [
4388,
5120
],
"team_leaders": [
{
"id": 4388,
"name": "Alex Sample",
"title": "Gold",
"private": false
},
{
"id": 5120,
"name": "Private Member",
"title": null,
"private": true
}
]
}
},
"meta": {
"request_uuid": "01a0f4fe-de00-75b3-8d8a-b74b0cde8b07",
"timestamp": "2026-10-21T15:04:05Z"
}
}{
"status": 401,
"error": {
"message": "A member credential is required",
"details": {
"error": "unauthorized"
}
},
"meta": {
"request_uuid": "01a0f4fe-de00-75b3-8d8a-b74b0cde8b07",
"timestamp": "2026-10-21T15:04:05Z"
}
}{
"status": 403,
"error": {
"message": "Widget is unavailable for this membership",
"details": {}
},
"meta": {
"request_uuid": "01a0f4fe-de00-75b3-8d8a-b74b0cde8b07",
"timestamp": "2026-10-21T15:04:05Z"
}
}{
"status": 404,
"exigo": {
"operation": "summary",
"status": "no_exigo_id",
"as_of": null,
"stale": false,
"is_estimate": false,
"figures": null
},
"meta": {
"request_uuid": "01a0f4fe-de00-75b3-8d8a-b74b0cde8b07",
"timestamp": "2026-10-21T15:04:05Z"
}
}{
"status": 422,
"error": {
"message": "Query parameters are not supported",
"details": {}
},
"meta": {
"request_uuid": "01a0f4fe-de00-75b3-8d8a-b74b0cde8b07",
"timestamp": "2026-10-21T15:04:05Z"
}
}{
"status": 503,
"exigo": {
"operation": "summary",
"status": "unavailable",
"as_of": null,
"stale": false,
"is_estimate": false,
"figures": null
},
"meta": {
"request_uuid": "01a0f4fe-de00-75b3-8d8a-b74b0cde8b07",
"timestamp": "2026-10-21T15:04:05Z"
}
}Authorizations
A member credential in the Authorization: Bearer header: a portal
JWT whose login is linked to a membership in that company, or an
opaque member token. The credential alone identifies the member and
company. A member session JWT, the kind order and subscription email
links carry, is refused with 403. A company admin's own credential is
not a member credential and gets 401.
Path Parameters
The operation to read.
summary, team, earnings, plan, activity Query Parameters
Month to read, as YYYY-MM. Defaults to the current month in the company's Exigo timezone. Accepted only for summary, team and earnings; plan accepts no query parameters.
^\d{4}-(0[1-9]|1[0-2])$"2026-10"
Page of the team list, 25 per page, from 1 to 1000. Accepted for team. On the member's own earnings it pages both the ledger and the payouts, an older form kept for existing clients; use ledger_page and payouts_page instead.
^([1-9]\d{0,2}|1000)$"2"
Limit the team list to affiliates or customers. Accepted only for team.
affiliate, customer Page of the earnings commission ledger, 25 per page, from 1 to 1000. Accepted only for the member's own earnings.
^([1-9]\d{0,2}|1000)$"2"
Page of the earnings payouts, 25 per page, from 1 to 1000. Accepted only for the member's own earnings.
^([1-9]\d{0,2}|1000)$"2"
Exigo customer id of someone in the member's team to read instead of the member. Use the team/{exigo_id}/{operation} path instead. Accepted only for summary, team and activity, with the same checks as the path; the member's own id reads as if it were not sent.
^[1-9]\d{0,9}$"4388"
Response
The figures. Their shape follows the operation.
The envelope every Exigo answer is in, with or without figures.
curl --request GET \
--url https://api.fluid.app/api/member/v2026-10/exigo/{operation} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.fluid.app/api/member/v2026-10/exigo/{operation}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.fluid.app/api/member/v2026-10/exigo/{operation}', 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/member/v2026-10/exigo/{operation}",
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.fluid.app/api/member/v2026-10/exigo/{operation}"
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.fluid.app/api/member/v2026-10/exigo/{operation}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/member/v2026-10/exigo/{operation}")
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{
"status": 200,
"exigo": {
"operation": "summary",
"status": "ready",
"as_of": "2026-10-21T15:04:05Z",
"stale": false,
"is_estimate": true,
"figures": {
"operation": "summary",
"customer_id": 4021,
"path": [
{
"customer_id": 4021,
"name": "Sam Example",
"private": false
}
],
"period": {
"id": 24,
"name": "October 2026",
"start": "2026-10-01",
"end": "2026-10-31"
},
"titles": {
"circle_pay": "Silver",
"circle_highest": "Gold",
"team_pay": null,
"team_highest": "Gold II"
},
"volumes": {
"personal_points": 1250.5,
"group_points": 8800,
"qualified_legs": 2
},
"pending": {
"group_points": 640.25
},
"labels": {
"volumes": {
"personal_points": "Personal Points",
"group_points": "Group Points",
"qualified_legs": "Qualified Legs"
},
"pending": {
"group_points": "Scheduled Group Points"
}
},
"title_tracks": [
{
"track": "circle",
"label": "Circle",
"paid_as": "Silver",
"highest": "Gold"
},
{
"track": "team",
"label": "Team",
"paid_as": null,
"highest": "Gold II",
"highest_label": "Highest Team Rank"
}
],
"estimated_payout": {
"circle": 100,
"team": 25.5,
"total": 125.5
},
"teams": [
4388,
5120
],
"team_leaders": [
{
"id": 4388,
"name": "Alex Sample",
"title": "Gold",
"private": false
},
{
"id": 5120,
"name": "Private Member",
"title": null,
"private": true
}
]
}
},
"meta": {
"request_uuid": "01a0f4fe-de00-75b3-8d8a-b74b0cde8b07",
"timestamp": "2026-10-21T15:04:05Z"
}
}{
"status": 401,
"error": {
"message": "A member credential is required",
"details": {
"error": "unauthorized"
}
},
"meta": {
"request_uuid": "01a0f4fe-de00-75b3-8d8a-b74b0cde8b07",
"timestamp": "2026-10-21T15:04:05Z"
}
}{
"status": 403,
"error": {
"message": "Widget is unavailable for this membership",
"details": {}
},
"meta": {
"request_uuid": "01a0f4fe-de00-75b3-8d8a-b74b0cde8b07",
"timestamp": "2026-10-21T15:04:05Z"
}
}{
"status": 404,
"exigo": {
"operation": "summary",
"status": "no_exigo_id",
"as_of": null,
"stale": false,
"is_estimate": false,
"figures": null
},
"meta": {
"request_uuid": "01a0f4fe-de00-75b3-8d8a-b74b0cde8b07",
"timestamp": "2026-10-21T15:04:05Z"
}
}{
"status": 422,
"error": {
"message": "Query parameters are not supported",
"details": {}
},
"meta": {
"request_uuid": "01a0f4fe-de00-75b3-8d8a-b74b0cde8b07",
"timestamp": "2026-10-21T15:04:05Z"
}
}{
"status": 503,
"exigo": {
"operation": "summary",
"status": "unavailable",
"as_of": null,
"stale": false,
"is_estimate": false,
"figures": null
},
"meta": {
"request_uuid": "01a0f4fe-de00-75b3-8d8a-b74b0cde8b07",
"timestamp": "2026-10-21T15:04:05Z"
}
}