AI Disclosure Object

Declares whether a campaign item's media is AI-generated or AI-modified. The ai_disclosure object is an optional field on a campaign item and, where applicable, on individual carousel cards. Taboola uses its value to render the required user-facing AI-content label on downstream surfaces where AI-content disclosure laws apply (for example, the EU AI Act, effective 2 August 2026, and comparable jurisdictions as they come online).

Taboola preserves and transmits the disclosure signal to downstream partners (API publishers, publishers, and RTB integrations), so the label is rendered consistently with the advertiser's declaration.

Object structure

NameModifier & DefaultsTypeDescription
statusRequired when ai_disclosure is present

String (enum)

Possible values:

AI_GENERATED
NOT_AI_GENERATED

The AI-content verdict for the item's media. See Status values.
📘

To retrieve the current list of allowed values at runtime, call the Dictionary endpoint GET /backstage/api/1.0/resources and read the ai_disclosure_status resource. This is recommended for integrations that render these values in a UI.

Status values

ValueMeaning
AI_GENERATEDOne or more assets in the item were created or substantially modified by generative AI. This is the only value that persists a disclosure, and it drives the AI label.
NOT_AI_GENERATEDNo assets in the item are AI-generated or AI-modified. Sending this value records no disclosure, and clears any existing one, so there is nothing to label.

Behavior

Create

  • If ai_disclosure is omitted, the item is created with no disclosure.
  • AI_GENERATED records the disclosure. The item reads back with ai_disclosure.status set to AI_GENERATED.
  • NOT_AI_GENERATED stores no disclosure, because there is nothing to label. The item is created with no ai_disclosure and reads back null. Send NOT_AI_GENERATED to affirm "no AI content"; it does not persist a stored value.

Update

  • Omitting the ai_disclosure field is a no-op. It does not clear an existing disclosure.
  • AI_GENERATED sets or replaces the disclosure.
  • NOT_AI_GENERATED clears any existing disclosure; the item reads back null afterward. This is how a disclosure made through the API is un-set.
  • Re-sending the item's current value is a no-op.

Creative Library ads

A campaign item created from a Creative Library creative (a copy of a library creative) does not own its ai_disclosure; the linked creative does. Changing ai_disclosure directly on such an ad, by single or bulk update, is rejected with HTTP 400:

This ad is part of a creative, please edit the creative to update ai_disclosure

Update ai_disclosure on the creative instead; the change propagates to every ad linked to it. Standalone ads (not created from a library creative) set and change their own ai_disclosure normally. Re-sending the ad's current value, or omitting the field, is not rejected.

Read (GET)

  • The ai_disclosure object is returned only when a disclosure has been recorded (that is, AI_GENERATED).
  • When nothing has been disclosed, including items sent as NOT_AI_GENERATED, the field is returned as null (or omitted).

Carousel items

For carousel campaign items, set ai_disclosure on each hierarchy_children[] card individually, not on the parent item. Each card's declaration is independent and drives labeling for that card.

Examples

Declaring AI-generated content on create

{
  "url": "https://advertiser.example.com/landing",
  "title": "Watch all your favorite channels in one place",
  "ai_disclosure": {
    "status": "AI_GENERATED"
  }
}

Declaring not-AI-generated (records no disclosure)

{
  "url": "https://advertiser.example.com/landing",
  "title": "Watch all your favorite channels in one place",
  "ai_disclosure": {
    "status": "NOT_AI_GENERATED"
  }
}

The item is stored with no disclosure and reads back with ai_disclosure: null. On update, the same request clears an existing AI_GENERATED disclosure.

Reading an item with no disclosure

{
  "id": "1234567891",
  "url": "https://advertiser.example.com/landing",
  "ai_disclosure": null
}

Creative Library ad: disclosure edit is rejected

Updating ai_disclosure on an ad created from a library creative is rejected:

POST /backstage/api/1.0/{account_id}/campaigns/{campaign_id}/items/{item_id}
{
  "ai_disclosure": {
    "status": "AI_GENERATED"
  }
}
{
  "http_status": 400,
  "message": "This ad is part of a creative, please edit the creative to update ai_disclosure",
  "offending_field": "ai_disclosure"
}

Carousel: per-card declaration

{
  "url": "https://advertiser.example.com/landing",
  "hierarchy_children": [
    {
      "title": "Card 1 - human-shot photo",
      "ai_disclosure": {
        "status": "NOT_AI_GENERATED"
      }
    },
    {
      "title": "Card 2 - AI-generated illustration",
      "ai_disclosure": {
        "status": "AI_GENERATED"
      }
    }
  ]
}

Errors

Validation rejections return HTTP 400.

ConditionError message
ai_disclosure is present but status is missing or null (offending_field: ai_disclosure.status)Missing required field
Unknown value supplied for statusEnum validation error
ai_disclosure changed on a Creative Library-linked ad, by single or bulk update (offending_field: ai_disclosure)This ad is part of a creative, please edit the creative to update ai_disclosure

Endpoints supporting ai_disclosure

The ai_disclosure object is accepted on requests to, and returned on responses from, the campaign item endpoints:

POST /backstage/api/1.0/{account_id}/campaigns/{campaign_id}/items            # Create a campaign item
POST /backstage/api/1.0/{account_id}/campaigns/{campaign_id}/items/{item_id}  # Update a campaign item
POST /backstage/api/1.0/{account_id}/items/bulk                               # Bulk update campaign items
GET  /backstage/api/1.0/{account_id}/campaigns/{campaign_id}/items/{item_id}  # Get a campaign item
GET  /backstage/api/1.0/{account_id}/campaigns/{campaign_id}/items            # List campaign items

For bulk update, send ai_disclosure on baseline_item; it applies to every id in items_to_update, and the Creative Library ownership rule above is enforced per item.

Reference pages: Create a campaign item, Update a campaign item, Bulk update items, Get a campaign item, List campaign items.

The object is also accepted on the equivalent Creative Library endpoints, and on any endpoint that accepts or returns a campaign item payload.

Backwards compatibility

  • The ai_disclosure field is optional. Existing integrations that do not send it continue to function unchanged.
  • Items created before this feature are returned with ai_disclosure: null on read (no disclosure recorded).
  • Existing integrations that do not read the field are unaffected.
  • Updating ai_disclosure on a Creative Library-linked ad now returns HTTP 400 (edit the creative instead; see Creative Library ads). Integrations that edit disclosure on the campaign-items surface for library-linked ads should move that edit to the creative.
📘

Any integration that creates or updates campaign items in markets subject to AI-content disclosure laws should populate ai_disclosure with an explicit status.

When advertisers must declare

The obligation to accurately declare AI-generated content sits with the advertiser as the Deployer under applicable transparency regulations (for example, EU AI Act Article 50(4)). Taboola's role is to preserve and propagate the declared signal.

Content that must be declared as AI_GENERATED includes, but is not limited to, any image, video, audio, or text in the item that was:

  • Created from scratch by a generative AI tool (for example, Midjourney, DALL·E, Stable Diffusion, Adobe Firefly, OpenAI Sora, Runway, Veo, or ElevenLabs).
  • Substantially edited or transformed by AI (for example, face-swap, voice clone, Generative Fill that alters key visual elements, or AI translation and dubbing).
  • Generated text on matters of public interest (health, elections, news).

Minor enhancements such as automatic upscaling, denoising, sharpening, or color correction are not in scope, and should be declared as NOT_AI_GENERATED (or left undisclosed).

For advertiser-facing guidance, see the Help Center article Declare AI-generated content in your ads.

Related references


Did this page help you?