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
| Name | Modifier & Defaults | Type | Description |
|---|---|---|---|
status | Required when ai_disclosure is present | String (enum) Possible values:
| 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/resourcesand read theai_disclosure_statusresource. This is recommended for integrations that render these values in a UI.
Status values
| Value | Meaning |
|---|---|
AI_GENERATED | One or more assets in the item were created or substantially modified by generative AI. |
NOT_AI_GENERATED | The advertiser has affirmatively declared that no assets in the item were AI-generated or AI-modified. |
Behavior
Create
- If
ai_disclosureis omitted, the item is created with no disclosure. - To declare a disclosure at creation time, send
statusexplicitly (AI_GENERATEDorNOT_AI_GENERATED).
Update
- Omitting the
ai_disclosurefield is a no-op. It does not clear an existing disclosure. - To change an existing disclosure, send a new explicit
status. - A disclosure cannot be un-set once it has been made through the API. To reverse a disclosure, submit the opposite status (for example, replacing
AI_GENERATEDwithNOT_AI_GENERATED).
Read (GET)
- The
ai_disclosureobject is returned only when a disclosure has been recorded. - When nothing has been disclosed, 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"
}
}Affirmatively declaring not-AI-generated
{
"url": "https://advertiser.example.com/landing",
"title": "Watch all your favorite channels in one place",
"ai_disclosure": {
"status": "NOT_AI_GENERATED"
}
}Reading an item with no disclosure
{
"id": "1234567891",
"url": "https://advertiser.example.com/landing",
"ai_disclosure": null
}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.
| Condition | Error message |
|---|---|
ai_disclosure is present but status is missing or null (offending_field: ai_disclosure.status) | Missing required field |
Unknown value supplied for status | Enum validation error |
Endpoints supporting ai_disclosure
ai_disclosureThe 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
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 itemsReference pages: Create a campaign item, Update a campaign item, 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_disclosurefield is optional. Existing integrations that do not send it continue to function unchanged. - Items created before this feature are returned with
ai_disclosure: nullon read (no disclosure recorded). - Existing integrations that do not read the field are unaffected.
Any integration that creates or updates campaign items in markets subject to AI-content disclosure laws should populate
ai_disclosurewith 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 Realize AI Content Disclosure Help Center article.
Related references
Updated about 6 hours ago
