YARRAPOST GUIDES · UPDATED 14 SEPTEMBER 2026
Connect agents through API and MCP
Agents are named workspace users in YarraPost. The HTTP API and MCP tools use the same operations, permissions and approval rules as the human workspace. YarraPost does not provide AI writing assistance; you choose and authorize the agent that prepares your content.
Choose an integration path
HTTP clients call
https://yarrapost.com/api/v1/operations/{operation} using
POST with a JSON body and bearer authorization. The
OpenAPI reference describes the current
operations and schemas.
MCP clients connect to https://yarrapost.com/mcp using
Streamable HTTP. Clients that support OAuth discovery with hosted client
metadata or dynamic registration open YarraPost for sign-in and a
permission review. A workspace administrator chooses the access to
grant; the client receives its own named agent identity. Revoke it in
People & agents at any time.
Clients can also use a manually issued
Authorization: Bearer …
credential. OAuth uses PKCE, short-lived access tokens and rotating
refresh tokens. Hosted metadata supports public clients using PKCE;
confidential clients can use dynamic registration. Social-channel
consent is a separate flow completed by a person.
Give each agent its own permissions
A workspace administrator can issue a named agent credential. Grant only
the scopes needed for its role: read, write,
publish, approve, connect and
admin. For an agent that prepares drafts for human review,
start with read and write. Publishing permission does not include
approval permission.
Store credentials in a secret manager and send them only to the intended service. Do not embed them in public pages, browser-delivered code or logs.
Discover before creating content
Start with workspace_get,
capabilities_list and connections_list. These
identify the workspace, available formats and connected destinations.
Use connection_instructions if a person needs to authorize
a channel. Provider access restrictions still apply to agents.
Check storage before uploading
Use workspace_get or media_list to check
remaining file slots and bytes. Reuse a media ID when its file is
unchanged. Replacing media on a post keeps the old file as historical
evidence and does not free its capacity.
For an upload that has never been attached to a post, call
media_delete_check first. Uploads are protected for at
least 24 hours. References, incomplete history and unresolved work can
keep a file protected beyond that period; a blocked check frees no
space.
If the check is eligible and the user explicitly asks to remove that
file, call media_delete with its media_id,
confirmation: "DELETE UNUSED MEDIA" and an idempotency key.
Read and write permissions are required. Retry an uncertain result with
the identical input and key. Pending deletion remains charged until
cleanup is confirmed. Scheduled, delivered and previously used media
cannot be deleted through this tool.
Prepare a draft through the HTTP API
Call post_create with an internal title and variants keyed
by connection ID. For example, this is a request body for a text draft;
replace the connection placeholder with an ID returned for your
workspace:
{
"title": "September product update",
"variants": [{
"connection_id": "<connected-destination-uuid>",
"text": "Our September product update is ready.",
"media_ids": []
}]
}
Send mutations with an Idempotency-Key header of 8–128
characters. Reuse the same key and body for a transport retry of the
same operation; use a new key for a new operation. MCP operation
mutations use the idempotency_key input field instead.
For media, call media_upload_instructions, upload the
binary through authenticated HTTP, and retain the returned media ID for
the variant’s media_ids.
Validate, approve and schedule
Check workspace_get.storage or
media_list.storage
before uploading. Both bytes and file slots count. Reuse an existing
media ID when the video is unchanged, including across destinations.
Replacing media on a post keeps the previous revision's original; it
does not automatically free a slot.
-
Call
post_validate. Correct issues withpost_edit, using the current version. -
Call
post_request_approval. When approval is required, an identity with the approve scope callspost_approvefor the exact revision. Content edits invalidate approval. -
Call
post_schedulewith the current version, an explicit-offset ISO timestamp inscheduled_at, and an IANAtimezonesuch asAustralia/Melbourne.
Version conflicts mean the post has changed. Fetch it again with
post_get and review the current content before deciding
what to do next. Do not blindly overwrite another user’s changes.
Track the outcome, not just the request
You can replace a video's media or caption with post_edit
before publishing begins. Read the current version first, then validate,
approve and schedule the new revision. The old approval and schedule are
cleared. Once any destination starts publishing or has an uncertain
outcome, preserve the post and use its recovery guidance.
Poll post_get for per-destination delivery status and the
available published link. Use events_list for cursor-based
event polling. A queued or processing result is not successful
publication. An unknown outcome needs inspection before another publish
attempt; idempotent API requests alone cannot resolve an uncertain
external provider response.
Use the returned progress and recovery guidance to distinguish automatic recovery from manual inspection. Keep the original post and delivery identifiers when reporting failures.
After restoring account access, a publisher can call
delivery_retry with the original post_id,
delivery_id, current post version and an
idempotency_key. It only accepts a failed delivery with one
media file whose intact checkpoint proves nothing was published or
allocated at the destination, on the current approved revision. Each
destination decides from its own checkpoint, and destinations without
that proof (such as YouTube) are refused. It preserves the original
delivery, checkpoint and approval, and leaves published destinations
alone. Text-only deliveries, later-stage failures and unknown outcomes
require inspection; do not replace the post to bypass a refused retry.
For the reviewer’s view of the process, read how to approve and schedule social posts.
YouTube playlists and reports
Check channel capabilities before requesting optional consent. Analytics and playlist management are currently an approved pilot; broader Google verification is pending. An eligible channel owner enables the optional feature in Channels and completes Google consent. Ordinary upload permissions remain separate.
Use playlists_list to discover owned playlists and
post_analytics for a delivered video's metrics, retention
bins and traffic sources. Missing data is not zero; Shorts “stayed to
watch” is not available. To add playlists to a scheduled,
never-attempted YouTube delivery, call
post_youtube_add_to_playlists with its current version.
This preserves approval, schedule and media. Delivered playlist changes
reuse the existing YouTube video.
Published title, description and category updates remain unavailable
while concurrency protection is being validated. A temporary
youtube_auth_retry response means follow
Retry-After and retry the same input and idempotency key;
it does not by itself mean the channel needs reconnecting.
Find posts needing attention with posts_list and
delivery_status: "failed" or
delivery_status: "unknown". These filters inspect the
current revision, including a failed destination on a partially
published post. Use youtube_action_status: "failed" or
youtube_action_status: "unknown" for playlist actions, then
inspect post_get.youtube_actions. Action filters include
retained history, so a failure may have a later successful correction.
Multiple filters combine with AND; keep the same filters when following
pagination cursors. These lists make no YouTube API calls.
Accepted playlist actions retry temporary authorization failures for up to eight attempts, with minimum waits of 1, 2, 4, 8, 15, 15 and 15 minutes. A later provider retry time takes precedence. Uncertain writes are retained for inspection and are never automatically repeated. Check the action receipt separately from the video's publication receipt.
Questions about early access or an integration? Contact support@yarrapost.com.