{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/reddit/json-schema/reddit-components-schema-campaign-schema.json",
  "title": "Campaign",
  "x-generated": "2026-11-05",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/reddit-ads-api-openapi.yml#/components/schemas/components_schema_campaign",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "ad_account_id": {
      "$ref": "#/$defs/id-2"
    },
    "configured_status": {
      "type": "string",
      "description": "The campaign's status set by the ad account. Can differ from `effective_status` depending on context, such as pending billing information.",
      "enum": [
        "ACTIVE",
        "ARCHIVED",
        "DELETED",
        "PAUSED"
      ],
      "default": "ACTIVE"
    },
    "created_at": {
      "$ref": "#/$defs/components_schema_created_at"
    },
    "delivery_status": {
      "$ref": "#/$defs/components_schema_delivery_status"
    },
    "effective_status": {
      "type": "string",
      "description": "The calculated status determining the real status of this entity.",
      "enum": [
        "ACTIVE",
        "AD_GROUP_PAUSED",
        "ARCHIVED",
        "CAMPAIGN_PAUSED",
        "COMPLETED",
        "DELETED",
        "PAUSED",
        "PENDING_APPROVAL",
        "PENDING_BILLING_INFO",
        "PENDING_ID_VERIFICATION",
        "REJECTED",
        "PROCESSING"
      ],
      "default": "PENDING_APPROVAL",
      "readOnly": true
    },
    "funding_instrument_id": {
      "type": [
        "string",
        "null"
      ],
      "description": "The campaign-level funding instrument ID."
    },
    "goal_type": {
      "type": [
        "string",
        "null"
      ],
      "description": "The campaign goal type. Used when `is_campaign_budget_optimization` is `true`.\n> **Important:** This cannot be changed after publishing the campaign.\n",
      "enum": [
        "LIFETIME_SPEND",
        "DAILY_SPEND",
        null
      ]
    },
    "goal_value": {
      "type": [
        "integer",
        "null"
      ],
      "description": "Campaign-level goal value (microcurrency). Only works when `is_campaign_budget_optimization` is `true`."
    },
    "id": {
      "type": "string",
      "description": "The campaign ID.",
      "readOnly": true
    },
    "modified_at": {
      "$ref": "#/$defs/components_schema_modified_at"
    },
    "name": {
      "$ref": "#/$defs/nullable",
      "description": "The campaign name."
    },
    "objective": {
      "type": "string",
      "description": "The [campaign objective](https://business.reddithelp.com/s/article/Ad-campaign-objectives).",
      "enum": [
        "APP_INSTALLS",
        "BRAND_AWARENESS",
        "CATALOG_SALES",
        "CLICKS",
        "CONVERSIONS",
        "IMPRESSIONS",
        "LEAD_GENERATION",
        "SALES",
        "VIDEO_VIEWABLE_IMPRESSIONS"
      ]
    },
    "use_catalog": {
      "description": "Whether the campaign uses a product catalog. It can be `true` only when `objective` is `SALES`. Omitted when unset. When `true`, all ad groups in the campaign must use a catalog.\n",
      "type": "boolean"
    },
    "special_ad_categories": {
      "type": [
        "array",
        "null"
      ],
      "description": "Indicates whether the campaign falls under [special ad categories](https://business.reddithelp.com/s/article/about-campaigns#special-ad-category), which affects [targeting](https://business.reddithelp.com/s/article/Reddit-Advertising-Policy-Targeting-Guidelines).\n> **Important:** This can't be changed after publishing the campaign.\n",
      "items": {
        "type": "string",
        "enum": [
          "HOUSING_EMPLOYMENT_CREDIT",
          "NONE"
        ]
      },
      "readOnly": true
    },
    "is_campaign_budget_optimization": {
      "type": [
        "boolean",
        "null"
      ],
      "description": "Whether the campaign uses campaign budget optimization.\n> **Important:** This can't be changed after publishing the campaign.\n"
    },
    "spend_cap": {
      "type": [
        "integer",
        "null"
      ],
      "description": "Campaign lifetime spend cap (microcurrency). Available for non-CBO campaigns and when `goal_type` is `DAILY_SPEND` for CBO campaigns."
    },
    "start_time": {
      "type": [
        "string",
        "null"
      ],
      "description": "When the campaign will begin to deliver ([ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html)). Required and only available when `is_campaign_budget_optimization` is `true`."
    },
    "end_time": {
      "type": [
        "string",
        "null"
      ],
      "description": "When the campaign will stop delivering ([ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html)). A non-null value is required if `goal_type` is `LIFETIME_SPEND`."
    },
    "schedule": {
      "description": "The recurring weekly window(s) when the campaign may deliver. Day values are `0` (Sunday) through `6` (Saturday); hour values are `0`–`23` on a 24-hour clock (in the campaign's time zone). An empty array or `null` means the campaign may deliver at any time. Only available when `is_campaign_budget_optimization` is `true`, in which case it replaces the schedule of every ad group in the campaign.",
      "type": [
        "array",
        "null"
      ],
      "minItems": 0,
      "items": {
        "$ref": "#/$defs/components_schema_time_block"
      }
    },
    "optimization_goal": {
      "type": [
        "string",
        "null"
      ],
      "description": "The event you want to measure for this campaign. Required when `is_campaign_budget_optimization` is `true` for conversions or video view campaigns. **This can't be changed later.**\n",
      "allOf": [
        {
          "$ref": "#/$defs/components_enums_optimization_goal"
        }
      ]
    },
    "bid_strategy": {
      "type": [
        "string",
        "null"
      ],
      "description": "The campaign's bid strategy. Required when `is_campaign_budget_optimization` is `true`.",
      "enum": [
        "BIDLESS",
        "MAXIMIZE_VOLUME",
        "TARGET_CPX",
        null
      ],
      "x-enumDescriptions": {
        "BIDLESS": "Maximize results within the budget without a cost cap. Set `bid_value` to `null`.",
        "MAXIMIZE_VOLUME": "Maximize result volume. Use `bid_value` as the cost cap in microcurrency.",
        "TARGET_CPX": "Optimize toward a target cost per action. Set `bid_value` to the target cost in microcurrency."
      }
    },
    "bid_value": {
      "type": [
        "integer",
        "null"
      ],
      "description": "The amount to pay per bidding event (microcurrency). Used when `is_campaign_budget_optimization` is `true`. Optional when `bid_strategy` is `MAXIMIZE_VOLUME`. If set at campaign level, it **can't be set** at ad group level."
    },
    "bid_type": {
      "type": [
        "string",
        "null"
      ],
      "description": "The campaign's bid type. Required when `is_campaign_budget_optimization` is `true`.",
      "enum": [
        "CPC",
        "CPM",
        "CPV6",
        "CPV15",
        null
      ]
    },
    "app_id": {
      "type": [
        "string",
        "null"
      ],
      "description": "The Apple App Store or Google Play Store app ID. Used for `APP_INSTALLS` campaigns. See the [iOS App Install limits](https://ads-api.reddit.com/docs/v3/operations/Get%20SKAdNetwork%20Availability)."
    },
    "view_through_conversion_type": {
      "description": "The conversion attribution window. Determines how conversions are counted after a user interacts with an ad. Only available when `is_campaign_budget_optimization` is `true`.\n> **Important:** This cannot be changed after publishing the campaign.\n",
      "x-enumDescriptions": {
        "SEVEN_DAY_CLICKS": "Counts conversions that occur within 7 days of a click.",
        "SEVEN_DAY_CLICKS_ONE_DAY_VIEW": "Counts conversions that occur within 7 days of a click or within 1 day of a view."
      },
      "type": [
        "string",
        "null"
      ],
      "enum": [
        "SEVEN_DAY_CLICKS",
        "SEVEN_DAY_CLICKS_ONE_DAY_VIEW",
        null
      ]
    },
    "type": {
      "description": "The campaign type. `AUTOMATED` identifies a Reddit Max campaign. See the [Max campaign setup guide](/docs/v3/guides/programs/campaign/max-campaign-setup).\n",
      "type": "string",
      "enum": [
        "MANUAL",
        "AUTOMATED"
      ]
    },
    "is_max": {
      "description": "Indicates whether this is a Reddit Max campaign.\n",
      "type": "boolean",
      "default": false,
      "readOnly": true
    },
    "skadnetwork_metadata": {
      "$ref": "#/$defs/components_schema_skadnetwork_metadata",
      "description": "Metadata about the campaign's SKAdNetwork source ID."
    },
    "invoice_label": {
      "type": [
        "string",
        "null"
      ],
      "description": "A free-form label agencies can use for tracking and reconciliation purposes on the resulting invoice. Only settable on campaigns whose funding instrument is **not** a credit card; attempts to set this field on credit-card-funded campaigns are ignored.\n",
      "maxLength": 80
    },
    "conversion_pixel_id": {
      "description": "The Pixel ID used for measurement and optimization. Only works when `is_campaign_budget_optimization` is `true`. This **cannot** be changed after publishing the campaign.\n> **Important:** This field is required for all CBO campaigns starting July 13th, 2026. Retrieve your Pixels with [`List Pixels by Ad Account`](https://ads-api.reddit.com/docs/v3/operations/List%20Pixels%20By%20Ad%20Account).\n",
      "type": [
        "string"
      ]
    }
  },
  "$defs": {
    "components_enums_optimization_goal": {
      "x-enumDescriptions": {
        "null": "For video views campaigns, this value is not supported starting March 31, 2026.",
        "VIDEO_VIEW_6S": "Use this value instead of `null` for video views campaigns starting March 31, 2026.",
        "VIDEO_VIEW_15S": "For campaigns and ad groups, requires a `bid_type` of `CPV15`.",
        "VIEW_CONTENT": "For conversion campaigns, this value is not supported starting May 5th, 2025.",
        "SEARCH": "For conversion campaigns, this value is not supported starting May 5th, 2025.",
        "ADD_TO_WISHLIST": "For conversion campaigns, this value is not supported starting May 5th, 2025."
      },
      "enum": [
        "ADD_TO_CART",
        "ADD_TO_WISHLIST",
        "CLICKS",
        "LEAD",
        "PAGE_VISIT",
        "PURCHASE",
        "SEARCH",
        "SIGN_UP",
        "UNKNOWN",
        "VIEW_CONTENT",
        "MOBILE_CONVERSION_INSTALL",
        "MOBILE_CONVERSION_SIGN_UP",
        "MOBILE_CONVERSION_ADD_PAYMENT_INFO",
        "MOBILE_CONVERSION_ADD_TO_CART",
        "MOBILE_CONVERSION_PURCHASE",
        "MOBILE_CONVERSION_LEVEL_ACHIEVED",
        "MOBILE_CONVERSION_START_TRIAL",
        "MOBILE_CONVERSION_SUBSCRIBE",
        "MOBILE_CONVERSION_FIRST_TIME_PURCHASE",
        "LANDING_PAGE_VISIT",
        "VIDEO_VIEW_6S",
        "VIDEO_VIEW_15S",
        null
      ]
    },
    "components_schema_created_at": {
      "description": "When this entity was created ([ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html)).",
      "type": "string",
      "format": "date-time",
      "readOnly": true
    },
    "components_schema_delivery_status": {
      "type": [
        "array",
        "null"
      ],
      "description": "The delivery statuses for this ad group.",
      "items": {
        "type": "string"
      },
      "readOnly": true
    },
    "components_schema_modified_at": {
      "title": "Modified At",
      "description": "When this entity was last changed ([ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html)).",
      "type": "string",
      "format": "date-time",
      "readOnly": true
    },
    "components_schema_skadnetwork_metadata": {
      "type": [
        "object",
        "null"
      ],
      "additionalProperties": false,
      "description": "Metadata of the SKAdNetwork source ID.",
      "properties": {
        "status": {
          "description": "The [SKAdNetwork source ID status](https://business.reddithelp.com/s/article/skadnetwork#skan-ids).",
          "type": "string",
          "enum": [
            "COOLDOWN",
            "DISABLED",
            "ENABLED"
          ]
        }
      }
    },
    "components_schema_time_block": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "end_day": {
          "description": "Day of the week when this window ends (`0`–`6`; `0` = Sunday).",
          "type": "integer",
          "minimum": 0,
          "maximum": 6
        },
        "end_hour": {
          "description": "Hour on `end_day` when this window ends (`0`–`23`).",
          "type": "integer",
          "minimum": 0,
          "maximum": 23
        },
        "start_day": {
          "description": "Day of the week when this window starts (`0`–`6`; `0` = Sunday).",
          "type": "integer",
          "minimum": 0,
          "maximum": 6
        },
        "start_hour": {
          "description": "Hour on `start_day` when this window starts (`0`–`23`).",
          "type": "integer",
          "minimum": 0,
          "maximum": 23
        }
      }
    },
    "id-2": {
      "description": "The ad account ID.",
      "type": "string",
      "pattern": "^(t2|a2)_.*",
      "readOnly": true
    },
    "nullable": {
      "description": "The entity name.",
      "type": [
        "string",
        "null"
      ],
      "minLength": 3,
      "maxLength": 500
    }
  }
}