Skip to content

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.

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.

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 null slug is the exception. It is ignored, never applied.

This makes it safe to send a tiny document that touches only one field.

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.

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.