Communities
Find the communities a key can reach, and read one community's profile, team and totals.
2 endpoints, generated from openapi.yaml. New to the API? Start with the Overview.
Every other tool needs a projectId. These two are where you get one, and where you read what a community is: its profile, its team, and the totals it has paid out.
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>.
list_manageable_projects
List communities you can manage
Which communities can this key reach?
Every other tool needs a projectId, and this is where you get one. Returns the communities where you are an admin or a moderator. An empty list means the key cannot reach any community data. Passing a projectId you do not administer returns 403 everywhere else.
Arguments
No arguments. Send {"args": {}}.
Returns
Fields inside result.
projectsarray of ManageableProjectErrors
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/list_manageable_projects/execute \
-H "Authorization: Bearer $AIRAA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"args": {}}'const res = await fetch("https://app.airaa.xyz/api/ai/mcp/tools/list_manageable_projects/execute", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.AIRAA_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"args": {}
}),
});
const { result } = await res.json();import os
import requests
res = requests.post(
"https://app.airaa.xyz/api/ai/mcp/tools/list_manageable_projects/execute",
headers={"Authorization": f"Bearer {os.environ['AIRAA_API_KEY']}"},
json={
"args": {}
},
)
res.raise_for_status()
result = res.json()["result"]Response
{
"result": {
"projects": [
{
"projectId": "3f2a9c7e-1b84-4d5a-9e60-7c1af2b83d41",
"slug": "lumenlabs",
"name": "Lumen Labs",
"role": "ADMIN",
"logo": "https://cdn.airaa.xyz/projects/lumenlabs/logo.png",
"pointsToken": {
"id": "b6c0e83f-4a71-4d92-8e15-3c7f9021ba64",
"name": "Lumen Points",
"symbol": "LUMEN",
"logo": "https://cdn.airaa.xyz/tokens/lumen.png"
},
"campaignCommission": 10
},
{
"projectId": "8b41d0c5-72e6-4a19-8f3b-2d95e4a17c68",
"slug": "northwind",
"name": "Northwind Audio",
"role": "MODERATOR",
"logo": null,
"pointsToken": null,
"campaignCommission": 10
}
]
}
}get_project_info
Get a community profile
What is this community, and how big is it?
The community's profile (name, slug, category, logo, banner, description and connected socials) alongside the totals the dashboard header shows: member counts, active and total campaigns, rewards and points distributed, the team roster, and X follower counts.
projectId is required. Omitting it returns 400.
Arguments
projectIdstring | nullrequiredThe community id, from list_manageable_projects.
Returns
Fields inside result.
idstringslugstringnamestringisWhitelabelEnabledbooleancategorystring | nulllogostring | nullbannerstring | nulldescriptionstring | nulltwitterProfileUrlstring | nullX profile URL. Same value as socials.x.
totalMemberCountintegeractiveMembersCountintegerisUserMemberbooleanuserMembershipStatusenum | nullACTIVEINACTIVEPENDINGSUSPENDEDuserRoleenum | nullMEMBERMODERATORADMINactiveCampaignsCountintegertotalCampaignsCountintegerrewardsDistributedstring | nullTotal ERC20 value paid out across all campaigns. Decimal string.
totalPointsDistributedstring | nullTotal community points awarded. Decimal string.
erc20Totalsarray of TokenTotalpointsTotalsarray of TokenTotalteamMembersarray of TeamMembertwitterFollowersCountintegerpointsTokenobject | nullsocialsCommunitySocialsOnly the platforms the community has connected are present.
pendingActionsobjectQueues waiting on an admin: creators who applied to a gig, and people who asked to join the community. Each carries a count and the first few rows.
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_info/execute \
-H "Authorization: Bearer $AIRAA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"args": {"projectId": "3f2a9c7e-1b84-4d5a-9e60-7c1af2b83d41"}}'const res = await fetch("https://app.airaa.xyz/api/ai/mcp/tools/get_project_info/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"
}
}),
});
const { result } = await res.json();import os
import requests
res = requests.post(
"https://app.airaa.xyz/api/ai/mcp/tools/get_project_info/execute",
headers={"Authorization": f"Bearer {os.environ['AIRAA_API_KEY']}"},
json={
"args": {
"projectId": "3f2a9c7e-1b84-4d5a-9e60-7c1af2b83d41"
}
},
)
res.raise_for_status()
result = res.json()["result"]Response
{
"result": {
"id": "3f2a9c7e-1b84-4d5a-9e60-7c1af2b83d41",
"slug": "lumenlabs",
"name": "Lumen Labs",
"isWhitelabelEnabled": false,
"category": "Tech",
"logo": "https://cdn.airaa.xyz/projects/lumenlabs/logo.png",
"banner": "https://cdn.airaa.xyz/projects/lumenlabs/banner.png",
"description": "Focus tooling for people who build things.",
"twitterProfileUrl": "https://x.com/lumenlabs",
"totalMemberCount": 1284,
"activeMembersCount": 417,
"isUserMember": true,
"userMembershipStatus": "ACTIVE",
"userRole": "ADMIN",
"activeCampaignsCount": 2,
"totalCampaignsCount": 11,
"rewardsDistributed": "48210.50",
"totalPointsDistributed": "1920000",
"erc20Totals": [
{
"totalAmount": "48210.50",
"symbol": "USDC",
"decimals": 6
}
],
"pointsTotals": [
{
"totalAmount": "1920000",
"symbol": "LUMEN",
"decimals": 0
}
],
"teamMembers": [
{
"userId": "d3b71f68-92a4-4c05-8e37-6b1902ac4f5d",
"role": "ADMIN",
"photoUrl": "https://cdn.airaa.xyz/users/priya.jpg",
"username": "priyanotes",
"name": "Priya R."
}
],
"twitterFollowersCount": 84500,
"pointsToken": {
"symbol": "LUMEN",
"logo": "https://cdn.airaa.xyz/tokens/lumen.png"
},
"socials": {
"web": "https://lumenlabs.com/",
"twitter": "https://x.com/lumenlabs",
"telegram": null,
"discord": "https://discord.gg/lumenlabs",
"youtube": null,
"instagram": "https://instagram.com/lumenlabs",
"tiktok": null
},
"pendingActions": {
"gigApplications": {
"count": 18,
"preview": [
{
"userId": "5e9c1a47-3d20-4b68-9f15-8c7e2a04d3b1",
"username": "marasolace",
"photoUrl": "https://cdn.airaa.xyz/users/mara.jpg"
}
]
},
"joinRequests": {
"count": 4,
"preview": [
{
"userId": "2c8f45d1-6e93-40a7-b25c-1d3e9f7a6b08",
"username": "devonbuilds",
"photoUrl": "https://cdn.airaa.xyz/users/devon.jpg"
}
]
}
}
}
}