The canonical document
Everything Octa Editor reads or writes is the same canonical JSON document. The panel, the bulk importer, the REST API and the Abilities API all speak it. Learn it once.
Post vs term
Section titled “Post vs term”A document is a term when it has a taxonomy key, and a post otherwise. You can also state it explicitly with "type": "post" or "type": "term".
{ "type": "post", "post_type": "page", "status": "publish", "title": "Post title", "slug": "post-title", "excerpt": "Short summary.", "menu_order": 0, "parent": "parent-slug", "seo": { "title": "", "description": "" }, "taxonomies": { "category": ["news", "releases"] }, "fields": { "hero_section": { "heading": "…" } }, "content": "<p>HTML body.</p>"}| Field | Type | Notes |
|---|---|---|
title |
string | Required when creating. |
post_type |
string | Defaults to post. Must exist and be allowed. Immutable on update. |
status |
string | publish / draft / pending / future / private. On create, omitted means draft. Publish statuses need publish capability. trash is rejected. |
slug |
string | a-z 0-9 -. The value to save, and the default identity key. A collision is auto-suffixed (-2) with a warning. |
excerpt |
string | Omit for no change. "" clears it. |
content |
string (HTML) | Omit for no change. "" clears it. Put it last in the document. |
menu_order |
int | Order for types with page attributes. |
parent |
string | int | Prefer the parent slug (portable). A number is an ID. 0 means top level. Part of identity for hierarchical types. |
template |
string | Page template file. "" means default. |
featured_image |
int | Attachment ID. 0 or null removes it. |
author |
int | Author ID, applied only if the caller may edit others’ posts. |
date |
string | YYYY-MM-DD HH:MM:SS, site local time. |
seo |
object | { title, description }, mapped to Yoast or Rank Math. |
taxonomies |
object | { taxonomy: [term-slugs] }. |
fields |
object | ACF fields, mirroring the theme’s structure. |
{ "type": "term", "taxonomy": "series", "title": "Term name", "slug": "term-name", "parent": "parent-slug", "description": "Archive description.", "seo": { "title": "", "description": "" }, "fields": {}}taxonomy is required, and its presence marks the document as a term. title is required when creating. description, parent, seo and fields behave as above.
Partial-first writes
Section titled “Partial-first writes”A document only needs the keys you want to change.
- A missing key leaves that field untouched.
- An empty value (
"",null,[]) deliberately clears the field. - An empty or
nullslugis the exception. It is ignored, never applied.
This makes it safe to send a tiny document that touches only one field.
Control keys (_*)
Section titled “Control keys (_*)”Keys that start with _ are never data. They steer the write. _match sets identity, _dry_run and _strict control validation, and the read-only _meta block comes from exports. See Record identity and Dry-run, strict & warnings.
Stateless by design
Section titled “Stateless by design”Octa Editor keeps nothing of its own. Core fields go through WordPress, fields through ACF, and seo through your SEO plugin. Reading a record just re-assembles the document from those sources.