Skip to content

content_publications_schedule

Queue one OUTPUT of an approved post for publication to one channel at a given time.

Tool

content_publications_schedule

Queue one OUTPUT of an approved post for publication to one channel at a given time.

Queue one OUTPUT of an approved post for publication to one channel at a given time. A post's outputs are its targets (content_posts_get: targets[].id) — a network and a variant each, several per network allowed, e.g. a YouTube video and two Shorts. What goes out is that output of the post's APPROVED version: its text, post type, fields and media (its own list, or the post's when it inherits); there is no `text` parameter: per-output text lives in `targets[].text`, set with content_posts_update. variantId picks the output; omit it when the channel's network has exactly one output and it is inferred. When the network has several outputs and none is named, the call is refused with 409 variant_required and the list of outputs — pick one and call again. An output of another network is 409 network_not_targeted; an unknown id is 409 variant_not_found. On a reminder channel this does not call the network: at the scheduled time a person is notified to publish by hand, and confirms afterwards with content_publications_confirm. The channel must be on (enabled true in content_channels_list); a channel that is off is refused with 409 channel_disabled — turn it on with content_channels_update or pick another channel. An output goes to a channel once: while it has a publication there that is pending, publishing or published, a second one is refused with 409 already_scheduled naming that publication and output — move it with content_publications_reschedule, or cancel it with content_publications_cancel and schedule again; the post's OTHER outputs may still be scheduled to the same channel. A cancelled or failed publication does not count. Repeating a call with the same idempotency key (by default derived from post, channel, output and time) returns its publication, not a conflict — unless that publication was cancelled or failed: then nothing is queued and the call is refused with 409 idempotency_key_spent; pick a different time or pass a new idempotencyKey.

Behavior

HTTP
POST /content/publications

Arguments

Name
Type
Required
Description
postId
string
•
The post to publish. It must already be approved — an unapproved version never publishes — and it must have an output for the channel's network.
channelId
string
•
The channel to publish to. Its network must be one the post has an output for; what goes out is that output of the post's approved version.
variantId
string
—
Which OUTPUT of the post to publish: a targets[].id from content_posts_get. Omit when the channel's network has exactly one output — it is inferred. When the network has several (a YouTube video and two Shorts), omitting it is refused with 409 variant_required listing them; pick one and call again. An id of another network's output is refused with 409 network_not_targeted; an id the post does not have with 409 variant_not_found.
scheduledAt
string
•
ISO-8601 time to publish. In the past means "as soon as the next tick runs".
idempotencyKey
string
—
Your own key for this publishing intent, unique within the product. Resending the same key returns the SAME publication instead of creating a second one — a duplicate in a client feed is the worst defect this product can ship. Omit it and one is derived from post, channel and time.

Response

Field
Type
Always
Description
id
string
•
Publication id.
text
string
•
The exact text that will be published to this channel — markdown already flattened to plain network text at schedule time. Not the markdown source; that stays on the post.
media
array
•
The media asset ids this publication sends — the output's own list, or the post's when the output inherits — copied when it was scheduled. What the adapter uploads, character for character.
state
string
•
pending (queued) -> publishing (the reminder was sent; a person is publishing by hand) -> published (confirmed) | failed | cancelled.
fields
object
•
The network variant fields it goes out with — a YouTube title, a Reddit subreddit — copied from the post's approved output when it was scheduled.
postId
string
•
The post being published.
costUsd
number
•
What publishing this costs in USD, computed when it was scheduled. On X a post carrying a link costs 13x a plain one. Null means the cost is not known — an auto channel refuses to dispatch it.
warning
string
•
Set on a published publication when something did not go as asked but the post is out — e.g. YouTube refused the cover as the thumbnail (an unverified channel, a file too large). The post is NOT retried; fix it on the network by hand. Null otherwise.
attempts
integer
•
How many dispatch attempts have been made.
postType
string
•
The post type this publication goes out as (video, short, reel, post, ...), copied from the post's approved variant when it was scheduled. Null on a publication scheduled before post targets existed.
channelId
string
•
The channel it is published to.
costBasis
string
•
Which rate produced costUsd: `plain` the flat per-post rate, `link` the higher rate a post carrying a link is charged, `free` a channel whose rates are both zero. Null when the cost is not known.
createdAt
string
•
ISO-8601 creation time.
lastError
string
•
The most recent failure, if any.
updatedAt
string
•
ISO-8601 time of the last change.
variantId
string
•
The post output this publication is bound to (targets[].id). One live publication per post × channel × output. A publication scheduled before outputs existed carries the channel's network name.
externalId
string
•
The network's id for the published post, once known.
externalUrl
string
•
URL of the published post, once known.
publishedAt
string
•
ISO-8601 time it was confirmed published.
scheduledAt
string
•
ISO-8601 time the publication is due.
coverMediaId
string
•
The output's cover image asset id, copied when it was scheduled, or null for none. YouTube sets it as the video's thumbnail after the upload; a reminder links it for the person publishing by hand.
publicationId
string
•
The publication id again, under the name the content/publication.settled event uses to report this publication finishing. Always identical to id.
reminderCount
integer
•
How many reminders have been sent for this publication.
idempotencyKey
string
•
The key that makes a retry the same publication.
reminderSentAt
string
•
ISO-8601 time the most recent reminder went out, or null if none has.

Try it

Queue one OUTPUT of an approved post for publication to one channel at a given time.

When to use

Queue one OUTPUT of an approved post for publication to one channel at a given time. A post's outputs are its targets (content_posts_get: targets[].id) — a network and a variant each, several per network allowed, e.g. a YouTube video and two Shorts. What goes out is that output of the post's APPROVED version: its text, post type, fields and media (its own list, or the post's when it inherits); there is no `text` parameter: per-output text lives in `targets[].text`, set with content_posts_update. variantId picks the output; omit it when the channel's network has exactly one output and it is inferred. When the network has several outputs and none is named, the call is refused with 409 variant_required and the list of outputs — pick one and call again. An output of another network is 409 network_not_targeted; an unknown id is 409 variant_not_found. On a reminder channel this does not call the network: at the scheduled time a person is notified to publish by hand, and confirms afterwards with content_publications_confirm. The channel must be on (enabled true in content_channels_list); a channel that is off is refused with 409 channel_disabled — turn it on with content_channels_update or pick another channel. An output goes to a channel once: while it has a publication there that is pending, publishing or published, a second one is refused with 409 already_scheduled naming that publication and output — move it with content_publications_reschedule, or cancel it with content_publications_cancel and schedule again; the post's OTHER outputs may still be scheduled to the same channel. A cancelled or failed publication does not count. Repeating a call with the same idempotency key (by default derived from post, channel, output and time) returns its publication, not a conflict — unless that publication was cancelled or failed: then nothing is queued and the call is refused with 409 idempotency_key_spent; pick a different time or pass a new idempotencyKey.

Example

Ask your agent something like this:

Queue one OUTPUT of an approved post for publication to one channel at a given time.

The agent will invoke content_publications_schedule with these arguments:

{
  "postId": "<postId>",
  "channelId": "<channelId>",
  "scheduledAt": "<scheduledAt>"
}

Esc

Start typing to search the docs.

↑↓navigate↵select