CreatorIQ SafeIQ Brand Safety API
Submit posts for brand-safety analysis and retrieve the resulting scoring for a post.
Submit posts for brand-safety analysis and retrieve the resulting scoring for a post.
openapi: 3.1.0
info:
version: 1.0.0
title: CreatorIQ SafeIQ Brand Safety API
description: 'SafeIQ brand safety timeline API for retrieving a historical, paginated collection of posts where brand safety issues were detected. Works together with the SafeIQ brand safety webhook: the webhook delivers notifications, and this REST API provides full details and reconciliation.'
termsOfService: 'https://www.creatoriq.com/legal/terms-of-use'
contact:
name: CreatorIQ
url: 'https://www.creatoriq.com/'
email: support@creatoriq.com
license:
url: 'https://www.apache.org/licenses/LICENSE-2.0.html'
name: Apache 2.0
servers:
- url: 'https://apis.creatoriq.com'
description: Live
paths:
/brand-safety/v1/posts:
get:
tags:
- Brand Safety
summary: List brand safety posts
description: 'Returns a paginated collection of posts where brand safety issues were detected. Supports filtering by creator, detection date, publish date, platform, and severity. Access is implicitly scoped to the authenticated partner and division.'
operationId: listBrandSafetyPosts
parameters:
- name: creator_id
in: query
description: Filters posts by creator.
required: false
schema:
type: string
examples:
- '20985049'
examples:
default:
value: '20985049'
- name: detected_after
in: query
description: Returns posts where brand safety issues were detected after this timestamp. Recommended for incremental syncs.
required: false
schema:
type: string
format: date-time
examples:
- '2026-05-01T00:00:00Z'
examples:
default:
value: '2026-05-01T00:00:00Z'
- name: detected_before
in: query
description: Returns posts where brand safety issues were detected before this timestamp.
required: false
schema:
type: string
format: date-time
examples:
- '2026-06-01T00:00:00Z'
examples:
default:
value: '2026-06-01T00:00:00Z'
- name: published_after
in: query
description: Returns posts published on the social network after this timestamp.
required: false
schema:
type: string
format: date-time
examples:
- '2026-05-01T00:00:00Z'
examples:
default:
value: '2026-05-01T00:00:00Z'
- name: published_before
in: query
description: Returns posts published on the social network before this timestamp.
required: false
schema:
type: string
format: date-time
examples:
- '2026-06-01T00:00:00Z'
examples:
default:
value: '2026-06-01T00:00:00Z'
- name: platform
in: query
description: 'Filters by social platform, for example youtube, tiktok, instagram.'
required: false
schema:
type: string
examples:
- tiktok
examples:
default:
value: tiktok
- name: severity
in: query
description: 'Filters by severity. Accepts a comma-separated subset of high, medium, low.'
required: false
schema:
type: string
examples:
- 'high,medium'
examples:
default:
value: 'high,medium'
- name: limit
in: query
description: Number of posts to return.
required: false
schema:
type: integer
default: 100
examples:
- 100
examples:
default:
value: 100
- name: cursor
in: query
description: Pagination cursor returned from the previous response.
required: false
schema:
type: string
examples:
- eyJuYW1lIjoiSm9yZGFuIExlZSIsImlkIjoiMTAwNSJ9
examples:
default:
value: eyJuYW1lIjoiSm9yZGFuIExlZSIsImlkIjoiMTAwNSJ9
responses:
'200':
$ref: '#/components/responses/BrandSafetyPostsCollection'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/Creator404'
'500':
$ref: '#/components/responses/500'
security:
- apiKey: []
servers:
- url: 'https://apis.creatoriq.com'
description: Live
'/brand-safety/v1/posts/{post_id}':
get:
tags:
- Brand Safety
summary: Get brand safety post details
description: 'Returns full details for a single post, including the complete array of brand safety issues. Webhook consumers use the api_details_link from the webhook payload to call this endpoint.'
operationId: getBrandSafetyPost
parameters:
- name: post_id
in: path
description: Public post identifier.
required: true
schema:
type: string
examples:
- post_12345
examples:
default:
value: post_12345
responses:
'200':
$ref: '#/components/responses/BrandSafetyPostDetail'
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'403':
$ref: '#/components/responses/403'
'404':
$ref: '#/components/responses/404'
'500':
$ref: '#/components/responses/500'
security:
- apiKey: []
servers:
- url: 'https://apis.creatoriq.com'
description: Live
tags:
- name: Brand Safety
description: SafeIQ brand safety timeline API
components:
securitySchemes:
bearerAuth:
type: http
description: 'Format: Authorization: Bearer {api_key}'
scheme: bearer
apiKey:
type: apiKey
name: x-api-key
in: header
responses:
'400':
description: Bad Request
'401':
description: The request could not be completed due to invalid API credentials.
'403':
description: Access was denied due to insufficient access permissions.
'404':
description: The requested post was not found.
'500':
description: Internal server error
Creator404:
description: No creator was found matching the supplied creator_id.
BrandSafetyPostsCollection:
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/BrandSafetyPostsCollection'
BrandSafetyPostDetail:
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/BrandSafetyPostDetail'
schemas:
BrandSafetyPostsCollection:
type: object
properties:
object:
const: collection
description: Object type.
examples:
- collection
url:
type: string
description: Relative URL of the request that produced the collection.
examples:
- /brand-safety/v1/posts?creator_id=20985049
data:
type: array
description: 'Posts in this page of the collection. Always present, never null.'
items:
$ref: '#/components/schemas/BrandSafetyPost'
has_more:
type: boolean
description: Whether more posts are available beyond this page.
examples:
- true
next_cursor:
type:
- string
- 'null'
description: Cursor to pass as the cursor query parameter to fetch the next page.
examples:
- eyJuYW1lIjoiSm9yZGFuIExlZSIsImlkIjoiMTAwNSJ9
required:
- object
- data
- has_more
BrandSafetyPost:
type: object
properties:
object:
const: post
description: Object type.
examples:
- post
id:
type: string
description: Public post identifier.
examples:
- post_12345
creator_id:
type: string
description: Creator identifier.
examples:
- '20985049'
social_account_id:
type: string
description: Social account identifier.
examples:
- abc123
platform:
type: string
description: Social platform.
examples:
- youtube
caption:
type: string
description: 'Post caption or text, if available.'
examples:
- Check out my latest vlog...
ai_summary:
type: string
description: AI-generated summary of the post content.
examples:
- A post set at a crowded outdoor festival with live music.
links:
$ref: '#/components/schemas/BrandSafetyLinks'
published_at:
type: string
description: When the post was published on the social network.
format: date-time
readOnly: true
examples:
- '2026-05-19T07:00:00Z'
issues:
type: array
description: Array of brand safety issue objects.
items:
$ref: '#/components/schemas/BrandSafetyIssue'
required:
- object
- id
- creator_id
- platform
- issues
BrandSafetyLinks:
type: object
description: URLs associated with the post.
properties:
post_url:
type: string
description: Public post URL.
examples:
- 'https://youtube.com/watch?v=abc123'
thumbnail_url:
type: string
description: 'Thumbnail URL, if available.'
examples:
- 'https://static-resources.creatoriq.com/instagram-stories/thumbs/3920090489626404416.jpg'
api_details_link:
type: string
description: API URL for retrieving full post details.
examples:
- 'https://apis.creatoriq.com/brand-safety/v1/posts/post_12345'
BrandSafetyIssue:
type: object
properties:
object:
const: brand_safety_issue
description: Object type.
examples:
- brand_safety_issue
id:
type: string
description: Public issue identifier.
examples:
- issue_67890
category:
type: string
description: 'Issue category, for example profanity, violence, adult_content.'
examples:
- profanity
severity:
type: string
enum:
- high
- medium
- low
description: Issue severity.
examples:
- high
description:
type: string
description: Human-readable issue description.
examples:
- Strong language detected in the video audio.
locations:
type: array
description: 'Locations where the issue was detected, such as timestamps or caption.'
examples:
- - '01:23'
- '02:45'
- caption
items:
type: string
detected_at:
type: string
description: When the issue was detected.
format: date-time
readOnly: true
examples:
- '2026-05-19T07:12:35Z'
required:
- object
- id
- category
- severity
BrandSafetyPostDetail:
description: Full details for a single brand safety post.
allOf:
- $ref: '#/components/schemas/BrandSafetyPost'
- type: object
properties:
last_issue_detected_at:
type: string
description: Timestamp of the most recently detected brand safety issue for the post.
format: date-time
readOnly: true
examples:
- '2026-05-19T07:12:35Z'
highest_severity:
type: string
enum:
- high
- medium
- low
description: Highest issue severity detected for the post.
examples:
- high
highest_severity_category:
type: string
description: Category associated with the highest-severity issue.
examples:
- profanity
issue_count:
type: integer
description: Total number of issues detected for the post.
examples:
- 2
required:
- highest_severity
- issue_count
security:
- apiKey: []