Content
Content publishing for the workspace's own website: the feeds it follows and the briefs it sends become posts written through the router as its own metered requests; posts are reviewed, published and delivered to its destinations (a signed webhook, WordPress, Ghost) with a retried delivery log, or pulled from `GET /content/posts` and the RSS at `GET /content/feed.xml`.
The `content_*` MCP tools do the same for agents.
get /api /v1 /content
Overview
The workspace's content service at a glance: editorial profile, post and delivery counts, feeds, destinations, the writer that is active, the limits and the pull URL of the workspace RSS.
Requires an API key
Responses
| 200 | Successful Response |
| 422 | Validation ErrorHTTPValidationError |
| 401 | Missing, invalid or revoked API key |
curl -s "$OSR_URL/api/v1/content" \
-H "Authorization: Bearer $OSR_API_KEY"get /api /v1 /content /deliveries
Deliveries
The delivery log: every attempt to put a post on a destination, with the site's answer.
Requires an API key
Parameters
| Name | In | Type | Default | Description |
|---|---|---|---|---|
| post_id | query | string | null | ||
| limit | query | integer | 50 |
Responses
| 200 | Successful Response |
| 422 | Validation ErrorHTTPValidationError |
| 401 | Missing, invalid or revoked API key |
curl -s "$OSR_URL/api/v1/content/deliveries?limit=50" \
-H "Authorization: Bearer $OSR_API_KEY"post /api /v1 /content /deliveries /{delivery_id} /retry
Retry Delivery
Try a failed or waiting delivery again now.
Requires an API key
Parameters
| Name | In | Type | Default | Description |
|---|---|---|---|---|
| delivery_id(required) | path | string |
Responses
| 200 | Successful Response |
| 422 | Validation ErrorHTTPValidationError |
| 401 | Missing, invalid or revoked API key |
curl -s -X POST "$OSR_URL/api/v1/content/deliveries/<delivery_id>/retry" \
-H "Authorization: Bearer $OSR_API_KEY"get /api /v1 /content /destinations
Destinations
Where published posts go: signed webhooks, WordPress sites, Ghost publications - never the secrets.
Requires an API key
Responses
| 200 | Successful Response |
| 422 | Validation ErrorHTTPValidationError |
| 401 | Missing, invalid or revoked API key |
curl -s "$OSR_URL/api/v1/content/destinations" \
-H "Authorization: Bearer $OSR_API_KEY"post /api /v1 /content /destinations
Add Destination
Add a destination (admins). webhook: your URL, optional secret for X-OSR-Signature;
wordpress: the site URL, a user name and an application password; ghost: the site URL and an
Admin API key. auto_publish sends every post that becomes published; post_status: draft leaves the
post as a draft on the CMS.
Requires an API key
Request bodyDestinationIn
| Field | Type | Default | Description |
|---|---|---|---|
| auto_publish | boolean | true | |
| kind(required) | string | ||
| name(required) | string | ||
| post_status | string | "publish" | |
| secret | string | null | ||
| url(required) | string | ||
| username | string | null |
Responses
| 201 | Successful Response |
| 422 | Validation ErrorHTTPValidationError |
| 401 | Missing, invalid or revoked API key |
curl -s -X POST "$OSR_URL/api/v1/content/destinations" \
-H "Authorization: Bearer $OSR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "kind": "string", "name": "default", "url": "string" }'{
"kind": "string",
"name": "default",
"url": "string"
}patch /api /v1 /content /destinations /{destination_id}
Update Destination
Change a destination (admins); secret: "" removes the stored credential.
Requires an API key
Parameters
| Name | In | Type | Default | Description |
|---|---|---|---|---|
| destination_id(required) | path | string |
Request bodyDestinationPatch
| Field | Type | Default | Description |
|---|---|---|---|
| auto_publish | boolean | null | ||
| enabled | boolean | null | ||
| name | string | null | ||
| post_status | string | null | ||
| secret | string | null | ||
| url | string | null | ||
| username | string | null |
Responses
| 200 | Successful Response |
| 422 | Validation ErrorHTTPValidationError |
| 401 | Missing, invalid or revoked API key |
curl -s -X PATCH "$OSR_URL/api/v1/content/destinations/<destination_id>" \
-H "Authorization: Bearer $OSR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "auto_publish": false, "enabled": false, "name": "default", "post_status": "string", "secret": "string", "url": "string", "username": "string" }'{
"auto_publish": false,
"enabled": false,
"name": "default",
"post_status": "string",
"secret": "string",
"url": "string",
"username": "string"
}delete /api /v1 /content /destinations /{destination_id}
Delete Destination
Remove a destination and its delivery log (admins).
Requires an API key
Parameters
| Name | In | Type | Default | Description |
|---|---|---|---|---|
| destination_id(required) | path | string |
Responses
| 204 | Successful Response |
| 422 | Validation ErrorHTTPValidationError |
| 401 | Missing, invalid or revoked API key |
curl -s -X DELETE "$OSR_URL/api/v1/content/destinations/<destination_id>" \
-H "Authorization: Bearer $OSR_API_KEY"post /api /v1 /content /destinations /{destination_id} /test
Test Destination
Send a clearly marked test post to the destination now and return the site's answer.
Requires an API key
Parameters
| Name | In | Type | Default | Description |
|---|---|---|---|---|
| destination_id(required) | path | string |
Responses
| 200 | Successful Response |
| 422 | Validation ErrorHTTPValidationError |
| 401 | Missing, invalid or revoked API key |
curl -s -X POST "$OSR_URL/api/v1/content/destinations/<destination_id>/test" \
-H "Authorization: Bearer $OSR_API_KEY"get /api /v1 /content /feed.xml
Feed Xml
RSS 2.0 of the workspace's published posts, for its own site or a feed reader (API key in the header).
Requires an API key
Responses
| 200 | Successful Response |
| 422 | Validation ErrorHTTPValidationError |
| 401 | Missing, invalid or revoked API key |
curl -s "$OSR_URL/api/v1/content/feed.xml" \
-H "Authorization: Bearer $OSR_API_KEY"get /api /v1 /content /feeds
Feeds
The RSS/Atom feeds the workspace follows, with their last fetch.
Requires an API key
Responses
| 200 | Successful Response |
| 422 | Validation ErrorHTTPValidationError |
| 401 | Missing, invalid or revoked API key |
curl -s "$OSR_URL/api/v1/content/feeds" \
-H "Authorization: Bearer $OSR_API_KEY"post /api /v1 /content /feeds
Add Feed
Follow a feed: it is polled on the scheduler's next pass (entries from the last 7 days), every new entry becomes a post written for the workspace's publication.
Requires an API key
Request bodyWorkspaceFeedIn
| Field | Type | Default | Description |
|---|---|---|---|
| category | string | null | ||
| name | string | null | ||
| url(required) | string |
Responses
| 201 | Successful Response |
| 422 | Validation ErrorHTTPValidationError |
| 401 | Missing, invalid or revoked API key |
curl -s -X POST "$OSR_URL/api/v1/content/feeds" \
-H "Authorization: Bearer $OSR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "url": "string" }'{
"url": "string"
}patch /api /v1 /content /feeds /{feed_id}
Update Feed
Rename, recategorise or pause a feed.
Requires an API key
Parameters
| Name | In | Type | Default | Description |
|---|---|---|---|---|
| feed_id(required) | path | string |
Request bodyWorkspaceFeedPatch
| Field | Type | Default | Description |
|---|---|---|---|
| category | string | null | ||
| enabled | boolean | null | ||
| name | string | null |
Responses
| 200 | Successful Response |
| 422 | Validation ErrorHTTPValidationError |
| 401 | Missing, invalid or revoked API key |
curl -s -X PATCH "$OSR_URL/api/v1/content/feeds/<feed_id>" \
-H "Authorization: Bearer $OSR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "category": "string", "enabled": false, "name": "default" }'{
"category": "string",
"enabled": false,
"name": "default"
}delete /api /v1 /content /feeds /{feed_id}
Delete Feed
Stop following a feed (its posts stay).
Requires an API key
Parameters
| Name | In | Type | Default | Description |
|---|---|---|---|---|
| feed_id(required) | path | string |
Responses
| 204 | Successful Response |
| 422 | Validation ErrorHTTPValidationError |
| 401 | Missing, invalid or revoked API key |
curl -s -X DELETE "$OSR_URL/api/v1/content/feeds/<feed_id>" \
-H "Authorization: Bearer $OSR_API_KEY"post /api /v1 /content /feeds /{feed_id} /fetch
Fetch Feed
Poll one feed now and write posts for its new entries (a metered request per post).
Requires an API key
Parameters
| Name | In | Type | Default | Description |
|---|---|---|---|---|
| feed_id(required) | path | string |
Responses
| 200 | Successful Response |
| 422 | Validation ErrorHTTPValidationError |
| 401 | Missing, invalid or revoked API key |
curl -s -X POST "$OSR_URL/api/v1/content/feeds/<feed_id>/fetch" \
-H "Authorization: Bearer $OSR_API_KEY"get /api /v1 /content /posts
Posts
The workspace's posts, newest first (status filters; q searches title, summary and tags).
Bodies are left out; GET /posts/{id} has them.
Requires an API key
Parameters
| Name | In | Type | Default | Description |
|---|---|---|---|---|
| status | query | string | null | ||
| q | query | string | null | ||
| limit | query | integer | 50 | |
| offset | query | integer | 0 |
Responses
| 200 | Successful Response |
| 422 | Validation ErrorHTTPValidationError |
| 401 | Missing, invalid or revoked API key |
curl -s "$OSR_URL/api/v1/content/posts?limit=50&offset=0" \
-H "Authorization: Bearer $OSR_API_KEY"post /api /v1 /content /posts
Create Post
Store a post written elsewhere (Markdown body). status: published delivers it to the destinations
set to publish automatically.
Requires an API key
Request bodyPostIn
| Field | Type | Default | Description |
|---|---|---|---|
| body(required) | string | ||
| category | string | null | ||
| image_url | string | null | ||
| source_url | string | null | ||
| status | string | "draft" | |
| summary | string | "" | |
| tags | string[] | [] | |
| title(required) | string |
Responses
| 201 | Successful Response |
| 422 | Validation ErrorHTTPValidationError |
| 401 | Missing, invalid or revoked API key |
curl -s -X POST "$OSR_URL/api/v1/content/posts" \
-H "Authorization: Bearer $OSR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "body": "string", "title": "string" }'{
"body": "string",
"title": "string"
}post /api /v1 /content /posts /write
Write Post
Write a post from a brief: the topic, the editor's notes and optionally a page it is about. The writer
routes through the platform as the workspace's own metered request; routing on the post says which
model wrote it. Without an executable model (or when the request is refused) the post is the brief.
Requires an API key
Request bodyWriteIn
| Field | Type | Default | Description |
|---|---|---|---|
| notes | string | "" | |
| status | string | "draft" | |
| topic(required) | string | ||
| url | string | null |
Responses
| 201 | Successful Response |
| 422 | Validation ErrorHTTPValidationError |
| 401 | Missing, invalid or revoked API key |
curl -s -X POST "$OSR_URL/api/v1/content/posts/write" \
-H "Authorization: Bearer $OSR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "topic": "string" }'{
"topic": "string"
}get /api /v1 /content /posts /{post_id}
Post
One post with its Markdown body, an HTML rendering and its deliveries.
Requires an API key
Parameters
| Name | In | Type | Default | Description |
|---|---|---|---|---|
| post_id(required) | path | string |
Responses
| 200 | Successful Response |
| 422 | Validation ErrorHTTPValidationError |
| 401 | Missing, invalid or revoked API key |
curl -s "$OSR_URL/api/v1/content/posts/<post_id>" \
-H "Authorization: Bearer $OSR_API_KEY"patch /api /v1 /content /posts /{post_id}
Update Post
Edit a post; moving it to published delivers it to the automatic destinations.
Requires an API key
Parameters
| Name | In | Type | Default | Description |
|---|---|---|---|---|
| post_id(required) | path | string |
Request bodyWorkspacePostPatch
| Field | Type | Default | Description |
|---|---|---|---|
| body | string | null | ||
| image_url | string | null | ||
| status | string | null | ||
| summary | string | null | ||
| tags | string[] | null | ||
| title | string | null |
Responses
| 200 | Successful Response |
| 422 | Validation ErrorHTTPValidationError |
| 401 | Missing, invalid or revoked API key |
curl -s -X PATCH "$OSR_URL/api/v1/content/posts/<post_id>" \
-H "Authorization: Bearer $OSR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "body": "string", "image_url": "string", "status": "string", "summary": "string", "tags": [], "title": "string" }'{
"body": "string",
"image_url": "string",
"status": "string",
"summary": "string",
"tags": [],
"title": "string"
}delete /api /v1 /content /posts /{post_id}
Delete Post
Delete a post and its delivery log (what a site already received stays there).
Requires an API key
Parameters
| Name | In | Type | Default | Description |
|---|---|---|---|---|
| post_id(required) | path | string |
Responses
| 204 | Successful Response |
| 422 | Validation ErrorHTTPValidationError |
| 401 | Missing, invalid or revoked API key |
curl -s -X DELETE "$OSR_URL/api/v1/content/posts/<post_id>" \
-H "Authorization: Bearer $OSR_API_KEY"post /api /v1 /content /posts /{post_id} /publish
Publish Post
Publish a post and deliver it now to every enabled destination (or destination_ids), waiting for
the sites' answers; the deliveries come back with their status.
Requires an API key
Parameters
| Name | In | Type | Default | Description |
|---|---|---|---|---|
| post_id(required) | path | string |
Responses
| 200 | Successful Response |
| 422 | Validation ErrorHTTPValidationError |
| 401 | Missing, invalid or revoked API key |
curl -s -X POST "$OSR_URL/api/v1/content/posts/<post_id>/publish" \
-H "Authorization: Bearer $OSR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "destination_ids": [] }'{
"destination_ids": []
}post /api /v1 /content /posts /{post_id} /regenerate
Regenerate Post
Rewrite a post from its feed entry with the current writer (status and slug are kept).
Requires an API key
Parameters
| Name | In | Type | Default | Description |
|---|---|---|---|---|
| post_id(required) | path | string |
Responses
| 200 | Successful Response |
| 422 | Validation ErrorHTTPValidationError |
| 401 | Missing, invalid or revoked API key |
curl -s -X POST "$OSR_URL/api/v1/content/posts/<post_id>/regenerate" \
-H "Authorization: Bearer $OSR_API_KEY"get /api /v1 /content /profile
Profile
The editorial profile the writer is told: publication, audience, tone, language, site, auto-publish.
Requires an API key
Responses
| 200 | Successful Response |
| 422 | Validation ErrorHTTPValidationError |
| 401 | Missing, invalid or revoked API key |
curl -s "$OSR_URL/api/v1/content/profile" \
-H "Authorization: Bearer $OSR_API_KEY"put /api /v1 /content /profile
Set Profile
Update the editorial profile (members). auto_publish publishes posts written from feeds at once -
and delivers them to the destinations set to publish automatically - instead of keeping them as drafts.
Requires an API key
Request bodyProfileIn
| Field | Type | Default | Description |
|---|---|---|---|
| audience | string | null | ||
| auto_publish | boolean | null | ||
| language | string | null | ||
| publication | string | null | ||
| site_url | string | null | ||
| tone | string | null |
Responses
| 200 | Successful Response |
| 422 | Validation ErrorHTTPValidationError |
| 401 | Missing, invalid or revoked API key |
curl -s -X PUT "$OSR_URL/api/v1/content/profile" \
-H "Authorization: Bearer $OSR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "audience": "string", "auto_publish": false, "language": "string", "publication": "string", "site_url": "string", "tone": "string" }'{
"audience": "string",
"auto_publish": false,
"language": "string",
"publication": "string",
"site_url": "string",
"tone": "string"
}post /api /v1 /content /refresh
Refresh
Poll every enabled feed (or feed_ids) now and write the posts.
Requires an API key
Responses
| 200 | Successful Response |
| 422 | Validation ErrorHTTPValidationError |
| 401 | Missing, invalid or revoked API key |
curl -s -X POST "$OSR_URL/api/v1/content/refresh" \
-H "Authorization: Bearer $OSR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "feed_ids": [] }'{
"feed_ids": []
}Releases
Release notes parsed from the changelog: every released version with its sections and highlights, the version this deployment runs, and what a signed-in person has not read yet (What's new).
Workspaces
Organization workspaces: members, roles, invitations and organization SSO (browser sessions only).