People
Your community roster and the earnings leaderboard for any date range.
2 endpoints, generated from openapi.yaml. New to the API? Start with the Overview.
Who is in a community, and who earned the most in it. In both responses username is the Airaa username, not a handle on X, TikTok or Instagram. Platform handles live in platforms[].handle on a member and socialConnections[].externalUsername on a leaderboard row.
https://app.airaa.xyzEvery tool is a POST to /api/ai/mcp/tools/{tool}/execute with arguments wrapped in an args object, authorised with Authorization: Bearer airaa_<key>.
get_project_members_detailed
List community members
Who is in this community?
The member roster with profile info, connected platforms, follower totals and per-community participation stats. Defaults to ACTIVE members. Filtering to any other status requires you to be an admin or moderator of that community.
Returns a bare array with no metadata, so nothing in the response tells you whether more pages exist. Page until a request returns fewer rows than limit.
Arguments
projectIdstring | nullrequiredThe community id, from list_manageable_projects.
statusobjectNarrow to one membership status. Defaults to ACTIVE. Any other value requires you to be an admin or moderator of the community.
pageintegerPage number, 1-indexed
limitintegerItems per page, max 100
roleobjectNarrow to one role. Omit to include every role.
nicheobjectNarrow to members tagged with one niche. Omit to include every niche.
platformsstring | nullNarrow to members who connected these platforms, comma-separated. Valid slugs: x, instagram, youtube.
searchstring | nullSearch by name or username
Returns
Fields inside result.
userIdstringusernamestring | nullAiraa username.
namestring | nullphotoUrlstring | nullstatusenumACTIVEINACTIVEPENDINGSUSPENDEDroleenumMEMBERMODERATORADMINnichearray of string | nulllocationCountrystring | nullplatformsarray of MemberPlatformtotalFollowersintegercommunityCampaignsParticipatedintegertotalCommunityImpressionsintegerViews this member earned in the community you asked about, not their total across Airaa.
tagsarray of stringAssigned by hand by the community's operators. There is no fixed list of values.
Errors
400An argument is missing or failed validation; the message names the field. Also returned when a required projectId is omitted.401The key is missing or not valid.403The key is valid but you do not administer that community.404No such tool, or no campaign with that id.429Too many requests. Tool execution is limited to 120 calls per minute per user.
Request
curl -X POST https://app.airaa.xyz/api/ai/mcp/tools/get_project_members_detailed/execute \
-H "Authorization: Bearer $AIRAA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"args": {"projectId": "3f2a9c7e-1b84-4d5a-9e60-7c1af2b83d41","limit": 50}}'const res = await fetch("https://app.airaa.xyz/api/ai/mcp/tools/get_project_members_detailed/execute", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.AIRAA_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"args": {
"projectId": "3f2a9c7e-1b84-4d5a-9e60-7c1af2b83d41",
"limit": 50
}
}),
});
const { result } = await res.json();import os
import requests
res = requests.post(
"https://app.airaa.xyz/api/ai/mcp/tools/get_project_members_detailed/execute",
headers={"Authorization": f"Bearer {os.environ['AIRAA_API_KEY']}"},
json={
"args": {
"projectId": "3f2a9c7e-1b84-4d5a-9e60-7c1af2b83d41",
"limit": 50
}
},
)
res.raise_for_status()
result = res.json()["result"]Response
A bare array with no metadata, so page until you get fewer rows than limit.
{
"result": [
{
"userId": "5e9c1a47-3d20-4b68-9f15-8c7e2a04d3b1",
"username": "marasolace",
"name": "Mara S.",
"photoUrl": "https://cdn.airaa.xyz/users/mara.jpg",
"status": "ACTIVE",
"role": "MEMBER",
"niche": [
"Tech",
"Lifestyle"
],
"locationCountry": "United States",
"platforms": [
{
"slug": "tiktok",
"handle": "mara.clips",
"followersCount": 24400
},
{
"slug": "x",
"handle": "mara_writes",
"followersCount": 18400
}
],
"totalFollowers": 42800,
"communityCampaignsParticipated": 6,
"totalCommunityImpressions": 1284000,
"tags": [
"top-performer"
]
},
{
"userId": "2c8f45d1-6e93-40a7-b25c-1d3e9f7a6b08",
"username": "devonbuilds",
"name": "Devon K.",
"photoUrl": "https://cdn.airaa.xyz/users/devon.jpg",
"status": "ACTIVE",
"role": "MODERATOR",
"niche": [
"Tech"
],
"locationCountry": "United Kingdom",
"platforms": [
{
"slug": "tiktok",
"handle": "devon.codes",
"followersCount": 5120
}
],
"totalFollowers": 5120,
"communityCampaignsParticipated": 2,
"totalCommunityImpressions": 41800,
"tags": []
}
]
}get_project_earnings_leaderboard
Get the earnings leaderboard
Who earned the most in this community over a date range?
Every row carries totalViews, totalCampaigns, totalUsdc and totalCommunityToken regardless of what you sort by. sortBy only orders the rows; it does not change what they contain.
There is no sort-by-views option: page the range with metadata.totalPages and re-rank the combined rows yourself. Setting myRank: true returns only your own row and ignores page.
Arguments
projectIdstring | nullrequiredThe community id, from list_manageable_projects.
startDatestringrequiredStart date inclusive (YYYY-MM-DD)
endDatestringrequiredEnd date inclusive (YYYY-MM-DD), must be on/after startDate
sortByenumrequiredWhich total to rank on. Does not change what a row contains: every row carries both USDC and points regardless.
USDCPOINTSpageobjectPage number, 1-indexed
myRankboolean | nullReturn only the key owner's own row for this range. Ignores page.
Returns
Fields inside result.
dataarray of LeaderboardRowmetadataMetadataStandard pagination envelope.
Errors
400An argument is missing or failed validation; the message names the field. Also returned when a required projectId is omitted.401The key is missing or not valid.403The key is valid but you do not administer that community.404No such tool, or no campaign with that id.429Too many requests. Tool execution is limited to 120 calls per minute per user.
Request
curl -X POST https://app.airaa.xyz/api/ai/mcp/tools/get_project_earnings_leaderboard/execute \
-H "Authorization: Bearer $AIRAA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"args": {"projectId": "3f2a9c7e-1b84-4d5a-9e60-7c1af2b83d41","startDate": "2026-08-01","endDate": "2026-08-28","sortBy": "USDC"}}'const res = await fetch("https://app.airaa.xyz/api/ai/mcp/tools/get_project_earnings_leaderboard/execute", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.AIRAA_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"args": {
"projectId": "3f2a9c7e-1b84-4d5a-9e60-7c1af2b83d41",
"startDate": "2026-08-01",
"endDate": "2026-08-28",
"sortBy": "USDC"
}
}),
});
const { result } = await res.json();import os
import requests
res = requests.post(
"https://app.airaa.xyz/api/ai/mcp/tools/get_project_earnings_leaderboard/execute",
headers={"Authorization": f"Bearer {os.environ['AIRAA_API_KEY']}"},
json={
"args": {
"projectId": "3f2a9c7e-1b84-4d5a-9e60-7c1af2b83d41",
"startDate": "2026-08-01",
"endDate": "2026-08-28",
"sortBy": "USDC"
}
},
)
res.raise_for_status()
result = res.json()["result"]Response
Here username is the Airaa username. Platform handles are in socialConnections.
{
"result": {
"data": [
{
"rank": 1,
"username": "marasolace",
"name": "Mara S.",
"photoUrl": "https://cdn.airaa.xyz/users/mara.jpg",
"socialConnections": [
{
"platformId": "f0a4c927-51d8-4b63-9a72-e8d1c3406b5f",
"platformName": "TikTok",
"externalUsername": "mara.clips"
}
],
"totalCampaigns": 4,
"totalViews": 892400,
"totalUsdc": "1284.60",
"totalCommunityToken": "18400"
},
{
"rank": 2,
"username": "devonbuilds",
"name": "Devon K.",
"photoUrl": "https://cdn.airaa.xyz/users/devon.jpg",
"socialConnections": [
{
"platformId": "f0a4c927-51d8-4b63-9a72-e8d1c3406b5f",
"platformName": "TikTok",
"externalUsername": "devon.codes"
}
],
"totalCampaigns": 2,
"totalViews": 41800,
"totalUsdc": "96.20",
"totalCommunityToken": "2100"
}
],
"metadata": {
"page": 1,
"limit": 100,
"totalItems": 214,
"totalPages": 3
}
}
}