AdGPT Tiktok API

The tiktok API from AdGPT — 5 operation(s) for tiktok.

Operations 5

GET /v1/social/tiktok/ad-groups Tiktok Ad Groups #
POST /v1/social/tiktok/ads Create TikTok ads #
GET /v1/social/tiktok/campaigns Tiktok Campaigns #
GET /v1/social/tiktok/languages Tiktok Languages #
GET /v1/social/tiktok/regions Tiktok Regions #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • 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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/adgpt-com:adgpt-com-tiktok-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

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 Specification

adgpt-com-tiktok-api-openapi.yml Raw ↑
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.