Blog endpoints sit under
/api/brands/{brand}/blogs/ with brandAccess middleware. Authenticate with EF-Access-Key.List Blogs
number
Results per page (1–100, default: 25)
string
Search by name
string
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
string
required
Blog name
number
ID of the domain this blog lives on
string
URL slug (kebab-case, max 255). Must be unique per brand + domain.
number
ID of the template to apply (
context=blog)string
slug_only, segment, or categorystring
URL prefix for articles (max 64)
string
URL prefix for category pages (default:
category, max 64)string
URL prefix for tag pages (default:
tag, max 64)string
URL prefix for search results (default:
search, max 64)boolean
Enable comment system for articles
boolean
Require email confirmation before comments appear
object
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.string
Name for the cloned blog (max 255). Defaults to
"<original name> (Copy)" if omitted.cURL
Export Blogs
array
Filter conditions (same as list query params)
array
Limit export to specific blog IDs
array
Columns to include
Blog Categories
List Categories
Create Category
string
required
Category name (max 255)
string
URL slug. Auto-generated from
name if omitted; appends numeric suffix on collision.string
Image URL (max 2048 chars)
object
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