Skip to main content

๐Ÿ‘ฅ TikTok Ads - Accounts

๐Ÿ“– Overviewโ€‹

The accounts module provides access to TikTok advertiser accounts associated with the authenticated access token. After OAuth authentication, users can list all advertiser accounts they have access to and select one for campaign management and reporting.

Source Files:

  • Controller: external/Integrations/TikTok/Controllers/accounts.js
  • Route: external/Integrations/TikTok/Routes/accounts.js
  • Provider: external/Integrations/TikTok/providers/tiktok-analytics.js

External API: TikTok Marketing API - Advertiser Management

๐Ÿ—„๏ธ Collections Usedโ€‹

tiktok.tokensโ€‹

  • Operations: Read
  • Model: shared/models/tik-tok-token.js
  • Usage Context: Retrieve access token for API authentication

analytics_tiktokanalytics_userconfigsโ€‹

  • Operations: Create, Update (via separate endpoint)
  • Model: external/models/analytics-tiktokanalytics-userconfig.js
  • Usage Context: Store selected advertiser account for reporting

๐Ÿ”„ Data Flowโ€‹

sequenceDiagram
participant Client as DashClicks App
participant Controller as Accounts Controller
participant Keys as Keys Model
participant Provider as TikTok Provider
participant TikTok as TikTok Marketing API
participant DB as MongoDB

Client->>Controller: GET /accounts/advertisers
Controller->>Keys: Find token by account ID
Keys->>DB: Query tiktok.tokens
DB-->>Keys: Return token document
Keys-->>Controller: Access token
Controller->>Provider: getAdvertisersAccounts()
Provider->>TikTok: GET /oauth2/advertiser/get
Note over Provider,TikTok: Access-Token: {token}<br/>app_id + secret in URL
TikTok-->>Provider: Advertiser list response
Provider-->>Controller: Formatted data
Controller-->>Client: JSON response with advertisers

๐Ÿ”ง Business Logic & Functionsโ€‹

Get Advertiser Accountsโ€‹

advertisers(req, res, next)โ€‹

Purpose: Retrieve list of TikTok advertiser accounts accessible with the current access token

Source: Controllers/accounts.js

External API Endpoint: GET https://business-api.tiktok.com/v1.3/oauth2/advertiser/get

Request:

GET /v1/integrations/tiktok/accounts/advertisers
Authorization: Bearer {jwt_token}

Query Parameters:

ParameterTypeRequiredDescription
None--No additional parameters supported

Returns: Promise<Array<Object>>

Business Logic Flow:

  1. Validate Account Access

    • Call checkAccountAccess(req) utility
    • Extract DashClicks account ID from JWT
    • Return 400 error if account ID invalid
  2. Fetch OAuth Token

    • Call keysModel.find(accountId)
    • Retrieves token from tiktok.tokens collection
    • If KEYS_NOT_FOUND error, return 400:
      {
      "success": false,
      "errno": 400,
      "message": "Record Not found!"
      }
  3. Call TikTok API

    • Provider Function: tiktokAnalyticsProvider.getAdvertisersAccounts()
    • HTTP Method: GET
    • URL: {TIKTOK_BASE_URL}/{TIKTOK_VERSION}/oauth2/advertiser/get
    • Query Parameters:
      • app_id={TIK_TOK_CLIENT_ID}
      • secret={TIKTOK_CLIENT_SECRET}
    • Headers:
      {
      "Access-Token": "{access_token}"
      }
  4. Extract Advertiser List

    • Response structure: { code, message, data: { list: [...] } }
    • Extract data.list array
    • No pagination available for this endpoint
  5. Return Response

    • Format: Array of advertiser objects
    • HTTP 200 status

API Request Example:

GET https://business-api.tiktok.com/v1.3/oauth2/advertiser/get?app_id=1234567890&secret=your_secret
Headers:
Access-Token: act.1234567890abcdef...

API Response Example:

{
"code": 0,
"message": "OK",
"data": {
"list": [
{
"advertiser_id": "1234567890",
"advertiser_name": "My Business Account",
"company": "My Company LLC",
"currency": "USD",
"timezone_id": "America/New_York",
"status": "STATUS_ENABLE",
"description": "Account description"
},
{
"advertiser_id": "0987654321",
"advertiser_name": "Another Business",
"company": "Another Company Inc",
"currency": "EUR",
"timezone_id": "Europe/London",
"status": "STATUS_ENABLE",
"description": "Second account"
}
]
}
}

Success Response:

{
"success": true,
"message": "SUCCESS",
"data": [
{
"advertiser_id": "1234567890",
"advertiser_name": "My Business Account",
"company": "My Company LLC",
"currency": "USD",
"timezone_id": "America/New_York",
"status": "STATUS_ENABLE",
"description": "Account description"
},
{
"advertiser_id": "0987654321",
"advertiser_name": "Another Business",
"company": "Another Company Inc",
"currency": "EUR",
"timezone_id": "Europe/London",
"status": "STATUS_ENABLE",
"description": "Second account"
}
]
}

Error Handling:

ErrorCauseResponse
Invalid Account IdAccount access check failed{ success: false, message: "Invalid Account Id" }
KEYS_NOT_FOUNDNo OAuth token exists{ success: false, errno: 400, message: "Record Not found!" }
TikTok API ErrorAPI request failedError passed to next() middleware

Error Response (No Token):

{
"success": false,
"errno": 400,
"message": "Record Not found!"
}

Example Usage:

// Frontend: List advertisers after OAuth
const response = await fetch('/v1/integrations/tiktok/accounts/advertisers', {
headers: {
Authorization: `Bearer ${jwtToken}`,
},
});

const { data } = await response.json();
// data is array of advertiser objects

// User selects advertiser, then save config:
await fetch('/v1/integrations/tiktok/useranalyticsconfig', {
method: 'POST',
headers: {
Authorization: `Bearer ${jwtToken}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
advertiser_id: data[0].advertiser_id,
advertiser_name: data[0].advertiser_name,
}),
});

Side Effects:

  • โš ๏ธ Makes external API call to TikTok Marketing API
  • โš ๏ธ Uses API quota from TikTok rate limits

๐Ÿ”— Integration Pointsโ€‹

Internal Servicesโ€‹

Account Selection Flow:

  1. User completes OAuth authentication
  2. Frontend calls GET /accounts/advertisers to list options
  3. User selects advertiser account from list
  4. Frontend calls POST /useranalyticsconfig (see Authentication)
  5. Advertiser ID saved in analytics_tiktokanalytics_userconfigs
  6. All subsequent API calls use saved advertiser_id

Used By:

  • Campaign listing endpoints
  • Ad group listing endpoints
  • Ads listing endpoints
  • Analytics reporting endpoints

External API Dependenciesโ€‹

Provider: TikTok Marketing API
Endpoints: /oauth2/advertiser/get
Authentication: Access-Token header + app_id/secret in URL
Rate Limits: TikTok enforces per-app and per-advertiser limits


๐Ÿ“Š Advertiser Object Structureโ€‹

Fields Returned:

FieldTypeDescription
advertiser_idStringUnique advertiser account identifier
advertiser_nameStringDisplay name of advertiser account
companyStringCompany name associated with account
currencyStringAccount currency (USD, EUR, etc.)
timezone_idStringTimezone for reporting (e.g., America/New_York)
statusStringAccount status (STATUS_ENABLE, STATUS_DISABLE)
descriptionStringAccount description text

Account Status Values:

  • STATUS_ENABLE - Account active and can run ads
  • STATUS_DISABLE - Account disabled, cannot run ads

๐Ÿงช Edge Cases & Special Handlingโ€‹

No Advertisers Availableโ€‹

Issue: User completes OAuth but has no advertiser accounts Response: Empty array in data field

{
"success": true,
"message": "SUCCESS",
"data": []
}

Handling: Frontend should display "No advertiser accounts found" message

Multiple Advertisersโ€‹

Issue: User has access to multiple advertiser accounts Handling:

  • Frontend displays all advertisers in selection UI
  • User must select one advertiser before proceeding
  • Selected advertiser saved via /useranalyticsconfig endpoint
  • Only one advertiser can be active per DashClicks account

Token Revoked During Requestโ€‹

Issue: OAuth token invalidated between authentication and advertiser fetch Response: TikTok API returns 401/403 error Handling:

  • Error middleware detects invalid token
  • Marks token as token_invalidated: true
  • Returns TOKEN_INVALIDATED error message
  • User must re-authenticate via OAuth flow

โš ๏ธ Important Notesโ€‹

  • ๐Ÿ” Authentication Required: Requires valid OAuth access token
  • ๐Ÿ“‹ No Pagination: Advertiser endpoint returns all accounts in single response
  • ๐Ÿ”‘ App Credentials in URL: Uses app_id and secret as query parameters
  • ๐ŸŽฏ Account Selection: Users must select one advertiser for campaign operations
  • ๐Ÿ”’ Single Advertiser: Only one advertiser per DashClicks account
  • โšก Rate Limits: Subject to TikTok Marketing API rate limiting
  • ๐ŸŒ Multi-Currency: Advertisers can have different currencies and timezones
  • โœ… Status Filtering: Only enabled accounts can run campaigns

๐Ÿ’ฌ

Documentation Assistant

Ask me anything about the docs

Hi! I'm your documentation assistant. Ask me anything about the docs!

I can help you with:
- Code examples
- Configuration details
- Troubleshooting
- Best practices

Try asking: How do I configure the API?
09:31 AM