Platform settings & conditional validation
The create and update
endpoints accept an optional settings object per platform. Which ones are
required depends on the platforms of your selectedAccounts and whether a
designId is attached.
| Platform | Settings object | Required when | Design required? |
|---|---|---|---|
instagramPostSettings | An Instagram account is selected and designId is set | — | |
| TikTok | tiktokPostSettings | A TikTok account is selected and designId is set | — |
linkedinPostSettings | A LinkedIn account is selected | Yes, when status = "SCHEDULED" | |
| Threads | threadsPostSettings | A Threads account is selected and designId is set | — |
| — | postSettings | Any resolved postType is "reel" | — |
General content rule: a post must have either a non-empty
postContentcaption or adesignId.
instagramPostSettings
{
"postType": "carousel | image | reel",
"postAsStory": true // boolean, required
}tiktokPostSettings
{
"postType": "carousel | reel",
"privacyLevel": "PUBLIC_TO_EVERYONE | MUTUAL_FOLLOW_FRIENDS | SELF_ONLY", // required when SCHEDULED
"canComment": true, // boolean, required
"canDuet": true, // boolean, required for reel (non-carousel)
"canStitch": true, // boolean, required for reel (non-carousel)
"autoAddMusic": true, // boolean, required for carousel
"postTitle": "string | null",
"isBrandedContent": false, // boolean, required
"isYourBrand": false, // boolean, required
"isThirdPartyBrand": false, // boolean, required
"isAIGeneratedContent": false // boolean, required
}Cross-field rules (enforced when status = "SCHEDULED"):
- If
isBrandedContentistrue, at least one ofisYourBrand/isThirdPartyBrandmust betrue. isBrandedContentcannot betruewhenprivacyLevel = "SELF_ONLY".
linkedinPostSettings
{
"postType": "carousel | document | image | reel",
"postTitle": "string | null" // required (5–90 chars) when postType=document and SCHEDULED
}For LinkedIn, a designId is required when status = "SCHEDULED" — text-only
LinkedIn posts can only be saved as drafts, not scheduled.
threadsPostSettings
{
"postType": "carousel | image | reel"
}postSettings
Required only when any selected platform’s postType resolves to "reel".
Carries video metadata.
{
"videoDuration": 30, // number, required
"audioId": "string"
}Where validation happens
- Shape checks (each
*PostSettingsmust be an object;status,scheduledAtpresent and well-formed;postContentan object;selectedAccountsan array) are performed at the Embed API edge and return422 { "status": false, "message": "..." }. - All the conditional/business rules above are enforced by PostNitro and
relayed back as
{ "success": false, "message": "...", "error": ... }. See the error reference for the full list of messages.
Last updated on