Docs menu

MCP tool · Launch

get_launch_questions

The questions the app asks before every launch, in order, with the choices read from your account and a recommended answer (TikTok's and Snapchat's own with platform). Called again with the files (it reads their names with your naming convention and proposes the ads) and with the answers so far.

Read only Scope: read Pro and Scale plans Credits: Free*

What it does

The launch interview, Apogee's way: every question the Apogee app asks before a launch, in order, each with the choices read from the user's own account (ad sets and ads with their spend, saved templates, campaigns, pages, pixels and events, catalogs, naming conventions) and the recommended answer.

Call it first, then ask the questions whose status is to_ask ONE TOPIC AT A TIME, in the user's language, showing the choices. Never answer for the user.

Call it again with files once the creatives are known (nomenclature read + proposed ads grouped by format), and with the answers so far to get the choices that depend on them (a pixel's events, a page's forms, a catalog's product sets, what a copied ad set / ad holds).

Parameters

  • ad_account_id string 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})$

  • 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}$

Example

Your assistant calls it for you when you ask in your own words. What it sends (MCP tools/call, JSON-RPC 2.0):

tools/call
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_launch_questions",
    "arguments": {
      "ad_account_id": "act_1234567890"
    }
  }
}

The same call over HTTP with an API key, for an MCP client of your own (an assistant that signs in sends its OAuth token instead):

curl
curl -X POST https://app.apogee.ad/mcp \
  -H "Authorization: Bearer $APOGEE_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_launch_questions","arguments":{"ad_account_id":"act_1234567890"}}}'

Access and cost

PlansPro and Scale.
Scoperead: a connection or an API key without it does not see this tool (scopes).
EffectReads only: nothing is changed, in Apogee or on the ad account.
CreditsFree up to the daily free reads (5,000 a day on Pro, 10,000 on Scale), then 1 credit per read. A call that fails costs nothing (credits).
Rate limit600 MCP requests per 15 minutes on Pro, 1,200 on Scale (rate limits).
Daily capCounts 1 unit toward the 2,000 units one API key or assistant connection can use in 24 hours.

In the REST API

The same thing for your own code, with an API key:

Launch: The interview, the recap, your yes, then the launch.

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