Skip to content

Ad

An ad is a single creative delivered inside an ad group. Nova Play ad groups contain 3 to 5 ads each; an advertiser account has roughly 20–35 ads in total. Ads are the finest level available in Reporting (data_level=AUCTION_AD).

Ad names follow {FORMAT}_{CONCEPT}_v{VERSION}:

Segment Values
FORMAT VID (video), PLAY (playable), IMG (static image)
CONCEPT Gameplay15s, Gameplay30s, Tutorial, BossFight, FailCompilation, Satisfying, Meme, StoryIntro, UpgradeLoop, Challenge
VERSION v1, v2, ... — a running number; a higher version is a later iteration of the same concept

Example: VID_Tutorial_v1, PLAY_Meme_v2, IMG_Gameplay15s_v4.

Get ads

GET /open_api/v1.3/ad/get/

Parameters

Name Type Required Description
advertiser_id string Yes Advertiser account id.
filtering JSON object No Filter conditions, see below.
fields JSON array of strings No Response fields to return. Defaults to all fields.
page integer No Page number, starting at 1. Default 1.
page_size integer No Rows per page, 1–1000. Default 10.

Filtering

filtering is a JSON object. Supported keys:

Key Type Description
ad_ids array of strings Return only these ad ids.
adgroup_ids array of strings Return ads in these ad groups.
campaign_ids array of strings Return ads in these campaigns.
secondary_status string One of the status values listed below.

Request

curl -s -G "https://business-api.huydata.com/open_api/v1.3/ad/get/" \
  -H "Access-Token: $TIKTOK_ACCESS_TOKEN" \
  --data-urlencode "advertiser_id=7643153585721644371" \
  --data-urlencode 'filtering={"adgroup_ids":["1868805261510613175"]}' \
  --data-urlencode "page_size=2"

Response

{
  "code": 0,
  "message": "OK",
  "request_id": "64f9d9f657af4ab492fb",
  "data": {
    "list": [
      {
        "ad_id": "1831381570943309792",
        "ad_name": "VID_Tutorial_v1",
        "adgroup_id": "1868805261510613175",
        "adgroup_name": "EA_Broad_JP-KR-TW",
        "campaign_id": "1871286220402645533",
        "campaign_name": "DMS_TT_AND_EA_INSTALL_202602",
        "advertiser_id": "7643153585721644371",
        "ad_format": "SINGLE_VIDEO",
        "ad_text": "Play Dragon Merge Saga now!",
        "call_to_action": "DOWNLOAD_NOW",
        "landing_page_url": "https://play.google.com/store/apps/details?id=com.novaplay.dragonmerge",
        "operation_status": "ENABLE",
        "secondary_status": "AD_STATUS_DELIVERY_OK",
        "create_time": "2026-02-28 08:00:00",
        "modify_time": "2026-02-28 08:00:00",
        "video_id": "v10033g1870747822710067443"
      },
      {
        "ad_id": "1852349307584252475",
        "ad_name": "VID_Tutorial_v2",
        "adgroup_id": "1868805261510613175",
        "adgroup_name": "EA_Broad_JP-KR-TW",
        "campaign_id": "1871286220402645533",
        "campaign_name": "DMS_TT_AND_EA_INSTALL_202602",
        "advertiser_id": "7643153585721644371",
        "ad_format": "SINGLE_VIDEO",
        "ad_text": "Play Dragon Merge Saga now!",
        "call_to_action": "DOWNLOAD_NOW",
        "landing_page_url": "https://play.google.com/store/apps/details?id=com.novaplay.dragonmerge",
        "operation_status": "ENABLE",
        "secondary_status": "AD_STATUS_DELIVERY_OK",
        "create_time": "2026-04-10 08:00:00",
        "modify_time": "2026-04-10 08:00:00",
        "video_id": "v10033g1829917346747895997"
      }
    ],
    "page_info": {"page": 1, "page_size": 2, "total_number": 5, "total_page": 3}
  }
}
Field Type Description
ad_id string Numeric ad id. This is the ad_id dimension in Reporting.
ad_name string {FORMAT}_{CONCEPT}_v{VERSION}.
adgroup_id, adgroup_name string Parent ad group.
campaign_id, campaign_name string Parent campaign.
advertiser_id string Owning account.
ad_format string SINGLE_VIDEO or SINGLE_IMAGE. Playable ads are reported as SINGLE_VIDEO with an additional playable_url.
ad_text string Primary text.
call_to_action string DOWNLOAD_NOW.
landing_page_url string Store URL.
operation_status string ENABLE or DISABLE.
secondary_status string See table below.
create_time string YYYY-MM-DD HH:MM:SS UTC. The ad's first delivery day is the date part of create_time.
modify_time string YYYY-MM-DD HH:MM:SS UTC. For a switched-off ad it is the day of the last delivery.
video_id string Present for SINGLE_VIDEO ads (video and playable).
image_ids array of strings Present for SINGLE_IMAGE ads.
playable_url string Present only for playable ads (PLAY_*).

Image and playable examples (other fields omitted):

{
  "ad_id": "1842244998513681235",
  "ad_name": "IMG_Gameplay15s_v4",
  "ad_format": "SINGLE_IMAGE",
  "image_ids": ["v02011801390871976797680"],
  ...
}
{
  "ad_id": "1808121195245644392",
  "ad_name": "PLAY_Meme_v2",
  "ad_format": "SINGLE_VIDEO",
  "video_id": "v10033g1826428333808923411",
  "playable_url": "https://cdn.sandbox.invalid/playable/1826428333808923411/index.html",
  ...
}

Status values

operation_status secondary_status Meaning
ENABLE AD_STATUS_DELIVERY_OK Delivering.
DISABLE AD_STATUS_DISABLE The ad was switched off (creative retired). About a quarter of ads are retired 2–6 weeks after launch.
ENABLE / DISABLE AD_STATUS_CAMPAIGN_DISABLE The parent campaign is paused.
ENABLE / DISABLE AD_STATUS_CAMPAIGN_TIME_DONE The parent campaign's end date has passed. operation_status keeps the ad's own on/off state.

As with campaigns, the status describes today. An ad that is AD_STATUS_DISABLE today has rows in Reporting for the days it was running, and ads that were created after the date you query simply have no rows.

Example: retired ads in one campaign

curl -s -G "https://business-api.huydata.com/open_api/v1.3/ad/get/" \
  -H "Access-Token: $TIKTOK_ACCESS_TOKEN" \
  --data-urlencode "advertiser_id=7990946724050865085" \
  --data-urlencode 'filtering={"campaign_ids":["1886693032310077738"],"secondary_status":"AD_STATUS_CAMPAIGN_TIME_DONE"}' \
  --data-urlencode 'fields=["ad_id","ad_name","operation_status","secondary_status"]' \
  --data-urlencode "page_size=2"
{
  "code": 0,
  "message": "OK",
  "request_id": "a549019ac9c947e59481",
  "data": {
    "list": [
      {"ad_id": "1834488558929037338", "ad_name": "PLAY_Challenge_v2", "operation_status": "ENABLE", "secondary_status": "AD_STATUS_CAMPAIGN_TIME_DONE"},
      {"ad_id": "1873279525904152886", "ad_name": "VID_Meme_v3", "operation_status": "ENABLE", "secondary_status": "AD_STATUS_CAMPAIGN_TIME_DONE"}
    ],
    "page_info": {"page": 1, "page_size": 2, "total_number": 6, "total_page": 3}
  }
}

Paging

With page_size=1000 every account's ads fit in one page. The ad list is the natural "dimension table" for ad-level reports: Reporting returns ad_id and, if you ask for them, ad_name, adgroup_name and campaign_name, but not the creative format or status.