API reference

Pull blog HTML and SEO metadata into your stack. Base path: `/api/v1`.

Download OpenAPI 3.0 spec →

Content already on your site

Webhooks fire only when GrowthDailySeo creates a new draft. Posts that already exist in your CMS or were created before you connected the API are not pushed automatically.

  1. Paginate `GET /posts` with `status=published` (and `status=draft` if you import drafts) to import everything once.
  2. Store each item's `updatedAt` and poll with `updatedAfter` to pick up edits without re-importing the full catalog.
  3. Use `If-None-Match` with the response `ETag` to skip unchanged pages and save quota.
GET/api/v1/sites/:siteId/posts

Paginated posts for CMS sync. Returns draft + published by default (new drafts are importable immediately).

Query parameters

  • page — Page number (default 1)
  • pageSize — Items per page, max 50 (default 12)
  • search — Case-insensitive title filter
  • status — Filter: `draft`, `published`, or `all` (default — draft + published, recommended for CMS sync)
  • language — ISO language code (e.g. `en`, `tr`) — matches `language` on each post
  • updatedAfter — ISO 8601 timestamp — return only posts updated after this time (incremental sync)
Response 200
{
  "items": [{
    "id": "...",
    "slug": "my-post",
    "title": "...",
    "contentHtml": "<article>...</article>",
    "status": "draft",
    "seo": {
      "metaDescription": "...",
      "ogTitle": "...",
      "ogDescription": "...",
      "keywords": ["..."]
    },
    "faqJsonLd": { "@type": "FAQPage", ... }
  }],
  "page": 1,
  "pageSize": 12,
  "total": 42,
  "totalPages": 4
}
GET/api/v1/sites/:siteId/posts/:slug

Full post payload: contentHtml, excerpt, seo, faqJsonLd. Works for draft and published slugs.

GET/api/v1/sites/:siteId/guides/:slug

Returns a single published guide by slug.

Response 200 (camelCase JSON)
{
  "id": "...",
  "slug": "my-guide",
  "title": "...",
  "contentHtml": "<article>...</article>",
  "status": "published",
  "publishedAt": "2026-07-21T12:00:00.000Z",
  "updatedAt": "2026-07-21T12:00:00.000Z"
}
GET/api/v1/sites/:siteId/sitemap.xml

XML sitemap of published posts and guides. Auth with Bearer header or `?token=` for crawlers.

GET/api/v1/sites/:siteId/training/export

Streams opted-in training rows as NDJSON (max 500). Content-Type: application/x-ndjson.

POST/api/v1/webhooks/test

Sends a test payload to your configured webhook URL. Returns 400 if no URL is set.