Inbound content webhooks
What this does
Most webhooks in this app point outward - we call your server when something happens. An inbound content webhook is the reverse: an external tool (an AI SEO writer, a CMS, your own script) calls us with a finished article, and we turn it into a blog post.
Set one up
Go to Admin -> Content -> Content Webhooks and create an endpoint. You get two things back:
- a URL ending in a random token - paste this into the sending tool
- a signing secret, shown once - paste this into the same tool
Rotate the secret at any time from the same page. Rotating invalidates the old one immediately, so update the sending tool straight after.
What we expect
POST JSON with the article under an article key: id, title, slug, meta_description, focus_keyword, word_count, body_html or body_markdown, and optionally faqs, article_schema, faq_schema.
Sign it exactly like our outbound webhooks: HMAC-SHA256(timestamp + "." + raw_body) in hex, sent as X-SEOGraphy-Signature (or X-Webhook-Signature) alongside the unix-seconds X-SEOGraphy-Timestamp. Requests whose timestamp is more than five minutes old are rejected.
Publish now or later
Add a publishDate field and the article is held as a scheduled draft until that moment, then published automatically. Leave it out and the article goes live immediately. A naive date string with no timezone offset is read in the endpoint's configured timezone.
Set an endpoint to Draft mode when you want every ingested article held for review regardless of what the sender asks for.