AdGPT Tiktok API
The tiktok API from AdGPT — 5 operation(s) for tiktok.
The tiktok API from AdGPT — 5 operation(s) for tiktok.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/adgpt-com:adgpt-com-tiktok-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: AdGPT Tiktok API
version: 1.0.0
description: '# AdGPT API
Generate ready-to-publish ad creatives programmatically: full campaigns, single assets (images, videos, UGC presenter and in-action videos, Google ad copy), post-generation edits, ad recreation, and publishing to your own connected social ad accounts — the same engine that powers app.adgpt.com. **Base URL:** `https://api.adgpt.com/api`
All endpoints live under `/v1`. Responses use a consistent envelope:
```json
{ "success": true, "data": { ... }, "message": "..." }
```
Generation is **asynchronous**: a create call returns immediately with an id; you poll a status endpoint until completion (see *Async jobs* below). Every operation that spends credits declares its cost in this reference (`x-credit-cost`). This document is generated from the committed API contract, which a CI gate keeps in sync with the routes and validation on every change — so the reference cannot silently drift from the implementation. ## Authentication
Authenticate every request with an **API key** in the `Authorization` header:
```
Authorization: Bearer adgpt_... ```
Create and revoke keys from your account settings at app.adgpt.com (Settings → API Keys). The full key is shown **exactly once** at creation — store it securely. Keys inherit your account''s permissions and spend your account''s credits. **401 responses** carry a machine-readable `code`: `UNAUTHENTICATED` (missing/invalid/revoked/expired key), or for first-party JWTs `TOKEN_EXPIRED` (refresh and retry). Repeated failed authentication from one IP is throttled (`429`, code `TOO_MANY_ATTEMPTS`). Keys never work on the first-party web-app endpoints, and key management itself is only available from the logged-in web app — a leaked key cannot mint further keys. If your organization has turned off publishing, share links and the social ad-account endpoints answer **`403` (`ORG_PUBLISHING_BLOCKED`)**. ### You can only access your own resources
Every endpoint is scoped to the account that owns the key. A request for a campaign, asset, brand, catalogue or any other resource that belongs to a different account returns **`404` (`RESOURCE_NOT_FOUND`)** — the same response you get for an id that does not exist, so ids cannot be probed for existence. List endpoints only ever return your own account''s resources. Build your integration against the ids you create and receive back from the API. ## Connect from an AI assistant (MCP)
Everything in this reference is also available as an **MCP (Model Context Protocol) server**, generated from the same API contract — so an AI assistant can drive AdGPT for you instead of you writing HTTP calls. Every operation documented here is an MCP tool with the same inputs, credit costs and async behaviour. **Endpoint:** `https://mcp.adgpt.com/mcp` (Streamable HTTP)
Connecting needs no credentials. A session starts anonymous; sign in (or register) with the account tool inside the conversation, or seed the identity up front by sending `Authorization: Bearer ` on the `initialize` request. Credits bill the signed-in account. Sessions expire after **30 minutes idle** — sign in again afterwards. ### Connecting a client
- **Claude (web/desktop):** Customize → Connectors → Add custom connector → paste the endpoint URL. On Team and Enterprise plans an Owner adds it under Organization settings → Connectors. - **Claude Code:** `claude mcp add --transport http adgpt https://mcp.adgpt.com/mcp`
- **Any other MCP client** that supports remote Streamable HTTP servers: point it at the same URL. ### Discovery
The server publishes a server card at `https://mcp.adgpt.com/.well-known/mcp/server-card.json` and is listed in the official MCP registry as `com.adgpt/adgpt`. ### Working with the tools
Start with `adgpt_capabilities` to search the operation surface or describe one operation''s schema.'
servers:
- url: https://api.adgpt.com/api
security:
- bearerAuth: []
tags:
- name: tiktok
paths:
/v1/social/tiktok/ad-groups:
get:
operationId: get.tiktok.ad-groups
tags:
- tiktok
summary: Tiktok Ad Groups
parameters:
- name: brandId
in: query
required: false
schema:
type: integer
- name: campaignId
in: query
required: false
schema:
type: string
- name: adsAccountId
in: query
required: false
schema:
type: string
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/Envelope'
'401':
description: Missing, invalid, expired or revoked credentials
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'422':
description: Validation failed
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Rate limit exceeded (see Retry-After header)
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
x-rate-limit:
class: general
requests_per_minute: 60
/v1/social/tiktok/ads:
post:
operationId: post.tiktok.create-ads
tags:
- tiktok
summary: Create TikTok ads
description: 'Create a TikTok campaign/ad group/ad. bid_type, billing_event, and optimization_goal are DERIVED from campaign.objective (TRAFFIC→CPC/CLICK, REACH→CPM/REACH, VIDEO_VIEWS→CPV, WEB_CONVERSIONS/LEAD_GENERATION→OCPM). Min budgets: CBO daily ≥ $50, ad-group daily ≥ $20. Ages are 18+ (AGE_13_17 stripped). Fetch location/language ids via tiktokRegions/tiktokLanguages actions first.'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
brandId:
type: integer
description: Brand owning the connected ad account.
ads_account_id:
type: string
maxLength: 64
description: Override the connected ad account.
campaign:
type: object
properties:
option:
type: string
enum:
- new
- existing
existing_resource:
type: string
maxLength: 64
description: Campaign id when option=existing.
name:
type: string
maxLength: 255
objective:
type: string
enum:
- TRAFFIC
- REACH
- VIDEO_VIEWS
- WEB_CONVERSIONS
- LEAD_GENERATION
- APP_PROMOTION
- PRODUCT_SALES
is_campaign_budget_optimization:
type: boolean
description: CBO.
budget_mode:
type: string
enum:
- BUDGET_MODE_DAY
- BUDGET_MODE_TOTAL
- BUDGET_MODE_DYNAMIC_DAILY_BUDGET
description: DYNAMIC only for APP_PROMOTION/PRODUCT_SALES CBO.
budget:
type: number
description: USD. CBO daily ≥ 50.
status:
type: string
maxLength: 32
ad_group:
type: object
properties:
option:
type: string
enum:
- new
- existing
existing_resource:
type: string
maxLength: 64
name:
type: string
maxLength: 255
status:
type: string
maxLength: 32
budget_mode:
type: string
maxLength: 40
budget:
type: number
description: Daily ≥ 20 USD.
optimization_goal:
type: string
maxLength: 40
targeting:
type: object
properties:
locations:
type: array
items:
type: string
minItems: 1
description: TikTok location IDs (required). Fetch via tiktokRegions.
languages:
type: array
items:
type: string
ages:
type: array
items:
type: string
enum:
- AGE_18_24
- AGE_25_34
- AGE_35_44
- AGE_45_54
- AGE_55_100
description: 'Default: all 18+.'
gender:
type: string
maxLength: 20
schedule:
type: object
properties:
start:
type: string
maxLength: 32
end:
type: string
maxLength: 32
timezone:
type: string
maxLength: 64
windows:
type: array
items:
type: object
properties: []
additionalProperties: true
bidding:
type: object
properties:
bid_price:
type: number
conversion_bid_price:
type: number
frequency:
type: integer
description: REACH objective only.
frequency_schedule:
type: integer
description: REACH objective only.
ad:
type: object
properties:
creatives:
type: array
items:
type: object
properties:
video_url:
type: string
format: uri
maxLength: 2048
description: Required — uploaded via UPLOAD_BY_URL.
cover_image_url:
type: string
format: uri
maxLength: 2048
ad_name:
type: string
maxLength: 255
ad_text:
type: string
maxLength: 1000
call_to_action:
type: string
maxLength: 40
description: Default LEARN_MORE.
landing_page_url:
type: string
format: uri
maxLength: 2048
operation_status:
type: string
maxLength: 20
disclaimer_type:
type: string
maxLength: 20
disclaimer_text:
type: object
properties:
text:
type: string
maxLength: 500
required:
- video_url
minItems: 1
maxItems: 1
required:
- brandId
- campaign
- ad_group
- ad
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/Envelope'
'401':
description: Missing, invalid, expired or revoked credentials
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'422':
description: Validation failed
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Rate limit exceeded (see Retry-After header)
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
x-rate-limit:
class: generate
requests_per_minute: 10
/v1/social/tiktok/campaigns:
get:
operationId: get.tiktok.campaigns
tags:
- tiktok
summary: Tiktok Campaigns
parameters:
- name: brandId
in: query
required: false
schema:
type: integer
- name: adsAccountId
in: query
required: false
schema:
type: string
- name: page
in: query
required: false
schema:
type: integer
- name: page_size
in: query
required: false
schema:
type: integer
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/Envelope'
'401':
description: Missing, invalid, expired or revoked credentials
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'422':
description: Validation failed
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Rate limit exceeded (see Retry-After header)
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
x-rate-limit:
class: general
requests_per_minute: 60
/v1/social/tiktok/languages:
get:
operationId: get.tiktok.languages
tags:
- tiktok
summary: Tiktok Languages
parameters:
- name: brandId
in: query
required: false
schema:
type: integer
- name: adsAccountId
in: query
required: false
schema:
type: string
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/Envelope'
'401':
description: Missing, invalid, expired or revoked credentials
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'422':
description: Validation failed
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Rate limit exceeded (see Retry-After header)
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
x-rate-limit:
class: general
requests_per_minute: 60
/v1/social/tiktok/regions:
get:
operationId: get.tiktok.regions
tags:
- tiktok
summary: Tiktok Regions
parameters:
- name: brandId
in: query
required: false
schema:
type: integer
- name: adsAccountId
in: query
required: false
schema:
type: string
responses:
'200':
description: Success
content:
application/json:
schema:
$ref: '#/components/schemas/Envelope'
'401':
description: Missing, invalid, expired or revoked credentials
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'422':
description: Validation failed
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
description: Rate limit exceeded (see Retry-After header)
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
x-rate-limit:
class: general
requests_per_minute: 60
components:
schemas:
Envelope:
type: object
properties:
success:
type: boolean
data: true
message:
type: string
Error:
type: object
properties:
success:
type: boolean
message:
type: string
code:
type: string
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: AdGPT API key (`adgpt_…`), created from your account settings. First-party JWTs are also accepted.