Skip to main content
Glama

Draft a Reddit ad group

draft_reddit_ad_group

Draft a new Reddit ad group (created PAUSED) — returns a PREVIEW.

Required: campaign_id, ad_group_name, conversion_pixel_id and at least one targeting list (geolocations, communities, interests or keywords — ids/names from search_reddit_targeting). For non-CBO campaigns also daily_budget (or lifetime_budget + end_time), bid_strategy and bid_type. Budgets are checked against max_daily_budget; keywords and geolocations are pre-validated with Reddit. Returns a preview with a plan_id, the payload and warnings; nothing changes until confirm_and_apply applies it.

Reddit Ads API: https://ads-api.reddit.com/docs/v3/

Input Schema

NameRequiredDescriptionDefault
genderNoFEMALE or MALE; empty means all genders.
devicesNoDevice targets, objects like {"type": "MOBILE", "os": "IOS", "min_version": "16"} (type DESKTOP or MOBILE; optional os ANDROID or IOS, major OS versions with iOS at least 14, and label_map {make: [models]} with makes/models from search_reddit_targeting kind "devices"). Omitted means every device; APP_INSTALLS campaigns take exactly one.
bid_typeNoCPC, CPM, CPV, CPV6 or CPV15. Required for non-CBO campaigns.
carriersNoMobile carrier ids (from search_reddit_targeting kind "carriers", e.g. "O2_DEUTSCHLAND"), checked against Reddit's carrier list. Omitted means every carrier.
end_timeNoEnd, same formats as start_time.
keywordsNoKeywords to target; Reddit refuses keywords that are not brand-safe.
scheduleNoWeekly delivery windows ("time of day" in Ads Manager), a list of blocks like {"days": "MON-FRI", "start_hour": 13, "end_hour": 23} (day names, hours 0-23, end_hour inclusive) or the native {"start_day": "FRI", "start_hour": 22, "end_day": "SAT", "end_hour": 3}. Omitted means delivery at any time. Hours apply in each viewer's local time, not the account time zone. Not allowed in CBO campaigns, whose schedule overrides every ad group.
bid_valueNoBid in account currency; MANUAL_BIDDING and TARGET_CPX (target cost per result) need it.
interestsNoInterest ids to target.
languagesNoLanguage codes (ISO 639-1, upper-cased automatically, e.g. "DE"). Empty means every language.
locationsNoPlacements, FEED and/or COMMENTS_PAGE (conversation pages); cannot be an empty list.
platformsNoALL, DESKTOP, DESKTOP_LEGACY, MOBILE_NATIVE, MOBILE_WEB, MOBILE_WEB_3X or SHREDTOP.
start_timeNoStart, ISO 8601 (e.g. 2026-10-01T00:00:00Z); a bare YYYY-MM-DD means 00:00 UTC that day. Empty means now.
view_modesNoFeed layouts: ALL, CARD, CLASSIC, COMPACT or IMMERSIVE. Omitted uses Reddit's default.
campaign_idYesReddit campaign id (from get_reddit_campaigns).
communitiesNoCommunity (subreddit) names to target.
bid_strategyNoBIDLESS, MANUAL_BIDDING, MAXIMIZE_VOLUME or TARGET_CPX. Required for non-CBO campaigns; in CBO campaigns it must match the campaign's.
daily_budgetNoDaily budget in account currency (positive). Required for non-CBO campaigns unless lifetime_budget is given; not allowed in CBO campaigns. Mutually exclusive with lifetime_budget.
geolocationsNoGeolocation ids to target (e.g. "DE" or "DE:2874225").
ad_account_idNoReddit ad account id (from list_reddit_accounts). Empty uses reddit.ad_account_id from the config.
ad_group_nameYesName of the new ad group.
lifetime_budgetNoLifetime budget in account currency (positive); requires end_time and is compared to max_daily_budget by its per-day share.
expand_targetingNoWhether Reddit may expand delivery beyond the targeting; omitted uses Reddit's default.
excluded_keywordsNoKeywords to exclude.
optimization_goalNoThe pixel event to optimize for (PURCHASE, SIGN_UP, LEAD, PAGE_VISIT, ...). Empty in a CBO campaign inherits the campaign's.
excluded_interestsNoInterest ids to exclude (Reddit marks this field deprecated).
conversion_pixel_idYesPixel id (Reddit rule; from get_reddit_pixels).
custom_audience_idsNoCustom audiences to target (from get_reddit_audiences), e.g. website visitors for retargeting.
excluded_communitiesNoCommunity names to exclude.
excluded_geolocationsNoGeolocation ids to exclude.
excluded_custom_audience_idsNoCustom audiences to exclude, e.g. people who already bought.

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedInput schema / properties / custom_audience_ids
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Custom audiences to target (from\nget_reddit_audiences), e.g. website visitors for retargeting."
      +}
    • addedInput schema / properties / excluded_custom_audience_ids
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Custom audiences to exclude, e.g.\npeople who already bought."
      +}
  2. Changed4 schema fields changed
    • addedInput schema / properties / carriers
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Mobile carrier ids (from search_reddit_targeting kind\n\"carriers\", e.g. \"O2_DEUTSCHLAND\"), checked against Reddit's\ncarrier list. Omitted means every carrier."
      +}
    • addedInput schema / properties / devices
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "additionalProperties": true,
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Device targets, objects like {\"type\": \"MOBILE\", \"os\":\n\"IOS\", \"min_version\": \"16\"} (type DESKTOP or MOBILE; optional os\nANDROID or IOS, major OS versions with iOS at least 14, and\nlabel_map {make: [models]} with makes/models from\nsearch_reddit_targeting kind \"devices\"). Omitted means every\ndevice; APP_INSTALLS campaigns take exactly one."
      +}
    • addedInput schema / properties / excluded_interests
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Interest ids to exclude (Reddit marks this field\ndeprecated)."
      +}
    • addedInput schema / properties / view_modes
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Feed layouts: ALL, CARD, CLASSIC, COMPACT or IMMERSIVE.\nOmitted uses Reddit's default."
      +}
  3. Changed25 schema fields changed
    • addedInput schema / properties / ad_account_id / description
      Added value: +"Reddit ad account id (from list_reddit_accounts).\nEmpty uses reddit.ad_account_id from the config."
    • addedInput schema / properties / ad_group_name / description
      Added value: +"Name of the new ad group."
    • addedInput schema / properties / bid_strategy / description
      Added value: +"BIDLESS, MANUAL_BIDDING, MAXIMIZE_VOLUME or TARGET_CPX.\nRequired for non-CBO campaigns; in CBO campaigns it must match the\ncampaign's."
    • addedInput schema / properties / bid_type / description
      Added value: +"CPC, CPM, CPV, CPV6 or CPV15. Required for non-CBO\ncampaigns."
    • addedInput schema / properties / bid_value / description
      Added value: +"Bid in account currency; MANUAL_BIDDING and TARGET_CPX\n(target cost per result) need it."
    • addedInput schema / properties / campaign_id / description
      Added value: +"Reddit campaign id (from get_reddit_campaigns)."
    • addedInput schema / properties / communities / description
      Added value: +"Community (subreddit) names to target."
    • addedInput schema / properties / conversion_pixel_id / description
      Added value: +"Pixel id (Reddit rule; from get_reddit_pixels)."
    • addedInput schema / properties / daily_budget / description
      Added value: +"Daily budget in account currency (positive). Required\nfor non-CBO campaigns unless lifetime_budget is given; not allowed\nin CBO campaigns. Mutually exclusive with lifetime_budget."
    • addedInput schema / properties / end_time / description
      Added value: +"End, same formats as start_time."
    • addedInput schema / properties / excluded_communities / description
      Added value: +"Community names to exclude."
    • addedInput schema / properties / excluded_geolocations / description
      Added value: +"Geolocation ids to exclude."
    • addedInput schema / properties / excluded_keywords / description
      Added value: +"Keywords to exclude."
    • addedInput schema / properties / expand_targeting / description
      Added value: +"Whether Reddit may expand delivery beyond the\ntargeting; omitted uses Reddit's default."
    • addedInput schema / properties / gender / description
      Added value: +"FEMALE or MALE; empty means all genders."
    • addedInput schema / properties / geolocations / description
      Added value: +"Geolocation ids to target (e.g. \"DE\" or \"DE:2874225\")."
    • addedInput schema / properties / interests / description
      Added value: +"Interest ids to target."
    • addedInput schema / properties / keywords / description
      Added value: +"Keywords to target; Reddit refuses keywords that are not\nbrand-safe."
    • addedInput schema / properties / languages / description
      Added value: +"Language codes (ISO 639-1, upper-cased automatically,\ne.g. \"DE\"). Empty means every language."
    • addedInput schema / properties / lifetime_budget / description
      Added value: +"Lifetime budget in account currency (positive);\nrequires end_time and is compared to max_daily_budget by its\nper-day share."
    • addedInput schema / properties / locations / description
      Added value: +"Placements, FEED and/or COMMENTS_PAGE (conversation\npages); cannot be an empty list."
    • addedInput schema / properties / optimization_goal / description
      Added value: +"The pixel event to optimize for (PURCHASE,\nSIGN_UP, LEAD, PAGE_VISIT, ...). Empty in a CBO campaign inherits\nthe campaign's."
    • addedInput schema / properties / platforms / description
      Added value: +"ALL, DESKTOP, DESKTOP_LEGACY, MOBILE_NATIVE, MOBILE_WEB,\nMOBILE_WEB_3X or SHREDTOP."
    • addedInput schema / properties / schedule / description
      Added value: +"Weekly delivery windows (\"time of day\" in Ads Manager), a\nlist of blocks like {\"days\": \"MON-FRI\", \"start_hour\": 13,\n\"end_hour\": 23} (day names, hours 0-23, end_hour inclusive) or the\nnative {\"start_day\": \"FRI\", \"start_hour\": 22, \"end_day\": \"SAT\",\n\"end_hour\": 3}. Omitted means delivery at any time. Hours apply in\neach viewer's local time, not the account time zone. Not allowed\nin CBO campaigns, whose schedule overrides every ad group."
    • addedInput schema / properties / start_time / description
      Added value: +"Start, ISO 8601 (e.g. 2026-10-01T00:00:00Z); a bare\nYYYY-MM-DD means 00:00 UTC that day. Empty means now."
  4. First observed

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only say readOnlyHint=false, destructiveHint=false and openWorldHint=true. The description goes well beyond that by disclosing the PAUSED initial state, the preview/plan_id/warnings return, the fact that nothing mutates until confirm_and_apply, and that keywords/geolocations are pre-validated against Reddit. That is exactly the non-destructive-but-not-read-only behavioral nuance an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the essential facts (draft, PAUSED, preview) in the first sentence, then layers requirements and the mutation caveat. Dense but every clause carries information for a 31-parameter tool; the trailing API doc link is the only marginal element.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a large, conditional schema plus an output schema and a two-phase draft/apply workflow, the description covers the required inputs, conditional branches, validation behavior, and the confirm_and_apply gate. An agent has everything needed to call it and understand what happens next.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so per-parameter meaning is already documented and the baseline is 3. The description adds a cross-parameter rule that the schema does not express per-field: at least one targeting list (geolocations, communities, interests or keywords) must be supplied, plus the budget/bid_strategy/bid_type combination for non-CBO campaigns.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Draft a new Reddit ad group') and immediately discloses the two distinguishing traits: it is created PAUSED and returns a preview rather than a live entity. This cleanly separates it from siblings like update_reddit_ad_group and draft_reddit_campaign without needing to open any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete usage context: required inputs, the conditional requirements for non-CBO campaigns, the budget check against max_daily_budget, and the pointer to search_reddit_targeting for ids. It also names the follow-up step (confirm_and_apply). It never explicitly contrasts itself with update_reddit_ad_group for modifying existing groups, so it stops short of full when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.