# Welcome to Airaa Source: https://airaa.xyz/docs Airaa is a **Web3 creator distribution marketplace**, connecting brands that want targeted reach with creators who want to monetize their social influence. Brands launch campaigns. Creators earn. Payouts are instant, Onchain, and permissionless. > **Airaa v2 is live.** [Launch your first campaign →](https://app.airaa.xyz) --- # What is Airaa? > Airaa connects brands that want targeted reach with creators who want to monetize their social influence. Source: https://airaa.xyz/docs/getting-started/what-is-airaa Airaa is a **Web3 creator distribution marketplace**. It sits between brands that need genuine social reach and creators who want to earn from their influence in crypto. Brands come with a budget and a goal: grow awareness, drive engagement, or reward their community. Creators come with an audience and a voice. Airaa matches them based on eligibility, handles verification, and settles payments Onchain the moment a task is completed. ### Campaign types **Bounties** are short, action-based tasks: follow an account, post about a project, quote tweet an announcement. Complete the task, claim your reward in USDC. **UGC campaigns** are briefed short-form videos. Creators make native vertical content for TikTok, Reels, Shorts or X against the brand's guidelines, and get paid per view once it is verified. **Clipping campaigns** turn one long piece of content, a Space, podcast, AMA or YouTube video, into many short clips distributed across platforms, again paid per view. > Payouts on Airaa run on **Base** (Coinbase's L2) in USDC. No manual processing: rewards settle Onchain within 48 hours. --- # How it works > The five steps a campaign takes, from either side: launching one as a brand, or earning from one as a creator. Source: https://airaa.xyz/docs/getting-started/how-it-works Airaa works differently depending on which side you're on. #### For Brands **Step 1: Create your account** Connect your wallet and set up your brand profile on Airaa. **Step 2: Launch a campaign** Choose a campaign type: Bounty, UGC or Clipping. Set your task type, content guidelines, and eligibility filters (follower count, Aura Score, location, niche). **Step 3: Fund the reward pool** Set your budget. The pool is what creators earn; Airaa itself is a subscription, so there is no percentage taken out of what you fund. See [pricing](https://airaa.xyz/pricing). **Step 4: Go live** Eligible creators are instantly notified via Telegram. Your campaign is discoverable on the Airaa Discover page. **Step 5: Track performance** Monitor who participated, impressions generated, and campaign metrics in real time. #### For Creators **Step 1: Connect your accounts** Sign in with your X (Twitter) account and connect your crypto wallet on Base. **Step 2: Set up Telegram alerts** Interact with the Airaa bot once to get instant notifications whenever a campaign you're eligible for goes live. **Step 3: Discover campaigns** Browse active campaigns on the Discover page. Campaigns you don't qualify for are shown as ineligible. **Step 4: Complete tasks** Follow the brand's instructions, draft your post, pre-verify it with Airaa's AI tool, then post on X and submit. **Step 5: Earn** Claim your USDC reward on Base. Payouts settle within 48 hours. All creators also earn Aura Points for every campaign they participate in. > Not sure what your Aura Score is or how it affects your eligibility? [Learn about Aura Points →](/docs/for-creators/aura-points) --- # Getting Started > Connect your accounts, set up Telegram alerts, and find the first campaign you are eligible for. Source: https://airaa.xyz/docs/for-creators/getting-started Airaa lets you earn USDC by creating content for Web3 brands. Every campaign is Onchain, with no invoices, no waiting on manual transfers. ### What you need * An active **X (Twitter)** account * A crypto wallet on the **Base** network --- ### Setting up **Step 1: Connect your X account**\ Sign in to Airaa using your X account. Airaa pulls your profile data (follower count, smart followers, engagement history) to build your creator profile and determine which campaigns you're eligible for. **Step 2: Connect your wallet**\ Connect a Base-compatible wallet (e.g. MetaMask, Coinbase Wallet). This is where your USDC rewards will be sent. **Step 3: Enable Telegram alerts**\ Interact with the Airaa Telegram bot once to activate notifications. You'll get an instant alert every time a campaign you're eligible for goes live, so you never miss a FCFS slot. --- ### Your Discover page Once you're in, the Discover page is your home base: * **Earnings dashboard**: track this week's earnings, pending payouts, and your all-time total * **Campaign feed**: all live campaigns, filtered by your eligibility * **Top Earners**: see where you rank against other creators on the platform --- ### Campaign eligibility Every campaign on Airaa is visible to all creators. If you don't meet a campaign's eligibility criteria, it will show as **Ineligible** in your feed. You won't see the specific reason, just that you don't currently qualify. > Your eligibility is determined by your Aura Score, follower count, smart follower count, location, and niche. [Learn how Aura Points work →](/docs/for-creators/aura-points) --- # Bounties > Fixed-reward tasks you claim, complete and get paid for, without waiting on approval queues. Source: https://airaa.xyz/docs/for-creators/bounties Bounties are short, action-based campaigns launched by brands. Complete the task, verify your submission, and earn USDC, all within the app. --- ### Task types | Type | What you do | | ------------------------ | ------------------------------------------------------------------- | | **Quote Tweet** | Quote-tweet a specific post from the brand with your own commentary | | **Original Post** | Write and publish an original post about the brand | | **Follow + Post** | Follow the brand's account and publish a post | | **Follow + Quote Tweet** | Follow the brand's account and quote-tweet their post | Each task comes with **content guidelines** set by the brand: tone, required hashtags, required mentions, and what makes a winning submission. Read these carefully before posting. --- ### How to complete a task **Step 1: Find an eligible campaign**\ Browse the Campaigns page. Expand any campaign to see its tasks, reward amount, and instructions. **Step 2: Pre-verify your content**\ Before posting, use Airaa's **AI pre-verification tool** to check if your draft matches the campaign's guidelines. This tells you whether your content will be approved, before you commit to posting. Use this to avoid rejected submissions. **Step 3: Post on X**\ Once you're confident your content passes, publish it on X. **Step 4: Submit and verify**\ Return to the app, paste your post URL, and submit for verification. The AI checks that your live post matches the campaign requirements. **Step 5: Claim your reward**\ Once verified, your reward is queued for payout. USDC lands in your wallet **within 48 hours**. --- ### How your reward is calculated Your payout is not a flat rate. It's calculated based on: * Your **engagement history** and average impressions * Your **Aura Score** (minimum 200 required to qualify for USDC rewards) * Your **smart follower count** * Your overall **profile quality** on Airaa Creators with stronger profiles and higher engagement earn more for the same task. > Below an Aura Score of 200? You can still participate in campaigns and earn **Aura Points**. USDC payouts unlock once you hit the threshold. [Learn about Aura Points →](/docs/for-creators/aura-points) --- ### Distribution: FCFS Most Bounties use **First Come First Served (FCFS)** distribution: a fixed number of slots are available and fill up as creators claim them. When a campaign fills up, it closes. Set up your Telegram alerts to be first in line. > **Do not delete your post after submitting.** Payouts are processed within a 48-hour window. Deleting a post before settlement will forfeit your reward, and the brand can raise a dispute. Repeated violations will result in a permanent ban from the platform. --- # Aura Points > How your Aura Score is calculated and what it unlocks in campaign eligibility. Source: https://airaa.xyz/docs/for-creators/aura-points Aura Points are earned by every creator who participates in campaigns on Airaa, regardless of your Aura Score or follower count. They are your long-term record of contribution on the platform. --- ### How you earn Aura Points * Completing any Bounty * Submitting to a UGC or Clipping campaign * The better your content performs, the more points you accumulate --- ### Aura Score vs. Aura Points These are two different things: | | Aura Score | Aura Points | | --------------------- | ------------------------------------------------------------------------------------ | ------------------------------------------------- | | **What it is** | Your reputation score on the platform | Points accumulated through campaign participation | | **Who earns it** | All creators (score is computed from your profile quality, engagement, and activity) | All creators, earned actively by participating | | **Minimum threshold** | 200 required to qualify for USDC rewards | No minimum, everyone earns from day one | | **Used for** | Brand eligibility filters, payout rate | Platform leaderboard, future rewards | --- ### What Aura Points are used for Right now, Aura Points are tracked and displayed on your profile. Coming soon: * A **dedicated Aura Points leaderboard** ranking the top contributors across the platform * **Separate rewards** for top Aura Points holders --- # Creator Rules > What gets a submission rejected, and the conduct rules that keep you eligible to earn. Source: https://airaa.xyz/docs/for-creators/creator-rules Airaa is built on the quality of its creator network. To keep campaigns valuable for brands and earnings fair for legitimate creators, the following rules are enforced across the platform. --- ### What's not allowed **Engagement farming**\ Circle-jerking (sharing your posts in engagement farming communities or coordinated groups to artificially inflate likes, retweets, and impressions) is prohibited. Airaa's algorithm detects abnormal engagement patterns and flags them automatically. **AI-generated slop**\ Submitting low-effort AI-generated text, AI images, or content that is slightly rephrased from a previous submission is not allowed. Content must be original, high-quality, and genuinely created by you. Repurposing a previous angle or format is fine. Copy-pasting the same post with minor tweaks is not. **Misrepresentation**\ Submitting a post that doesn't genuinely match the campaign's content guidelines, even if it technically passes at surface level, violates platform rules. --- ### How enforcement works Airaa's algorithm continuously monitors engagement quality and content patterns. Violations don't result in manual warnings. **Consequences are applied automatically** based on what the system detects: * **Aura Score demotion**: your reputation score is reduced, lowering your payout rates and restricting access to higher-value campaigns * **Platform ban**: repeated or severe violations result in a permanent ban > There is no dispute or appeal process for AI content rejections or algorithmic enforcement actions. The best way to stay in good standing is to post genuine, high-quality content from the start. --- ### A note on repurposed content You're allowed to post about the same brand across multiple campaigns. You're not allowed to recycle the same images, the same post structure, or near-identical content repeatedly. Each submission should represent a fresh, authentic take. --- # Getting Started > Set up your brand profile, fund a reward pool and put your first campaign in front of creators. Source: https://airaa.xyz/docs/for-brands/getting-started Airaa gives brands a direct line to crypto-native creators, with no middlemen, no negotiating rates, no manual payment processing. Campaigns are funded Onchain and payouts are handled automatically. --- ### Ways to run campaigns | | What it is | Best for | | --- | --- | --- | | **Bounties** | Short social actions: follow, post, quote tweet. Launch it yourself, $100 minimum pool. | Quick distribution, amplification, follower growth | | **UGC** | Briefed short-form video, native to TikTok, Reels, Shorts or X, paid per view once verified. | Original creative at volume | | **Clipping** | One long piece of content cut into many short clips and distributed across platforms. | Getting reach out of content you already have | --- ### Launching a Bounty Bounty campaigns are launched through a 4-step flow directly on the platform: **Step 1: Details**\ Set your campaign type (Social), platform (X), task type (Quote Tweet or Original Post), post URL to amplify, required hashtags, required mentions, and content guidelines for creators. **Step 2: Eligibility**\ Define who can participate. Set filters for follower count, smart follower count, Aura Score, location, and niche. Or use a **Quick Select** list: Airaa-curated lists of top-quality creators in specific niches or sectors. **Step 3: Budget**\ Set your reward pool (minimum $100 in USDC on Base). The pool is what creators earn, and Airaa takes no percentage of it: the platform is a monthly subscription, starting at $99/mo on Launch. See [pricing](https://airaa.xyz/pricing) for what each plan includes. Choose your distribution method: FCFS, Raffle, or Offers. **Step 4: Review and launch**\ Confirm all details and fund the campaign from your wallet. Once live, eligible creators are instantly notified via Telegram. --- ### After launch * **You cannot pause or cancel a campaign** once it goes live * If your campaign has **unspent budget after one week**, you can withdraw the remaining funds * All content verification and payouts are handled automatically, you don't manually approve or reject submissions > Ready to launch? [Go to Airaa →](https://app.airaa.xyz) --- # Bounties > Fixed-price campaigns for predictable output, with eligibility filters that pick who can claim. Source: https://airaa.xyz/docs/for-brands/bounties Bounties are the fastest way to get crypto-native creators posting about your brand. Set your task, define your audience, fund the pool, and creators start submitting within minutes. --- ### Task types | Type | What creators do | | ------------------------ | --------------------------------------------------------- | | **Quote Tweet** | Quote-tweet your specified post with their own commentary | | **Original Post** | Write and publish an original post about your brand | | **Follow + Post** | Follow your account and publish a post | | **Follow + Quote Tweet** | Follow your account and quote-tweet your post | You can require specific **hashtags** (up to 3), **mentions** (up to 3), and provide detailed **content guidelines**: tone, messaging, and what a winning submission looks like. --- ### Targeting the right creators **Eligibility filters**\ Set minimum and maximum thresholds for: * Follower count * Smart follower count (followers who are themselves influential) * Aura Score * Location * Niche **Quick Select lists**\ Airaa maintains curated lists of top-quality creators by niche and sector. Select one of these lists to instantly target a pre-vetted audience without manually configuring filters. --- ### Distribution methods **FCFS (First Come First Served)**\ Slots are claimed on a first-come basis. Any creator matching your eligibility criteria can participate until the campaign fills up. **Raffle** _(coming soon)_\ A fixed number of reward slots are distributed by lottery among all eligible creators who submit qualifying content. **Offers** _(coming soon)_\ Send campaign invites directly to a specific list of creators. Only the creators you select can participate, ideal when you have a shortlist of 50–100 creators you want to work with specifically. --- ### Campaign analytics Once your campaign is live, your dashboard shows: * **Participating creators**: who submitted, which tasks they completed, and their engagement metrics * **Total reach**: cumulative impressions across all submissions * **Engagement breakdown**: likes, retweets, and CPM across the campaign * **Creator-level performance**: view individual submission stats per creator Payouts are distributed automatically once the AI validates each submission against your content guidelines. You don't control or trigger individual payouts. > Campaigns cannot be paused or cancelled after going live. If your campaign has unspent budget after one week, you can withdraw the remaining funds from your dashboard. --- # Communities > Build a brand-owned creator community that persists across campaigns, instead of renting an audience each time. Source: https://airaa.xyz/docs/for-brands/communities > Communities are currently in development and will be available soon. Communities are brand-owned community hubs inside Airaa. They bring your creator network, campaigns, and analytics into one place, giving you a permanent home on the platform beyond individual campaigns. --- ### What a Community includes **Community space**\ Your community has its own Overview page showing your brand's stats: total rewards distributed, active campaigns, and total members. Creators can browse your announcements and chat directly with your team. **Members dashboard**\ See every creator who has joined your community with detailed Airaa-computed data on each one: * **Persona**: creator archetype automatically assigned based on Onchain and social behaviour (Power Creator, DeFi Native, Trader, Creator) * **Posts, Impressions, Engagement rate**: pulled from X * **Top Protocols**: which Onchain protocols they interact with most * **Wallet size**: derived from Onchain data **Brand Studio**\ Launch and manage campaigns directly from your community, with a full history of all past campaigns and their performance. **Dashboard**\ Track all your campaigns in one place: who participated, how they performed, and what your spend has generated across the platform. --- ### How creators join Creators request to join your community. Your admin approves or rejects each request. Once they're in, they're part of your permanent creator network on Airaa, visible in your members dashboard and reachable for future campaigns. --- # Glossary > Every Airaa term in one place: Aura Score, Communities, Bounties, pools, payouts and the rest. Source: https://airaa.xyz/docs/key-concepts/glossary A reference for key terms used across Airaa. --- **Aura Points**\ Points earned by all creators for participating in any campaign on Airaa, regardless of Aura Score. Aura Points accumulate over time and will soon unlock a dedicated leaderboard and separate rewards for top holders. **Aura Score**\ Your reputation score on the platform. Computed from your engagement history, profile quality, smart follower count, and activity on Airaa. A minimum score of **200 is required to qualify for USDC rewards** on Bounties. Used by brands as an eligibility filter. **CPM**\ Cost per mille (thousand impressions). Used to calculate creator payouts on Bounties. Your CPM rate is determined by your Aura Score, engagement history, average impressions, and overall profile quality. **FCFS (First Come First Served)**\ A distribution method where campaign slots are claimed on a first-come basis. Any eligible creator can participate until all slots are filled. **Communities**\ Brand-owned community hubs on Airaa where brands manage their creator network, run campaigns, post announcements, and track analytics. Coming soon. **Offers**\ A distribution method (coming soon) where brands send campaign invites to a specific list of creators. Only those creators can participate, ideal for targeted, invite-only campaigns. **Persona**\ Creator archetype automatically assigned by Airaa based on a creator's Onchain and social behaviour. Types: Power Creator, DeFi Native, Trader, Creator. **Quick Select**\ Airaa-curated lists of top-quality creators in specific niches or sectors. Brands can use these lists to instantly target a pre-vetted audience when setting up campaign eligibility. **Smart Followers**\ Followers who are themselves influential accounts. Smart follower count is a quality signal used in creator eligibility filters and payout calculations, distinct from raw follower count. --- # Overview > Read your campaigns, submissions, members and leaderboards over HTTP or MCP with an airaa_ key. Source: https://airaa.xyz/docs/api/overview The Airaa API gives you programmatic access to your own communities: campaigns, creator submissions, engagement, members, leaderboards and payout tokens. 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. > The API is read only today. Launching a campaign, approving content and releasing payouts still happen in the dashboard. Write access is on the way. --- ### What you can read | Area | Tools | | --- | --- | | **Communities** | `list_manageable_projects`, `get_project_info` | | **Campaigns** | `get_my_campaigns`, `get_campaign_details`, `get_clipping_campaign_detail` | | **Submissions** | `get_campaign_submissions`, `get_clipping_owner_submissions` | | **People** | `get_project_members_detailed`, `get_project_leaderboard` | | **Account** | `get_user_info`, `get_tokens`, `get_current_datetime` | Every field of every response is documented in the endpoint pages, grouped by area: [Communities](/docs/api/communities), [Campaigns](/docs/api/campaigns), [Submissions](/docs/api/submissions), [People](/docs/api/people) and [Account](/docs/api/account). --- ### Get a key 1. Open the Airaa dashboard. 2. Go to **Profile** then **API key**. 3. 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. > Treat the key like a password. Send it in the `Authorization` header, never in a URL, and never commit it to a repository. --- ### Your first call Every endpoint is a `POST` to the same shape, with arguments wrapped in an `args` object. ```bash 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": {}}' ``` ```json { "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 #### MCP Claude Code, Claude Desktop and Cursor speak MCP natively, so they pick the tools up with no code. ```bash claude mcp add --transport http --scope user airaa \ https://app.airaa.xyz/api/mcp \ --header "Authorization: Bearer airaa_" ``` For editors that use a JSON config file: ```json { "mcpServers": { "airaa": { "type": "http", "url": "https://app.airaa.xyz/api/mcp", "headers": { "Authorization": "Bearer airaa_" } } } } ``` Then ask in plain language: *"Who earned the most in my community this month?"* #### Skill Agents that support skills can install the Airaa toolkit in one command. It ships the workflow, the arguments and a worked example for every tool. ```bash npx skills add https://app.airaa.xyz ``` The skill markdown is also downloadable directly, with no key required: ```bash curl -OJ https://app.airaa.xyz/api/ai/mcp/skill ``` #### REST Everything else calls the tools over plain HTTP: ChatGPT actions, n8n, Zapier, a cron job, your own dashboard. ```bash curl -X POST https://app.airaa.xyz/api/ai/mcp/tools/get_my_campaigns/execute \ -H "Authorization: Bearer $AIRAA_API_KEY" \ -H "Content-Type: application/json" \ -d '{"args": {"limit": 10}}' ``` See the endpoint pages for every tool and its arguments, starting with [Campaigns](/docs/api/campaigns). --- ### Choosing a community Most tools need a `projectId`. 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`, `slug` or `projectId`. Passing a `projectId` you do not administer returns `403`. > `get_project_info` and `get_project_members_detailed` both require `projectId`, even though it is listed as optional in the tool schema. Omitting it returns `400`. --- ### Pagination Paginated tools take `page` (starting at 1) and `limit` (1 to 100), and return a `metadata` object: ```json { "metadata": { "page": 1, "limit": 10, "totalItems": 44, "totalPages": 5 } } ``` Two exceptions worth knowing: * `get_my_campaigns` returns a `counts` object instead of `metadata`. * `get_project_members_detailed` returns a bare array with no `metadata` at all, so nothing in the response tells you whether more pages exist. --- ### 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. | | `500` | An id argument was not a valid UUID. | > Some failures currently return **HTTP 200** with the error nested inside `result`, so check for `result.error` as well as the status code. ```json { "result": { "error": "Clipping campaign not found" } } ``` This happens when you call a clipping tool on a social campaign, and when a leaderboard query gets an unparseable date. --- ### Reference Full request and response schemas for all twelve tools, with examples: See also: Read the endpoint reference (/docs/api/campaigns) --- # Communities > Find the communities a key can reach, and read one community's profile, team and totals. Source: https://airaa.xyz/docs/api/communities Base URL: https://app.airaa.xyz Every tool is a POST to /api/ai/mcp/tools/{tool}/execute with arguments wrapped in an `args` object, authorised with `Authorization: Bearer airaa_`. ## list_manageable_projects List communities you can manage Returns the communities where the authenticated user is an admin or a moderator, with `projectId`, `slug`, `name` and `role`. Call this first whenever you need a `projectId` and do not already have one. If it returns nothing, the key cannot reach any community data and there is no other lookup that will work. POST /api/ai/mcp/tools/list_manageable_projects/execute Example response: ```json { "result": { "projects": [ { "projectId": "3f2a9c7e-1b84-4d5a-9e60-7c1af2b83d41", "slug": "lumenlabs", "name": "Lumen Labs", "guildEnabled": true, "role": "ADMIN", "demoMode": false, "isPersonalProject": false, "accentColor": "#f5cb42", "logo": "https://cdn.airaa.xyz/images/projects/logo/3f2a9c7e-1b84-4d5a-9e60-7c1af2b83d41.png", "pointsToken": { "id": "b81c4d02-5f6a-4e33-a1d7-92e845bc0f16", "name": "Lumen Points", "symbol": "LUM", "logo": "" }, "campaignCommission": 50 } ] } } ``` Errors: - 401: The key is missing or not valid. - 405: Execute endpoints accept POST only. ## get_project_info Get a community profile Returns a community overview: metadata, the authenticated user's membership status and role, member counts, campaign and rewards totals, team members, X follower counts, points token and social links. `projectId` is required in practice. The tool schema marks it optional, but omitting it returns `400`. POST /api/ai/mcp/tools/get_project_info/execute Arguments: - `projectId` (string, required) A community id from `list_manageable_projects`. Example response: ```json { "result": { "id": "3f2a9c7e-1b84-4d5a-9e60-7c1af2b83d41", "slug": "lumenlabs", "name": "Lumen Labs", "isWhitelabelEnabled": true, "category": "Tech", "logo": "https://cdn.airaa.xyz/images/projects/logo/3f2a9c7e-1b84-4d5a-9e60-7c1af2b83d41.png", "banner": "https://cdn.airaa.xyz/images/projects/banner/3f2a9c7e-1b84-4d5a-9e60-7c1af2b83d41.jpeg", "description": "We see, we create, we earn", "twitterProfileUrl": "https://x.com/lumenlabs", "totalMemberCount": 10, "isUserMember": true, "userMembershipStatus": "ACTIVE", "userRole": "ADMIN", "activeCampaignsCount": 33, "totalCampaignsCount": 35, "rewardsDistributed": "371.4", "totalPointsDistributed": "53018", "erc20Totals": [ { "totalAmount": "371.40000000", "symbol": "USDC", "decimals": 18 } ], "pointsTotals": [ { "totalAmount": "53017.00000000", "symbol": "LUM", "decimals": 0 } ], "activeMembersCount": 10, "teamMembers": [ { "userId": "8d15b4c7-3e29-4a60-9f81-6b2c7e04d5a3", "role": "ADMIN", "photoUrl": "https://cdn.airaa.xyz/images/user-avatars/8d15b4c7-3e29-4a60-9f81-6b2c7e04d5a3", "username": "alexmorgan", "name": "Alex Morgan" }, { "userId": "c40f7a15-9e2b-4c86-b1d3-58a90e6f27b4", "role": "MODERATOR", "photoUrl": "https://cdn.airaa.xyz/images/profile-placeholders/image3.webp", "username": "mayaokonkwo", "name": "Maya Okonkwo" } ], "smartFollowersCount": 1, "pointsToken": { "symbol": "LUM", "logo": null }, "twitterFollowersCount": 105, "demoMode": false, "checklist": { "hasAnnouncement": true, "hasGig": true }, "socials": { "x": "https://x.com/lumenlabs", "telegram": "https://t.me/lumenlabs", "discord": "https://discord.gg/lumenlabs", "youtube": "https://youtube.com/@lumenlabs", "instagram": "https://instagram.com/lumenlabs", "tiktok": "https://tiktok.com/@lumenlabs" } } } ``` Errors: - 400: `projectId` was not supplied. - 401: The key is missing or not valid. - 403: The key is valid but the user does not administer the requested community. - 405: Execute endpoints accept POST only. - 500: An id argument was not a valid UUID. The API currently surfaces the underlying database error rather than a validation message, so validate ids before sending them. --- # Campaigns > List the campaigns you own or moderate, and read any one of them in full. Source: https://airaa.xyz/docs/api/campaigns Base URL: https://app.airaa.xyz Every tool is a POST to /api/ai/mcp/tools/{tool}/execute with arguments wrapped in an `args` object, authorised with `Authorization: Bearer airaa_`. ## get_my_campaigns List your campaigns Returns campaigns the authenticated user owns or moderates. Hidden campaigns are excluded. Omit `projectId` to list campaigns across every community the key can manage. `counts` holds aggregate totals and `projects` lists the communities available to filter by. This response has no `metadata` object. Use `counts` to judge how many campaigns exist and page with `page` and `limit`. POST /api/ai/mcp/tools/get_my_campaigns/execute Arguments: - `projectId` (string | null) A community id from `list_manageable_projects`. - `statusBy` (enum | null) Filter by campaign status. One of: LIVE, ENDED, DRAFT, PAYMENT_PENDING. - `campaignType` (enum | null) Filter by campaign type group. One of: all, instant_tasks, clipping, UGC. - `page` (integer) Page number, 1-indexed. - `limit` (integer) Items per page, 1 to 100. Example response: ```json { "result": { "campaigns": [ { "id": "9c4e1d7a-2f38-4b6c-8e51-0d7a3f96b2c8", "status": "LIVE", "title": "Summer Drop Clips", "createdAt": "2026-08-06T13:01:54.178Z", "campaignType": "clipping", "taskTypes": [ "CLIP_X", "CLIP_INSTAGRAM", "CLIP_TIKTOK" ], "totalPool": "100", "remainingPool": "100", "platform": [ { "id": "1a7d3f5b-8c92-4e06-b4a1-9f27d5c83e60", "name": "X", "enabled": true }, { "id": "2b8e4a6c-9d03-4f17-c5b2-0a38e6d94f71", "name": "Instagram", "enabled": true } ], "payoutType": "FCFS", "completedUsersCount": 0, "incompletedUsersCount": 0, "hasCounterOffer": false, "tokenType": "ERC20", "tokenSymbol": "USDC", "project": { "id": "3f2a9c7e-1b84-4d5a-9e60-7c1af2b83d41", "name": "Lumen Labs", "logo": "https://cdn.airaa.xyz/images/projects/logo/3f2a9c7e-1b84-4d5a-9e60-7c1af2b83d41.png" }, "usedBudget": "0", "approvedClipsCount": 0, "impressions": 0, "pendingReviewsCount": 0 } ], "counts": { "live": 33, "draft": 4, "ended": 2, "spent": 4345 }, "projects": [ { "id": "3f2a9c7e-1b84-4d5a-9e60-7c1af2b83d41", "name": "Lumen Labs", "logo": "https://cdn.airaa.xyz/images/projects/logo/3f2a9c7e-1b84-4d5a-9e60-7c1af2b83d41.png", "role": "ADMIN" } ] } } ``` Errors: - 400: An argument failed schema validation. The message names the offending field and its allowed values. - 401: The key is missing or not valid. - 403: The key is valid but the user does not administer the requested community. - 405: Execute endpoints accept POST only. ## get_campaign_details Get one campaign in full Returns a campaign's full owner-facing detail: basic info, stats, budget, tasks, and for live clipping or UGC campaigns the clipping owner analytics payload. `detailVariant` tells you which shape came back: * `clipping_owner` for CLIPPING and UGC campaigns that are no longer DRAFT. `clippingOwner` is populated and `tasks` is empty. * `social_owner` for SOCIAL campaigns and for any campaign still in DRAFT. `tasks` is populated and `clippingOwner` is `null`. POST /api/ai/mcp/tools/get_campaign_details/execute Arguments: - `projectCampaignId` (string, required) A campaign id, from the `id` field of `get_my_campaigns`. Must be a valid UUID: the API returns a 500 rather than a 400 when it is not. Example response: ```json { "result": { "campaignType": "clipping", "detailVariant": "clipping_owner", "campaign": { "id": "9c4e1d7a-2f38-4b6c-8e51-0d7a3f96b2c8", "projectId": "3f2a9c7e-1b84-4d5a-9e60-7c1af2b83d41", "createdAt": "2026-08-06T13:01:54.178Z", "title": "Summer Drop Clips", "imageUrl": null, "status": "LIVE", "startDate": "2026-08-06T13:01:54.177Z", "type": "clipping", "approvalMode": "MANUAL", "userEligibilityCriteria": { "openToAll": true } }, "project": { "id": "3f2a9c7e-1b84-4d5a-9e60-7c1af2b83d41", "name": "Lumen Labs", "logo": "https://cdn.airaa.xyz/images/projects/logo/3f2a9c7e-1b84-4d5a-9e60-7c1af2b83d41.png" }, "stats": { "creators": 4, "reach": 12480, "likes": 316, "quotes": 12, "post": 9 }, "budget": { "totalPool": "100.000000", "remainingPool": "62.400000", "tokenType": "ERC20", "tokenSymbol": "USDC", "tokenAddress": "0x3AF9cB6000b310c909e10f79A9Ec642960eeEe99", "chainId": "8453", "decimals": 18 }, "tasks": [], "draftConfig": null, "eligibilityProject": null, "clippingOwner": { "eligibilitySummary": { "mode": "open", "guild": null }, "demographicsRequired": false, "demographicsAudienceRule": null, "overview": { "creatorsCount": 4, "totalSubmissionsCount": 9, "submissionsCount": 9, "pendingSubmissionsCount": 2, "approvedSubmissionsCount": 6, "rejectedSubmissionsCount": 1, "paidSubmissionsCount": 5, "reach": 12480, "currentReach": 12495, "initialReach": 15, "likes": 316, "comments": 41 }, "budget": { "label": "Estimated Budget", "totalPool": "100.000000", "remainingPool": "62.400000", "usedBudget": "37.6", "tokenType": "ERC20", "tokenSymbol": "USDC" }, "tasksTab": { "requirements": { "hashtags": [ "#lumendrop" ], "mentions": [ "@lumenlabs" ], "urls": [], "guidelines": "Hook in the first two seconds. No captions over the logo." }, "tasks": [ { "taskId": "4c9a2e78-5b13-4d60-8f27-1a94c6e03b52", "platformId": "1a7d3f5b-8c92-4e06-b4a1-9f27d5c83e60", "platformName": "X", "platformSlug": "x", "type": "CLIP_X", "submissionRequirements": { "urls": { "values": [], "isEnabled": false, "requireAll": false }, "hashtags": { "values": [ "#lumendrop" ], "isEnabled": true, "requireAll": true }, "mentions": { "values": [ "@lumenlabs" ], "isEnabled": true, "requireAll": false }, "guidelines": "Hook in the first two seconds." }, "submissionCounts": { "total": 5, "pending": 1, "approved": 4, "rejected": 0, "paid": 3, "nonRejected": 5 } } ] }, "settingsTab": { "userEligibilityCriteria": { "openToAll": true }, "platformPayouts": [ { "taskId": "4c9a2e78-5b13-4d60-8f27-1a94c6e03b52", "platformId": "1a7d3f5b-8c92-4e06-b4a1-9f27d5c83e60", "platformName": "X", "platformSlug": "x", "claimType": "FCFS", "payoutLogic": "FORMULA", "minViews": null, "maxPayoutPerClip": 100, "fixedPayout": null, "cpm": 2, "bonusRanges": [], "tokenType": "ERC20", "tokenSymbol": "USDC" } ] } }, "campaignCommission": 50 } } ``` Errors: - 401: The key is missing or not valid. - 403: The key is valid but the user does not administer the requested community. - 404: No campaign with that id is visible to this key. - 405: Execute endpoints accept POST only. - 500: An id argument was not a valid UUID. The API currently surfaces the underlying database error rather than a validation message, so validate ids before sending them. ## get_clipping_campaign_detail Get a clipping or UGC campaign Returns the creator-facing view of a clipping or UGC campaign: stats, requirements, budget, per platform tasks and payout rules, plus the authenticated user's own submissions in `mySubmissions`. If the user is not eligible for the campaign, a slim payload comes back with `id`, `title`, `project`, `bannerImageUrl` and a `message` instead of the full detail. Calling this on a SOCIAL campaign returns **HTTP 200** with `{"result": {"error": "Clipping campaign not found"}}`. POST /api/ai/mcp/tools/get_clipping_campaign_detail/execute Arguments: - `projectCampaignId` (string, required) A campaign id, from the `id` field of `get_my_campaigns`. Must be a valid UUID: the API returns a 500 rather than a 400 when it is not. Example response: ```json { "result": { "id": "9c4e1d7a-2f38-4b6c-8e51-0d7a3f96b2c8", "title": "Summer Drop Clips", "approvalMode": "MANUAL", "status": "LIVE", "startDate": "2026-08-06T13:01:54.177Z", "endDate": null, "payRateDisplay": "$1-2/1K views", "payRateType": "PPV", "bannerImageUrl": "https://cdn.airaa.xyz/images/projects/banner/3f2a9c7e-1b84-4d5a-9e60-7c1af2b83d41.jpeg", "colorCode": "#FFFFFF", "project": { "id": "3f2a9c7e-1b84-4d5a-9e60-7c1af2b83d41", "name": "Lumen Labs", "logo": "https://cdn.airaa.xyz/images/projects/logo/3f2a9c7e-1b84-4d5a-9e60-7c1af2b83d41.png" }, "stats": { "clipsApprovedCount": 6, "totalViews": 12480, "totalCurrentViews": 12495, "totalInitialViews": 15, "creatorsCount": 4 }, "requirements": { "hashtags": [ "#lumendrop" ], "mentions": [ "@lumenlabs" ] }, "contentGuidelinesMarkdown": "Hook in the first two seconds. No captions over the logo.", "budget": { "totalPool": "100.000000", "remainingPool": "62.400000", "usedBudget": "37.6", "accruedUnpaid": "6.040000", "tokenType": "ERC20", "tokenSymbol": "USDC" }, "platformTasks": [ { "taskId": "4c9a2e78-5b13-4d60-8f27-1a94c6e03b52", "platformId": "1a7d3f5b-8c92-4e06-b4a1-9f27d5c83e60", "platformSlug": "x", "platformName": "X", "maxPayoutPerClip": 100, "minViews": null, "tokenSymbol": "USDC", "taskSubmissionId": null, "submissionStatus": null, "payoutLogic": "FORMULA", "cpm": 2, "fixedTokenAmount": null, "bonusRanges": [], "demographicsRequired": false, "demographicsAudienceRule": null } ], "supportedPlatforms": [ { "platformId": "1a7d3f5b-8c92-4e06-b4a1-9f27d5c83e60", "platformSlug": "x", "platformName": "X" }, { "platformId": "2b8e4a6c-9d03-4f17-c5b2-0a38e6d94f71", "platformSlug": "instagram", "platformName": "Instagram" } ], "mySubmissions": [], "payoutDisplayMode": "estimated", "isEligible": true, "isEndingSoon": false, "poolDepleted": false, "canSubmit": true, "hasSubmitted": false, "brandApproved": false, "brandStats": { "campaignCount": 44, "creatorsPaid": 4 } } } ``` Errors: - 401: The key is missing or not valid. - 403: The key is valid but the user does not administer the requested community. - 404: No campaign with that id is visible to this key. - 405: Execute endpoints accept POST only. - 500: An id argument was not a valid UUID. The API currently surfaces the underlying database error rather than a validation message, so validate ids before sending them. --- # Submissions > Read the content creators submitted, with engagement, payout state and review history. Source: https://airaa.xyz/docs/api/submissions Base URL: https://app.airaa.xyz Every tool is a POST to /api/ai/mcp/tools/{tool}/execute with arguments wrapped in an `args` object, authorised with `Authorization: Bearer airaa_`. ## get_campaign_submissions List submissions by creator Returns submissions for a campaign, one row per creator, with each of their tasks and its status. For clipping and UGC campaigns the rows carry initial, current and delta view counts. For OFFERS-claim campaigns, creators who were offered a slot but have not submitted yet are included. This works for every campaign type. For the owner dashboard view of a clipping or UGC campaign, with payout accruals and action history, use `get_clipping_owner_submissions` instead. POST /api/ai/mcp/tools/get_campaign_submissions/execute Arguments: - `projectCampaignId` (string, required) A campaign id, from the `id` field of `get_my_campaigns`. Must be a valid UUID: the API returns a 500 rather than a 400 when it is not. - `page` (integer) Page number, 1-indexed. - `limit` (integer) Items per page, 1 to 100. - `sortBy` (enum | null) One of: smart_followers, followers, created_at. - `sortOrder` (enum | null) One of: ASC, DESC. - `statusBy` (enum | null) Filter by submission status. One of: PENDING, APPROVED, FAILED, PAID, MILESTONE_BONUS_PAID, DEMOGRAPHICS_DUE, DEMOGRAPHICS_REVIEW. - `userId` (string | null) Filter to a single creator. Example response: ```json { "result": { "submissions": [ { "submissionId": "6a2c8f04-7b31-4e59-a0d6-3f85b1c92e47", "userId": "7e91b26c-4d05-48af-9b73-2c6f8e14a3d9", "username": "rivertaylor_x", "userUsername": "rivertaylor", "name": "River Taylor", "profileImageUrl": "https://cdn.airaa.xyz/images/user-avatars/7e91b26c-4d05-48af-9b73-2c6f8e14a3d9", "followersCount": 4820, "smartFollowersCount": 96, "viewCount": 5880, "initialViewCount": 7, "currentViewCount": 5887, "deltaViewCount": 5880, "tokenAmount": "1.00000000", "auraPointsAmount": "0.00", "estimatedPayout": "11.76", "tasks": [ { "taskId": "4c9a2e78-5b13-4d60-8f27-1a94c6e03b52", "submissionId": "6a2c8f04-7b31-4e59-a0d6-3f85b1c92e47", "claimedAt": "2026-07-22T14:27:44.495Z", "submittedAt": "2026-07-22T14:27:44.493Z", "taskType": "CLIP_X", "taskUrl": null, "submissionStatus": "APPROVED", "submissionReason": null, "aiReview": null, "submissionContent": { "text": "Three days with the Lumen drop", "viewCount": 5880, "initialViews": 7, "currentViews": 5887, "deltaViews": 5880, "replyCount": 14, "favoriteCount": 212, "externalId": "2079936395192545299", "url": "https://x.com/rivertaylor_x/status/2079936395192545299" } } ] } ], "metadata": { "page": 1, "limit": 10, "totalItems": 1, "totalPages": 1 }, "campaignType": "ugc" } } ``` Errors: - 400: An argument failed schema validation. The message names the offending field and its allowed values. - 401: The key is missing or not valid. - 403: The key is valid but the user does not administer the requested community. - 404: No campaign with that id is visible to this key. - 405: Execute endpoints accept POST only. - 500: An id argument was not a valid UUID. The API currently surfaces the underlying database error rather than a validation message, so validate ids before sending them. ## get_clipping_owner_submissions List clips for the owner dashboard Returns clipping and UGC submission rows as the campaign owner sees them: content links and thumbnails, live engagement, payout accruals, and the full action history of each submission. Despite the name this works for UGC campaigns as well as clipping ones. Calling it on a SOCIAL campaign returns **HTTP 200** with `{"result": {"error": "Clipping submissions are only available for clipping campaigns"}}`. POST /api/ai/mcp/tools/get_clipping_owner_submissions/execute Arguments: - `projectCampaignId` (string, required) A campaign id, from the `id` field of `get_my_campaigns`. Must be a valid UUID: the API returns a 500 rather than a 400 when it is not. - `page` (integer) Page number, 1-indexed. - `limit` (integer) Items per page, 1 to 100. - `platformId` (string | null) Filter to one platform. Read valid ids from `supportedPlatforms` on `get_clipping_campaign_detail`. - `statusBy` (enum | null) Filter by submission status. One of: PENDING, APPROVED, FAILED, PAID, MILESTONE_BONUS_PAID, DEMOGRAPHICS_DUE, DEMOGRAPHICS_REVIEW. - `sortBy` (enum | null) One of: views, likes, created_at. - `sortOrder` (enum | null) One of: ASC, DESC. Example response: ```json { "result": { "rows": [ { "submissionId": "e5b74a19-0c26-4d83-9f52-8a1c37e604b9", "taskId": "4c9a2e78-5b13-4d60-8f27-1a94c6e03b52", "platformId": "1a7d3f5b-8c92-4e06-b4a1-9f27d5c83e60", "platformName": "X", "platformSlug": "x", "creatorUserId": "7e91b26c-4d05-48af-9b73-2c6f8e14a3d9", "creatorUsername": "rivertaylor_x", "creatorPhotoUrl": "https://cdn.airaa.xyz/images/user-avatars/7e91b26c-4d05-48af-9b73-2c6f8e14a3d9", "status": "DEMOGRAPHICS_DUE", "submittedAt": "2026-08-03T09:42:45.710Z", "expiresAt": "2099-12-31T23:59:59.999Z", "rejectionReason": null, "contentId": "a92f60d4-3e17-4b85-8c09-5d7e2a41f6b3", "contentUrl": "https://x.com/rivertaylor_x/status/2084212353432994088", "contentTitle": "Three days with the Lumen drop", "thumbnailUrl": "https://imagedelivery.net/example/content-thumbnail/a92f60d4-3e17-4b85-8c09-5d7e2a41f6b3/public?format=webp", "videoUrl": null, "followersCount": 4820, "commentCount": 14, "estimatedPayout": "2.71", "tokenReward": "0.00000000", "auraPointsReward": "0.000000", "engagement": { "views": 1356, "initialViews": 1, "currentViews": 1357, "deltaViews": 1356, "likes": 212, "comments": 14 }, "canLoadEngagementHistory": true, "cumulativePaidAmount": "0.00000000", "basePaidAmount": "0", "bonusPaidAmount": "0", "totalPaidAmount": "0", "lastPaidAt": null, "maxPayoutPerClip": 5, "accruedUnpaid": "2.71", "accruedBaseAmount": "2.71", "accruedBonusAmount": "0.00", "submissionActions": [ { "actionType": "DEMOGRAPHICS_DUE", "amount": null, "viewsSnapshot": null, "deltaViews": null, "reason": null, "createdAt": "2026-08-04T15:14:00.810Z" }, { "actionType": "FAILED", "amount": null, "viewsSnapshot": null, "deltaViews": null, "reason": "Doesn't meet requirements", "createdAt": "2026-08-04T15:10:21.411Z" }, { "actionType": "PENDING", "amount": null, "viewsSnapshot": null, "deltaViews": null, "reason": null, "createdAt": "2026-08-03T09:42:45.807Z" } ], "demographicsVideoUrl": null, "demographicsReviewResult": null } ], "budget": { "remainingPool": "62.400000", "accruedUnpaid": "6.040000" }, "metadata": { "page": 1, "limit": 10, "totalItems": 8, "totalPages": 1 } } } ``` Errors: - 400: An argument failed schema validation. The message names the offending field and its allowed values. - 401: The key is missing or not valid. - 403: The key is valid but the user does not administer the requested community. - 404: No campaign with that id is visible to this key. - 405: Execute endpoints accept POST only. - 500: An id argument was not a valid UUID. The API currently surfaces the underlying database error rather than a validation message, so validate ids before sending them. --- # People > Your community roster and the earnings leaderboard for any date range. Source: https://airaa.xyz/docs/api/people Base URL: https://app.airaa.xyz Every tool is a POST to /api/ai/mcp/tools/{tool}/execute with arguments wrapped in an `args` object, authorised with `Authorization: Bearer airaa_`. ## get_project_members_detailed List community members Returns a community's members with profile info, connected platforms, follower totals and participation stats. Defaults to ACTIVE members. Filtering by a non-ACTIVE status requires the authenticated user to be an admin or moderator of the community. Two things to know: * `projectId` is required in practice. The tool schema marks it optional, but omitting it returns `400`. * The response is a bare array with no `metadata`. `page` and `limit` work, but nothing in the response tells you whether more pages exist. Omit the optional filters unless you actually need them. POST /api/ai/mcp/tools/get_project_members_detailed/execute Arguments: - `projectId` (string, required) A community id from `list_manageable_projects`. - `status` (enum | null) Defaults to ACTIVE. One of: ACTIVE, INACTIVE, PENDING, SUSPENDED. - `role` (enum | null) One of: MEMBER, MODERATOR, ADMIN. - `niche` (enum | null) One of: Gaming, Lifestyle, Fashion, Beauty, Fitness, Food, Travel, Music, Sports, Tech, Finance, Education, Entertainment, Comedy, Art & Design, Creator, Crypto, Business. - `platforms` (string | null) Comma separated platform slugs. Valid slugs: x, instagram, youtube. - `search` (string | null) Match on name or username. - `page` (integer) Page number, 1-indexed. - `limit` (integer) Items per page, 1 to 100. Example response: ```json { "result": [ { "userId": "7e91b26c-4d05-48af-9b73-2c6f8e14a3d9", "status": "ACTIVE", "role": "MEMBER", "username": "rivertaylor", "name": "River Taylor", "photoUrl": "https://cdn.airaa.xyz/images/user-avatars/7e91b26c-4d05-48af-9b73-2c6f8e14a3d9", "niche": [ "Business" ], "locationCountry": "United States", "platforms": [ { "slug": "x", "handle": "rivertaylor_x", "followersCount": 4820 }, { "slug": "instagram", "handle": "rivertaylor", "followersCount": 1290 } ], "totalFollowers": 6110, "communityCampaignsParticipated": 13, "totalCommunityImpressions": 9139, "tags": [ { "id": "d73e9b58-1a04-4f62-8c95-7b2d6e03a4f1", "name": "Team", "color": "#e08a3c" } ] } ] } ``` Errors: - 400: `projectId` was not supplied, or an argument failed validation. - 401: The key is missing or not valid. - 403: The key is valid but the user does not administer the requested community. - 405: Execute endpoints accept POST only. ## get_project_leaderboard Get the earnings leaderboard Returns a community's leaderboard for a date range. `sortBy` only controls row order. Every row always carries `totalViews`, `totalCampaigns`, `totalUsdc` and `totalCommunityToken` whichever value you sort by. There is no sort-by-views option: to rank creators by views, page through the results and sort them yourself. `myRank: true` returns only the authenticated user's own row, and comes back empty when that user is not ranked in the range. `startDate` and `endDate` are not validated. An unparseable date returns **HTTP 200** with `{"result": {"error": "Failed to fetch leaderboard"}}`. POST /api/ai/mcp/tools/get_project_leaderboard/execute Arguments: - `projectId` (string | null) A community id from `list_manageable_projects`. - `startDate` (string, required) Inclusive start date, YYYY-MM-DD. - `endDate` (string, required) Inclusive end date, YYYY-MM-DD. Must be on or after startDate. - `sortBy` (enum, required) One of: USDC, POINTS. - `page` (integer | null) Page number, 1-indexed. - `myRank` (boolean | null) Return only the authenticated user's row. Example response: ```json { "result": { "data": [ { "rank": 1, "name": "River Taylor", "username": "rivertaylor", "photoUrl": "https://cdn.airaa.xyz/images/user-avatars/7e91b26c-4d05-48af-9b73-2c6f8e14a3d9", "socialConnections": [ { "platformId": "1a7d3f5b-8c92-4e06-b4a1-9f27d5c83e60", "platformName": "X", "externalUsername": "rivertaylor_x" } ], "totalCampaigns": 13, "totalViews": 9139, "totalUsdc": "155.40000000", "totalCommunityToken": "0" }, { "rank": 2, "name": "Maya Okonkwo", "username": "mayaokonkwo", "photoUrl": "https://cdn.airaa.xyz/images/user-avatars/c40f7a15-9e2b-4c86-b1d3-58a90e6f27b4", "socialConnections": [ { "platformId": "1a7d3f5b-8c92-4e06-b4a1-9f27d5c83e60", "platformName": "X", "externalUsername": "mayaokonkwo" }, { "platformId": "3c9f5b7d-0e14-4a28-d6c3-1b49f7e05a82", "platformName": "TikTok", "externalUsername": "maya.okonkwo" } ], "totalCampaigns": 8, "totalViews": 65, "totalUsdc": "72.00000000", "totalCommunityToken": "17017.00000000" } ], "metadata": { "page": 1, "limit": 100, "totalItems": 6, "totalPages": 1 } } } ``` Errors: - 400: A required argument was missing or failed validation. - 401: The key is missing or not valid. - 403: The key is valid but the user does not administer the requested community. - 405: Execute endpoints accept POST only. --- # Account > The key's owner, the tokens campaigns pay out in, and the server clock. Source: https://airaa.xyz/docs/api/account Base URL: https://app.airaa.xyz Every tool is a POST to /api/ai/mcp/tools/{tool}/execute with arguments wrapped in an `args` object, authorised with `Authorization: Bearer airaa_`. ## get_tokens List payout tokens Returns active payout tokens. Tokens are either `POINTS` (community points, no chain) or `ERC20` (onchain, with an address, chain id and decimals). Pass `projectId` to get the tokens a specific community pays in. When `projectId` is set the `type` filter is ignored. With no arguments this returns every active token on the platform, which includes the points tokens of communities the key does not manage. POST /api/ai/mcp/tools/get_tokens/execute Arguments: - `type` (enum | null) Ignored when `projectId` is set. One of: ERC20, POINTS. - `projectId` (string | null) A community id from `list_manageable_projects`. Example response: ```json { "result": [ { "id": "4e8c1a95-7d20-4f63-b8a1-06d9e5c34f27", "symbol": "USDC", "name": "USD Coin", "logo": "https://basescan.org/token/images/centre-usdc_28.png", "address": "0x3AF9cB6000b310c909e10f79A9Ec642960eeEe99", "chainId": "8453", "decimals": 18, "status": "ACTIVE", "type": "ERC20" }, { "id": "b81c4d02-5f6a-4e33-a1d7-92e845bc0f16", "symbol": "LUM", "name": "Lumen Points", "logo": "https://cdn.airaa.xyz/images/tokens/lumen.jpg", "address": null, "chainId": null, "decimals": 0, "status": "ACTIVE", "type": "POINTS" } ] } ``` Errors: - 400: An argument failed schema validation. The message names the offending field and its allowed values. - 401: The key is missing or not valid. - 403: The key is valid but the user does not administer the requested community. - 405: Execute endpoints accept POST only. ## get_user_info Get the key owner Returns the profile of the user the key belongs to: account flags, X profile, connected social accounts, wallets, aura points and the last known request location. Useful for confirming which account a key is acting as before you run anything else. POST /api/ai/mcp/tools/get_user_info/execute Example response: ```json { "result": { "id": "8d15b4c7-3e29-4a60-9f81-6b2c7e04d5a3", "email": "alex@lumenlabs.example", "badge": null, "status": null, "isActive": true, "verified": true, "isScout": false, "twitterProfileId": "f61a2c48-9b73-4d05-8e2f-30c7a95b1e64", "turnkeyExternalUserId": "5b0d9e37-2a46-4c81-b7f3-89e14d6a02c5", "telegramId": null, "telegramUsername": null, "privacyApproved": false, "isClaimed": false, "profile": { "id": "f61a2c48-9b73-4d05-8e2f-30c7a95b1e64", "externalId": "766921563169959936", "name": "Alex Morgan", "username": "alexmorgan", "url": "https://twitter.com/alexmorgan", "description": "Building Lumen Labs", "profileImageUrl": "https://pbs.twimg.com/profile_images/example/avatar.jpg", "followersCount": 2419, "smartFollowersCount": 6, "followingCount": 1743, "profileCreatedAt": "2016-08-20T08:55:24.000Z", "contentCount": 4516, "accountBasedIn": null }, "totalBalance": null, "totalVolume": null, "totalDappsInteracted": null, "totalAuraPoints": 90, "primaryWalletAddress": "0x7a3f9c21e845bd06f1a2c9e37b508d4a6f2e1c93", "primaryWalletBalance": null, "createdAt": "2026-05-31T11:02:45.414Z", "updatedAt": "2026-08-15T20:54:13.718Z", "name": "Alex", "photoUrl": "https://cdn.airaa.xyz/images/profile-placeholders/image2.webp", "userNiche": [ "Creator", "Tech", "Business" ], "username": "alexmorgan", "bio": "Building in public", "niche": [ "SOCIAL/CONSUMER" ], "spamMultiplier": 0.01, "wallets": [ { "updatedAt": "2026-06-18T12:35:44.412Z", "address": "0x7a3f9c21e845bd06f1a2c9e37b508d4a6f2e1c93", "type": "EVM", "projectSlug": null, "isPrimary": true } ], "isAiraaCreator": true, "isCampaignCreator": false, "onboardingCompleted": true, "accounts": [ { "platformId": "2b8e4a6c-9d03-4f17-c5b2-0a38e6d94f71", "platformName": "Instagram", "externalId": "2981370973", "externalUsername": "alexmorgan", "connectedAt": "2026-07-31T14:51:10.812Z" } ], "location": { "country": "United States", "countryCode": "US", "proxy": false, "hosting": false, "lastUpdatedAt": "2026-08-15T16:17:53.558Z" } } } ``` Errors: - 401: The key is missing or not valid. - 405: Execute endpoints accept POST only. ## get_current_datetime Get the server clock Returns the current date and time, optionally in a given IANA timezone. Mainly useful for agents that need to resolve relative dates such as "this month" before calling `get_project_leaderboard`. Over HTTP this returns a locale formatted string such as `8/16/2026, 2:12:52 AM`. The same tool called over MCP returns an ISO 8601 timestamp. Parse defensively. POST /api/ai/mcp/tools/get_current_datetime/execute Arguments: - `timezone` (string | null) IANA timezone name. Defaults to UTC. Example response: ```json { "result": { "datetime": "8/16/2026, 2:12:52 AM", "timezone": "Asia/Kolkata" } } ``` Errors: - 400: An argument failed schema validation. The message names the offending field and its allowed values. - 401: The key is missing or not valid. - 405: Execute endpoints accept POST only.