Some networks let you label a post as made or altered with AI. Send is_ai_generated=true with any post and Reelspan sets that label on every network in the request that supports one through its API. Today that is TikTok, YouTube and Threads.
curl -X POST https://api.reelspan.com/v1/posts/video \
-H "Authorization: Bearer $REELSPAN_API_KEY" \
-F "user=my-brand" \
-F "platform[]=tiktok" \
-F "platform[]=youtube" \
-F "platform[]=threads" \
-F "title=What our city looks like in 2050" \
-F "is_ai_generated=true" \
-F "[email protected]"import { Reelspan } from 'reelspan';
import { readFile } from 'node:fs/promises';
const reelspan = new Reelspan();
await reelspan.posts.video({
user: 'my-brand',
platforms: ['tiktok', 'youtube', 'threads'],
title: 'What our city looks like in 2050',
video: { data: await readFile('city-2050.mp4'), name: 'city-2050.mp4', type: 'video/mp4' },
extra: { is_ai_generated: 'true' },
});from reelspan import Reelspan
reelspan = Reelspan()
reelspan.posts.video("my-brand", ["tiktok", "youtube", "threads"], "city-2050.mp4", "What our city looks like in 2050",
extra={"is_ai_generated": "true"})Boolean fields take true, 1 or yes.
What each network gets
| Network | Field Reelspan sets | Your fields | Applies to |
|---|---|---|---|
| TikTok | is_aigc |
is_ai_generated, tiktok_is_ai_generated or is_aigc |
Videos posted directly. Not photo posts, and not videos sent to the TikTok inbox (post_mode=MEDIA_UPLOAD). |
| YouTube | status.containsSyntheticMedia |
containsSyntheticMedia or is_ai_generated |
Every video. |
| Threads | is_made_with_ai |
is_ai_generated or threads_is_made_with_ai |
Video, photo, carousel and text posts. |
How the fields combine:
- TikTok and Threads: the label is set if any of the listed fields is true. A network field can't switch off a label that
is_ai_generated=trueturned on; to label only some networks, leaveis_ai_generatedout and use the network fields. - YouTube:
containsSyntheticMediawins overis_ai_generatedwhen both are sent, socontainsSyntheticMedia=falsekeeps the YouTube label off. When neither is sent, Reelspan leaves the field unset.
Networks without an AI label
Every other network gets no label from Reelspan: Instagram, Facebook, X, LinkedIn, Pinterest, Bluesky and the rest either have no AI-disclosure field in the API Reelspan uses, or Reelspan doesn't set it yet. is_ai_generated is ignored for them, without a warning. If a network's rules ask you to disclose AI content and it has no API field, say so in the caption.
TikTok: commercial content disclosure
TikTok also asks creators to disclose posts that promote a brand. Two fields set it on direct video and photo posts:
| Field | TikTok label |
|---|---|
brand_organic_toggle=true |
You are promoting yourself or your own business ("Promotional content"). |
brand_content_toggle=true |
Branded content: a paid partnership promoting a third party. |
TikTok doesn't allow branded content to be private, so don't combine brand_content_toggle=true with privacy_level=SELF_ONLY. See TikTok for the other TikTok fields.
Scheduled and repeated posts
The fields are stored with the post, so a scheduled or repeating post is labelled when it publishes. You can add or remove them on a scheduled post with PATCH /v1/scheduled/{job_id} and fields; see Scheduling and repeats.