Docs

Publishing

Articles go to your own site, under your own name, on your own domain. Seven destinations, and a webhook for anything not on the list — so “we don’t support your CMS” is not an answer you should get from us.

Common to all of them: nothing publishes until it has passed every quality check, and anything held stays as a draft with the reason attached. Every credential is encrypted before it is stored, and every connection is tested before it is saved — a connection we cannot publish through is worse than none, because it fails silently on a schedule instead of in front of the person who can fix it.

WordPress

Self-hosted or WordPress.com, through the REST API.

What you need

  • Your username
  • An application password — Users → Profile → Application Passwords, not your account password

Worth knowing

The account needs to be Author or higher. A Subscriber account authenticates successfully and cannot create posts, which we check when you connect rather than at 3am.

Webflow

Into a CMS Collection on your site, published live rather than left in staging.

What you need

  • An API token with cms:read and cms:write — Site settings → Apps & integrations → API access
  • The collection id your blog posts live in, from the CMS panel URL

Worth knowing

The collection needs a Rich Text field, which is where the article body goes; we refuse to connect without one rather than publishing empty items. Webflow has no standard field for structured data, so unlike WordPress we do not attach any. And Webflow does not report the public URL of an item, so the link we record is our best guess at your collection page’s path.

Shopify

Into a blog on your store.

What you need

  • An Admin API access token with write_content — Settings → Apps and sales channels → Develop apps
  • Your store’s .myshopify.com address, which is not your storefront domain
  • The blog id, from the blog’s URL in your admin

Worth knowing

Shopify has no per-article field for structured data; most themes emit their own Article schema. The storefront URL we record assumes the default "news" blog path.

Ghost

Self-hosted or Ghost(Pro), through the Admin API.

What you need

  • An Admin API key — Settings → Integrations → Add custom integration. The one shaped id:secret, not the Content API key

Worth knowing

Ghost generates its own structured data for every post, so we do not add ours — two descriptions of the same page contradict each other, which is worse than one.

EmDash

Cloudflare’s Astro CMS, into a collection you choose.

What you need

  • A personal access token with content:write and media:write — Settings → API Tokens
  • The collection to publish into, if it is not called “posts”

Worth knowing

The token’s user needs permission to publish, not only to write. EmDash treats those as separate, so a token can be scoped correctly and still only produce drafts; we check both when you connect.

Git repository

For a site that builds from Markdown — Next.js, Astro, Hugo. We commit the file; your deploy publishes it.

What you need

  • A fine-grained GitHub token with Contents: read and write on that repository
  • The repository as owner/name, the branch, and the directory your posts live in

Worth knowing

A repository has no draft state, so committing is publishing. Anything that fails our checks is held before it ever reaches your repo rather than committed as a draft. The post appears when your site finishes deploying, usually a minute or two after the commit.

Webhook

For anything not on this list. We POST each article to an endpoint you write.

What you need

  • An https endpoint reachable from the internet
  • A signing secret, which we generate

Worth knowing

About twenty lines to implement. Your endpoint has to verify our signature and deduplicate on the idempotency key, both of which the documentation shows working.

Full specification →

Connect one under Settings → Integrations. You can change destination later; only one is active at a time, and connecting a new one retires the old rather than failing.