apublished Get a key

A publishing substrate for autonomous agents

Publish everywhere.
From any AI chat.
On the minute.

Your agent connects a tenant's accounts once, then publishes to X, LinkedIn, Instagram, YouTube and TikTok — with every constraint of every platform returned as JSON before it commits to anything.

Get a key Read the whole API

1.3s worst-case skew, p99.9

The whole product, in one request. Five platforms, one idempotency key, one scheduled time.

POST /v1/posts Idempotency-Key: 8f2c1e40
{
  "content": { "text": "Episode 4 is up — how we made the scheduler punctual.",
               "media": ["https://cdn.example.com/ep4.mp4"] },
  "scheduleMode": "AT",
  "tTarget": "2026-08-04T16:20:00Z",
  "targets": [
    { "channel": "ch_x_71c" },
    { "channel": "ch_lnkd_92f" },
    { "channel": "ch_ig_3d8",  "settings": { "format": "REEL" } },
    { "channel": "ch_yt_5b2",  "settings": { "privacy": "public" } },
    { "channel": "ch_tk_4a1",  "settings": { "privacyLevel": "PUBLIC_TO_EVERYONE" } }
  ]
}

// 202 Accepted
{ "id": "post_9Qk2", "state": "SCHEDULED", "targets": 5 }

What your agent gets

Six things that let a model act without a human in the loop

Every social API assumes a person is watching. These are the affordances that hold when nobody is.

Capability discovery

Ask what a channel accepts and get hard bounds back: character caps, allowed media types, aspect ratios, duration limits, current health, quota left today.

JSON Schema and numbers. Never prose in a help centre.

Dry-run validation

Get every violation at once, with no side effects, before you commit to anything. Iterate against the validator, then publish.

POST /v1/posts:validate

Idempotency everywhere

Every mutation takes a key. Agents retry — that isn't a failure mode to design around, it's the normal case. Retrying will not double-post.

Errors you can branch on

A closed, typed taxonomy. Each error carries either a retry_after or a remediation, so the next action is decidable without parsing English.

channel_reauth_required quota_exhausted media_rejected

Results delivered, not polled

HMAC-signed webhooks with replay protection. SSE if your agent is mid-conversation and waiting. Polling if you'd rather.

Two targets failing out of five isn't a failed post. It's three published and two retryable, each on its own.

Credentials with a blast radius

Scope a key to specific channels and specific actions, give it an expiry, and see every call it made in the audit log.

Grant posts:write without posts:publish and your agent composes while a human confirms.

The two calls that matter

Ask, then check, then commit

An agent that guesses at platform rules will be wrong, and will find out after the post has gone. These two endpoints are how it stops guessing.

GET /v1/capabilities?channel=ch_tk_4a1
{
  "provider": "tiktok",
  "health": "connected",
  "text":  { "maxChars": 2200 },
  "video": { "maxSeconds": 600,
              "aspect": ["9:16"] },
  "required": ["privacyLevel"],
  // no default exists — the platform
  // forbids one. You must choose.
  "quotaRemaining": 14
}

Constraints are data, generated from the provider manifest. Add a platform and this response changes without an agent changing.

POST /v1/posts:validate no side effects
{
  "ok": false,
  "violations": [
    { "channel": "ch_x_71c",
      "code": "text_too_long",
      "limit": 280, "actual": 341,
      "remediation": "shorten or thread" },
    { "channel": "ch_tk_4a1",
      "code": "field_required",
      "field": "privacyLevel" }
  ]
}

Every violation in one response, not the first one it hit. One round trip per fix attempt, not one per problem.

Documentation

Written to be read by a model, not rendered for one

Tool descriptions and a capabilities endpoint are runtime affordances, not documentation. An agent also needs prose it can read once and reason from — and it has to be able to actually fetch it.

Every URL here returns readable markdown to curl, with no JavaScript. Including this page.

All of it is also exposed as MCP resources, so a client can pin and cache instead of spending a tool call.
ArtifactPathWhat it is
Index /llms.txt A short markdown index of every machine-readable document here.
Full reference /llms-full.txt The entire API as one flat markdown file, sized to fit a context window.
OpenAPI /openapi.json Plain JSON. No auth, no JavaScript, stable URL. Generates typed SDKs in TypeScript and Python.
Platform briefs /docs/agents/{provider}.md Roughly 150 lines per platform, written for a model that has never used it: what you can post, which settings are required and have no default and why, the one thing everybody gets wrong, and every error with the action to take.
Recipes /docs/agents/recipes.md Connect a channel, schedule a video, handle a reauth, recover missed webhooks, batch a week.
Errors /docs/agents/errors.md Every code, its cause, its exact remediation. CI fails if a code exists in one place and not the other.
MCP server /mcp Streamable HTTP, exposing the same operations as tools. Included at every tier, never an add-on.

Every number in every brief is interpolated from the provider manifest, never typed twice. The prose around them is hand-written. That is a CI assertion, not an intention — which is why the docs can't quietly go stale.

Measured, not claimed

1.3s worst-case dispatch skew at p99.9, against a ±30s target
400 targets across 40 accounts and 8 workers, under load
0 duplicated posts when a worker is killed mid-publish
0 cross-tenant reads across 60 interleaved requests

Why it can hold. Everything expensive — upload, container creation, the platform's own ingestion — happens before the clock. The only thing that happens at your scheduled time is the single cheapest call the platform offers. That is how a ±30s promise survives a platform that takes twelve minutes to ingest a video.

Five platforms at v1

Real APIs only. No cookie scraping.

Sub-account selection included, because four of the five require it: a Facebook Page, a YouTube channel, a LinkedIn organization, an Instagram professional account.

Returned live per channel from GET /v1/capabilities, including current health and remaining quota.
Platform Text Video Required with no default First comment
linkedin3 00030 minFirst comment
facebook63 2064 hFirst comment
instagram2 20015 minFirst comment
threads5005 minUp to 25
tiktok2 20010 minPrivacy Level
youtube5 00012 hMade For KidsFirst comment

Pricing

Metered on accounts. Never on posts.

You pay for how many accounts are connected and how many people work on them. Post as often as you and your agents like — there is no per-request price to reason about and no rate meter to design around.

Free

$0

No card. No expiry.

  • 1 connected account
  • 5 real posts per month
  • Unlimited simulator posting on an ap_test_ key
  • REST API
  • MCP server

CreatorMost popular

$29

$24

per month

per month · billed $290 yearlySave $58 a year

  • 15 connected accounts
  • 3 team members
  • Multiple accounts per platform
  • Unlimited posts
  • REST API
  • MCP server
  • Bulk scheduling from a spreadsheet
  • Carousels and first comments
  • Webhooks
  • Human support

Studio

$49

$41

per month

per month · billed $490 yearlySave $98 a year

  • 50 connected accounts
  • 10 team members
  • Multiple accounts per platform
  • Unlimited posts
  • REST API
  • MCP server
  • Bulk scheduling from a spreadsheet
  • Carousels and first comments
  • Webhooks
  • Audit log kept a year
  • Priority human support

AgencyBest deal

$199

$166

per month

per month · billed $1990 yearlySave $398 a year

  • 250 connected accounts, then $2.50 each
  • Unlimited team members
  • Multiple accounts per platform
  • Unlimited posts
  • REST API
  • MCP server
  • Bulk scheduling from a spreadsheet
  • Carousels and first comments
  • Webhooks
  • Audit log kept forever
  • Priority human support

Scale

Talk to us

Talk to us

from $1500 per month

from $1500 per month

  • 1000 connected accounts and up
  • Unlimited team members
  • Multiple accounts per platform
  • Unlimited posts
  • REST API
  • MCP server
  • Bulk scheduling from a spreadsheet
  • Carousels and first comments
  • Webhooks
  • Audit log kept forever
  • Bring your own platform credentials
  • Punctuality written into the contract
  • Priority human support

Paying yearly is two months free — $290, $490 or $1990 once a year.

Billed once a year. Cancel any time; we refund the unused months.

Publishes to
  • LinkedIn
  • Facebook
  • Instagram
  • TikTok
  • YouTube

API and MCP at every tier

Including free. The programmatic surface is the product, so putting it behind an upgrade would be putting the product behind an upgrade. Build against the simulator for as long as you want, on a key that costs nothing.

You decide what an agent may do alone

Also every tier. A key you give posts:publish schedules and posts unattended — you say “schedule these ten” and it is done. A key without it drafts and waits for you instead. Same API, same agent, one scope apart, and never a surprise about which you chose.

Give your agent
a way out.

A key takes thirty seconds and the simulator is free forever. Nothing you build against it has to change when you point it at the real thing.

Get a key Read a recipe first