Campaigns

List the campaigns you own or moderate, and read any one of them in full.

3 endpoints, generated from openapi.yaml. New to the API? Start with the Overview.

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_<key>.

get_my_campaigns

List your campaigns

POST/api/ai/mcp/tools/get_my_campaigns/execute

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.

Arguments

projectIdstring | null

A community id from list_manageable_projects.

statusByenum | null

Filter by campaign status.

LIVEENDEDDRAFTPAYMENT_PENDING
campaignTypeenum | null

Filter by campaign type group.

allinstant_tasksclippingUGC
pageinteger

Page number, 1-indexed.

min 1 · defaults to 1
limitinteger

Items per page, 1 to 100.

1 to 100 · defaults to 10

Returns

Fields inside result.

campaignsarray of CampaignListItem
countsCampaignCounts
projectsarray of ProjectRefWithRole

Errors

  • 400An argument failed schema validation. The message names the offending field and its allowed values.
  • 401The key is missing or not valid.
  • 403The key is valid but the user does not administer the requested community.
  • 405Execute endpoints accept POST only.

Request

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": {"projectId": "3f2a9c7e-1b84-4d5a-9e60-7c1af2b83d41","page": 1,"limit": 10}}'

Response

200
{
  "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"
      }
    ]
  }
}

get_campaign_details

Get one campaign in full

POST/api/ai/mcp/tools/get_campaign_details/execute

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.

Arguments

projectCampaignIdstringrequired

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.

Returns

Fields inside result.

CampaignDetailClippingOwner
campaignTypeCampaignType
clippingugcsocial
detailVariantstring
campaignCampaignCore
projectProjectRef
statsCampaignStats
budgetCampaignBudget
tasksarray of object

Always empty on this variant. Read clippingOwner.tasksTab.tasks.

draftConfigobject | null
eligibilityProjectobject | null
clippingOwnerClippingOwnerPayload
campaignCommissioninteger | null
CampaignDetailSocialOwner
campaignTypeCampaignType
clippingugcsocial
detailVariantstring
campaignCampaignCore
projectProjectRef
statsCampaignStats
budgetCampaignBudget
tasksarray of SocialTask
draftConfigobject | null
eligibilityProjectobject | null
clippingOwnernull

Always null on this variant.

campaignCommissioninteger | null

Errors

  • 401The key is missing or not valid.
  • 403The key is valid but the user does not administer the requested community.
  • 404No campaign with that id is visible to this key.
  • 405Execute endpoints accept POST only.
  • 500An 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.

Request

curl -X POST https://app.airaa.xyz/api/ai/mcp/tools/get_campaign_details/execute \
  -H "Authorization: Bearer $AIRAA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"args": {"projectCampaignId": "9c4e1d7a-2f38-4b6c-8e51-0d7a3f96b2c8"}}'

Response

A live clipping campaign

clipping owner
{
  "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
  }
}

A social campaign

social owner
{
  "result": {
    "campaignType": "social",
    "detailVariant": "social_owner",
    "campaign": {
      "id": "5d8b3e91-7a24-4f10-b3c6-1e9d4a72f05b",
      "projectId": "3f2a9c7e-1b84-4d5a-9e60-7c1af2b83d41",
      "createdAt": "2026-08-14T11:02:37.443Z",
      "title": "Follow and Post",
      "imageUrl": null,
      "status": "LIVE",
      "startDate": "2026-08-14T11:02:37.838Z",
      "type": "social",
      "approvalMode": "MANUAL",
      "userEligibilityCriteria": {
        "guildId": "3f2a9c7e-1b84-4d5a-9e60-7c1af2b83d41"
      }
    },
    "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": 3,
      "reach": 240,
      "likes": 18,
      "quotes": 2,
      "post": 3
    },
    "budget": {
      "totalPool": "1000.000000",
      "remainingPool": "400.000000",
      "tokenType": "POINTS",
      "tokenSymbol": "LUM",
      "tokenAddress": null,
      "chainId": null,
      "decimals": 0
    },
    "tasks": [
      {
        "id": "7e30d9a4-6c81-4b25-9f03-2d5a8e17c46b",
        "platformId": "1a7d3f5b-8c92-4e06-b4a1-9f27d5c83e60",
        "type": "POST",
        "url": null,
        "submissionRequirements": {
          "urls": {
            "values": [],
            "isEnabled": false,
            "requireAll": false
          },
          "hashtags": {
            "values": [],
            "isEnabled": false,
            "requireAll": false
          },
          "mentions": {
            "values": [],
            "isEnabled": false,
            "requireAll": false
          },
          "guidelines": "Post about the drop and tag the account."
        },
        "payoutConfig": {
          "logic": "FIXED",
          "tokenId": "b81c4d02-5f6a-4e33-a1d7-92e845bc0f16",
          "claimType": "FCFS",
          "fixedPayout": 200,
          "auraMultiplier": 3
        },
        "taskCompletedCount": "3",
        "reach": "240",
        "likes": "18",
        "replies": "2",
        "platform": {
          "id": "1a7d3f5b-8c92-4e06-b4a1-9f27d5c83e60",
          "name": "X"
        }
      }
    ],
    "draftConfig": null,
    "eligibilityProject": null,
    "clippingOwner": null,
    "campaignCommission": 50
  }
}

get_clipping_campaign_detail

Get a clipping or UGC campaign

POST/api/ai/mcp/tools/get_clipping_campaign_detail/execute

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"}}.

Arguments

projectCampaignIdstringrequired

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.

Returns

Fields inside result.

ClippingCampaignDetail
idstring
titlestring
approvalModestring | null
statusCampaignStatus
DRAFTLIVEPAUSEDENDEDPAYMENT_PROCESSINGPAYMENT_PENDING
startDatestring | null
endDatestring | null
payRateDisplaystring | null

Human readable pay rate, for example $1-2/1K views.

payRateTypeenum | null
PPVFIXED
bannerImageUrlstring | null
colorCodestring | null
projectProjectRef
statsobject
requirementsobject
contentGuidelinesMarkdownstring | null
budgetobject
platformTasksarray of object
supportedPlatformsarray of object

Use these platformId values to filter owner submissions.

mySubmissionsarray of object

The authenticated user's own submissions to this campaign.

payoutDisplayModeenum | null
estimatedfixed
isEligibleboolean
isEndingSoonboolean
poolDepletedboolean
canSubmitboolean
hasSubmittedboolean
brandApprovedboolean
brandStatsobject

Errors

  • 401The key is missing or not valid.
  • 403The key is valid but the user does not administer the requested community.
  • 404No campaign with that id is visible to this key.
  • 405Execute endpoints accept POST only.
  • 500An 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.

Request

curl -X POST https://app.airaa.xyz/api/ai/mcp/tools/get_clipping_campaign_detail/execute \
  -H "Authorization: Bearer $AIRAA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"args": {"projectCampaignId": "9c4e1d7a-2f38-4b6c-8e51-0d7a3f96b2c8"}}'

Response

A clipping campaign

detail
{
  "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
    }
  }
}

Called on a social campaign (note the 200 status)

wrong campaign type
{
  "result": {
    "error": "Clipping campaign not found"
  }
}