Disclosing AI video: what YouTube, TikTok and Instagram each give you to do it with
· 4 min read
Most writing about AI disclosure argues about whether you should. This post is about something more boring and more immediately useful: the mechanisms each platform actually gives you, because they are not the same and one of them is missing entirely.
We publish to all three, so we had to find this out properly. What follows is the mechanics, not legal advice. Platform policies change and yours is the account at risk, so read the current policy page before you rely on any of this.
YouTube: a machine-readable flag on upload
YouTube's upload API has exposed a field called status.selfDeclaredAlteredContent since March 2024. Setting it is the same declaration as ticking the "altered or synthetic content" box in Studio, except it happens at upload time without a human clicking anything.
This is the good case. The disclosure is structured data attached to the video, YouTube can surface it wherever it decides to, and there is no question later about whether you declared.
TikTok: an AIGC label, also on upload
TikTok's publish endpoint takes post_info.is_aigc. Same idea, same benefit: a machine-readable label that travels with the post rather than living in text a viewer may never expand.
Instagram: nothing
Instagram's Reels publishing API has no machine-readable AI flag. Not a differently named one, not an undocumented one. The caption is all there is.
That is worth sitting with for a second, because it changes what "disclosed" can even mean on that platform. On YouTube and TikTok you can point at a field. On Instagram you can point at a sentence in your own caption and nothing else.
Why we write the line anyway, on every platform
Our publish path appends a disclosure sentence to every description, on all three platforms, whether or not the platform flag was set. In English: "Contains AI-generated content." In German: "Enthält KI-generierte Inhalte."
This looks redundant on YouTube. It is deliberate, for three reasons.
The flag is not visible everywhere the description is. A platform label renders where the platform chooses to render it. Embeds, shares, third-party players and several mobile surfaces show your description and not much else.
Defence in depth costs nothing. One sentence. The cost of being over-disclosed is that some viewers learn something you were going to tell them anyway. The cost of being under-disclosed is a strike against a channel you spent months building.
It is the same line in both directions. If you publish in two languages, the disclosure has to exist in both. Writing it once per locale and appending it automatically is the only version of this that survives a hundred uploads.
Record what you actually did
The part almost nobody builds, and the part that matters six months later: store what was disclosed, per upload, at the time of upload.
We snapshot three things on every publish: which method was used (description line only, or platform flag plus description line), the exact disclosure text that went out, and whether a platform flag was even available for that platform. Old rows keep saying what they said, so a policy change today does not rewrite what happened in March.
If a platform ever asks, "we always disclose" is a claim. A row per upload naming the method and the text is a record. The difference is the entire point.
Content credentials, one layer lower
Separately from platform labels, our final renders are signed with a C2PA manifest embedded in the file itself. C2PA is the cross-industry content-credentials standard, and the manifest travels with the video rather than with the post.
Being honest about the current limits: our signing identity is self-signed today, which proves the manifest is intact and unmodified since we wrote it, and does not yet prove who we are to a verifier that does not already trust us. A real certificate chain is outstanding work. We would rather say that than imply a stronger guarantee than we have.
The default that matters
Disclosure in our pipeline is on by default, controlled by a feature flag rather than a per-video checkbox that someone forgets.
That direction is the whole design. A disclosure default that starts off and relies on the creator remembering will be wrong on the one video that goes big, which is exactly the video where being wrong is expensive. A default that starts on can be examined, argued with and changed deliberately.
Practical checklist
- Set the machine-readable flag where one exists. YouTube and TikTok both have one.
- Put the sentence in the description regardless, in every language you publish in.
- Log what you disclosed, per upload, with the text and the method.
- Do not assume Instagram has a field. It does not.
- Read the current policy page for each platform before you launch. This post describes API surfaces we have verified in our own integration, not the policies that govern your account.
Disclosure is the part of publishing that is easy to automate and easy to forget, which is why we treat it as a default rather than a step. If you are still deciding what to publish in the first place, the format library lists structures with their measured retention attached, and the free tools cover the writing decisions that come before any of this.