# Lepsto Content

Use Content to prepare social posts, review their versions, approve them, and schedule publication. You or your agent writes the text. Content publishes through a connected account on supported networks, or reminds a person to publish and confirm it.

Channels cover LinkedIn, X, YouTube, Instagram, Reddit, Facebook, TikTok, Threads, Pinterest, Bluesky and Telegram. Content also stores metrics snapshots where the network supports them.

## Four things to keep apart

**A post** holds your Markdown text, shared media, target networks and each network’s variant. It also records the author, status and version. Edits add versions, preserving what was reviewed. See [Posts](/acquire/content/posts).

**A channel** represents an account on a network. Its settings describe the account type, delivery mode, accepted content and publishing rates. A bound connector identifies the connection used by automatic delivery. Content never holds a social credential itself: a token is resolved per call and discarded. See [Channels](/acquire/content/channels).

**A publication** schedules one approved post variant for one channel and time. It stores the rendered text, post type, fields, state, attempts and idempotency key. Once confirmed, it also records the network’s id and URL when supplied. Schedule a separate publication for each channel. See [Publications](/acquire/content/publications).

**Metrics** record how a publication or channel performs at each capture time. Use the latest snapshot for the most recently captured figures, or the series to compare them over time. See [Metrics](/acquire/content/metrics).

Edit and approve the post before scheduling. Track delivery, attempts, cost and post metrics through its publications.

## Publishing is a state, not a call

Scheduling returns a queued publication. Read its state or wait for its settled event to learn the outcome: the network may reject a request or change an account limit, and a reminder still needs a person to publish.

Check the channel descriptor and validation result before scheduling. For example, Content’s default X rates are $0.015 for a plain post and $0.20 for a post containing a link. These values price the publication; account limits and explicit channel overrides can change what validation reports.

Publications use channel identity and idempotency keys to guard against sending to the wrong account or queueing a duplicate.

## Two ways a post gets out

Not every account can be published to over an API — a personal Instagram profile cannot be reached at all. So a channel says how a post leaves:

- **`reminder`** — Content prepares the post and notifies a person at the scheduled time. They publish it by hand and confirm afterwards. No connector and no network integration are needed.
- **`auto`** — Content publishes through the platform connector the channel is bound to. 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.

Every channel starts in `reminder` mode. For automatic posting, bind a supported channel to a platform connector and set its delivery mode to `auto`. Approve the post, then schedule one publication for each channel and time. Content queues the approved variant and sends it on the scheduler tick. A past time runs on the next tick. See [Channels](/acquire/content/channels) and [Publications](/acquire/content/publications).

The states, events and metering are the same on both paths, with one substitution: in reminder mode `publishing` means the reminder was sent, and a person moves the publication to `published` by confirming it.

## Approval is a person's act

Approval covers a specific version, including its target networks, variant text, fields and media. Finish those edits before requesting approval. A later edit revokes approval and returns the post to `pending_approval`.

A workflow can draft, submit and schedule posts, but `content_posts_approve` is not a workflow step. A person must approve the version. The `content/post.approved` event lets the workflow continue afterward.

## Events

| Event | When |
|---|---|
| `content/post.created` | A post was drafted |
| `content/post.updated` | A post was edited, producing a new version |
| `content/post.submitted` | A post was submitted for approval |
| `content/post.approved` | A person approved a specific version |
| `content/post.approval-revoked` | An edit took a standing approval away |
| `content/publication.scheduled` | A publication was queued for a slot |
| `content/publication.reminder-due` | A person was asked to publish by hand |
| `content/publication.published` | A publication landed on the network |
| `content/publication.failed` | A publication was given up on |
| `content/publication.cancelled` | A publication was called off |
| `content/publication.settled` | A publication reached any terminal outcome |
| `content/channel.paused` | A channel's connection stopped working |

Wait on `content/publication.settled` when you want the outcome of a publication you started. It arrives on every ending, and its `status` field — `published`, `failed` or `cancelled` — is what to branch on. The other three stay available as triggers in their own right.

## How you reach it

Use the Workspace app at `app.lepsto.com` for the composer, calendar, queue, approvals and post metrics. Agents use MCP tools named `content_{entity}_{action}`. The same operations have REST routes at `https://api.lepsto.com/content/…`.

The published `@lepsto/sdk` 1.2.0 has no generated Content client. Use the REST routes from your code. See [Tools and REST API](/acquire/content/tools-and-api).

## What Content does not do

- **Write the post.** Something else composes the text; Content moves it through its life.
- **Shorten links or attribute them.** That is [Tracking](/acquire/tracking).
- **Send email.** A campaign is not "content in the email channel" — see [Send one message to a list](/acquire/broadcasts).
- **Model replies.** Comments and direct messages are not here.

## Next steps

- [Publish your first post](/acquire/content/quickstart): the whole path, end to end, on a reminder channel.
- [Posts](/acquire/content/posts): versions, the lifecycle, and what an edit costs you.
- [Channels](/acquire/content/channels): delivery modes, binding, pauses and per-network limits.
