Ads APIs

How to Get TikTok Marketing API Access (and Pass App Review)

How to get TikTok Marketing API access: register on the TikTok API for Business portal, create a developer app with only the scopes you need, and pass review.

TL;DR

Register on business-api.tiktok.com, fill in your developer profile with a real company and a live website, then create a developer app with an HTTPS redirect URL and only the scopes your tool actually uses. Review usually takes three to seven business days. Once approved, advertisers authorize your app and you exchange the auth_code for an access token.

To access the TikTok Marketing API (also called the TikTok API for Business), you need a developer account and an approved developer app. Register on business-api.tiktok.com, fill in your profile with a real company and a live website, and create an app with an HTTPS redirect URL. Request only the scopes your tool actually uses. TikTok reviews the app, usually within three to seven business days. Then advertisers authorize it and you can call the API.

I've worked with all three big marketing APIs. Compared to Meta and Google, TikTok's is the most straightforward to get into. I've been through its app review many times, for my own apps and for clients' developer accounts, and got every one approved. The review isn't hard. It's just strict about a few things, and those are what this post covers.

What you need before you start

  • A company with a real online presence. TikTok wants to see that a real business with real needs is behind the app.
  • A live website that shows your company name. Not example.com, not a placeholder.
  • A deployed backend with an HTTPS URL. This becomes the advertiser redirect URL. You need a server, like a VPS, with your app running on it.
  • A clear idea of what your tool does. That decides which scopes you ask for.

Step 1: Register on the TikTok API for Business portal

Go to business-api.tiktok.com and register a developer account. It's a normal sign-up.

The email you use doesn't need to match the email on your TikTok account. They're separate. I'd use your company email, since TikTok sends review results there.

Step 2: Complete your developer profile

This is where most of the review weight sits. Fill in every field carefully:

  • Company name: your legal or trading name.
  • Company website: I think this is the most important field. It needs to be live, and it needs to match the company name. The reviewers check that this is a real business.
  • Primary country of operation and service provider type.
  • Example clients and estimated revenue.
  • Description of how you use TikTok for Business. Be direct about who you are:
    • If you're a media buyer or agency: "We're a marketing agency with multiple clients. We build automation tools and reporting dashboards for them."
    • If you're a software or AI automation agency: "We're a software development agency. We build tools for our clients to help them manage their clients' TikTok advertising."

Step 3: Create the developer app

Go to My Apps and create an app. The form is short:

  1. App name.
  2. App description: what the app does, in plain words.
  3. Advertiser redirect URL: the HTTPS URL of your backend's callback, where TikTok sends advertisers after they authorize. It has to be a real, deployed URL.
  4. Scopes: see the next step.

Step 4: Select only the scopes you need

This is the step I stress most in the video. Don't click select all and hope it gets approved. No legitimate app needs every scope on day one, and it makes the reviewers question you. They need to know the people using their API aren't abusing it.

Match scopes to features:

  • Building a reporting dashboard? Select the reporting scope and the read access to ad accounts you need to list them. Nothing else.
  • Your tool needs to list pixels? Select read access for pixels.
  • It needs to create pixels? Then select pixel management.
  • It needs to create campaigns or upload creatives? Then the ads management and creative scopes, and say so in the description.

You can add scopes later as you build features. Asking for a small, explainable set first is how you get approved the first time.

Step 5: Submit and wait

Submit the app for review. In most cases it takes three to seven business days. There are three outcomes:

  • Approved. You get an app ID and secret.
  • More information requested. TikTok asks about your business. Answer it directly and update your profile if something was thin.
  • Rejected with a reason. Fix that exact thing and resubmit. The usual reasons are a website that doesn't load or doesn't match the company, a vague description, or too many scopes.

Step 6: Authorize an advertiser and get a token

Once approved, send an advertiser to TikTok's authorization page. Your app's authorization URL is shown in the portal. It looks like this:

https://business-api.tiktok.com/portal/auth?app_id=YOUR_APP_ID&state=RANDOM_STRING&redirect_uri=https://yourapp.com/tiktok/callback

After they approve, TikTok redirects to your URL with an auth_code. Exchange it server-side:

# tiktok_auth.py
import os
import requests

BASE = "https://business-api.tiktok.com/open_api/v1.3"

def exchange_auth_code(auth_code: str) -> dict:
    resp = requests.post(
        f"{BASE}/oauth2/access_token/",
        json={
            "app_id": os.environ["TIKTOK_APP_ID"],
            "secret": os.environ["TIKTOK_APP_SECRET"],
            "auth_code": auth_code,
        },
        timeout=30,
    )
    body = resp.json()
    if body.get("code") != 0:
        raise RuntimeError(f"TikTok error {body.get('code')}: {body.get('message')}")
    return body["data"]  # access_token, advertiser_ids, scope

data = exchange_auth_code("AUTH_CODE_FROM_CALLBACK")
token = data["access_token"]

The auth code is single-use and expires quickly, so exchange it right away. The access token is long-term. Store it encrypted.

Step 7: Make your first calls

List the advertiser accounts the token can access:

def list_advertisers(token: str) -> list[dict]:
    resp = requests.get(
        f"{BASE}/oauth2/advertiser/get/",
        headers={"Access-Token": token},
        params={
            "app_id": os.environ["TIKTOK_APP_ID"],
            "secret": os.environ["TIKTOK_APP_SECRET"],
        },
        timeout=30,
    )
    body = resp.json()
    if body.get("code") != 0:
        raise RuntimeError(body.get("message"))
    return body["data"]["list"]  # advertiser_id, advertiser_name

Then pull a basic campaign report:

import json

def campaign_report(token: str, advertiser_id: str, start: str, end: str) -> list[dict]:
    resp = requests.get(
        f"{BASE}/report/integrated/get/",
        headers={"Access-Token": token},
        params={
            "advertiser_id": advertiser_id,
            "report_type": "BASIC",
            "data_level": "AUCTION_CAMPAIGN",
            "dimensions": json.dumps(["campaign_id", "stat_time_day"]),
            "metrics": json.dumps(["campaign_name", "spend", "impressions", "clicks", "ctr"]),
            "start_date": start,  # "2026-10-01"
            "end_date": end,
            "page": 1,
            "page_size": 100,
        },
        timeout=60,
    )
    body = resp.json()
    if body.get("code") != 0:
        raise RuntimeError(body.get("message"))
    return body["data"]["list"]

Note that dimensions and metrics are JSON-encoded arrays in the query string. Note also that the token goes in an Access-Token header, not Authorization: Bearer.

Common errors and how to fix them

HTTP 200 but nothing works. TikTok returns HTTP 200 for most errors. The real status is the code field in the body. 0 means success. Always check it, like the code above does.

Redirect URL mismatch on authorization. The redirect_uri must match the advertiser redirect URL registered on the app.

Permission or scope errors on an endpoint. The app wasn't approved for that scope, or the advertiser didn't grant it. Add the scope to your app, get it reviewed, and have the advertiser re-authorize.

Rate limit code 40100. Rate limits are per app, not per advertiser. When you go over, TikTok returns 40100 and you have to wait several minutes. If one app serves many clients, run all calls through one rate-aware queue.

Large IDs come back wrong in JavaScript. Advertiser and campaign IDs are big integers. Python handles them fine. In JavaScript, parse with a big-number-safe JSON parser or you'll get rounded IDs.

How Scalvo can help

We've taken TikTok developer apps through review for our own products and for clients. If you want it done right the first time, our app approval and launch service covers the profile, the app, the scopes and the review. If you're building a product on top of TikTok ads data, look at SaaS product build, or book a call.

Frequently asked questions

Is the TikTok Marketing API free?

Yes, there's no fee to use the TikTok API for Business. You need an approved developer app, and your app is subject to per-app rate limits.

How long does TikTok developer app review take?

In my experience three to seven business days in most cases. TikTok may approve it the first time, ask for more information about your business, or reject it with a reason.

Do I need a TikTok account to use the TikTok Marketing API?

You register a separate developer account on the TikTok API for Business portal. The email doesn't have to match the email on your TikTok account; they're two separate things.

Which scopes should I request for a TikTok reporting dashboard?

Only what the dashboard uses. For read-only reporting that's usually the reporting scope plus read access to ad account information. Don't select all scopes.

Does the TikTok Marketing API access token expire?

The advertiser access token you get from the auth_code exchange is long-term and doesn't expire on a timer. It stops working if the advertiser revokes your app's authorization.

Tarek Walid
Written by

Tarek Walid

Founder of Scalvo. Ex-Python developer who has spent years building on the Meta, Google Ads and TikTok marketing APIs. Top Rated on Upwork with 100% Job Success.

More about Tarek

Bring one workflow that eats your week

30 minutes with Tarek. You leave with a clear answer on what to automate first, even if we never work together.

“Scalvo replaced a roadmap item that would've eaten a full quarter. We connected Meta, Google, and TikTok in a single afternoon and never looked back.”

Mohit Chopra, CTO & Product Manager, Cliquify