AdManage.ai logo
Pricing
Blog
API Overview

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.ai

Available APIs

CategoryDescriptionEndpoints
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_KEY
Sign in to create and manage API keys. | LLM spec (llms.txt)

Rate Limits

API requests are rate-limited per API key using a sliding window. Separate budgets apply to read and write operations.

OperationMethodsLimitWindow
ReadGET60 requests60 seconds
WritePOST PATCH DELETE10 requests60 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

1

Generate an API key

Go to admanage.ai/connect to create a new API key. Copy it to your clipboard.

2

Get your ad accounts

GET /v1/adaccounts returns your ad account IDs and workspace IDs.

3

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.

4

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.

5

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.

JavaScript (Anthropic SDK)
// 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.

JavaScript (OpenAI SDK)
// 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 CaseEndpointMethod
List ad accountsGET
Get user & workspace infoGET
Query performance reportsGET
Check batch resultsGET
Get available report fieldsGET
View campaign performanceGET
View ad set performanceGET
Launch ads from a draftPOST
Get daily ad spendGET

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.

POST/v1/launch

Returns 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).

POST/v1/launch

This 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.

POST/v1/launch

This 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.

POST/v1/launch

This 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.

POST/v1/launch/from-draft

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

GET/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.

POST/v1/media/upload

Use 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.

POST/v1/media/upload/url

The 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.

POST/v1/media/upload/check
curl 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.

GET/v1/media/search

Query Parameters

?q=summer&type=video&tags=ugc,hook&page=1&limit=25

Supported 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.

GET/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.

GET/v1/library/assets

Query Parameters

?limit=25&filterType=video&sortBy=dateCreated&sortOrder=desc&search=ugc

Cursor-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.

GET/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.

GET/v1/library/boards
curl 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.

GET/v1/library/boards/{id}/assets

Query Parameters

?limit=25&sortBy=dateCreated

Returns 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.


List Library Tags

List all tags in the media library for the authenticated company.

GET/v1/library/tags
curl https://api.admanage.ai/v1/library/tags \
  -H "Authorization: Bearer YOUR_API_KEY"

Response

{
  "success": true,
  "data": [
    {
      "id": 1,
      "name": "UGC",
      "company": "acme"
    },
    {
      "id": 2,
      "name": "Product Demo",
      "company": "acme"
    }
  ]
}

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.

GET/v1/adaccounts

Query Parameters

?page=1&limit=25
curl 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.

GET/v1/profiles

Query Parameters

?businessId=act_123456789

All 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.

GET/v1/user/extended2
curl 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.

GET/v1/workspaces

Query Parameters

?page=1&limit=25
curl 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.

GET/v1/templates/ad-copy

Query Parameters

?page=1&pageSize=10
curl 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.

GET/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.

GET/v1/campaigns

Query Parameters

?page=1&limit=25&platform=facebook&adAccountId=act_123456789
curl 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.

GET/v1/adsets

Query Parameters

?page=1&limit=25&campaignId=1200123000999&platform=facebook&adAccountId=act_123456789

Use 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).

GET/v1/adbatches

Query Parameters

?page=1&limit=35&search=prospecting&workspaceId=workspace_abc&privateHistory=true
curl 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.

GET/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.

GET/v1/reports/query

Query 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=23851000000001

Required: 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.

GET/v1/reports/fields
curl 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.

POST/v1/drafts

Returns 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.

GET/v1/drafts

Query Parameters

?page=1&limit=25&businessId=act_123456789

Filters: 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).

GET/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.

PATCH/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.

DELETE/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'.

POST/v1/drafts/{id}/launch

Returns 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.

POST/v1/manage/duplicate-adset

copyCount 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.

POST/v1/manage/duplicate-campaign

copyCount 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.

POST/v1/manage/duplicate-ad

copyCount 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.

GET/v1/manage/changes

Query Parameters

?businessId=act_123456789&objectId=120247699100220456&since=1710000000&until=1710300000&workspaceId=workspace_abc&limit=50

businessId (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.

GET/v1/automations

Query Parameters

?page=1&limit=25&status=active&workspaceId=workspace_abc&search=pause

Filters: 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.

GET/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.

POST/v1/automations

Returns 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.

PATCH/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.

DELETE/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.

POST/v1/automations/{id}/execute

Returns 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.

POST/v1/automations/execute

Returns 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.

GET/v1/automations/executions

Query Parameters

?page=1&limit=10&status=completed&automationRuleId=1

Filters: 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.

GET/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.

GET/v1/spend/daily

Query Parameters

?startDate=2026-03-01&endDate=2026-03-09&accountIds=act_384730851257635&platform=facebook

Required 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.

GET/api/external/crm

Query Parameters

?apiKey=YOUR_CRM_API_KEY

Auth: 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.

POST/api/external/crm

Query Parameters

?apiKey=YOUR_CRM_API_KEY

Auth: 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.

GET/api/external/crm/{id}

Query Parameters

?apiKey=YOUR_CRM_API_KEY

Auth: 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.

PATCH/api/external/crm/{id}

Query Parameters

?apiKey=YOUR_CRM_API_KEY

Auth: 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.

DELETE/api/external/crm/{id}

Query Parameters

?apiKey=YOUR_CRM_API_KEY

Auth: 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.

POST/api/external/crm/generate-image

Query Parameters

?apiKey=YOUR_CRM_API_KEY

Auth: 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

POST/v1/manage/deleteDelete Ads / Ad Sets / Campaigns
POST/v1/manage/edit/bulkEdit Existing Ad Creative
Admanage.ai

Product

  • Bulk Ad Launching
  • Creative Reporting
  • Meta Partnership Ads
  • AxonAppLovin / Axon
  • TikTok Ads
  • Google Ads
  • Meta Ads
  • Snapchat Ads
  • Pinterest Ads
  • TaboolaTaboola Ads

Integrations

  • Google Drive
  • Dropbox
  • YouTube
  • Frame.io
  • Box
  • CanvaCanva
  • SharePointSharePoint
  • BrandfolderBrandfolder
  • AIRAIR
  • ShadeShade
  • IconikIconik

Tools

  • Meta Ad Preview Tool
  • AI Naming
  • First & Last Frame Extractor
  • Creative Calculator
  • ChatGPT Ad Templates
  • Facebook Emojis
  • Facebook Ad Cost Calculator
  • Google Sheets Plugin
  • Free Video Transcription
  • AI Ad Copy Generator

Resources

  • Blog
  • API Docs
  • MCP Server
  • Changelog
  • Case Studies
  • Brand Assets
  • AdManage Leaderboard
  • Support
  • Testimonials
  • Compare Platforms

Company

  • Support
  • Affiliates
  • Terms of service
  • Privacy policy
  • Pricing
  • Real-Time Status
  • Check live status
Built by AdManage.ai. © 2026 All rights reserved.