Campaign Groups Overview

A campaign group is a container that holds one or more campaigns under a shared configuration. Campaign groups manage budget, spending limits, conversion attribution, and other settings across their linked campaigns.

A campaign can belong to exactly 1 campaign group.

What you can do via the API

ActionEndpoint
Create a campaign groupPOST /campaigns_group
Fetch a campaign groupGET /campaigns_group/{id}
List campaign groupsGET /campaigns_group
Update a campaign groupPOST /campaigns_group/{id}
Delete a campaign groupDELETE /campaigns_group/{id}
Activate or deactivate in bulkPOST /entities/activations

All endpoint paths are prefixed with /backstage/api/1.0/{account_id}, except the bulk-activation endpoint which is /backstage/api/1.0/entities/activations.

Campaign group fields

The following fields appear on a campaign group resource. Required fields must be sent on create. Read-only fields appear on fetch but cannot be set. Final fields are set once at create time and become read-only afterward.

FieldModifierTypeDescription
idRead-onlyLongUnique ID of the campaign group.
nameRequiredStringName of the campaign group.
statusRead-onlyStringOne of: RUNNING, PAUSED, PENDING_START_DATE, DEPLETED_MONTHLY, DEPLETED, EXPIRED, TERMINATED, FROZEN.
marketing_objectiveRequired, FinalEnumOne of: BRAND_AWARENESS, LEADS_GENERATION, ONLINE_PURCHASES, DRIVE_WEBSITE_TRAFFIC, MOBILE_APP_INSTALL.
kpiOptionalEnumSuccess metric used by the campaign group. One of: ROAS, CPA, CTR, CPI, CPL, CPC, CPQV, CPM.
kpi_dataOptionalObjectSuccess metric threshold values. Contains kpi_goal_value and kpi_threshold_value; both must be positive when provided.
start_dateOptional, Final, Default: nowDate (yyyy-MM-dd)Start date in the account's timezone. Must be today or later.
start_date_in_utcRead-onlyDate (yyyy-MM-dd HH:mm:ss)Resolved start date in UTC.
end_dateOptional, Default: 9999-12-31 (no end date)Date (yyyy-MM-dd)End date in the account's timezone. Must be after start_date.
end_date_in_utcRead-onlyDate (yyyy-MM-dd HH:mm:ss)Resolved end date in UTC.
spending_limit_modelRequiredEnumOne of: NONE, MONTHLY, ENTIRE.
spending_limitRequiredDoubleMax amount to be spent (within the model).
daily_capOptional, Default: 0.0DoubleThe daily upper budget for the campaign group. Applies when daily_ad_delivery_model = STRICT. Must be lower than spending_limit. 0.0 means "unlimited".
daily_ad_delivery_modelOptionalEnumOne of: BALANCED, ACCELERATED, STRICT.
is_activeDefault: trueBooleanIf false, the group is paused and status becomes PAUSED.
account_idOptional, FinalStringThe account's alphabetic ID. Required when creating from a network-level path. Otherwise, the value is taken from the path.
numeric_account_idOptional, FinalLongThe account's numeric ID.
languageDefault: ENString2-letter language code (ISO 639-1).
conversion_rulesDefault: {rules: []}ObjectSee conversion rules below. When omitted, defaults to the account's conversion rules that are marked Include in total conversions.
🚧

Field validation

Submitting field values outside their allowed range or type returns 400 Bad Request.

Conversion rule object

The conversion rules applied to the campaign group.

{
  "conversion_rules": {
    "rules": [
      {
        "id": 14,
        "display_name": "test-rule1",
        "status": "ACTIVE",
        "include_in_total_conversions": true
      }
    ]
  }
}
FieldModifierTypeDescription
idRequiredLongNumeric ID of an existing conversion rule.
display_nameRead-onlyStringConversion rule name.
statusRead-onlyStringConversion rule status.
include_in_total_conversionsRead-onlyBooleanWhether the rule contributes to total conversions.

Associating a campaign with a campaign group

The link between a campaign and its campaign group is set on the campaign object via the campaign_group_id field.

FieldModifierTypeDescription
campaign_group_idOptional, FinalLongNumeric ID of the campaign group this campaign belongs to. Set once at creation. Cannot be reassigned.
📘

Shared-budget groups

When a campaign is linked to a shared-budget group, you can omit spending_limit and spending_limit_model from the campaign request.

Create a campaign linked to a campaign group

POST /backstage/api/1.0/{account_id}/campaigns/ HTTP/1.1
Host: backstage.taboola.com
Authorization: Bearer {access_token}
Content-Type: application/json
{
  "name": "My Campaign",
  "branding_text": "My Brand",
  "bid_strategy": "FIXED",
  "cpc": 0.25,
  "marketing_objective": "DRIVE_WEBSITE_TRAFFIC",
  "campaign_group_id": 12345
}

Fetch a campaign

When you fetch a campaign, campaign_group_id appears in the response.

{
  "id": "67890",
  "name": "My Campaign",
  "campaign_group_id": 12345,
  ...
}
📘

Backward compatibility

The legacy campaign_groups object is deprecated. For backward compatibility, either field can be passed on create, and both fields are returned on fetch. If both fields are sent on the same request, campaign_group_id takes precedence. New integrations should use campaign_group_id.


Did this page help you?