Passback API
Updated: Jun 30, 2026
Copy for LLM
Ads in WhatsApp Status are available via the Marketing API. Learn more about ads in WhatsApp Status.
The Brand Safety and Suitability Passback API is a system that allows Meta Business Partners (MBPs) to share content
risk labels and campaign performance data with Meta.
The goal of this system is to provide advertisers and third parties with a mechanism to give feedback on content,
for Meta to be able to take action on the content feedback, and allow for Meta and partners to compare content labels.
Permissions
This API requires the capability grant
brand_safety_feed_verification to the app.Submit content risk labels
Description
Submit content risk labels for review and action.
Parameters
| Parameter | Type | Required? | Description |
|---|---|---|---|
content | list < Content > | Yes | List of one or more Content objects. The max size per request is 10,000. |
Content Structure
| Field | Type | Required? | Description |
|---|---|---|---|
content_id | string | Yes | ID of the content (such as a video post). |
content_language | enum | No | Language of the content (ISO 639-1 format). |
content_owner_id | string | Yes | ID of the content owner (such as a user or page). |
labels | list < Label > | Yes | List of one or more Label objects. The max size per request is 50. |
platform | enum ( facebook, instagram, threads) | Yes | The platform that the content is delivered to. |
position | enum ( feed, reels, instream, reels_overlay) | Yes | The position that the content is delivered to. |
Label Structure
| Field | Type | Required? | Description |
|---|---|---|---|
category | enum { none, adult_content, crime, death_injury, drugs, hate_speech, misinformation,
online_piracy, profanity, social_issue, spam, terrorism, weapons} | Yes | The GARM category for the label. If the label doesn’t have a category, use
none. |
label_time | timestamp | No | The timestamp when the content was labeled in epoch seconds in UTC. |
label_type | enum { human, machine} | No | Type of label based on review tier. |
risk_level | enum { floor, high, low, medium, no} | Yes | The GARM risk level for the label for the given category. |
Response fields
| Field | Type | Required? | Description |
|---|---|---|---|
success | boolean | Yes | A boolean to indicate success or failure. |
failed_content_ids | list < string > | No | A list of content IDs that could not be accepted. |
Example request
POST /content_risk_labels { "content": [ { "content_id": "<CONTENT_ID>", "content_owner_id": "<CONTENT_OWNER_ID>", "content_language": "en", "platform": "facebook", "position": "feed", "labels": [ { "category": "crime", "risk_level": "floor", "label_time": 1698879497, "label_type": "human" }, { "category": "drugs", "risk_level": "high", "label_time": 1698879788, "label_type": "machine" }, ... ] }, ... ] }
Example response
{ "success": true }
Submit content risk labels for an ad set
Description
Submit content risk labels for an ad set for auditing and analysis.
Parameters
Refer to the parameters for submitting content risk labels.
Response fields
Refer to the response fields for submitting content risk labels.
Example request
POST /{ad_set_id}/content_risk_labels { "content": [ { "content_id": "<CONTENT_ID>", "content_owner_id": "<CONTENT_OWNER_ID>", "content_language": "en", "platform": "facebook", "position": "feed", "labels": [ { "category": "crime", "risk_level": "floor", "label_time": 1698879497, "label_type": "human" }, { "category": "drugs", "risk_level": "high", "label_time": 1698879788, "label_type": "machine" }, ... ] }, ... ] }
Example response
{ "success": true }
Submit suitability scores
Description
Submit global brand safety/suitability scores for auditing and analysis.
Parameters
| Parameter | Type | Required? | Description |
|---|---|---|---|
category | enum { none, adult_content, crime, death_injury, drugs, hate_speech, misinformation,
online_piracy, profanity, social_issue, spam, terrorism, weapons} | No | The GARM category for the score. Only applicable if the score applies to a single category. |
client_suitability_score | float | No | The number of ad impressions adjacent to brand suitable content (based on the advertiser’s
customized suitability profile) divided by the total ad impressions, as measured in accordance with the
GARM Brand Suitability Framework (industry standard
criteria). |
no_risk_suitability_score | float | Yes | The number of ad impressions adjacent to brand suitable content (risk: no) divided by the total
ad impressions, as measured in accordance with the GARM Brand
Suitability Framework (industry standard criteria). |
platform | enum { facebook, instagram, threads, overall} | Yes | The platform that the content is delivered to. |
position | enum { feed, reels, overall, instream, reels_overlay} | Yes | The position that the content is delivered to. |
profile_settings | map < enum { adult_content, crime, death_injury, drugs, hate_speech, misinformation,
online_piracy, profanity, social_issue, spam, terrorism, weapons}, enum {floor, high, low, medium, no}
> | No | The advertiser’s brand suitability profile specifying their highest acceptable risk level by
category. |
safety_score | float | Yes | The number of ad impressions adjacent to brand safe content (risk: no, low, medium, high) divided
by the total ad impressions, as measured in accordance with the
GARM Brand Safety Floor Framework (industry standard
criteria). |
unmeasurable_rate | float | No | The percentage of ad impressions that cannot be accurately measured or categorized, out of the total number of impressions, as measured by the third-party measurement partner. |
updated_time | timestamp | Yes | The timestamp when the score was updated in epoch seconds in UTC. |
Response fields
| Field | Type | Required? | Description |
|---|---|---|---|
success | boolean | Yes | A boolean to indicate success or failure. |
Example request
POST /suitability_scores { "platform": "overall", "position": "overall", "updated_time": 1698880848, "safety_score": 100.00, "client_suitability_score": 98.34, "no_risk_suitability_score": 95.62, "unmeasurable_rate": 5.04, "profile_settings": { "crime": "low", "spam": "no", ... } }
Example response
{ "success": true }
Submit suitability scores for an ad account
Description
Submit brand safety/suitability scores for an ad account for auditing and analysis.
Parameters
Refer to the parameters for submitting scores.
Response fields
Refer to the response fields for submitting scores.
Example request
POST /act_{ad_account_id}/suitability_scores { "platform": "facebook", "position": "feed", "updated_time": 1698880848, "safety_score": 100.00, "client_suitability_score": 98.34, "no_risk_suitability_score": 95.62, "unmeasurable_rate": 5.04, "profile_settings": { "crime": "low", "spam": "no", ... } }
Example response
{ "success": true }
Submit suitability scores for an ad set
Description
Submit brand safety/suitability scores for an ad set for auditing and analysis.
Parameters
Refer to the parameters for submitting scores.
Response fields
Refer to the response fields for submitting scores.
Example request
POST /{ad_set_id}/suitability_scores { "platform": "facebook", "position": "feed", "updated_time": 1698880848, "safety_score": 100.00, "client_suitability_score": 98.34, "no_risk_suitability_score": 95.62, "unmeasurable_rate": 5.04, "profile_settings": { "crime": "low", "spam": "no", ... } }
Example response
{ "success": true }