The Airaa API gives you programmatic access to your own communities: campaigns, creator submissions, engagement, members, leaderboards, payout tokens and the creator inbox.
It is the same set of tools an AI assistant sees when you connect Airaa over MCP. Anything Claude or Cursor can read through the connector, you can read with a single HTTP call.
What you can read
Thirteen tools, grouped the way the endpoint pages are.
| Area | Tools |
|---|---|
| Communities | list_manageable_projects, get_project_info |
| Campaigns | get_project_campaigns, get_campaign_details |
| Submissions | get_bounty_campaign_submissions, get_video_campaign_submissions |
| People | get_project_members_detailed, get_project_earnings_leaderboard |
| Account | get_user_info, get_tokens, get_current_datetime |
| Chat | get_chat_threads, get_chat_messages |
Each area above has its own page documenting every argument and every response field.
The words this API uses
The product has used more than one name for the same thing. The docs settle on one each, while the wire format keeps the older name in some fields.
| Term | On the wire | What it means |
|---|---|---|
| Community | projectId, project | The brand space campaigns and members belong to. |
| Bounty campaign | campaignType: "social" | Discrete tasks: quote, reply, post. Also called social campaigns or instant tasks. |
| Video campaign | campaignType: "clipping" or "ugc" | Short-form video paid per view. Clipping and UGC are one surface here. |
| Creator | userId, creatorUserId | Someone who submits to a campaign. |
| Chat thread | projectId + creatorUserId | One conversation, per creator, per community. |
So when you see projectId, read "the community id".
Get a key
- Open the Airaa dashboard.
- Go to Profile then API key.
- Create a key. It looks like
airaa_00000000-0000-0000-0000-000000000000.
Your key acts as you. It can only reach communities where you are already an admin or a moderator, so it can never see another brand's data. You can rotate it whenever you want.
Your first call
Every endpoint is a POST to the same shape, with arguments wrapped in an args object.
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": {}}'
{
"result": {
"projects": [
{
"projectId": "3f2a9c7e-1b84-4d5a-9e60-7c1af2b83d41",
"slug": "lumenlabs",
"name": "Lumen Labs",
"role": "ADMIN"
}
]
}
}
Successful responses always return a single result key.
Connect an agent
Claude Code, Claude Desktop and Cursor speak MCP natively, so they pick the tools up with no code.
claude mcp add --transport http --scope user airaa \
https://app.airaa.xyz/api/mcp \
--header "Authorization: Bearer airaa_<your-key>"
For editors that use a JSON config file:
{
"mcpServers": {
"airaa": {
"type": "http",
"url": "https://app.airaa.xyz/api/mcp",
"headers": {
"Authorization": "Bearer airaa_<your-key>"
}
}
}
}
Then ask in plain language: "Who earned the most in my community this month?"
Choosing a community
Most tools need a projectId, which is the community id. If you do not already have one, call list_manageable_projects first and use an id from that response.
- No results means the key cannot reach any community data.
- One result means you can use it directly.
- Several results means you pick the one you want by
name,slugorprojectId.
Passing a projectId you do not administer returns 403. Omitting a required one returns 400.
projectId is required by get_project_info, get_project_campaigns, get_project_members_detailed, get_project_earnings_leaderboard, get_chat_threads and get_chat_messages. On get_tokens it is optional and narrows the result to one community's token.
Pagination
Most paginated tools take page (starting at 1) and limit (1 to 100). What comes back alongside the rows differs per tool, so check which shape you are dealing with before writing a pager.
| Shape | Tools |
|---|---|
metadata with page, limit, totalItems, totalPages | get_bounty_campaign_submissions, get_video_campaign_submissions, get_project_earnings_leaderboard |
counts with live, draft, ended, spent | get_project_campaigns |
page, limit, hasMore at the top level | get_chat_threads |
| A bare array, no envelope at all | get_project_members_detailed, get_chat_messages |
With a bare array, nothing in the response tells you whether more pages exist. Page until a request returns fewer rows than limit.
get_chat_messages does not page by offset at all. It takes before and after as ISO timestamps: before walks further back through the thread, after catches up on what has arrived since.
Errors
| Status | Meaning |
|---|---|
400 | An argument is missing or failed validation. The message names the field. |
401 | The key is missing or not valid. |
403 | The key is valid but you do not administer that community. |
404 | No such tool, or no campaign with that id. |
405 | Execute endpoints accept POST only. |
429 | Too many requests. Tool execution is limited to 120 calls per minute. |
500 | An id argument was not a valid UUID. |
Reference
Full request and response schemas for all thirteen tools, with examples: