Create post
Create and optionally publish a post. Immediate posts (publishNow: true) include platformPostUrl in the response. Content is optional when media is attached or all platforms have customContent. See each platform's schema for media constraints.
API key authentication - use your Late API key as a Bearer token
In: header
Post caption/text. Optional when media is attached or all platforms have customContent. Required for text-only posts.
date-timefalsefalse"UTC"Tags/keywords. YouTube constraints: each tag max 100 chars, combined max 500 chars, duplicates auto-removed.
trueRoot-level TikTok settings applied to all TikTok platforms. Merged into each platform's platformSpecificData, with platform-specific settings taking precedence.
Profile ID to schedule via queue. When provided without scheduledFor, the post is auto-assigned to the next available slot. Do not call /v1/queue/next-slot and use that time in scheduledFor, as that bypasses queue locking.
Specific queue ID to use when scheduling via queue. Only used when queuedFromProfile is also provided. If omitted, uses the profile's default queue.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://getlate.dev/api/v1/posts" \ -H "Content-Type: application/json" \ -d '{ "content": "Check out these photos!", "mediaItems": [ { "type": "image", "url": "https://example.com/photo1.jpg" }, { "type": "image", "url": "https://example.com/photo2.jpg" } ], "platforms": [ { "platform": "tiktok", "accountId": "64e1f0a9e2b5af0012ab34cd" } ], "tiktokSettings": { "draft": true, "privacyLevel": "PUBLIC_TO_EVERYONE", "allowComment": true, "contentPreviewConfirmed": true, "expressConsentGiven": true } }'{
"post": {
"_id": "65f1c0a9e2b5af0012ab34cd",
"title": "Launch post",
"content": "We just launched!",
"status": "scheduled",
"scheduledFor": "2024-11-01T10:00:00Z",
"timezone": "UTC",
"platforms": [
{
"platform": "twitter",
"accountId": {
"_id": "64e1f0...",
"platform": "twitter",
"username": "@acme",
"displayName": "Acme Corp",
"isActive": true
},
"status": "pending"
}
]
},
"message": "Post scheduled successfully"
}{
"error": "string"
}{
"error": "Unauthorized"
}{
"error": "string"
}{
"error": "This exact content was already posted to this account within the last 24 hours.",
"details": {
"accountId": "string",
"platform": "string",
"existingPostId": "string"
}
}{
"error": "string",
"details": {}
}