Skip to content

Channels

Choose a publishing channel and check its delivery mode, supported variants, limits, rates and pauses.

Choose a channel to set where a publication will go. Each channel represents one account on one network and describes its delivery mode, accepted content and publishing rates.

Content seeds one channel per network when you first read the product’s channels. You can rename channels, bind connectors and update their settings. If a network was added after your product was seeded, the next read adds its channel without changing the existing ones.

The shape of a channel

Field
What it is
id
Channel id — this is what a publication is scheduled against
network
linkedin, x, youtube, instagram, reddit, facebook, tiktok, threads, pinterest, bluesky or telegram
subjectType
member (a personal account) or organization (a company page)
deliveryMode
auto or reminder
displayName
The human label
capabilities
What the channel accepts and what it costs
connectorId
The platform connector it publishes through, or null
pausedAt
When the connection stopped working, or null when healthy
pauseReason
revoked, expired, or the provider’s own reason code
createdAt, updatedAt
ISO-8601 timestamps

Seeded channels are member channels in reminder mode with no connector.

Delivery modes

Use reminder when a person will publish the post. At the scheduled time, Content prepares the post and notifies a person. They publish on the network and call content_publications_confirm. No connector is needed, and Content sends nothing to the network.

The auto mode uses a bound connector and network adapter to publish at the scheduled time. Automatic posting supports LinkedIn member profiles and YouTube. X and Reddit have adapter code but no registered OAuth app yet, so they stay reminder-only until that lands. Instagram, Facebook, TikTok, Threads, Pinterest, Bluesky and Telegram have no publishing connector and are reminder-only.

Binding does not change delivery mode unless you pass deliveryMode: "auto" to content_channels_bind. Unbinding also preserves the mode: an auto channel left without a connector fails publications instead of switching to reminders.

Binding and pauses

content_channels_bind attaches the channel to a platform connector already attached to the product. Binding is rejected for Instagram, Facebook, TikTok, Threads, Pinterest, Bluesky, Telegram and LinkedIn company pages because they have no publishing connector. Binding also clears a pause, which is how you repair a revoked or expired connection.

When a connector stops working, every channel bound to it is paused and content/channel.paused goes out once per channel, carrying the network, the display name and the reason.

A pause freezes the channel’s queue: its publications are held, not cancelled. content_channels_resume puts them back in the queue once the connection works again, and they dispatch on the next scheduler tick — late rather than lost.

pauseReason is an open set. revoked and expired are Content’s own; anything else is the provider’s reason code from a failed credential resolution. It never carries a credential.

Capabilities

Read capabilities before writing a network variant. It supplies the limits used to validate and schedule that variant.

Field
What it is
maxTextLength
Longest text the network accepts, in characters
maxMedia
Media attachments per post
supportsVideo
Whether video may be attached
supportsLink
Whether a link is accepted
costPerPostUsd
USD per published plain post
costPerLinkPostUsd
USD per published post containing a link
dailyPostCeiling
Published posts per rolling 24 hours, or null when the network publishes no figure
ceilingIsRuntimeData
True where the documented figure is known to disagree with reality
analytics
full, basic or none — what this network reports about a published post
postTypes
Supported post types; the first is the default
variantFields
Fields accepted alongside a network’s text
previewFoldChars
Character position of the feed’s “more” fold, or null if absent or unknown

The values a product starts with, per network:

Network
maxTextLength
maxMedia
Video
Link
Plain
With link
Daily ceiling
Analytics
LinkedIn
3,000
20
yes
yes
$0
$0
150
basic
X
280
4
yes
yes
$0.015
$0.20
not published
full
YouTube
5,000
1
yes
yes
$0
$0
100
basic
Instagram
2,200
10
yes
no
$0
$0
100 (known to be unreliable)
none
Reddit
40,000
20
yes
yes
$0
$0
not published
none
Facebook
63,206
80
yes
yes
$0
$0
not published
none
TikTok
2,200
35
yes
no
$0
$0
15 (varies per account)
none
Threads
500
20
yes
yes
$0
$0
250
none
Pinterest
800
5
yes
yes
$0
$0
not published
none
Bluesky
300
4
yes
yes
$0
$0
not published
none
Telegram
4,096
10
yes
yes
$0
$0
not published
none

The YouTube text limit applies to the video description. TikTok’s applies to the video caption; Pinterest’s to the pin description. Telegram accepts 4,096 characters for a text message but only 1,024 for a media caption. Bluesky counts graphemes, so one emoji counts as one character. Facebook’s 63,206 figure is widely measured rather than a published network limit.

The following post types and fields are built in. Numbers beside fields are maximum character lengths; fields marked required must be filled before submission.

Network
Post types (default first)
Variant fields
LinkedIn
post
—
X
post
—
YouTube
video (16:9), short (9:16) — both need a video
title (required, 100)
Instagram
post (4:5), carousel (4:5), reel (9:16, needs a video), story (9:16)
—
Reddit
post
title (required, 300), subreddit (required, 21)
Facebook
post, reel (9:16, needs a video), story (9:16)
—
TikTok
video (9:16, needs a video), photo (9:16)
—
Threads
post
—
Pinterest
pin
title (100), link (2,048)
Bluesky
post
—
Telegram
post
—

Each postTypes entry has an id, label, mediaAspect and requiresVideo. The frame is 1:1, 4:5, 9:16, 16:9 or null where no fixed frame applies. Each variantFields entry has an id, label, required and maxLength.

Treat the table’s rates and ceilings as defaults. A live account ceiling takes precedence over the built-in value, and an explicit channel override takes precedence over both. Instagram and TikTok set ceilingIsRuntimeData: true because their actual ceilings vary or disagree with the documented figure.

Use content_channels_update to merge capability overrides when a price or account limit changes. Omitted fields keep their values. Targets are checked against built-in post types and fields when written, then against the channel descriptor during validation and scheduling. An override can narrow the accepted types; it cannot add a type the network doesn’t support.

analytics: "none" means no snapshot will ever be taken for that channel. See Metrics.

Tools

Tool
What it does
content_channels_list
List channels, ordered by network; filter with network
content_channels_get
Read one channel, with its delivery mode and capabilities
content_channels_update
Rename, change delivery mode, or override capability fields
content_channels_bind
Bind to a platform connector, clearing any pause
content_channels_unbind
Detach the connector and clear any pause
content_channels_resume
Resume a paused channel once its connection works again

There is no create tool: channels are seeded, one per network.

Next steps

  • Publications: the queue these limits are checked against.
  • Metrics: what each network reports back.
Was this page helpful?
Esc

Start typing to search the docs.

↑↓navigate↵select