Admanage API Reference
The Admanage API lets you programmatically launch ads, manage campaigns, duplicate ad sets, query performance data, and organize your creative library. All endpoints use a REST interface over HTTPS.
Base URL
https://api.admanage.aiAvailable APIs
| Category | Description | Endpoints |
|---|---|---|
| Launch Meta (Facebook/Instagram) ads, check batch status, and resume from drafts. | 6 | |
| Upload media and find stored creatives through the v1 media API. | 5 | |
| Search assets, boards, and tags in the media library. | 5 | |
| Manage ad accounts, workspaces, profiles, and user info. | 4 | |
| Create and retrieve ad copy templates. | 2 | |
| Query campaigns and ad sets with spend and status data. | 2 | |
| View launch batch history and details. | 2 | |
| Query ad performance metrics and available report fields. | 2 | |
| Save, list, update, delete, and launch creative drafts. | 6 | |
| Duplicate campaigns, ad sets, and ads on Facebook. | 4 | |
| Create, manage, and execute automation rules and view execution history. | 9 | |
| Get daily ad spend per account across Facebook, TikTok, Pinterest, and Snapchat. | 1 | |
| Create and list changelog entries programmatically. Power your release notes with CI/CD or ChatGPT. | 6 |
Authentication
All Admanage API endpoints require an API key. Pass it as a Bearer token in the Authorization header:
Authorization: Bearer YOUR_API_KEYRate Limits
API requests are rate-limited per API key using a sliding window. Separate budgets apply to read and write operations.
| Operation | Methods | Limit | Window |
|---|---|---|---|
| Read | GET | 60 requests | 60 seconds |
| Write | POST PATCH DELETE | 10 requests | 60 seconds |
When you exceed a limit, the API returns 429 Too Many Requests. Use the response headers to track your usage:
X-RateLimit-Limit: 60 # max requests in window
X-RateLimit-Remaining: 42 # requests left
Retry-After: 17 # seconds until budget resets (only on 429)AI Integration Guide
Connect AI assistants like Claude, ChatGPT, or Gemini to the Admanage API to automate ad analysis, launch workflows, and performance reporting. Any AI that supports HTTP tool calls can use these endpoints.
Quick Start
Generate an API key
Go to admanage.ai/connect to create a new API key. Copy it to your clipboard.
Get your ad accounts
GET /v1/adaccounts returns your ad account IDs and workspace IDs.
Get your pages & Instagram profiles
GET /v1/profiles?businessId=act_123 returns Facebook Page IDs (use as page) and Instagram IDs (use as insta) for launching.
Get your ad sets
GET /v1/adsets?accountId=act_123 returns ad sets with value and label fields ready to pass directly into your launch request.
Launch!
POST /v1/launch with your ad account, page, insta, ad sets, and media URLs. Poll GET /v1/batch-status/:id to track progress.
Claude (Anthropic) — Tool Use
Define Admanage endpoints as tools in your Claude API call. Claude will call them automatically when answering questions about your ads.
// Example: Give Claude access to batch status + reports
const response = await anthropic.messages.create({
model: "claude-sonnet-4-20250514",
max_tokens: 1024,
tools: [
{
name: "get_batch_status",
description: "Check the status and results of an Admanage ad batch",
input_schema: {
type: "object",
properties: {
batch_id: {
type: "string",
description: "The batch ID to check"
}
},
required: ["batch_id"]
}
},
{
name: "query_ad_reports",
description: "Query ad performance metrics from Admanage",
input_schema: {
type: "object",
properties: {
account_id: {
type: "string",
description: "The ad account ID (e.g. act_123456789)"
},
date_from: { type: "string", description: "Start date (YYYY-MM-DD)" },
date_to: { type: "string", description: "End date (YYYY-MM-DD)" }
},
required: ["account_id"]
}
}
],
messages: [
{ role: "user", content: "How did my ads perform last week?" }
]
});
// When Claude calls a tool, execute the API request:
// GET https://api.admanage.ai/v1/batch-status/{batch_id}
// GET https://api.admanage.ai/v1/reports/query?accountId=...&dateFrom=...&dateTo=...
// Headers: { "Authorization": "Bearer YOUR_API_KEY" }ChatGPT / OpenAI — Function Calling
Register Admanage endpoints as functions in your OpenAI API call.
// Example: OpenAI function calling with Admanage
const response = await openai.chat.completions.create({
model: "gpt-4o",
messages: [
{ role: "user", content: "Show me all my ad accounts" }
],
tools: [
{
type: "function",
function: {
name: "list_ad_accounts",
description: "List all ad accounts from Admanage",
parameters: {
type: "object",
properties: {
page: { type: "number", description: "Page number" },
limit: { type: "number", description: "Results per page" }
}
}
}
}
]
});
// When the model calls list_ad_accounts, execute:
// GET https://api.admanage.ai/v1/adaccounts?page=1&limit=25
// Headers: { "Authorization": "Bearer YOUR_API_KEY" }Recommended Endpoints for AI Analysis
| Use Case | Endpoint | Method |
|---|---|---|
| List ad accounts | GET | |
| Get user & workspace info | GET | |
| Query performance reports | GET | |
| Check batch results | GET | |
| Get available report fields | GET | |
| View campaign performance | GET | |
| View ad set performance | GET | |
| Launch ads from a draft | POST | |
| Get daily ad spend | GET |
Tips for AI Integration
- Use the llms.txt spec — Point your AI to api.admanage.ai/llms.txt for a machine-readable overview of all endpoints.
- Start read-only— Begin with GET endpoints (reports, batch status, ad accounts) before enabling write operations like launching ads.
- Poll batch status— After launching ads, use the batch status endpoint to check progress. Batches typically complete within 30–60 seconds.
- Scope API keys— Create a dedicated API key for your AI integration so you can revoke it independently without affecting other workflows.
Launch Meta Ads
Launch Single Ads
Create an ad batch and dispatch to the launcher service. Supports Meta, TikTok, Snapchat, Pinterest, Axon, and Taboola. Each ad is self-contained with its own account, ad sets, and media. Set adAccountType to specify the platform. Returns immediately with batch ID for async polling.
/v1/launchReturns 202 Accepted — the launch is asynchronous.
Poll GET /v1/batch-status/{adBatchId} to track progress.
Supports Facebook, TikTok, Snapchat, Pinterest, and Axon platforms.
Each ad is self-contained: platform, adAccountId, adSets, and media are specified per ad.
The default example is prefilled with the Admanage workspace/account values used in the dashboard, not placeholder IDs.
Legacy format with "creativeState" wrapper is still supported for backwards compatibility.
Set type to "single" (default), "multi", "carousel", or "flexible" per ad.
adSets must be an array of objects with at least { value, label }. String IDs like ["123"] are also accepted and auto-normalized.
Get adSets from GET /v1/adsets — the response includes value and label fields ready to pass directly.
Get page and insta IDs from GET /v1/profiles?businessId=act_xxx.
The media field accepts both videos and images. Images use type: "image" (auto-detected from extension: .png, .jpg, .gif, .webp).
If you uploaded media via POST /v1/media/upload, you can pass the returned url directly in media[].url.
adSets can also be specified at the top level of the request body (outside ads[]) to apply the same ad sets to all ads.
Typical workflow: GET /v1/adaccounts → GET /v1/profiles → GET /v1/adsets → POST /v1/launch.
curl https://api.admanage.ai/v1/launch \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "ads": [ { "adName": "AdManage API Docs - Creative 1", "adAccountId": "act_384730851257635", "workspaceId": "cmiypwwnf00012m2rhiutlf3f", "title": "Launch ads faster with AdManage", "description": "Simple API launch test", "cta": "LEARN_MORE", "link": "https://admanage.ai/", "page": "470703006115773", "insta": "17841471826052348", "adSets": [ { "value": "120249198609970456", "label": "ABO - PRATH - V7" } ], "media": [ { "url": "https://media.admanage.ai/admanage.ai/ERER_DE_red123D4kWzVhn.mp4" } ] }, { "adName": "AdManage API Docs - Creative 2", "adAccountId": "act_384730851257635", "workspaceId": "cmiypwwnf00012m2rhiutlf3f", "title": "Speed matters for media buyers", "description": "Second creative variation", "cta": "LEARN_MORE", "link": "https://admanage.ai/", "page": "470703006115773", "insta": "17841471826052348", "adSets": [ { "value": "120249198609970456", "label": "ABO - PRATH - V7" } ], "media": [ { "url": "https://media.admanage.ai/admanage.ai/ERER_DE_red123D4kWzVhn.mp4" } ] } ]}'Request Body
{
"ads": [
{
"adName": "AdManage API Docs - Creative 1",
"adAccountId": "act_384730851257635",
"workspaceId": "cmiypwwnf00012m2rhiutlf3f",
"title": "Launch ads faster with AdManage",
"description": "Simple API launch test",
"cta": "LEARN_MORE",
"link": "https://admanage.ai/",
"page": "470703006115773",
"insta": "17841471826052348",
"adSets": [
{
"value": "120249198609970456",
"label": "ABO - PRATH - V7"
}
],
"media": [
{
"url": "https://media.admanage.ai/admanage.ai/ERER_DE_red123D4kWzVhn.mp4"
}
]
},
{
"adName": "AdManage API Docs - Creative 2",
"adAccountId": "act_384730851257635",
"workspaceId": "cmiypwwnf00012m2rhiutlf3f",
"title": "Speed matters for media buyers",
"description": "Second creative variation",
"cta": "LEARN_MORE",
"link": "https://admanage.ai/",
"page": "470703006115773",
"insta": "17841471826052348",
"adSets": [
{
"value": "120249198609970456",
"label": "ABO - PRATH - V7"
}
],
"media": [
{
"url": "https://media.admanage.ai/admanage.ai/ERER_DE_red123D4kWzVhn.mp4"
}
]
}
]
}Response
{
"success": true,
"message": "Ad launch initiated successfully",
"adBatchSlug": "a1b2c3d4",
"adBatchId": 9912,
"isAsync": true
}Interactive Request
Runs in your browser and shows the live response inline.
Sign in to run this endpoint from the docs.
Launch Multi-Placement Ads
Meta only. Launch a multi-placement ad with multiple media items. Each media item becomes a separate placement (e.g. Feed, Story, Reel).
/v1/launchThis ad type is Meta (Facebook/Instagram) only.
Set type to "multi" for multi-placement ads.
Each media item maps to a different placement (Feed, Story, Reel, etc.).
The platform assigns placements based on media aspect ratios.
curl https://api.admanage.ai/v1/launch \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "ads": [ { "adName": "Multi-Placement Spring Sale", "adAccountId": "act_123456789", "type": "multi", "title": "Spring Sale", "description": "Shop our collection", "cta": "SHOP_NOW", "link": "https://example.com", "page": "470703006115773", "insta": "17841471826052348", "adSets": [ { "value": "120012345678901234", "label": "US Broad 25-44" } ], "media": [ { "url": "https://media.admanage.ai/admanage.ai/ERER_DE_red123D4kWzVhn.mp4" }, { "url": "https://media.admanage.ai/admanage.ai/2retest_edemo1hhjLNgl7.mp4" }, { "url": "https://media.admanage.ai/admanage.ai/PT-Desk-Ad-David.mp4" } ] } ]}'Request Body
{
"ads": [
{
"adName": "Multi-Placement Spring Sale",
"adAccountId": "act_123456789",
"type": "multi",
"title": "Spring Sale",
"description": "Shop our collection",
"cta": "SHOP_NOW",
"link": "https://example.com",
"page": "470703006115773",
"insta": "17841471826052348",
"adSets": [
{
"value": "120012345678901234",
"label": "US Broad 25-44"
}
],
"media": [
{
"url": "https://media.admanage.ai/admanage.ai/ERER_DE_red123D4kWzVhn.mp4"
},
{
"url": "https://media.admanage.ai/admanage.ai/2retest_edemo1hhjLNgl7.mp4"
},
{
"url": "https://media.admanage.ai/admanage.ai/PT-Desk-Ad-David.mp4"
}
]
}
]
}Response
{
"success": true,
"message": "Ad launch initiated successfully",
"adBatchSlug": "b2c3d4e5",
"adBatchId": 9913,
"isAsync": true
}Interactive Request
Runs in your browser and shows the live response inline.
Sign in to run this endpoint from the docs.
Launch Carousel Ads
Meta only. Launch a carousel ad with multiple swipeable cards. Each media item becomes one card in the carousel.
/v1/launchThis ad type is Meta (Facebook/Instagram) only.
Set type to "carousel" for carousel ads.
Each media item becomes one swipeable card.
Supports both images and videos as carousel cards.
Meta supports 2-10 cards per carousel.
curl https://api.admanage.ai/v1/launch \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "ads": [ { "adName": "Carousel - Product Lineup", "adAccountId": "act_123456789", "type": "carousel", "title": "Spring Collection", "description": "Swipe to explore", "cta": "SHOP_NOW", "link": "https://example.com", "page": "470703006115773", "insta": "17841471826052348", "adSets": [ { "value": "120012345678901234", "label": "US Broad 25-44" } ], "media": [ { "url": "https://media.admanage.ai/admanage.ai/ERER_DE_red123D4kWzVhn.mp4" }, { "url": "https://media.admanage.ai/admanage.ai/2retest_edemo1hhjLNgl7.mp4" }, { "url": "https://media.admanage.ai/admanage.ai/PT-Desk-Ad-David.mp4" } ] } ]}'Request Body
{
"ads": [
{
"adName": "Carousel - Product Lineup",
"adAccountId": "act_123456789",
"type": "carousel",
"title": "Spring Collection",
"description": "Swipe to explore",
"cta": "SHOP_NOW",
"link": "https://example.com",
"page": "470703006115773",
"insta": "17841471826052348",
"adSets": [
{
"value": "120012345678901234",
"label": "US Broad 25-44"
}
],
"media": [
{
"url": "https://media.admanage.ai/admanage.ai/ERER_DE_red123D4kWzVhn.mp4"
},
{
"url": "https://media.admanage.ai/admanage.ai/2retest_edemo1hhjLNgl7.mp4"
},
{
"url": "https://media.admanage.ai/admanage.ai/PT-Desk-Ad-David.mp4"
}
]
}
]
}Response
{
"success": true,
"message": "Ad launch initiated successfully",
"adBatchSlug": "c3d4e5f6",
"adBatchId": 9914,
"isAsync": true
}Interactive Request
Runs in your browser and shows the live response inline.
Sign in to run this endpoint from the docs.
Launch Flexible Ads
Meta only. Launch a flexible ad (Advantage+ Creative) where Meta dynamically selects which media and text combinations to show for best performance.
/v1/launchThis ad type is Meta (Facebook/Instagram) only.
Set type to "flexible" for Advantage+ Creative / flexible ads.
Meta automatically tests combinations of your media and text.
Provide multiple media items — Meta picks the best performing mix.
Supports both images and videos.
curl https://api.admanage.ai/v1/launch \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "ads": [ { "adName": "Flexible - Spring Sale", "adAccountId": "act_123456789", "type": "flexible", "title": "Spring Sale", "description": "Shop our collection", "cta": "SHOP_NOW", "link": "https://example.com", "page": "470703006115773", "insta": "17841471826052348", "adSets": [ { "value": "120012345678901234", "label": "US Broad 25-44" } ], "media": [ { "url": "https://media.admanage.ai/admanage.ai/ERER_DE_red123D4kWzVhn.mp4" }, { "url": "https://media.admanage.ai/admanage.ai/2retest_edemo1hhjLNgl7.mp4" }, { "url": "https://media.admanage.ai/admanage.ai/PT-Desk-Ad-David.mp4" } ] } ]}'Request Body
{
"ads": [
{
"adName": "Flexible - Spring Sale",
"adAccountId": "act_123456789",
"type": "flexible",
"title": "Spring Sale",
"description": "Shop our collection",
"cta": "SHOP_NOW",
"link": "https://example.com",
"page": "470703006115773",
"insta": "17841471826052348",
"adSets": [
{
"value": "120012345678901234",
"label": "US Broad 25-44"
}
],
"media": [
{
"url": "https://media.admanage.ai/admanage.ai/ERER_DE_red123D4kWzVhn.mp4"
},
{
"url": "https://media.admanage.ai/admanage.ai/2retest_edemo1hhjLNgl7.mp4"
},
{
"url": "https://media.admanage.ai/admanage.ai/PT-Desk-Ad-David.mp4"
}
]
}
]
}Response
{
"success": true,
"message": "Ad launch initiated successfully",
"adBatchSlug": "d4e5f6g7",
"adBatchId": 9915,
"isAsync": true
}Interactive Request
Runs in your browser and shows the live response inline.
Sign in to run this endpoint from the docs.
Launch Ads From Draft
Re-launch an existing ad batch (draft or previously failed) by its batch ID.
/v1/launch/from-draftReturns 202 Accepted — the launch is asynchronous.
The batch must belong to the authenticated company.
curl https://api.admanage.ai/v1/launch/from-draft \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "batchId": 9911}'Request Body
{
"batchId": 9911
}Response
{
"success": true,
"message": "Ad launch initiated from draft",
"adBatchSlug": "batch-abc123",
"adBatchId": 9911,
"isAsync": true
}Interactive Request
Runs in your browser and shows the live response inline.
Sign in to run this endpoint from the docs.
Check Batch Status
Lightweight status polling endpoint for launch progress. Poll this after launching until status is "success" or "error".
/v1/batch-status/{id}Poll this endpoint after POST /v1/launch to track progress.
Use `summaryStatus` for the simple lifecycle: "in_progress", "success", or "error".
`status` and `rawStatus` are preserved for compatibility with existing polling clients.
When status is "processing", progress shows percentage complete.
When status is "success", all ads have been launched.
curl https://api.admanage.ai/v1/batch-status/{id} \
-H "Authorization: Bearer YOUR_API_KEY"Response
{
"success": true,
"status": "success",
"summaryStatus": "success",
"rawStatus": "Success",
"progress": 100,
"totalAds": 20,
"successfulAds": 20,
"failedAds": [],
"message": "Ad batch processing completed successfully",
"elapsedTimeMs": 8421,
"elapsedTimeSeconds": 8
}Interactive Request
Runs in your browser and shows the live response inline.
Sign in to run this endpoint from the docs.
Uploading Media
Upload Media
Upload a media file using multipart/form-data. The file stream is proxied to upload-api.
/v1/media/uploadUse multipart/form-data with field name 'file'.
For URL-based uploads, use POST /v1/media/upload/url.
The id/adid fields are numbers (not strings). You do NOT need to pass these IDs back when launching — just use the returned url in your media array.
To launch with an uploaded file: { media: [{ url: "<returned url>" }] }. Type (video/image) is auto-detected from the filename extension.
curl https://api.admanage.ai/v1/media/upload \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "file=<binary-file>"Request Body
{
"file": "<binary-file>"
}Response
{
"success": true,
"url": "https://media.admanage.ai/acme/summer-ugc-v1.mp4",
"filename": "summer-ugc-v1.mp4",
"originalName": "Summer UGC V1.mp4",
"wasRenamed": false,
"id": 123456,
"adid": 123456,
"adids": [
123456
],
"dimensions": {
"width": 1080,
"height": 1920
}
}Upload Media From URL
Upload media by providing a public URL. The file is downloaded and stored on AdManage's CDN. Use the returned url in your launch request.
/v1/media/upload/urlThe id/adid fields are numbers (not strings). You do NOT need to pass these back — just use the returned url.
To launch with this media: { media: [{ url: "<returned url>" }] }.
curl https://api.admanage.ai/v1/media/upload/url \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "url": "https://cdn.example.com/creative.mp4"}'Request Body
{
"url": "https://cdn.example.com/creative.mp4"
}Response
{
"success": true,
"url": "https://media.admanage.ai/acme/summer-ugc-v1.mp4",
"filename": "summer-ugc-v1.mp4",
"originalName": "summer-ugc-v1.mp4",
"wasRenamed": false,
"id": 123456,
"adid": 123456,
"adids": [
123456
],
"dimensions": {
"width": 1080,
"height": 1920
}
}Interactive Request
Runs in your browser and shows the live response inline.
Sign in to run this endpoint from the docs.
Check Media Filename
Check whether a filename already exists before upload.
/v1/media/upload/checkcurl https://api.admanage.ai/v1/media/upload/check \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "fileName": "summer-ugc-v1.mp4"}'Request Body
{
"fileName": "summer-ugc-v1.mp4"
}Response
{
"exists": true,
"existingFile": {
"id": 987,
"adid": 123456,
"name": "summer-ugc-v1.mp4",
"url": "https://media.admanage.ai/acme/summer-ugc-v1.mp4"
}
}Interactive Request
Runs in your browser and shows the live response inline.
Sign in to run this endpoint from the docs.
Search Stored Media
List and filter stored media creatives by query, tags, type, status, and dimensions with paginated results.
/v1/media/searchQuery Parameters
?q=summer&type=video&tags=ugc,hook&page=1&limit=25Supported query params: q, tags (comma-separated), status, type (image|video), dimension, page, limit.
Only returns media records that already have an adid.
curl https://api.admanage.ai/v1/media/search \
-H "Authorization: Bearer YOUR_API_KEY"Response
{
"success": true,
"media": [
{
"id": 1,
"adid": 123,
"name": "summer-campaign.mp4",
"originalName": "Summer Campaign Video.mp4",
"url": "https://media.admanage.ai/acme/summer-campaign.mp4",
"thumbnail": "https://media.admanage.ai/acme/summer-campaign-thumb.jpg",
"customThumbnail": null,
"dimension": "1920x1080",
"mimeType": "video/mp4",
"size": "5242880",
"status": "approved",
"dateAdded": "2026-01-10T12:00:00.000Z",
"duration": 30,
"tags": [
"brand",
"summer-2026"
]
}
],
"pagination": {
"page": 1,
"limit": 25,
"total": 1,
"totalPages": 1,
"hasMore": false
},
"filters": {
"query": "summer",
"tags": [
"ugc",
"hook"
],
"status": null,
"type": "video",
"dimension": null
}
}Interactive Request
Runs in your browser and shows the live response inline.
Sign in to run this endpoint from the docs.
Get Stored Media By ID
Retrieve a single stored media creative by numeric adid.
/v1/media/{id}id in path is the media adid (number).
curl https://api.admanage.ai/v1/media/{id} \
-H "Authorization: Bearer YOUR_API_KEY"Response
{
"success": true,
"media": {
"id": 1,
"adid": 123,
"name": "summer-campaign.mp4",
"originalName": "Summer Campaign Video.mp4",
"url": "https://media.admanage.ai/acme/summer-campaign.mp4",
"thumbnail": "https://media.admanage.ai/acme/summer-campaign-thumb.jpg",
"customThumbnail": null,
"dimension": "1920x1080",
"width": 1920,
"height": 1080,
"size": "5242880",
"mimeType": "video/mp4",
"status": "Not Launched",
"uploaderStatus": "approved",
"dateAdded": "2026-01-10T12:00:00.000Z",
"lastUpdated": "2026-01-12T09:24:00.000Z",
"source": null,
"duration": 30,
"rating": 4,
"smartSummary": "UGC testimonial with product demo",
"smartTags": [
"ugc",
"testimonial",
"product-demo"
],
"spriteUrl": null,
"tags": [
"brand",
"summer-2026"
]
}
}Interactive Request
Runs in your browser and shows the live response inline.
Sign in to run this endpoint from the docs.
Library
List Library Assets
Search and filter creative assets in the media library with cursor-based pagination.
/v1/library/assetsQuery Parameters
?limit=25&filterType=video&sortBy=dateCreated&sortOrder=desc&search=ugcCursor-based pagination (limit + cursor). Max 100 per page.
filterType: all, image, video, gif.
sortBy: dateCreated, dateModified, name, size.
launchChannels: comma-separated (meta, tiktok, snapchat, pinterest, axon).
dimension: exact (1080x1920) or aspect ratio (9:16).
curl https://api.admanage.ai/v1/library/assets \
-H "Authorization: Bearer YOUR_API_KEY"Response
{
"assets": [
{
"id": 12345,
"adid": 67890,
"name": "Spring-UGC.mp4",
"url": "https://media.admanage.ai/acme/Spring-UGC.mp4",
"thumbnail": "https://media.admanage.ai/acme/thumb-Spring-UGC.jpg",
"type": "video",
"uploaderStatus": "approved",
"status": "Launched",
"launchChannels": [
{
"platform": "meta",
"adIds": [
"120012345678901234"
]
}
],
"tags": [
{
"id": 1,
"name": "UGC"
}
],
"boardIds": [
10
]
}
],
"nextCursor": "12344",
"hasMore": true,
"total": 847
}Interactive Request
Runs in your browser and shows the live response inline.
Sign in to run this endpoint from the docs.
Get Library Asset
Fetch a single asset by ID with full details including transcript, comments, and launch channels.
/v1/library/assets/{id}Looks up by both internal id and external adid.
curl https://api.admanage.ai/v1/library/assets/{id} \
-H "Authorization: Bearer YOUR_API_KEY"Response
{
"success": true,
"data": {
"id": 12345,
"name": "Spring-UGC.mp4",
"url": "https://media.admanage.ai/acme/Spring-UGC.mp4",
"type": "video",
"transcript": "Hey guys, check out this amazing product...",
"smartSummary": "UGC testimonial video featuring product demo",
"smartTags": [
"ugc",
"testimonial",
"product-demo"
],
"launchChannels": [
{
"platform": "meta",
"adIds": [
"120012345678901234"
]
}
]
}
}Interactive Request
Runs in your browser and shows the live response inline.
Sign in to run this endpoint from the docs.
List Library Boards
List boards as a hierarchical tree with asset counts. Team boards are visible to all; private boards only to their creator.
/v1/library/boardscurl https://api.admanage.ai/v1/library/boards \
-H "Authorization: Bearer YOUR_API_KEY"Response
{
"success": true,
"data": [
{
"id": 10,
"name": "Q1 Creatives",
"visibility": "team",
"assetCount": 42,
"children": [
{
"id": 11,
"name": "UGC",
"assetCount": 18,
"children": []
}
]
}
]
}Interactive Request
Runs in your browser and shows the live response inline.
Sign in to run this endpoint from the docs.
List Board Assets
List assets in a specific board. Same filters and response shape as GET /v1/library/assets.
/v1/library/boards/{id}/assetsQuery Parameters
?limit=25&sortBy=dateCreatedReturns 404 if board does not exist or does not belong to the company.
curl https://api.admanage.ai/v1/library/boards/{id}/assets \
-H "Authorization: Bearer YOUR_API_KEY"Response
{
"assets": [
{
"id": 12345,
"name": "Spring-UGC.mp4",
"type": "video",
"boardIds": [
10
]
}
],
"nextCursor": null,
"hasMore": false,
"total": 18
}Interactive Request
Runs in your browser and shows the live response inline.
Sign in to run this endpoint from the docs.
Accounts
Get Ad Accounts
List ad accounts available to the authenticated company.
/v1/adaccountsQuery Parameters
?page=1&limit=25curl https://api.admanage.ai/v1/adaccounts \
-H "Authorization: Bearer YOUR_API_KEY"Response
{
"data": [
{
"id": 101,
"accountId": "act_123456789",
"accountName": "Main Account",
"businessId": "act_123456789",
"businessName": "Main Business",
"workspaceId": "workspace_abc",
"type": "facebook"
}
],
"pagination": {
"page": 1,
"limit": 25,
"total": 1,
"totalPages": 1
}
}Interactive Request
Runs in your browser and shows the live response inline.
Sign in to run this endpoint from the docs.
Get Profiles (Pages & Instagram)
Fetch Facebook Pages, Instagram accounts, and Threads profiles. Use the pageId values as the 'page' (Facebook) and 'insta' (Instagram) fields when launching ads. Falls back to live Facebook Graph API if the DB cache is empty.
/v1/profilesQuery Parameters
?businessId=act_123456789All query params are optional. Omit everything to list all profiles for your company.
businessId: filter by ad account. workspaceId is auto-discovered if omitted.
type: filter by 'facebook', 'instagram', or 'threads'.
refresh=true: bypass cache and fetch live from Facebook Graph API.
Use pageId from type='facebook' as the 'page' field in launch requests.
Use pageId from type='instagram' as the 'insta' field in launch requests.
curl https://api.admanage.ai/v1/profiles \
-H "Authorization: Bearer YOUR_API_KEY"Response
{
"success": true,
"data": {
"profiles": [
{
"pageId": "470703006115773",
"pageName": "Brand Page",
"type": "facebook",
"pagePicture": "https://scontent.xx.fbcdn.net/...",
"businessId": "act_123456789"
},
{
"pageId": "17841471826052348",
"pageName": "brand_ig",
"type": "instagram",
"pagePicture": "https://scontent.xx.fbcdn.net/...",
"businessId": "act_123456789",
"relatedPageId": "470703006115773",
"followers": 15200
}
],
"counts": {
"facebook": 1,
"instagram": 1,
"threads": 0
},
"grouped": {
"facebook": [
{
"pageId": "470703006115773",
"pageName": "Brand Page"
}
],
"instagram": [
{
"pageId": "17841471826052348",
"pageName": "brand_ig"
}
],
"threads": []
}
}
}Interactive Request
Runs in your browser and shows the live response inline.
Sign in to run this endpoint from the docs.
Get User Info
Return user profile, organizations, workspaces, and ad-account settings.
/v1/user/extended2curl https://api.admanage.ai/v1/user/extended2 \
-H "Authorization: Bearer YOUR_API_KEY"Response
{
"id": "user_123",
"email": "[email protected]",
"company": "acme",
"defaultWorkspaceId": "workspace_abc",
"workspaces": [
{
"id": "workspace_abc",
"name": "Main Workspace"
}
],
"organizations": [
{
"id": "org_123",
"name": "Acme"
}
],
"settings": [
{
"accountId": "act_123456789",
"accountName": "Main Account"
}
]
}Interactive Request
Runs in your browser and shows the live response inline.
Sign in to run this endpoint from the docs.
Get Workspaces
List all workspaces in the authenticated company.
/v1/workspacesQuery Parameters
?page=1&limit=25curl https://api.admanage.ai/v1/workspaces \
-H "Authorization: Bearer YOUR_API_KEY"Response
{
"data": [
{
"id": "workspace_abc",
"name": "Main Workspace",
"company": "acme",
"organizationId": "org_123",
"metaAccountId": 12,
"tiktokAccountId": null,
"adAccounts": [
{
"id": 101,
"accountId": "act_123456789",
"accountName": "Main Account",
"businessId": "act_123456789",
"businessName": "Main Business",
"type": "facebook",
"workspaceId": "workspace_abc"
}
]
}
],
"pagination": {
"page": 1,
"limit": 25,
"total": 1,
"totalPages": 1
}
}Interactive Request
Runs in your browser and shows the live response inline.
Sign in to run this endpoint from the docs.
Templates
Get Ad Templates
List ad-copy templates with pagination.
/v1/templates/ad-copyQuery Parameters
?page=1&pageSize=10curl https://api.admanage.ai/v1/templates/ad-copy \
-H "Authorization: Bearer YOUR_API_KEY"Response
{
"data": [
{
"id": "copy_abcd1234",
"name": "UGC Static Template",
"defaultTitle": "Free Trial",
"defaultDescription": "Try it today",
"businessId": "act_123456789"
}
],
"pagination": {
"page": 1,
"pageSize": 10,
"total": 1,
"totalPages": 1
}
}Interactive Request
Runs in your browser and shows the live response inline.
Sign in to run this endpoint from the docs.
Get Ad Template Copy Details
Fetch one ad template with detailed copy fields and generated copy rows.
/v1/templates/ad-copy/{id}curl https://api.admanage.ai/v1/templates/ad-copy/{id} \
-H "Authorization: Bearer YOUR_API_KEY"Response
{
"success": true,
"data": {
"id": "copy_abcd1234",
"name": "UGC Static Template",
"businessId": "act_123456789",
"defaultTitle": "Free Trial",
"defaultDescription": "Try it today",
"titleVariations": [
"Free Trial",
"Try It Free"
],
"descriptionVariations": [
"Try it today",
"Start now"
],
"copies": [
{
"index": 1,
"title": "Free Trial",
"description": "Try it today"
},
{
"index": 2,
"title": "Try It Free",
"description": "Start now"
}
]
}
}Interactive Request
Runs in your browser and shows the live response inline.
Sign in to run this endpoint from the docs.
Performance
Get Campaigns
List campaigns aggregated from ad sets by company.
/v1/campaignsQuery Parameters
?page=1&limit=25&platform=facebook&adAccountId=act_123456789curl https://api.admanage.ai/v1/campaigns \
-H "Authorization: Bearer YOUR_API_KEY"Response
{
"data": [
{
"campaignId": "1200123000999",
"campaignName": "Q1 Prospecting",
"platform": "facebook",
"accountId": "act_123456789",
"status": "ACTIVE",
"totalSpend": 842.22,
"adSetCount": 4
}
],
"pagination": {
"page": 1,
"limit": 25,
"total": 1,
"totalPages": 1
}
}Interactive Request
Runs in your browser and shows the live response inline.
Sign in to run this endpoint from the docs.
Get Ad Sets
List ad sets with status, spend, and ad count. Each ad set includes value and label fields so you can pass them directly into ads[].adSets[] when launching.
/v1/adsetsQuery Parameters
?page=1&limit=25&campaignId=1200123000999&platform=facebook&adAccountId=act_123456789Use adAccountId as the preferred public filter parameter.
businessId is also accepted as a compatibility alias and resolves to the same account lookup.
Each ad set includes value and label — pass the object directly into your launch request's adSets array.
Filter by accountId to list all ad sets for an account, or by campaignId to drill into a campaign.
curl https://api.admanage.ai/v1/adsets \
-H "Authorization: Bearer YOUR_API_KEY"Response
{
"data": [
{
"adSetId": "1200123999888",
"name": "US Broad - 18+",
"value": "1200123999888",
"label": "US Broad - 18+",
"campaignId": "1200123000999",
"campaignName": "Q1 Prospecting",
"account_id": "act_123456789",
"platform": "facebook",
"status": "ACTIVE",
"campaignStatus": "ACTIVE",
"adSpend": 210.56,
"adCount": 8
}
],
"pagination": {
"page": 1,
"limit": 25,
"total": 1,
"totalPages": 1
}
}Interactive Request
Runs in your browser and shows the live response inline.
Sign in to run this endpoint from the docs.
Batches
Get Ad Batches
Paginated list of launch batches (recent launch history).
/v1/adbatchesQuery Parameters
?page=1&limit=35&search=prospecting&workspaceId=workspace_abc&privateHistory=truecurl https://api.admanage.ai/v1/adbatches \
-H "Authorization: Bearer YOUR_API_KEY"Response
{
"data": [
{
"id": 9911,
"slug": "batch-abc123",
"status": "Processing",
"dateAdded": "2026-02-18T16:17:00.000Z",
"accountName": "Main Account",
"adAccountId": "act_123456789",
"adCount": 12,
"adSetCount": 2
}
],
"pagination": {
"page": 1,
"limit": 35,
"total": 1,
"totalPages": 1
}
}Interactive Request
Runs in your browser and shows the live response inline.
Sign in to run this endpoint from the docs.
Get Ad Batch By ID
Fetch a specific batch by numeric ID or slug, including creativeState.
/v1/adbatches/{id}curl https://api.admanage.ai/v1/adbatches/{id} \
-H "Authorization: Bearer YOUR_API_KEY"Response
{
"id": 9911,
"slug": "batch-abc123",
"status": "Processing",
"title": "Spring Launch",
"data": "{...}",
"failedAds": [],
"batchData": {
"creativeState": "{...}"
}
}Interactive Request
Runs in your browser and shows the live response inline.
Sign in to run this endpoint from the docs.
Reports
Query Reports
Query ad performance data. Uses BigQuery first for Facebook, falls back to platform-specific APIs. Supports Facebook, TikTok, and Pinterest. Validates account ownership and returns diagnostic warnings when data is unavailable.
/v1/reports/queryQuery Parameters
?accountIds=act_123456789&startDate=2026-02-01&endDate=2026-02-19&metrics=spend,impressions,clicks,ctr,cpm&groupBy=adId&sortBy=spend&sortDirection=DESC&limit=25&filterOperator=AND&adSetIds=23851234567890,23851234567891&campaignIds=23851000000001Required: accountIds, startDate, endDate, metrics.
Metrics: spend, impressions, clicks, ctr, cpm, cpc, reach, frequency, videoViews, hookRate, purchases, purchaseValue, roas, etc.
Group by: adId (default), adName, campaignName, adsetName, landingPage, assetType, creative, body, title, callToActionType, adStatus, objective.
adSetIds: comma-separated ad set IDs to filter results to specific ad sets (e.g. adSetIds=23851234567890,23851234567891).
campaignIds: comma-separated campaign IDs to filter results to specific campaigns (e.g. campaignIds=23851000000001).
filterOperator: AND (default) or OR — controls how multiple filters combine.
excludePatterns: comma-separated patterns to strip from ad names when grouping (e.g. '- Copy,- v2').
filters: JSON-encoded array. Operators: EQUALS, NOT_EQUALS, CONTAINS, NOT_CONTAINS, STARTS_WITH, ENDS_WITH, IN, NOT_IN, HIGHER_THAN, LOWER_THAN, BETWEEN, NOT_BETWEEN, EMPTY, NOT_EMPTY.
Account ownership is validated — invalid account IDs are skipped with a warning.
When data is empty, returns 200 with data: [] and metadata.warnings explaining why (e.g. pipeline not configured, no token found).
New accounts with no spend data return an empty response with warnings — never a 500.
Use GET /v1/reports/fields for full list of available metrics and dimensions.
curl https://api.admanage.ai/v1/reports/query \
-H "Authorization: Bearer YOUR_API_KEY"Response
{
"success": true,
"data": [
{
"adId": "120012345678901234",
"adName": "Spring Launch - UGC 1",
"spend": 842.22,
"impressions": 145000,
"clicks": 3200,
"ctr": 0.022,
"thumbnailUrl": "https://..."
}
],
"pagination": {
"offset": 0,
"limit": 25,
"total": 142,
"hasMore": true
},
"metadata": {
"platform": "facebook",
"source": "bigquery"
}
}Interactive Request
Runs in your browser and shows the live response inline.
Sign in to run this endpoint from the docs.
Get Report Fields
Returns available dimensions and metrics for building report queries.
/v1/reports/fieldscurl https://api.admanage.ai/v1/reports/fields \
-H "Authorization: Bearer YOUR_API_KEY"Response
{
"success": true,
"dimensions": [
{
"name": "adId",
"label": "Ad ID",
"type": "dimension"
},
{
"name": "adName",
"label": "Ad Name",
"type": "dimension"
},
{
"name": "campaignName",
"label": "Campaign Name",
"type": "dimension"
}
],
"metrics": [
{
"name": "spend",
"label": "Spend",
"type": "metric",
"format": "currency"
},
{
"name": "impressions",
"label": "Impressions",
"type": "metric",
"format": "number"
},
{
"name": "ctr",
"label": "CTR",
"type": "calculated",
"format": "percent"
}
]
}Interactive Request
Runs in your browser and shows the live response inline.
Sign in to run this endpoint from the docs.
Drafts
Create Launch Draft
Save a new launch draft with creative state for later iteration and launching.
/v1/draftsReturns 201 Created.
businessId is required.
state holds the full creativeState (globalDefaults + rows).
curl https://api.admanage.ai/v1/drafts \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "title": "My Draft", "businessId": "act_123456789", "workspaceId": "workspace_abc", "state": { "globalDefaults": { "title": "Spring Sale", "description": "Shop our collection", "businessId": "act_123456789", "adAccountType": "facebook" }, "rows": [ { "id": "row-1", "videos": [ { "name": "creative-1.mp4" } ], "adName": "Creative 1" } ] }}'Request Body
{
"title": "My Draft",
"businessId": "act_123456789",
"workspaceId": "workspace_abc",
"state": {
"globalDefaults": {
"title": "Spring Sale",
"description": "Shop our collection",
"businessId": "act_123456789",
"adAccountType": "facebook"
},
"rows": [
{
"id": "row-1",
"videos": [
{
"name": "creative-1.mp4"
}
],
"adName": "Creative 1"
}
]
}
}Response
{
"success": true,
"data": {
"id": 42,
"title": "My Draft",
"businessId": "act_123456789",
"workspaceId": "workspace_abc",
"status": "draft",
"user": "[email protected]",
"company": "acme",
"createdAt": "2026-02-19T10:00:00.000Z",
"state": {
"globalDefaults": {
"title": "Spring Sale"
},
"rows": [
{
"id": "row-1"
}
]
}
}
}Interactive Request
Runs in your browser and shows the live response inline.
Sign in to run this endpoint from the docs.
List Launch Drafts
Paginated list of launch drafts. Does not include the state field (large JSON) — use GET /v1/drafts/:id to load full state.
/v1/draftsQuery Parameters
?page=1&limit=25&businessId=act_123456789Filters: businessId, workspaceId, search.
state is omitted from list results for performance.
curl https://api.admanage.ai/v1/drafts \
-H "Authorization: Bearer YOUR_API_KEY"Response
{
"data": [
{
"id": 42,
"title": "My Draft",
"businessId": "act_123456789",
"workspaceId": "workspace_abc",
"status": "draft",
"user": "[email protected]",
"company": "acme",
"createdAt": "2026-02-19T10:00:00.000Z"
}
],
"pagination": {
"page": 1,
"limit": 25,
"total": 1,
"totalPages": 1
}
}Interactive Request
Runs in your browser and shows the live response inline.
Sign in to run this endpoint from the docs.
Get Launch Draft By ID
Fetch a single launch draft including the full state (creativeState JSON).
/v1/drafts/{id}curl https://api.admanage.ai/v1/drafts/{id} \
-H "Authorization: Bearer YOUR_API_KEY"Response
{
"success": true,
"data": {
"id": 42,
"title": "My Draft",
"businessId": "act_123456789",
"workspaceId": "workspace_abc",
"status": "draft",
"user": "[email protected]",
"company": "acme",
"createdAt": "2026-02-19T10:00:00.000Z",
"state": {
"globalDefaults": {
"title": "Spring Sale"
},
"rows": [
{
"id": "row-1",
"adName": "Creative 1"
}
]
}
}
}Interactive Request
Runs in your browser and shows the live response inline.
Sign in to run this endpoint from the docs.
Update Launch Draft
Partial update of a launch draft. Update title, state, status, businessId, or workspaceId.
/v1/drafts/{id}All fields are optional — only provided fields are updated.
curl https://api.admanage.ai/v1/drafts/{id} \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "title": "Updated Draft", "state": { "globalDefaults": { "title": "Summer Sale" }, "rows": [ { "id": "row-1", "adName": "Updated Creative" } ] }}'Request Body
{
"title": "Updated Draft",
"state": {
"globalDefaults": {
"title": "Summer Sale"
},
"rows": [
{
"id": "row-1",
"adName": "Updated Creative"
}
]
}
}Response
{
"success": true,
"data": {
"id": 42,
"title": "Updated Draft",
"status": "draft",
"state": {
"globalDefaults": {
"title": "Summer Sale"
},
"rows": [
{
"id": "row-1",
"adName": "Updated Creative"
}
]
}
}
}Interactive Request
Runs in your browser and shows the live response inline.
Sign in to run this endpoint from the docs.
Delete Launch Draft
Delete a launch draft. Company-scoped — only drafts belonging to your company can be deleted.
/v1/drafts/{id}curl https://api.admanage.ai/v1/drafts/{id} \
-H "Authorization: Bearer YOUR_API_KEY"Response
{
"success": true,
"message": "Draft deleted"
}Interactive Request
Runs in your browser and shows the live response inline.
Sign in to run this endpoint from the docs.
Launch Draft
Launch a saved draft. Loads the draft state, creates an ad batch, dispatches to launcher, and marks the draft as 'launched'.
/v1/drafts/{id}/launchReturns 202 Accepted — the launch is asynchronous.
Poll GET /v1/batch-status/{adBatchId} to track progress.
Draft status is updated to 'launched' on success.
curl https://api.admanage.ai/v1/drafts/{id}/launch \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'Response
{
"success": true,
"message": "Ad launch initiated successfully",
"adBatchSlug": "a1b2c3d4",
"adBatchId": 9913,
"isAsync": true
}Interactive Request
Runs in your browser and shows the live response inline.
Sign in to run this endpoint from the docs.
Manage
Duplicate Ad Set
Duplicate a Facebook ad set (1-10 copies). Uses smartCopy with async batch fallback for large ad sets.
/v1/manage/duplicate-adsetcopyCount must be 1-10.
deepCopy (default true): also copies all ads within the ad set.
targetCampaignId: optional, duplicates into a different campaign.
newName: optional, renames the duplicated ad set(s).
Errors include Facebook error codes/subcodes for debugging. Common errors:
- Instagram Explore placement: must be selected alongside Explore Home (Facebook validation).
- Error 1885194: ad set too large for sync copy — the API automatically retries with async batch.
- Error 2446173: asset label issues — retried without ads attached.
- Transient errors (code 2) are automatically retried up to 3 times with backoff.
curl https://api.admanage.ai/v1/manage/duplicate-adset \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "adsetId": "120248289622780456", "accountId": "act_123456789", "copyCount": 2, "initialStatus": "PAUSED", "deepCopy": true, "newName": "My Ad Set Copy", "workspaceId": "workspace_abc"}'Request Body
{
"adsetId": "120248289622780456",
"accountId": "act_123456789",
"copyCount": 2,
"initialStatus": "PAUSED",
"deepCopy": true,
"newName": "My Ad Set Copy",
"workspaceId": "workspace_abc"
}Response
{
"success": true,
"originalAdSetId": "120248289622780456",
"results": [
{
"copyNumber": 1,
"success": true,
"newAdSetId": "120248289622780457"
},
{
"copyNumber": 2,
"success": true,
"newAdSetId": "120248289622780458"
}
],
"successCount": 2,
"failCount": 0
}Interactive Request
Runs in your browser and shows the live response inline.
Sign in to run this endpoint from the docs.
Duplicate Campaign
Duplicate a Facebook campaign (1-10 copies). Uses smartCopy with async batch fallback for large campaigns.
/v1/manage/duplicate-campaigncopyCount must be 1-10.
deepCopy (default true): also copies all ad sets and ads within the campaign.
curl https://api.admanage.ai/v1/manage/duplicate-campaign \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "campaignId": "120247699100220456", "accountId": "act_123456789", "copyCount": 1, "initialStatus": "PAUSED", "deepCopy": true, "workspaceId": "workspace_abc"}'Request Body
{
"campaignId": "120247699100220456",
"accountId": "act_123456789",
"copyCount": 1,
"initialStatus": "PAUSED",
"deepCopy": true,
"workspaceId": "workspace_abc"
}Response
{
"success": true,
"originalCampaignId": "120247699100220456",
"results": [
{
"copyNumber": 1,
"success": true,
"newCampaignId": "120247699100220457"
}
],
"successCount": 1,
"failCount": 0
}Interactive Request
Runs in your browser and shows the live response inline.
Sign in to run this endpoint from the docs.
Duplicate Ad
Duplicate a Facebook ad with optional creative modifications. Falls back to recreation on pixel/lead form errors.
/v1/manage/duplicate-adcopyCount must be 1-10.
copyValues: optional creative modifications (primaryText1-5, headline1-5, url, urlTags, adName).
On error codes 1634013/3390001, automatically attempts recreation fallback.
method in results: 'copies' (standard) or 'recreation' (fallback).
curl https://api.admanage.ai/v1/manage/duplicate-ad \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "adId": "120012345678901234", "accountId": "act_123456789", "targetAdSetId": "120248289622780456", "copyCount": 1, "initialStatus": "PAUSED", "copyValues": { "primaryText1": "New primary text", "headline1": "New headline", "adName": "My Ad Copy" }, "workspaceId": "workspace_abc"}'Request Body
{
"adId": "120012345678901234",
"accountId": "act_123456789",
"targetAdSetId": "120248289622780456",
"copyCount": 1,
"initialStatus": "PAUSED",
"copyValues": {
"primaryText1": "New primary text",
"headline1": "New headline",
"adName": "My Ad Copy"
},
"workspaceId": "workspace_abc"
}Response
{
"success": true,
"originalAdId": "120012345678901234",
"results": [
{
"copyNumber": 1,
"success": true,
"newAdId": "120012345678901235",
"method": "copies"
}
],
"successCount": 1,
"failCount": 0
}Interactive Request
Runs in your browser and shows the live response inline.
Sign in to run this endpoint from the docs.
Get Change History
Fetch Meta activity history for an ad account. Returns changes to campaigns, ad sets, and ads — including budget, bid cap, status, and targeting modifications with old/new values and timestamps.
/v1/manage/changesQuery Parameters
?businessId=act_123456789&objectId=120247699100220456&since=1710000000&until=1710300000&workspaceId=workspace_abc&limit=50businessId (required): the ad account ID (e.g. act_123456789).
objectId (optional): filter to a specific campaign, ad set, or ad ID.
since / until (optional): Unix timestamps to define a date range.
limit: 1-100, default 50.
Budget values are in minor units (cents). Divide by 100 for the display amount.
Changes include: budget, bid cap, cost cap, status, targeting, schedule, and more.
curl https://api.admanage.ai/v1/manage/changes \
-H "Authorization: Bearer YOUR_API_KEY"Response
{
"success": true,
"data": [
{
"eventTime": 1710300000,
"dateTimeInTimezone": "2026-03-13T10:00:00-0400",
"eventType": "update_ad_set_budget",
"translatedEventType": "Updated Ad Set Budget",
"objectId": "120247699100220456",
"objectName": "My Ad Set",
"objectType": "adset",
"actorId": "67890",
"actorName": "Jane Doe",
"changes": {
"daily_budget": {
"old": 5000,
"new": 10000
},
"bid_amount": {
"old": 200,
"new": 350
}
}
}
],
"paging": {
"cursors": {
"before": "abc",
"after": "xyz"
}
},
"metadata": {
"businessId": "act_123456789",
"objectId": "120247699100220456",
"count": 1
}
}Interactive Request
Runs in your browser and shows the live response inline.
Sign in to run this endpoint from the docs.
Automations
List Automation Rules
Paginated list of automation rules filtered by status, workspace, or search term.
/v1/automationsQuery Parameters
?page=1&limit=25&status=active&workspaceId=workspace_abc&search=pauseFilters: status, workspaceId, search (name substring).
Max limit: 100. Default: 25.
curl https://api.admanage.ai/v1/automations \
-H "Authorization: Bearer YOUR_API_KEY"Response
{
"success": true,
"data": [
{
"id": 1,
"name": "Pause low ROAS ads",
"status": "active",
"actionType": "pause_ad",
"accountId": "act_123456789",
"frequency": "daily",
"scheduledDate": "2026-02-27",
"scheduledTime": "09:00",
"workspaceId": "workspace_abc",
"createdAt": "2026-02-20T10:00:00.000Z",
"updatedAt": "2026-02-25T14:30:00.000Z"
}
],
"pagination": {
"page": 1,
"limit": 25,
"total": 1,
"totalPages": 1
}
}Interactive Request
Runs in your browser and shows the live response inline.
Sign in to run this endpoint from the docs.
Get Automation Rule
Fetch a single automation rule with its full flow configuration and 10 most recent executions.
/v1/automations/{id}curl https://api.admanage.ai/v1/automations/{id} \
-H "Authorization: Bearer YOUR_API_KEY"Response
{
"success": true,
"data": {
"id": 1,
"name": "Pause low ROAS ads",
"status": "active",
"flow": {
"nodes": [
{
"id": "trigger-1",
"type": "trigger",
"data": {}
},
{
"id": "action-1",
"type": "action",
"data": {}
}
]
},
"actionType": "pause_ad",
"accountId": "act_123456789",
"targetId": null,
"newName": null,
"frequency": "daily",
"scheduledDate": "2026-02-27",
"scheduledTime": "09:00",
"dayOfWeek": null,
"dayOfMonth": null,
"startDate": null,
"endDate": null,
"workspaceId": "workspace_abc",
"createdAt": "2026-02-20T10:00:00.000Z",
"updatedAt": "2026-02-25T14:30:00.000Z",
"executions": [
{
"id": 101,
"status": "completed",
"executedAt": "2026-02-26T09:00:05.000Z",
"completedAt": "2026-02-26T09:00:12.000Z",
"duration": 7000,
"errorMessage": null
}
]
}
}Interactive Request
Runs in your browser and shows the live response inline.
Sign in to run this endpoint from the docs.
Create Automation Rule
Create a new automation rule. For recurring rules (daily/weekly/monthly), the scheduledDate is auto-calculated if not provided.
/v1/automationsReturns 201 Created.
Required: name, flow (with nodes array), actionType, accountId.
frequency: 'one-time' (default), 'daily', 'weekly', 'monthly'.
For weekly: provide dayOfWeek (e.g. 'monday').
For monthly: provide dayOfMonth (e.g. '15' or 'last').
curl https://api.admanage.ai/v1/automations \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "name": "Pause low ROAS ads", "flow": { "nodes": [ { "id": "trigger-1", "type": "trigger", "data": {} }, { "id": "action-1", "type": "action", "data": {} } ] }, "actionType": "pause_ad", "accountId": "act_123456789", "frequency": "daily", "scheduledTime": "09:00", "workspaceId": "workspace_abc"}'Request Body
{
"name": "Pause low ROAS ads",
"flow": {
"nodes": [
{
"id": "trigger-1",
"type": "trigger",
"data": {}
},
{
"id": "action-1",
"type": "action",
"data": {}
}
]
},
"actionType": "pause_ad",
"accountId": "act_123456789",
"frequency": "daily",
"scheduledTime": "09:00",
"workspaceId": "workspace_abc"
}Response
{
"success": true,
"data": {
"id": 2,
"name": "Pause low ROAS ads",
"status": "active",
"flow": {
"nodes": [
{
"id": "trigger-1",
"type": "trigger",
"data": {}
},
{
"id": "action-1",
"type": "action",
"data": {}
}
]
},
"actionType": "pause_ad",
"accountId": "act_123456789",
"frequency": "daily",
"scheduledDate": "2026-02-27",
"scheduledTime": "09:00",
"workspaceId": "workspace_abc",
"createdAt": "2026-02-27T15:00:00.000Z",
"updatedAt": "2026-02-27T15:00:00.000Z"
}
}Interactive Request
Runs in your browser and shows the live response inline.
Sign in to run this endpoint from the docs.
Update Automation Rule
Partial update of an automation rule. scheduledDate is recalculated when frequency-related fields change.
/v1/automations/{id}At least one field must be provided.
Updatable: name, flow, actionType, accountId, targetId, newName, status, frequency, scheduledDate, scheduledTime, dayOfWeek, dayOfMonth, startDate, endDate, workspaceId.
curl https://api.admanage.ai/v1/automations/{id} \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "status": "paused"}'Request Body
{
"status": "paused"
}Response
{
"success": true,
"data": {
"id": 2,
"name": "Pause low ROAS ads",
"status": "paused",
"frequency": "daily",
"updatedAt": "2026-02-27T16:00:00.000Z"
}
}Interactive Request
Runs in your browser and shows the live response inline.
Sign in to run this endpoint from the docs.
Delete Automation Rule
Delete an automation rule. Company-scoped — only rules belonging to your company can be deleted.
/v1/automations/{id}curl https://api.admanage.ai/v1/automations/{id} \
-H "Authorization: Bearer YOUR_API_KEY"Response
{
"success": true,
"message": "Rule 2 deleted"
}Interactive Request
Runs in your browser and shows the live response inline.
Sign in to run this endpoint from the docs.
Execute Automation Rule
Execute an existing saved automation rule by ID. Returns 202 Accepted with an executionId to poll for status.
/v1/automations/{id}/executeReturns 202 Accepted — execution is asynchronous.
Poll GET /v1/automations/executions/{executionId} for final status.
curl https://api.admanage.ai/v1/automations/{id}/execute \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'Response
{
"success": true,
"data": {
"executionId": 102,
"status": "running",
"message": "Poll GET /v1/automations/executions/102 for status."
}
}Interactive Request
Runs in your browser and shows the live response inline.
Sign in to run this endpoint from the docs.
Execute Inline Automation
Execute an automation flow without saving it as a rule. Useful for one-off or CI-triggered executions.
/v1/automations/executeReturns 202 Accepted — execution is asynchronous.
Required: flow (with nodes array), actionType, accountId.
dryRun: true simulates execution without making real changes.
curl https://api.admanage.ai/v1/automations/execute \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "flow": { "nodes": [ { "id": "action-1", "type": "action", "data": {} } ] }, "actionType": "pause_ad", "accountId": "act_123456789", "dryRun": true}'Request Body
{
"flow": {
"nodes": [
{
"id": "action-1",
"type": "action",
"data": {}
}
]
},
"actionType": "pause_ad",
"accountId": "act_123456789",
"dryRun": true
}Response
{
"success": true,
"data": {
"executionId": 103,
"status": "running",
"message": "Poll GET /v1/automations/executions/103 for status."
}
}Interactive Request
Runs in your browser and shows the live response inline.
Sign in to run this endpoint from the docs.
List Automation Executions
Paginated list of automation execution history. Filterable by status, rule ID, and workspace.
/v1/automations/executionsQuery Parameters
?page=1&limit=10&status=completed&automationRuleId=1Filters: status, automationRuleId, workspaceId.
Status values: running, completed, failed, scheduled_delay, awaiting_approval.
curl https://api.admanage.ai/v1/automations/executions \
-H "Authorization: Bearer YOUR_API_KEY"Response
{
"success": true,
"data": [
{
"id": 101,
"automationRuleId": 1,
"name": "Pause low ROAS ads",
"actionType": "pause_ad",
"status": "completed",
"executedAt": "2026-02-26T09:00:05.000Z",
"completedAt": "2026-02-26T09:00:12.000Z",
"duration": 7000,
"errorMessage": null,
"workspaceId": "workspace_abc"
}
],
"pagination": {
"page": 1,
"limit": 10,
"total": 1,
"totalPages": 1
}
}Interactive Request
Runs in your browser and shows the live response inline.
Sign in to run this endpoint from the docs.
Get Automation Execution
Fetch full execution details including stepResults, executionLogs, flow snapshot, and any delayed execution or approval records.
/v1/automations/executions/{id}Includes delayedExecution record when status is 'scheduled_delay'.
Includes approval record when status is 'awaiting_approval'.
curl https://api.admanage.ai/v1/automations/executions/{id} \
-H "Authorization: Bearer YOUR_API_KEY"Response
{
"success": true,
"data": {
"id": 101,
"automationRuleId": 1,
"name": "Pause low ROAS ads",
"actionType": "pause_ad",
"accountId": "act_123456789",
"flow": {
"nodes": []
},
"status": "completed",
"executedAt": "2026-02-26T09:00:05.000Z",
"completedAt": "2026-02-26T09:00:12.000Z",
"duration": 7000,
"stepResults": [
{
"nodeId": "action-1",
"status": "success",
"result": {
"adsPaused": 3
}
}
],
"executionLogs": [
"Evaluating trigger...",
"Running action: pause_ad",
"Paused 3 ads"
],
"errorMessage": null,
"delayedExecution": null,
"approval": null
}
}Interactive Request
Runs in your browser and shows the live response inline.
Sign in to run this endpoint from the docs.
Spend
Get Daily Ad Spend
Get daily ad spend per account across all connected platforms (Facebook/Meta, TikTok, Pinterest, Snapchat). Useful for balance management and budget monitoring. Uses BigQuery for Facebook with Graph API fallback. Date range capped at 90 days per request.
/v1/spend/dailyQuery Parameters
?startDate=2026-03-01&endDate=2026-03-09&accountIds=act_384730851257635&platform=facebookRequired params: startDate, endDate (YYYY-MM-DD format).
Optional params: accountIds (comma-separated), workspaceId, platform (facebook, tiktok, pinterest, snapchat).
Date range is capped at 90 days per request.
If no accountIds are provided, returns spend for all accounts in your company.
If a platform fails (e.g. token expired), partial results are returned with an errors array.
When no matching accounts are found, returns a warnings array explaining why (e.g. invalid account IDs, no accounts connected).
Spend is returned in each account's native currency.
BigQuery data is typically one day lagged; today's spend may use the Facebook Graph API fallback.
curl https://api.admanage.ai/v1/spend/daily \
-H "Authorization: Bearer YOUR_API_KEY"Response
{
"success": true,
"data": [
{
"date": "2026-03-01",
"accountId": "act_384730851257635",
"accountName": "Admanage Limited",
"platform": "facebook",
"currency": "GBP",
"spend": 150.42
},
{
"date": "2026-03-01",
"accountId": "7486153503963054097",
"accountName": "TikTok Main Account",
"platform": "tiktok",
"currency": "USD",
"spend": 75
},
{
"date": "2026-03-02",
"accountId": "act_384730851257635",
"accountName": "Admanage Limited",
"platform": "facebook",
"currency": "GBP",
"spend": 142.18
}
],
"metadata": {
"startDate": "2026-03-01",
"endDate": "2026-03-09",
"accountCount": 2,
"totalSpend": 367.6,
"platforms": [
"facebook",
"tiktok"
]
}
}Interactive Request
Runs in your browser and shows the live response inline.
Sign in to run this endpoint from the docs.
Changelog
List Changelog Entries
List published changelog entries in reverse chronological order. Returns the latest 20 entries. Auth via apiKey query parameter.
/api/external/crmQuery Parameters
?apiKey=YOUR_CRM_API_KEYAuth: Pass API key as ?apiKey=YOUR_KEY query parameter (not Bearer header).
Rate limited: 5 requests per second.
Only returns published entries.
curl https://admanage.ai/api/external/crm \
-H "Authorization: Bearer YOUR_API_KEY"Response
{
"success": true,
"entries": [
{
"id": 1,
"title": "Faster Bulk Ad Uploads",
"content": "Bulk uploads are now **3x faster** thanks to parallel processing.",
"images": [],
"category": "feature",
"featured": true,
"authorName": "AdManage Team",
"authorEmail": "[email protected]",
"published": true,
"createdAt": "2026-03-19T12:00:00.000Z",
"updatedAt": "2026-03-19T12:00:00.000Z"
}
]
}Interactive Request
Runs in your browser and shows the live response inline.
Sign in to run this endpoint from the docs.
Create Changelog Entry
Create a new changelog entry programmatically. Useful for CI/CD pipelines, ChatGPT integrations, or automated release notes.
/api/external/crmQuery Parameters
?apiKey=YOUR_CRM_API_KEYAuth: Pass API key as ?apiKey=YOUR_KEY query parameter (not Bearer header).
Rate limited: 5 requests per second.
Required fields: title, content, authorName, authorEmail.
Optional fields: images (string[] of URLs), category (daily_update | weekly_update | feature | fix | improvement | update), featured (boolean), published (boolean, defaults true), createdAt (ISO-8601 timestamp — optional on create to backfill display and sort order).
Category defaults to 'update' if not specified.
curl https://admanage.ai/api/external/crm \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "title": "Reddit Ads Integration", "content": "Launch ads directly to Reddit from AdManage.\n\n- All ad types: link, video, image, carousel, freeform\n- Full OAuth flow with automatic token refresh\n- Budget and targeting controls", "images": [], "category": "feature", "featured": false, "published": true, "authorName": "AdManage Team", "authorEmail": "[email protected]", "createdAt": "2026-03-18T12:00:00.000Z"}'Request Body
{
"title": "Reddit Ads Integration",
"content": "Launch ads directly to Reddit from AdManage.\n\n- All ad types: link, video, image, carousel, freeform\n- Full OAuth flow with automatic token refresh\n- Budget and targeting controls",
"images": [],
"category": "feature",
"featured": false,
"published": true,
"authorName": "AdManage Team",
"authorEmail": "[email protected]",
"createdAt": "2026-03-18T12:00:00.000Z"
}Response
{
"success": true,
"entry": {
"id": 42,
"title": "Reddit Ads Integration",
"content": "Launch ads directly to Reddit from AdManage.\n\n- All ad types: link, video, image, carousel, freeform\n- Full OAuth flow with automatic token refresh\n- Budget and targeting controls",
"images": [],
"category": "feature",
"featured": false,
"authorId": "external-api",
"authorName": "AdManage Team",
"authorEmail": "[email protected]",
"published": true,
"createdAt": "2026-03-18T12:00:00.000Z",
"updatedAt": "2026-03-19T12:00:00.000Z"
}
}Interactive Request
Runs in your browser and shows the live response inline.
Sign in to run this endpoint from the docs.
Get Changelog Entry
Get a single changelog entry by ID.
/api/external/crm/{id}Query Parameters
?apiKey=YOUR_CRM_API_KEYAuth: Pass API key as ?apiKey=YOUR_KEY query parameter.
Replace {id} with the entry's numeric ID.
curl https://admanage.ai/api/external/crm/{id} \
-H "Authorization: Bearer YOUR_API_KEY"Response
{
"success": true,
"entry": {
"id": 42,
"title": "Reddit Ads Integration",
"content": "Launch ads directly to Reddit from AdManage.",
"images": [],
"category": "feature",
"featured": true,
"authorName": "AdManage Team",
"published": true,
"createdAt": "2026-03-19T12:00:00.000Z",
"updatedAt": "2026-03-19T12:00:00.000Z"
}
}Interactive Request
Runs in your browser and shows the live response inline.
Sign in to run this endpoint from the docs.
Update Changelog Entry
Update an existing changelog entry. All fields are optional — only include the fields you want to change.
/api/external/crm/{id}Query Parameters
?apiKey=YOUR_CRM_API_KEYAuth: Pass API key as ?apiKey=YOUR_KEY query parameter.
Replace {id} with the entry's numeric ID.
All fields are optional. Only send what you want to update.
Updatable fields: title, content, images, category, featured, published, authorName, authorEmail.
curl https://admanage.ai/api/external/crm/{id} \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "title": "Updated Title", "content": "Updated markdown content.", "category": "improvement", "featured": true}'Request Body
{
"title": "Updated Title",
"content": "Updated markdown content.",
"category": "improvement",
"featured": true
}Response
{
"success": true,
"entry": {
"id": 42,
"title": "Updated Title",
"content": "Updated markdown content.",
"images": [],
"category": "improvement",
"featured": true,
"authorName": "AdManage Team",
"published": true,
"createdAt": "2026-03-19T12:00:00.000Z",
"updatedAt": "2026-03-19T13:00:00.000Z"
}
}Interactive Request
Runs in your browser and shows the live response inline.
Sign in to run this endpoint from the docs.
Delete Changelog Entry
Permanently delete a changelog entry by ID.
/api/external/crm/{id}Query Parameters
?apiKey=YOUR_CRM_API_KEYAuth: Pass API key as ?apiKey=YOUR_KEY query parameter.
Replace {id} with the entry's numeric ID.
This action is permanent and cannot be undone.
curl https://admanage.ai/api/external/crm/{id} \
-H "Authorization: Bearer YOUR_API_KEY"Response
{
"success": true,
"deleted": 42
}Interactive Request
Runs in your browser and shows the live response inline.
Sign in to run this endpoint from the docs.
Generate Cover Image
Generate a professional cover image using AI (Google Gemini) and host it on the AdManage CDN. Returns a permanent URL you can use in the images array when creating or updating entries.
/api/external/crm/generate-imageQuery Parameters
?apiKey=YOUR_CRM_API_KEYAuth: Pass API key as ?apiKey=YOUR_KEY query parameter.
Rate limited: 2 requests per second.
The prompt describes the image to generate. Keep it concise (max 2000 chars).
Images are generated with no text/words, using a tech/SaaS aesthetic.
The returned URL is permanently hosted on the AdManage CDN (media.admanage.ai).
Use the URL in the images array when creating/updating changelog entries.
Workflow: 1) Generate image → 2) Create entry with the image URL in images array.
curl https://admanage.ai/api/external/crm/generate-image \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "prompt": "A cover image for a changelog about Reddit Ads integration with social media icons and purple gradients"}'Request Body
{
"prompt": "A cover image for a changelog about Reddit Ads integration with social media icons and purple gradients"
}Response
{
"success": true,
"url": "https://media.admanage.ai/changelog/ai-1710864000000.jpg"
}Interactive Request
Runs in your browser and shows the live response inline.
Sign in to run this endpoint from the docs.
Coming Soon
/v1/manage/deleteDelete Ads / Ad Sets / Campaigns/v1/manage/edit/bulkEdit Existing Ad Creative