Skip to main content
POST
Create Blog Post

Authorizations

Authorization
string
header
required

Org API key as Token token=ei_live_...

Headers

Idempotency-Key
string | null

Body

application/json

POST /v1/blog-posts → blog_posts. Creates a post on the calling key's OWN organisation blog — the post is scoped to the org the API key belongs to, so most callers send only title (+ content and other optional fields) and nothing else. Defaults status='draft' (never auto-publish an unreviewed post). organization_id / created_by / timestamps are server-set, never accepted.

target / brand are reserved for EquateIt-operated marketing sites and are NOT needed for normal org publishing: target='platform' writes to a public marketing blog and requires the key's allow_platform_blog capability (not granted to ordinary org keys), with brand selecting the surface.

title
string
required
Required string length: 1 - 300
slug
string | null

URL slug; slugified from the title when omitted. Unique per org.

Maximum string length: 200
Pattern: ^[a-z0-9]+(?:-[a-z0-9]+)*$
excerpt
string | null
Maximum string length: 2000
content
string | null

Markdown body.

Maximum string length: 200000
tags
string[]
Maximum array length: 50
Maximum string length: 2000
author
string | null
Maximum string length: 200
category
string | null
Maximum string length: 200
date
string | null

ISO date; defaults to today.

status
enum<string>
default:draft
Available options:
draft,
published
publish_to_website
boolean | null
publish_to_portal
boolean | null
target
enum<string>
default:org

Leave as 'org' (the default) to post to your own organisation's blog. 'platform' targets an EquateIt-operated marketing site and requires the key's platform-blog capability.

Available options:
platform,
org
brand
enum<string> | null

Only for platform posts — which marketing surface (equateit → equateit.com.au, classquill → classquill.com). Omit for org posts.

Available options:
equateit,
classquill
scheduled_at
string | null

ISO 8601 datetime (e.g. '2026-08-01T09:00:00Z'). When set with status='draft', the post will be published automatically by a background job within 15 minutes of this time. Pass null to cancel a scheduled publish.

Response

Successful Response

A blog post row returned by /v1/blog-posts. target is derived from organization_id (NULL → 'platform', else 'org').

id
string
required
target
string | null
brand
string | null
organization_id
string | null
title
string | null
slug
string | null
status
string | null
excerpt
string | null
content
string | null
author
string | null
tags
string[]
category
string | null
date
string | null
publish_to_website
boolean | null
publish_to_portal
boolean | null
is_pinned
boolean | null
published_at
string | null
scheduled_at
string | null
created_at
string | null
updated_at
string | null