WordPress is the common case, but plenty of sites run on Ghost, Webflow, or something bespoke. The publishing mechanics differ meaningfully between them — particularly around how content is stored, which decides how much of your formatting survives the trip.
Ghost
Ghost is a focused publishing platform with a well-designed Admin API. Authentication uses an Admin API key created under Settings → Integrations → Add custom integration, which yields a key in the form `id:secret`.
- ●The Admin API can create, update and delete posts, set tags and authors, upload images, and schedule via a `published_at` date with status `scheduled`.
- ●Ghost stores content in Lexical (its editor format) but accepts HTML on write if you explicitly request HTML source handling. Sending HTML without that flag is the usual reason formatting arrives flattened.
- ●Ghost is opinionated about structure — one post type, tags rather than categories, and no custom fields in the WordPress sense. This is simpler, but it means content models that rely on custom fields do not port over.
- ●SEO fields (meta title, meta description, OG and Twitter overrides) are first-class properties on the post, so unlike WordPress there is no plugin dependency.
Ghost API keys expire in behaviour, not time
Admin API keys do not expire, but they are tied to the integration. Deleting the integration in Ghost invalidates the key immediately — a common cause of publishing suddenly failing after someone tidies up the integrations screen.
Webflow
Webflow is a design-first tool with a CMS bolted to a structured collection model. That structure is the important difference: you are not publishing "a post", you are creating an item in a collection whose fields were defined in the Webflow Designer.
- 1Create the collection and its fields in Webflow first. The API cannot create fields — it can only populate ones that already exist.
- 2Authenticate with a site API token from Site settings → Apps & integrations.
- 3When creating an item you must supply the collection ID and match the field slugs exactly. A mismatched slug fails silently or errors, depending on the field.
- 4Rich text fields accept HTML, but Webflow sanitises it to the subset its editor supports. Complex markup gets stripped.
- 5Items can be created as drafts, and on most plans publishing an item requires a separate publish call.
Webflow is the least forgiving of the three because the content model is rigid by design. That rigidity is also its strength — you cannot accidentally publish something that breaks the layout.
Custom webhooks
If your site runs on something else entirely — a static site generator, a headless CMS, an in-house application — a webhook is the general-purpose escape hatch. Your publishing tool POSTs the finished content as JSON to a URL you control, and you decide what happens next.
- ●Authenticate the request. A shared secret in a header, verified on your side, is the minimum — an unauthenticated publish endpoint is an open invitation.
- ●Verify a signature rather than just comparing a token if you can. It survives log leakage better.
- ●Return a proper status code. A 2xx means accepted; anything else should tell the caller what went wrong.
- ●Be idempotent. Retries happen, and publishing the same article three times because of a network blip is worse than failing.
- ●Typical payload: title, HTML body, excerpt, slug, tags, featured image URL, and a desired status. Map those onto whatever your system needs.
For static sites the common pattern is a webhook that commits a markdown file to a repository and lets the existing build pipeline take over — which keeps your content in version control and your deploy process unchanged.
Choosing between them
| Ghost | Webflow | Webhook | |
|---|---|---|---|
| Setup effort | Low | Medium — model first | High — you build the receiver |
| Formatting fidelity | Good with HTML source enabled | Limited to supported subset | Whatever you implement |
| SEO fields over API | Native | Only if you defined them | Your choice |
| Scheduling | Native | Manual publish step | Your choice |
| Best for | Publications and blogs | Design-led marketing sites | Static sites and custom stacks |
Connecting in Flux N Pro
All of these are configured under Settings → Integrations → CMS, alongside WordPress and Shopify. Each connection stores only the credential needed for that platform, connections can be tested without re-entering keys, and articles approved in the Content Hub can be pushed to any connected destination.
Frequently asked questions
Does Ghost accept HTML when publishing via API?
Yes, but you must explicitly request HTML source handling. Ghost stores content in its Lexical editor format, and sending HTML without that flag is the most common reason formatting arrives stripped or flattened.
Can the Webflow API create new collection fields?
No. Fields must exist in the Webflow Designer before the API can populate them. The API creates and updates items within an existing collection structure, not the structure itself.
How should I secure a custom publishing webhook?
At minimum require a shared secret in a request header and verify it server-side. Better is verifying a signature over the request body, which does not leak a reusable token into logs. Also make the endpoint idempotent so retries do not duplicate posts.
Can I connect more than one CMS at a time?
Yes. Each site is a separate connection with its own credentials, so you can publish to a WordPress blog and a Shopify store from the same workspace. Connection limits depend on your plan.
What happens if a CMS credential stops working?
Publishing fails and the connection is flagged. Ghost keys break if the integration is deleted; Webflow tokens can be revoked in site settings; WordPress application passwords can be revoked per integration. Re-issue the credential and update the connection.
Try the Content Studio
Run the checks described in this guide against your own site — free, no account needed.
Open Content Studio →Get new guides by email
Occasional, practical SEO writing. No sequences, no upsells.