Skip to content

Create a post

POST
/public/v1/posts
curl --request POST \
--url https://api.loomta.com/public/v1/posts \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "platformIds": [ "8b2c1f4a-77d0-4e2c-9a1e-5c3b2a1d0e4f" ], "content": "We just shipped 🚀 #buildinpublic", "mode": "now", "mediaIds": [ "a1d4e9b2-3c5f-4a8d-b0e1-2f6c7a9d8b3e" ], "settings": { "privacy_level": "PUBLIC_TO_EVERYONE" } }'

Creates a post on one or more platforms. Each platform is processed independently — the response contains a per-platform result so a partial failure does not block the others.

Media typeapplication/json
object
platformIds
required

One or more platform IDs from GET /platforms.

Array<string>
>= 1 items
content
required

The post caption / body.

string
>= 1 characters
mode
required

now publishes immediately; schedule requires scheduledFor; draft saves without publishing.

string
Allowed values: draft now schedule
scheduledFor

Required when mode is schedule. ISO 8601.

string format: date-time
mediaIds

Media object IDs from POST /media. Required for TikTok.

Array<string>
settings

Provider-specific settings (see GET /platforms/{id}/schema).

object
key
additional properties
any
comments
Array<object>
object
content
required
string
>= 1 characters
delayInMinutes
integer | null
settings
object
key
additional properties
any
mediaIds
Array<string>
Examples

Publish a video immediately

{
"platformIds": [
"8b2c1f4a-77d0-4e2c-9a1e-5c3b2a1d0e4f"
],
"content": "We just shipped 🚀 #buildinpublic",
"mode": "now",
"mediaIds": [
"a1d4e9b2-3c5f-4a8d-b0e1-2f6c7a9d8b3e"
],
"settings": {
"privacy_level": "PUBLIC_TO_EVERYONE"
}
}

Per-platform results.

Media typeapplication/json
object
results
required
Array
One of:
object
platformId
required
string format: uuid
status
required
string
Allowed value: created
post
required
object
root
required
object
id
string format: uuid
groupId
string format: uuid
parentPostId
string | null format: uuid
integrationId
string format: uuid
content
string
state
string
Allowed values: DRAFT QUEUE PUBLISHED ACTION_REQUIRED ERROR
scheduledFor
string | null format: date-time
delayInMinutes
integer | null
releaseId
string | null
releaseUrl
string | null
settings
object
key
additional properties
any
mediaIds
Array<string>
errorText
string | null
createdAt
string format: date-time
updatedAt
string format: date-time
children
required
Array<object>
object
id
string format: uuid
groupId
string format: uuid
parentPostId
string | null format: uuid
integrationId
string format: uuid
content
string
state
string
Allowed values: DRAFT QUEUE PUBLISHED ACTION_REQUIRED ERROR
scheduledFor
string | null format: date-time
delayInMinutes
integer | null
releaseId
string | null
releaseUrl
string | null
settings
object
key
additional properties
any
mediaIds
Array<string>
errorText
string | null
createdAt
string format: date-time
updatedAt
string format: date-time
Example
{
"results": [
{
"status": "created",
"post": {
"root": {
"state": "DRAFT"
},
"children": [
{
"state": "DRAFT"
}
]
}
}
]
}

The request body failed validation.

Media typeapplication/json
object
code
required

A stable, machine-readable error code to branch on.

string
message
required

A human-readable description.

string
details

Optional structured detail (for example Zod validation issues).

Example
{
"code": "invalid_request",
"message": "The request payload is invalid.",
"details": [
{
"path": [
"slideCount"
],
"message": "Number must be greater than or equal to 3"
}
]
}

The API key is missing or invalid.

Media typeapplication/json
object
code
required

A stable, machine-readable error code to branch on.

string
message
required

A human-readable description.

string
details

Optional structured detail (for example Zod validation issues).

Examples
{
"code": "missing_api_key",
"message": "A Bearer API key is required."
}

A plan limit was reached (for example the monthly post cap).

Media typeapplication/json
object
code
required

A stable, machine-readable error code to branch on.

string
message
required

A human-readable description.

string
details

Optional structured detail (for example Zod validation issues).

Example
{
"code": "post_limit_reached",
"message": "The monthly post limit for this plan has been reached."
}