CMS
Connect WordPress, Ghost, Webflow, Shopify, a GitHub static site or a custom webhook as your publishing target.
AgenticSEO publishes QA-passed articles to your website. Choose your marketing site type in Settings > Publishing, fill in its fields, and save. Supported targets are WordPress, Ghost, Webflow, Shopify, Static site (GitHub), Custom API (webhook) and Manual. Fields marked with * are required.
Note: Fields such as URLs and folders are filled with sensible defaults while they are empty. Secret fields show only their last 4 characters after you save.
WordPress
Publishes posts and uploads images with the WordPress REST API and an application password.
| Field | Notes |
|---|---|
| WordPress URL * | For example https://example.com |
| Username * | A user who can publish posts |
| Application password * | In WordPress: Users > Profile > Application Passwords |
| Category IDs (comma separated) | For example 3,7 |
| Author ID | Optional author for new posts |
Images go to the media library with alt text. The first image becomes the featured image.
Ghost
Publishes posts with the Ghost Admin API.
| Field | Notes |
|---|---|
| Admin API URL * | For example https://example.ghost.io |
| Admin API key (id:secret) * | From a custom integration in Ghost Admin |
| Tags (comma separated) | For example Blog |
Ghost also gets the meta title, meta description, feature image and the JSON-LD schema in the page head.
Webflow
Creates items in a Webflow CMS collection with the Data API v2.
| Field | Notes |
|---|---|
| Site API token * | From the Webflow site settings |
| Blog collection ID * | The collection for blog posts |
| Rich text field slug * | Default post-body |
| Summary field slug | Default post-summary |
| Meta title field slug, Meta description field slug | Optional |
| Blog URL path | Default /blog |
Shopify
Creates blog articles with the Shopify Admin REST API.
| Field | Notes |
|---|---|
| Store domain * | For example my-store.myshopify.com |
| Admin API access token * | From a custom app with blog write access |
| Blog ID * | The blog to post in |
| API version | Default 2026-07 |
| Author name | Defaults to your site name |
| Public blog URL | Default your site plus /blogs/news |
Warning: Webflow, Shopify and webhook targets load images from the app's public address. If images do not appear, see Troubleshooting.
Static site (GitHub)
Commits a Markdown or MDX file and its images to a GitHub repo (Next.js, Astro, Hugo, Jekyll). Your host deploys on push.
| Field | Default |
|---|---|
| GitHub token (contents: write) * | Fine-grained token with contents write on the repo |
| Repository (owner/name) * | none |
| Branch | main |
| Content folder * | content/blog |
| File extension | md |
| Image folder in repo | public/images/blog |
| Public image path | /images/blog |
| Post URL pattern | your site plus /blog/{slug} |
The file has frontmatter with title, description, slug, date, draft (true when Post status is Draft), image and faq.
Custom API (webhook)
Sends the article as signed JSON to your endpoint with a POST request.
| Field | Notes |
|---|---|
| Endpoint URL * | Your HTTPS endpoint |
| Signing secret (HMAC SHA-256) | Optional but recommended |
Payload
{
"event": "article.publish",
"mode": "create",
"status": "publish",
"site": { "id": "site-id", "name": "Acme", "url": "https://acme.com" },
"ticket": {
"id": "ticket-id",
"number": 42,
"type": "new_content",
"keyword": "payroll software for startups",
"targetUrl": null
},
"article": {
"title": "Payroll Software for Startups: ...",
"slug": "payroll-software-for-startups",
"metaTitle": "...",
"metaDescription": "...",
"excerpt": "...",
"markdown": "## TL;DR ...",
"html": "<h2>TL;DR</h2> ...",
"faq": [{ "question": "...", "answer": "..." }],
"schemaJsonLd": { "@context": "https://schema.org", "@graph": [] },
"images": [{ "url": "https://app-address/api/assets/abc123", "alt": "..." }]
}
}
modeiscreatefor new pages andupdatefor refresh, internal links and title/meta tickets.statusispublishordraft, from Post status.
Headers and signature
content-type: application/json
user-agent: AgenticSEO-Webhook/1.0
x-agenticseo-signature: sha256=<hex HMAC of the raw body>
The signature header is sent only when a signing secret is set. Verify it in Node.js:
const crypto = require("crypto");
const expected = "sha256=" + crypto.createHmac("sha256", SECRET).update(rawBody).digest("hex");
const got = Buffer.from(req.headers["x-agenticseo-signature"] || "");
const ok = got.length === expected.length && crypto.timingSafeEqual(Buffer.from(expected), got);
Response
Return a 2xx status. To record the live URL, return JSON:
{ "url": "https://acme.com/blog/payroll-software-for-startups", "id": "your-post-id" }
Without a url, the app records your site URL plus the slug. Any non-2xx status fails the publish.
Manual
No auto-publish. Approved articles wait in Ready. You copy or download them and mark them published. See Publishing.
Change the site type
Pick a new type in Marketing site type. The app asks for the keys of the new type. Save, then publish a test article as Draft in the CMS first.
Did this page help? Tell us at support@agenticseo.com.