content_publications_record
Record that a person already published one OUTPUT of an approved post by hand — no scheduling needed.
Record that a person already published one OUTPUT of an approved post by hand — no scheduling needed. This never publishes anything: it stores the fact, and the post's status follows (one of two outputs recorded → partially_published; every output published or skipped → published). When the output has a publication on its network that is queued, reminded or may already be live, THAT publication is confirmed (as content_publications_confirm would); otherwise a publication is stored already published, which nothing ever sends or reminds. An output goes to a network once: one already out on any channel of the network is refused with 409 already_published naming it, one being sent by the automatic publisher right now with 409 publication_in_flight (wait for its outcome), a skipped one with 409 output_skipped (content_posts_unskip_output first). Only for a post past approval (409 post_not_approved). A queued automatic publication the publisher has claimed but not started sending is confirmed too, and then never sent. Repeating the same call (same post, output and channel) returns the same publication; a record is stored once, so a repeat naming a different publishedAt or externalUrl is refused with 409 record_mismatch listing the stored values.
Behavior
- HTTP
POST /content/publications/record
Arguments
Name | Type | Required | Description |
|---|---|---|---|
postId | string | • | The approved post one of whose outputs a person published by hand. |
channelId | string | — | The channel it went out on (content_channels_list). Omit to file it under the output's network's reminder channel; a network with none is refused with 409 no_reminder_channel. |
variantId | string | — | Which OUTPUT was published: a targets[].id from content_posts_get. Omit when the channel's network has exactly one output (or, without channelId, when the post has exactly one output). Several and none named: 409 variant_required listing them; an id of another network's output with a channelId: 409 network_not_targeted; an id the post does not have: 409 variant_not_found. |
externalId | string | — | The network's own id for the post, if known. |
externalUrl | string | — | URL of the post on the network. Worth supplying — it is what identifies the post later. |
publishedAt | string | — | ISO-8601 time the post went out; now when omitted. A time in the future is refused with 400. |
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
Record that a person already published one OUTPUT of an approved post by hand — no scheduling needed.