Blog endpoints sit under
/api/brands/{brand}/blogs/ with brandAccess middleware. Authenticate with EF-Access-Key.List Blogs
Results per page (1–100, default: 25)
Search by name
newest, oldest, created_at, updated_atcURL
List Blogs (Unpaginated)
{ id, name } for all blogs with a saved config — useful for dropdowns.
Get Blog
Create Blog
Blog name
ID of the domain this blog lives on
URL slug (kebab-case, max 255). Must be unique per brand + domain.
ID of the template to apply (
context=blog)slug_only, segment, or categoryURL prefix for articles (max 64)
URL prefix for category pages (default:
category, max 64)URL prefix for tag pages (default:
tag, max 64)URL prefix for search results (default:
search, max 64)Enable comment system for articles
Require email confirmation before comments appear
SEO metadata object (meta title, description, OG tags, Twitter card fields)
cURL
Update Blog
name is still required.
Delete Blog
Clone Blog
Creates a copy of a blog within the same brand.Name for the cloned blog (max 255). Defaults to
"<original name> (Copy)" if omitted.cURL
Export Blogs
Filter conditions (same as list query params)
Limit export to specific blog IDs
Columns to include
Blog Categories
List Categories
Create Category
Category name (max 255)
URL slug. Auto-generated from
name if omitted; appends numeric suffix on collision.Image URL (max 2048 chars)
SEO metadata (meta title, description, OG tags, Twitter card)
cURL
Update Category
Delete Category
Notes
- Blog slugs must be globally unique per
brand_id+domain_idcombination - The
cloneendpoint copies the blog’sconfig,html,css, andinteractionsto the new blog. Slug uniqueness is handled automatically with a numeric suffix - The builder (
GET/POST .../blogs/{blog}/builder) and articles CRUD endpoints are managed through the page builder and article editor controllers respectively