Skip to content

Campaign

A campaign is the top-level object under an ad account. It holds the marketing objective, the budget and the delivery schedule; targeting lives on the ad sets below it and creatives on the ads. Each Nova Play ad account has 2 to 4 campaigns.

Naming convention

Nova Play names every campaign with a fixed pattern:

{GAME}_{PLATFORM}_{OS}_{GEO}_{OBJECTIVE}_{YYYYMM}
Part Values Meaning
GAME DMS, IME, ZSD, PBM, CML, CPM, SST, HTD, WGS, PSV Three-letter game code (Dragon Merge Saga, Idle Mining Empire, Zombie Siege Defense, Puzzle Blast Mania, Castle Match Legends, Car Park Master 3D, Sushi Shop Tycoon, Hero Tower Defense, Word Garden Story, Pixel Survivors).
PLATFORM FB Ad platform. Always FB on this API.
OS AND, IOS Operating system of the promoted game.
GEO T1, SEA, LATAM, EA Region group targeted by the campaign. T1 = US, GB, CA, AU, DE; SEA = VN, ID, PH, TH; LATAM = BR, MX; EA = JP, KR, TW.
OBJECTIVE INSTALL, VALUE Business goal: volume of installs, or purchase value (ROAS).
YYYYMM e.g. 202607 Year and month the campaign started.

Example: DMS_FB_AND_T1_VALUE_202607 is a Dragon Merge Saga campaign on Android, targeting tier-1 countries, optimised for purchase value, started July 2026. When two campaigns in the same account would collide, the second gets a _B suffix.

Note that the API objective field is OUTCOME_APP_PROMOTION for every campaign. The INSTALL / VALUE distinction appears in the name, in bid_strategy (LOWEST_COST_WITHOUT_CAP for INSTALL, LOWEST_COST_WITH_MIN_ROAS for VALUE) and in the ad set's optimization_goal (APP_INSTALLS vs VALUE).

Fields

Field Type Description
id string Campaign id (17 digits). Always returned.
name string See naming convention above.
account_id string Numeric ad account id, without the act_ prefix.
objective string Always OUTCOME_APP_PROMOTION.
status string Configured status: ACTIVE, PAUSED or ARCHIVED (campaign ended).
configured_status string Same as status.
effective_status string Status as actually delivering: ACTIVE, PAUSED or ARCHIVED.
buying_type string Always AUCTION.
bid_strategy string LOWEST_COST_WITHOUT_CAP (INSTALL campaigns) or LOWEST_COST_WITH_MIN_ROAS (VALUE campaigns).
daily_budget string Daily budget in cents of the account currency. "97000" = 970.00 USD.
budget_remaining string In cents. In this sandbox it equals daily_budget.
start_time datetime First day of delivery, YYYY-MM-DDT00:00:00+0000.
stop_time datetime Day after the last day of delivery. Omitted when the campaign has no end date.
created_time datetime Creation timestamp.
updated_time datetime Last update timestamp.
special_ad_categories array Always [].
smart_promotion_type string Always GUIDED_CREATION.
is_budget_schedule_enabled bool Always false.

Default fields when fields is omitted: id,name.

Fields whose value is null are dropped from the response rather than returned as null: a campaign that is still running has no stop_time key at all.

Edges

Edge Description
/<campaign_id>/adsets Ad sets in the campaign.
/<campaign_id>/ads Ads in the campaign (across its ad sets).
/<campaign_id>/insights Performance for this campaign. Default level=campaign.

List campaigns: GET /act_<account_id>/campaigns

Parameter Type Required Description
access_token string yes Personal token (or Authorization: Bearer).
fields string no Comma-separated list of campaign fields. Default id,name.
limit int no Page size, default 25, maximum 500.
after string no Cursor from a previous page. See Paging.

Archived (ended) campaigns are included. Filter on effective_status client-side if you only want running ones; you will still need the archived ones to explain historical insights rows.

curl -G "https://graph.huydata.com/v21.0/act_199454714457591/campaigns" \
  -d "access_token=$META_ACCESS_TOKEN" \
  -d "fields=id,name,objective,status,effective_status,daily_budget,start_time,stop_time,bid_strategy,created_time,updated_time"
{
  "data": [
    {
      "id": "12020064400866904",
      "name": "DMS_FB_AND_T1_INSTALL_202604",
      "objective": "OUTCOME_APP_PROMOTION",
      "status": "ACTIVE",
      "effective_status": "ACTIVE",
      "daily_budget": "97000",
      "start_time": "2026-04-18T00:00:00+0000",
      "bid_strategy": "LOWEST_COST_WITHOUT_CAP",
      "created_time": "2026-04-17T04:00:00+0000",
      "updated_time": "2026-04-17T04:00:00+0000"
    },
    {
      "id": "12025898431825415",
      "name": "DMS_FB_AND_T1_VALUE_202607",
      "objective": "OUTCOME_APP_PROMOTION",
      "status": "ACTIVE",
      "effective_status": "ACTIVE",
      "daily_budget": "218000",
      "start_time": "2026-07-13T00:00:00+0000",
      "bid_strategy": "LOWEST_COST_WITH_MIN_ROAS",
      "created_time": "2026-07-10T02:00:00+0000",
      "updated_time": "2026-07-10T02:00:00+0000"
    },
    {
      "id": "12027158065922978",
      "name": "DMS_FB_AND_LATAM_VALUE_202608",
      "objective": "OUTCOME_APP_PROMOTION",
      "status": "ACTIVE",
      "effective_status": "ACTIVE",
      "daily_budget": "44000",
      "start_time": "2026-08-05T00:00:00+0000",
      "bid_strategy": "LOWEST_COST_WITH_MIN_ROAS",
      "created_time": "2026-08-02T05:00:00+0000",
      "updated_time": "2026-08-02T05:00:00+0000"
    },
    "..."
  ],
  "paging": {
    "cursors": {
      "before": "b2Zmc2V0OjA",
      "after": "b2Zmc2V0OjQ"
    }
  }
}

The first campaign started on 2026-04-18, before the beginning of the performance history (2026-06-30). Its insights are available from 2026-06-30 onwards only.

Read one campaign: GET /<campaign_id>

Parameter Type Required Description
access_token string yes Personal token.
fields string no Comma-separated list of campaign fields. Default id,name.
curl -G "https://graph.huydata.com/v21.0/12020064400866904" \
  -d "access_token=$META_ACCESS_TOKEN" \
  -d "fields=id,name,account_id,objective,status,effective_status,configured_status,buying_type,bid_strategy,daily_budget,budget_remaining,start_time,stop_time,created_time,updated_time"
{
  "id": "12020064400866904",
  "name": "DMS_FB_AND_T1_INSTALL_202604",
  "account_id": "199454714457591",
  "objective": "OUTCOME_APP_PROMOTION",
  "status": "ACTIVE",
  "effective_status": "ACTIVE",
  "configured_status": "ACTIVE",
  "buying_type": "AUCTION",
  "bid_strategy": "LOWEST_COST_WITHOUT_CAP",
  "daily_budget": "97000",
  "budget_remaining": "97000",
  "start_time": "2026-04-18T00:00:00+0000",
  "created_time": "2026-04-17T04:00:00+0000",
  "updated_time": "2026-04-17T04:00:00+0000"
}

stop_time was requested but is not in the response because this campaign has no end date.

Errors specific to this object

code type Message Cause
100 OAuthException (#100) Tried accessing nonexisting field (budget) on node type (Campaign) A name in fields is not a campaign field (here budget instead of daily_budget).
100 (subcode 33) GraphMethodException Unsupported get request. Object with ID '...' does not exist, ... Unknown campaign id.
{
  "error": {
    "message": "(#100) Tried accessing nonexisting field (budget) on node type (Campaign)",
    "type": "OAuthException",
    "code": 100,
    "fbtrace_id": "AgPFmAMRIgRiW8BDjh1EI"
  }
}