Docs menu

REST API · Launches

Get launch questions

The launch interview: every question the app asks before a launch, with the choices read from the account

POSThttps://api.apogee.ad/api/v1/ad-accounts/{acc}/launch-questions

What it does

Send files (names, refs, formats) once the creatives are known: the account's naming convention reads them and the ads are proposed (one creative in 9:16 / 4:5 / 1:1 = one ad). Send the answers so far to get the choices that depend on them.

Request

POST /ad-accounts/{acc}/launch-questions on https://api.apogee.ad/api/v1.

Path parameters

  • acc string path required

    The ad account (list_ad_accounts): Meta act_…, a TikTok advertiser id, a Snapchat ad account id

    Matches ^(act_\d{1,32}|[A-Za-z0-9][A-Za-z0-9-]{0,63})$

Headers

  • Authorization string header required

    Bearer apk_…: an API key with the scope of this route.

  • Content-Type string header required

    application/json

Body

  • platform string optional

    Default meta. tiktok / snapchat: the same interview and arguments where they mean the same, their own settings under tiktok / snapchat, groups made by hand under adgroups / adsquads

    One of meta, tiktok, snapchat

  • files array of objects optional

    up to 500 items

    Fields of each item (7)
    • name string required

      File name with its extension

      1 to 255 characters

    • ref string optional

      drive:<id> or the URL of the file in Apogee storage

      up to 2,048 characters

    • mimeType string optional

      up to 100 characters

    • kind string optional

      One of video, image

    • format string optional

      Measured format (list_drive_folder, ffprobe): 9:16, 4:5, 1:1, 16:9

      up to 10 characters

    • folder string optional

      Subfolder (list_drive_folder)

      up to 500 characters

    • durationS number optional

      Length in seconds (list_drive_folder durationS, ffprobe): files of one length in different formats are flagged as maybe one creative

      0 to 36,000

  • answers one of optional

    The answers so far, with prepare_launch's argument names

    One of 2 shapes:

    option 1 (12 fields)
    • campaign_id string or integer or null optional

      Question "campaign"

      Matches ^\d{1,40}$

    • existing_adset_ids array of strings or integers or null optional

      Matches ^\d{1,40}$

    • copy_adset_from string or integer or null optional

      An ad set to duplicate

      Matches ^\d{1,40}$

    • copy_ad_from string or integer or null optional

      An ad to duplicate

      Matches ^\d{1,40}$

    • adset_settings object or null optional
      Fields (3)
      • pixel_id string or integer or null optional

        A pixel

        Matches ^\d{1,40}$

      • custom_conversion_id string or integer or null optional

        A custom conversion

        Matches ^\d{1,40}$

      • application_id string or integer or null optional

        app_installs

        Matches ^\d{1,40}$

    • ad_settings object or null optional
      Fields (4)
      • page_id string or integer or null optional

        A Facebook page

        Matches ^\d{1,40}$

      • instagram_id string or integer or null optional

        An Instagram account

        Matches ^\d{1,40}$

      • lead_form_id string or integer or null optional

        An instant form

        Matches ^\d{1,40}$

      • partnership object or null optional
        Fields (2)
        • creator_ig_id string or integer or null optional

          An approved creator

          Matches ^\d{1,40}$

        • creator_fb_page_id string or integer or null optional

          The creator's Facebook page (alone: a Facebook creator)

          Matches ^\d{1,40}$

    • products object or null optional
      Fields (2)
      • catalog_id string or integer or null optional

        A catalog

        Matches ^\d{1,40}$

      • product_set_id string or integer or null optional

        A product set

        Matches ^\d{1,40}$

    • ads array of objects or null optional
      Fields of each item (1)
      • source_ad_id string or integer or null optional

        An existing ad to reuse with its post

        Matches ^\d{1,40}$

    • adset_variants array of objects or null optional
    • source_campaign_id string or integer or null optional

      Lists the existing ads of this campaign only

      Matches ^\d{1,40}$

    • nomenclature object or null optional
      Fields (1)
      • config_id string or null optional

        up to 64 characters

    • grouping_mode string optional

      The app's switch: "names" reads the file names with a saved convention, "by_hand" groups the files by hand (formats of one creative linked by name, every other file its own ad). Default: names only when a convention reads every file, else by hand

      One of by_hand, names

    option 2 (4 fields)
    • campaign_id string or null optional

      Question "campaign"

      Matches ^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$

    • copy_adset_from string or null optional

      An ad group / ad squad to copy, or "latest"

      Matches ^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$

    • copy_ad_from string or null optional

      An ad to copy, or "latest"

      Matches ^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$

    • existing_adset_ids array of strings or null optional

      Matches ^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$

Response

200.

  • questions array of objects
    Fields of each item (7)
    • id string
    • topic string
    • status string

      One of to_ask, answered, not_needed, later, last

    • ask string
    • choices any
    • recommended any
    • answer_with string
  • read_errors array of strings

Every answer carries X-Request-Id (give it to support), Apogee-Version: 2026-10-06, and the RateLimit and RateLimit-Policy headers.

Errors

Errors are application/problem+json with a stable code to switch on (all the codes).

Example

With your key in APOGEE_API_KEY (create one):

Request
curl -X POST 'https://api.apogee.ad/api/v1/ad-accounts/act_1234567890/launch-questions' \
  -H "Authorization: Bearer $APOGEE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "platform": "meta",
  "files": [
    {
      "name": "Nordlicht | Spring launch"
    }
  ]
}'
Response 200 (shape)
{
  "questions": [
    {
      "id": "120200000000000001",
      "topic": "120200000000000001",
      "status": "to_ask",
      "ask": "120200000000000001",
      "choices": "120200000000000001",
      "recommended": "120200000000000001",
      "answer_with": "120200000000000001"
    }
  ],
  "read_errors": [
    "120200000000000001"
  ]
}

Access and cost

PlansPro and Scale.
Scoperead (scopes).
CreditsFree up to the daily free reads (5,000 a day on Pro, 10,000 on Scale), then 1 credit per read. A request that fails costs nothing, a replayed one neither (credits).
Rate limitRead: 600 per 15 minutes on Pro, 1,200 on Scale (rate limits).
Meta budgetReads Meta: spends 15 units of the account's Meta budget (1,800 per 15 minutes, 900 per ad account).
Daily capCounts 1 unit toward the 2,000 units one API key can use in 24 hours.

In the MCP

An AI assistant does the same with this tool of the MCP server:

Last updated on . The parameters, limits, credits and error codes of these pages are generated from the code of the Apogee API (contract 2026-10-06).

A question, something missing? Write to hello@apogee.ad.

Book a demo

Pick the time that suits you.

Open in a new tab

Loading the calendar…

Talk to Founder