diff --git a/cli/media-upload.mdx b/cli/media-upload.mdx index a22e16c..13738eb 100644 --- a/cli/media-upload.mdx +++ b/cli/media-upload.mdx @@ -73,3 +73,5 @@ postiz posts:create \ --settings '{"privacy_level":"PUBLIC_TO_EVERYONE"}' \ -i "tiktok-integration-id" ``` + +`privacy_level` and the other TikTok settings apply only when `content_posting_method` is `"DIRECT_POST"`, with `"UPLOAD"` (send to the TikTok app inbox instead of publishing) TikTok keeps only the post content. diff --git a/cli/platform-examples.mdx b/cli/platform-examples.mdx index 0908bba..60cd0b0 100644 --- a/cli/platform-examples.mdx +++ b/cli/platform-examples.mdx @@ -97,6 +97,8 @@ postiz posts:create \ -i "tiktok-id" ``` +TikTok applies these settings only when `content_posting_method` is `"DIRECT_POST"`, with `"UPLOAD"` (send to the TikTok app inbox instead of publishing) every setting except the post content is silently discarded. `duet` and `stitch` apply to video posts only. + ## Instagram ```bash diff --git a/providers/tiktok.mdx b/providers/tiktok.mdx index 9587fc4..6fc499b 100644 --- a/providers/tiktok.mdx +++ b/providers/tiktok.mdx @@ -85,3 +85,16 @@ TIKTOK_CLIENT_SECRET=12345678901234567890123456789012 Go to the Postiz web interface, and click on the "Add Channel" button. Select "TikTok" from the list of available channels. You should be redirected to TikTok to authorize the application. + +## Posting settings + +When composing a TikTok post, the "How do you want to post?" setting decides which other settings apply: + +- **Post directly to TikTok** publishes the post and applies all the settings below. +- **Upload without posting** does **not** publish: it sends the media to the account's TikTok app inbox, where the owner must finish and publish it manually within 24 hours or it is discarded. TikTok keeps only the post content/title in this mode, so the settings panel collapses to hide the other settings while it is selected. + +Some settings also depend on the media type: + +- **Allow Duet**, **Allow Stitch**, and **Video made with AI** apply to videos only, TikTok has no equivalent for photo posts. +- **Auto add music** applies to photos only. +- Privacy level, comments, and the branded-content toggles apply to both videos and photos. diff --git a/public-api/introduction.mdx b/public-api/introduction.mdx index e7b52ed..ea7a4df 100644 --- a/public-api/introduction.mdx +++ b/public-api/introduction.mdx @@ -126,6 +126,8 @@ When creating posts, each social media platform has its own settings schema. The |----------|----------|--------------| | YouTube | `youtube` | `title`, `type`, `selfDeclaredMadeForKids`, `thumbnail`, `tags` | | TikTok | `tiktok` | `privacy_level`, `duet`, `stitch`, `comment`, `autoAddMusic`, `brand_content_toggle`, `brand_organic_toggle`, `content_posting_method` | + + TikTok applies every setting except the title only when `content_posting_method` is `DIRECT_POST`; `duet`/`stitch` are video-only and `autoAddMusic` photo-only, see [TikTok settings](/public-api/providers/tiktok). | Platform | `__type` | Key settings | diff --git a/public-api/openapi.json b/public-api/openapi.json index 154a5fa..ffafa52 100644 --- a/public-api/openapi.json +++ b/public-api/openapi.json @@ -2688,7 +2688,8 @@ }, "title": { "type": "string", - "maxLength": 90 + "maxLength": 90, + "description": "Used as the title of the post. The only setting TikTok keeps when content_posting_method=UPLOAD." }, "privacy_level": { "type": "string", @@ -2697,39 +2698,48 @@ "MUTUAL_FOLLOW_FRIENDS", "FOLLOWER_OF_CREATOR", "SELF_ONLY" - ] + ], + "description": "Applied only when content_posting_method=DIRECT_POST. Ignored by TikTok on UPLOAD." }, "duet": { - "type": "boolean" + "type": "boolean", + "description": "Video posts only, and only when content_posting_method=DIRECT_POST. TikTok has no duet setting for photo posts." }, "stitch": { - "type": "boolean" + "type": "boolean", + "description": "Video posts only, and only when content_posting_method=DIRECT_POST. TikTok has no stitch setting for photo posts." }, "comment": { - "type": "boolean" + "type": "boolean", + "description": "Applied only when content_posting_method=DIRECT_POST. Ignored by TikTok on UPLOAD." }, "autoAddMusic": { "type": "string", "enum": [ "yes", "no" - ] + ], + "description": "Photo posts only, and only when content_posting_method=DIRECT_POST. Ignored by TikTok on UPLOAD." }, "brand_content_toggle": { - "type": "boolean" + "type": "boolean", + "description": "Applied only when content_posting_method=DIRECT_POST. Ignored by TikTok on UPLOAD." }, "brand_organic_toggle": { - "type": "boolean" + "type": "boolean", + "description": "Applied only when content_posting_method=DIRECT_POST. Ignored by TikTok on UPLOAD." }, "video_made_with_ai": { - "type": "boolean" + "type": "boolean", + "description": "Labels the post as AI generated. Video posts only, and only when content_posting_method=DIRECT_POST. TikTok has no AI-generated label for photo posts, and discards it on UPLOAD." }, "content_posting_method": { "type": "string", "enum": [ "DIRECT_POST", "UPLOAD" - ] + ], + "description": "Required. Use \"DIRECT_POST\" to actually publish the post to TikTok. \"UPLOAD\" does NOT publish: it only sends the media to the user's TikTok app inbox, where they must manually finish and publish it within 24 hours or it is discarded. Only use \"UPLOAD\" when the user explicitly asks to review or edit the post inside the TikTok app before publishing. \"UPLOAD\" also makes TikTok ignore every other setting in this object except the title." } } }, diff --git a/public-api/posts/create.mdx b/public-api/posts/create.mdx index 479a34d..ba74160 100644 --- a/public-api/posts/create.mdx +++ b/public-api/posts/create.mdx @@ -56,6 +56,8 @@ When creating posts, each social media platform requires different settings. The |----------|----------|-------------------| | YouTube | `youtube` | `title`, `type` | | TikTok | `tiktok` | `privacy_level`, `duet`, `stitch`, `comment`, `autoAddMusic`, `brand_content_toggle`, `brand_organic_toggle`, `content_posting_method` | + + TikTok honors these settings only when `content_posting_method` is `DIRECT_POST`, with `UPLOAD` it keeps only the post content/title. `duet`, `stitch`, and `video_made_with_ai` apply to video posts only; `autoAddMusic` to photo posts only. See [TikTok settings](/public-api/providers/tiktok). | Platform | `__type` | Required Settings | diff --git a/public-api/providers/tiktok.mdx b/public-api/providers/tiktok.mdx index 0061cae..3787c2d 100644 --- a/public-api/providers/tiktok.mdx +++ b/public-api/providers/tiktok.mdx @@ -30,16 +30,22 @@ When uploading a video to TikTok, use the following settings schema: | Field | Type | Required | Description | |-------|------|----------|-------------| | `__type` | `string` | Yes | Must be `tiktok` | -| `title` | `string` | No | Video title (max 90 characters) | -| `privacy_level` | `string` | Yes | Who can view the video | -| `duet` | `boolean` | Yes | Allow duets | -| `stitch` | `boolean` | Yes | Allow stitches | -| `comment` | `boolean` | Yes | Allow comments | -| `autoAddMusic` | `string` | Yes | Auto-add music to video | -| `brand_content_toggle` | `boolean` | Yes | Branded content disclosure | -| `brand_organic_toggle` | `boolean` | Yes | Organic branded content | -| `video_made_with_ai` | `boolean` | No | AI-generated content disclosure | -| `content_posting_method` | `string` | Yes | How to post the content | +| `title` | `string` | No | Video title (max 90 characters). The only setting TikTok keeps when `content_posting_method` is `UPLOAD` | +| `privacy_level` | `string` | Yes | Who can view the video. `DIRECT_POST` only | +| `duet` | `boolean` | Yes | Allow duets. Video posts only; `DIRECT_POST` only | +| `stitch` | `boolean` | Yes | Allow stitches. Video posts only; `DIRECT_POST` only | +| `comment` | `boolean` | Yes | Allow comments. `DIRECT_POST` only | +| `autoAddMusic` | `string` | Yes | Auto-add music. Photo posts only; `DIRECT_POST` only | +| `brand_content_toggle` | `boolean` | Yes | Branded content disclosure. `DIRECT_POST` only | +| `brand_organic_toggle` | `boolean` | Yes | Organic branded content. `DIRECT_POST` only | +| `video_made_with_ai` | `boolean` | No | AI-generated content disclosure. Video posts only; `DIRECT_POST` only | +| `content_posting_method` | `string` | Yes | Whether to publish directly or send to the TikTok app inbox, see below | + +**`DIRECT_POST` only**: TikTok applies the setting only when `content_posting_method` is +`DIRECT_POST`. With `UPLOAD` the field is still required by the Postiz API, but TikTok silently +discards it. **Video posts only**: TikTok's photo posts have no duet, stitch, or AI-generated +label, so these settings are discarded when the post is a picture. **Photo posts only**: +`autoAddMusic` has no effect on videos. ### `privacy_level` @@ -61,8 +67,12 @@ When uploading a video to TikTok, use the following settings schema: | Value | Description | |-------|-------------| -| `DIRECT_POST` | Post directly to TikTok | -| `UPLOAD` | Upload for manual posting | +| `DIRECT_POST` | Publishes the post to TikTok. **Use this unless the user explicitly wants to review the post in the TikTok app first.** | +| `UPLOAD` | Does **not** publish. Sends the media to the account's TikTok app inbox, where the user must manually finish and publish it within 24 hours or it is discarded. TikTok keeps only the title/content in this mode, every other setting is silently discarded. | + + +A post created with `UPLOAD` is reported as **successfully published** by the Postiz API, because the upload to TikTok did succeed. It will not appear on the TikTok profile until the account owner opens the TikTok app, finds the draft in their inbox, and publishes it manually. Choose `UPLOAD` only when that manual step is what the user asked for. + --- @@ -150,7 +160,7 @@ When uploading a video to TikTok, use the following settings schema: } ``` -### Private Video (Draft) +### Private Video (visible only to you) ```json { @@ -164,11 +174,16 @@ When uploading a video to TikTok, use the following settings schema: "autoAddMusic": "no", "brand_content_toggle": false, "brand_organic_toggle": false, - "content_posting_method": "UPLOAD" + "content_posting_method": "DIRECT_POST" } } ``` +This publishes a video that only the account owner can see. To send the media to the account's +TikTok app inbox instead of publishing, use `content_posting_method: "UPLOAD"`, but TikTok then +keeps only the title/content: every other setting above is still required by the API, yet +silently discarded, see [`content_posting_method`](#content_posting_method) above. + **Important:** TikTok requires media files to be publicly accessible via HTTPS. Local files or private URLs will fail. Use [Cloudflare R2](/configuration/r2) or similar storage with public access.