Skip to main content
When an editor clicks Mark as published in Semji, Semji sends a content_published webhook to the URL you configured. Use it to push the published article to your CMS, or to trigger downstream automations (dashboards, tasks, notifications) — no polling, no copy-paste.
content_published fires after publication (the editor decided the content is live). It is separate from the Send to CMS webhook (content_staged), which pushes a draft to your CMS before publication. Both can be configured on the same workspace.

Prerequisites

  • An HTTPS endpoint reachable from the public internet — either your own, or a scenario URL from a no-code platform (Make, Zapier, N8n).
  • A workspace where you can reach Settings (to add the webhook).

How it works

1

Add the webhook in Semji

In the app, go to Settings > General, click Add a Webhook, and paste your endpoint (or automation scenario) URL.
2

An editor marks a content as published

They fill in the publication URL and date (backdating works, in the app and via the API’s publishedAt).
3

Semji POSTs the content_published event

A single POST with the content payload lands on your endpoint. Respond with a 2xx immediately and process asynchronously.

The payload Semji sends

content_published payload
string
Always content_published for this webhook.
object
The published content and its context: title, sanitized html, plain text, meta_description, content_score, words_count, published_at, published_by, content_status, page (with the live url), page_focus_keyword (with search_volume), plus workspace and organization. IDs are 12-char public IDs.
Three things to know:
  • data.html is already sanitized — editor annotations are stripped, it is equivalent to the API’s htmlSanitized field. Push it to your CMS as-is.
  • data.id is the content ID, directly usable with GET /v1/contents/{contentId}.
  • Delivery is a single POST — no signature, no retry on failure. Respond 2xx immediately and process asynchronously.
The webhook is not signed: anyone who discovers your endpoint URL could forge a payload. Treat it as a trigger — re-fetch the content by ID with your API key before touching your CMS, and drop the event if the content doesn’t exist or isn’t published.

No-code templates

Prefer not to write code? Import one of these ready-made scenarios and point it at WordPress (adapt the CMS step for another platform):

Make template

A Make scenario that receives the webhook and creates the post in WordPress.

N8n WordPress template

An N8n workflow with a POST webhook trigger that routes the content to WordPress.
The scenario URL these tools give you is what you paste into Settings > General > Add a Webhook.

Use cases

  • Publish or update the article in your CMS (WordPress, Contentful, Webflow…).
  • Auto-populate a Google Sheets dashboard with the SEO metrics.
  • Create a follow-up task (Asana, Jira) for the marketing team.
  • Notify a Slack or Teams channel on publication.
  • Cross-post to social (X, LinkedIn).

Troubleshooting

Check the webhook URL in Settings > General, and that an editor actually clicked Mark as published (the event only fires on publication). The URL must be a public HTTPS endpoint reachable from Semji.
Delivery is a single unsigned POST — treat it as a trigger and re-fetch the content with GET /v1/contents/{contentId} using your API key before writing to your CMS.