Campaigns
List one community's campaigns, and read any one of them in full.
2 endpoints, generated from openapi.yaml. New to the API? Start with the Overview.
List one community's campaigns, then read any one of them in full. get_campaign_details covers both bounty and video campaigns. Its detailVariant field tells you which shape came back.
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_campaigns
List campaigns in a community
What campaigns are running in this community?
One community's campaigns, filterable by status and by type. projectId is required: this lists a single community's campaigns, not every campaign your key can reach. Campaigns hidden in the dashboard are excluded.
This endpoint paginates with a counts object (live, draft and ended totals plus total spent) rather than the metadata envelope the other paginated tools return.
Arguments
statusByobjectNarrow to one campaign status.
campaignTypeobjectNarrow to one campaign family. instant_tasks is the bounty campaigns; clipping and UGC are the two video campaign types.
projectIdstringrequiredThe community id, from list_manageable_projects. Lists this community only.
pageintegerPage number, 1-indexed
limitintegerItems per page, max 100
Returns
Fields inside result.
campaignsarray of CampaignListItemcountsCampaignCountsAggregate totals. get_project_campaigns returns this instead of a metadata object.
projectsarray of objectErrors
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_campaigns/execute \
-H "Authorization: Bearer $AIRAA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"args": {"projectId": "3f2a9c7e-1b84-4d5a-9e60-7c1af2b83d41","statusBy": "LIVE","limit": 10}}'const res = await fetch("https://app.airaa.xyz/api/ai/mcp/tools/get_project_campaigns/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",
"statusBy": "LIVE",
"limit": 10
}
}),
});
const { result } = await res.json();import os
import requests
res = requests.post(
"https://app.airaa.xyz/api/ai/mcp/tools/get_project_campaigns/execute",
headers={"Authorization": f"Bearer {os.environ['AIRAA_API_KEY']}"},
json={
"args": {
"projectId": "3f2a9c7e-1b84-4d5a-9e60-7c1af2b83d41",
"statusBy": "LIVE",
"limit": 10
}
},
)
res.raise_for_status()
result = res.json()["result"]Response
Note the counts object where other endpoints return metadata.
{
"result": {
"campaigns": [
{
"id": "a7d2f61c-08b5-4e3a-9c14-5f8b73d20e69",
"title": "Launch week clips",
"status": "LIVE",
"campaignType": "clipping",
"taskTypes": [
"CLIP_X",
"CLIP_TIKTOK"
],
"totalPool": "12000.00",
"remainingPool": "7420.15",
"usedBudget": "4579.85",
"platform": [
{
"id": "f0a4c927-51d8-4b63-9a72-e8d1c3406b5f",
"name": "TikTok",
"enabled": true
},
{
"id": "9d6b23e1-7c40-4f85-b91a-04e7f2d85c63",
"name": "Instagram",
"enabled": true
}
],
"payoutType": "FCFS",
"tokenType": "ERC20",
"tokenSymbol": "USDC",
"completedUsersCount": 38,
"incompletedUsersCount": 6,
"hasCounterOffer": false,
"approvedClipsCount": 112,
"impressions": 4820000,
"pendingReviewsCount": 9,
"project": {
"id": "3f2a9c7e-1b84-4d5a-9e60-7c1af2b83d41",
"name": "Lumen Labs",
"logo": "https://cdn.airaa.xyz/projects/lumenlabs/logo.png"
},
"createdAt": "2026-08-04T09:12:44.000Z"
},
{
"id": "c14e7b90-5a23-4f81-b6d7-90e3ac215f42",
"title": "Quote the launch thread",
"status": "LIVE",
"campaignType": "social",
"taskTypes": [
"QUOTE",
"REPLY"
],
"totalPool": "2500.00",
"remainingPool": "1180.00",
"usedBudget": "1320.00",
"platform": [
{
"id": "6e2c81b4-3f97-40da-85c1-b70d924ef3a8",
"name": "Twitter/X",
"enabled": true
}
],
"payoutType": "OFFERS",
"tokenType": "ERC20",
"tokenSymbol": "USDC",
"completedUsersCount": 44,
"incompletedUsersCount": 12,
"hasCounterOffer": true,
"approvedClipsCount": 0,
"impressions": 612400,
"pendingReviewsCount": 3,
"project": {
"id": "3f2a9c7e-1b84-4d5a-9e60-7c1af2b83d41",
"name": "Lumen Labs",
"logo": "https://cdn.airaa.xyz/projects/lumenlabs/logo.png"
},
"createdAt": "2026-07-21T15:02:10.000Z"
}
],
"counts": {
"live": 2,
"draft": 1,
"ended": 8,
"spent": 5899.85
},
"projects": [
{
"id": "3f2a9c7e-1b84-4d5a-9e60-7c1af2b83d41",
"name": "Lumen Labs",
"logo": "https://cdn.airaa.xyz/projects/lumenlabs/logo.png",
"role": "ADMIN"
}
]
}
}get_campaign_details
Get campaign details
What are this campaign's settings, budget and results?
Read detailVariant first. The same call returns two different bodies: clipping_owner for a video campaign that has left draft, and social_owner for a bounty campaign and for any campaign still in DRAFT.
Both variants carry campaign, project, stats and budget. The social_owner variant populates tasks and leaves clippingOwner null. The clipping_owner variant fills clippingOwner with the analytics payload: submission counts, reach split into initial and current, per-platform payout rules, and bonus milestones.
Arguments
projectCampaignIdstringrequiredThe campaign id, from get_project_campaigns. Works for a bounty or a video campaign.
Returns
Fields inside result.
campaignTypeenumsocialclippingugcdetailVariantenumsocial_owner for bounty campaigns and any draft; clipping_owner for non-draft video campaigns. Tells you which of the two shapes came back.
social_ownerclipping_ownercampaignobjectprojectobjectstatsobjectbudgetBudgettasksarray of objectclippingOwnerClippingOwnerDetail | nullcampaignCommissioninteger | nullPlatform commission percentage for this campaign.
draftConfigobject | nulleligibilityProjectobject | nullErrors
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_campaign_details/execute \
-H "Authorization: Bearer $AIRAA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"args": {"projectCampaignId": "a7d2f61c-08b5-4e3a-9c14-5f8b73d20e69"}}'const res = await fetch("https://app.airaa.xyz/api/ai/mcp/tools/get_campaign_details/execute", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.AIRAA_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"args": {
"projectCampaignId": "a7d2f61c-08b5-4e3a-9c14-5f8b73d20e69"
}
}),
});
const { result } = await res.json();import os
import requests
res = requests.post(
"https://app.airaa.xyz/api/ai/mcp/tools/get_campaign_details/execute",
headers={"Authorization": f"Bearer {os.environ['AIRAA_API_KEY']}"},
json={
"args": {
"projectCampaignId": "a7d2f61c-08b5-4e3a-9c14-5f8b73d20e69"
}
},
)
res.raise_for_status()
result = res.json()["result"]Response
A video campaign past draft. clippingOwner is populated, tasks is empty.
{
"result": {
"campaignType": "clipping",
"detailVariant": "clipping_owner",
"campaign": {
"id": "a7d2f61c-08b5-4e3a-9c14-5f8b73d20e69",
"projectId": "3f2a9c7e-1b84-4d5a-9e60-7c1af2b83d41",
"title": "Launch week clips",
"status": "LIVE",
"type": "clipping",
"imageUrl": "https://cdn.airaa.xyz/campaigns/launch-week/cover.png",
"startDate": "2026-08-05T00:00:00.000Z",
"endDate": "2026-09-05T00:00:00.000Z",
"createdAt": "2026-08-04T09:12:44.000Z",
"approvalMode": "MANUAL",
"needsDraft": false,
"userEligibilityCriteria": {
"minFollowers": 1000
}
},
"project": {
"id": "3f2a9c7e-1b84-4d5a-9e60-7c1af2b83d41",
"name": "Lumen Labs",
"slug": "lumenlabs",
"logo": "https://cdn.airaa.xyz/projects/lumenlabs/logo.png"
},
"stats": {
"creators": 44,
"reach": 4820000,
"likes": 291400,
"quotes": 0,
"post": 112
},
"budget": {
"totalPool": "12000.00",
"remainingPool": "7420.15",
"tokenType": "ERC20",
"tokenSymbol": "USDC",
"tokenAddress": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
"chainId": "8453",
"decimals": 6
},
"tasks": [],
"clippingOwner": {
"demographicsRequired": true,
"demographicsAudienceRule": "60% US or UK",
"eligibilitySummary": {
"mode": "open",
"guild": null
},
"overview": {
"creatorsCount": 44,
"totalSubmissionsCount": 137,
"submissionsCount": 128,
"pendingSubmissionsCount": 9,
"approvedSubmissionsCount": 112,
"rejectedSubmissionsCount": 7,
"paidSubmissionsCount": 98,
"reach": 4820000,
"currentReach": 4913200,
"initialReach": 93200,
"likes": 291400,
"comments": 18720
},
"budget": {
"label": "Campaign budget",
"totalPool": "12000.00",
"remainingPool": "7420.15",
"usedBudget": "4579.85",
"tokenType": "ERC20",
"tokenSymbol": "USDC"
},
"tasksTab": {
"requirements": {
"guidelines": "Hook in the first two seconds. No captions over the logo.",
"hashtags": [
"lumenlabs"
],
"mentions": [
"@lumenlabs"
],
"urls": [
"https://lumenlabs.com"
]
},
"tasks": [
{
"taskId": "7b3e19a2-c845-4d70-9e16-a2f5c80b31d4",
"platformId": "f0a4c927-51d8-4b63-9a72-e8d1c3406b5f",
"platformName": "TikTok",
"platformSlug": "tiktok",
"type": "CLIP",
"submissionRequirements": {
"guidelines": "Hook in the first two seconds.",
"hashtags": {
"values": [
"lumenlabs"
],
"isEnabled": true,
"requireAll": true
},
"mentions": {
"values": [
"@lumenlabs"
],
"isEnabled": true,
"requireAll": false
},
"urls": {
"values": [],
"isEnabled": false,
"requireAll": false
}
},
"submissionCounts": {
"total": 82,
"pending": 5,
"approved": 71,
"rejected": 6,
"paid": 63,
"nonRejected": 76
}
}
]
},
"settingsTab": {
"userEligibilityCriteria": {
"minFollowers": 1000
},
"platformPayouts": [
{
"taskId": "7b3e19a2-c845-4d70-9e16-a2f5c80b31d4",
"platformId": "f0a4c927-51d8-4b63-9a72-e8d1c3406b5f",
"platformName": "TikTok",
"platformSlug": "tiktok",
"claimType": "FCFS",
"payoutLogic": "FORMULA",
"cpm": 1.4,
"fixedPayout": null,
"minViews": 1000,
"maxPayoutPerClip": 250,
"bonusRanges": [
{
"views": 100000,
"amount": 50
},
{
"views": 500000,
"amount": 300
}
],
"tokenType": "ERC20",
"tokenSymbol": "USDC"
}
]
}
},
"campaignCommission": 10,
"draftConfig": null,
"eligibilityProject": null
}
}A bounty campaign. tasks is populated, clippingOwner is null.
{
"result": {
"campaignType": "social",
"detailVariant": "social_owner",
"campaign": {
"id": "c14e7b90-5a23-4f81-b6d7-90e3ac215f42",
"projectId": "3f2a9c7e-1b84-4d5a-9e60-7c1af2b83d41",
"title": "Quote the launch thread",
"status": "LIVE",
"type": "social",
"imageUrl": null,
"startDate": "2026-07-22T00:00:00.000Z",
"endDate": null,
"createdAt": "2026-07-21T15:02:10.000Z",
"approvalMode": "AI",
"needsDraft": false,
"userEligibilityCriteria": {
"minFollowers": 500
}
},
"project": {
"id": "3f2a9c7e-1b84-4d5a-9e60-7c1af2b83d41",
"name": "Lumen Labs",
"slug": "lumenlabs",
"logo": "https://cdn.airaa.xyz/projects/lumenlabs/logo.png"
},
"stats": {
"creators": 56,
"reach": 612400,
"likes": 21840,
"quotes": 44,
"post": 44
},
"budget": {
"totalPool": "2500.00",
"remainingPool": "1180.00",
"tokenType": "ERC20",
"tokenSymbol": "USDC",
"tokenAddress": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
"chainId": "8453",
"decimals": 6
},
"tasks": [
{
"taskId": "48f0d2b7-6a19-4c53-b8e0-71c9a35d6f42",
"type": "QUOTE",
"platformName": "Twitter/X",
"tokenReward": "20.00",
"claimedCount": 56,
"approvedCount": 44
}
],
"clippingOwner": null,
"campaignCommission": 10,
"draftConfig": null,
"eligibilityProject": null
}
}