M7 Blog Service API

The M7 Blog Service manages publications, editorial content, taxonomy, media, domains, redirects, revisions, and public read models. Use the protected endpoints to operate a publication; use the public read endpoints to render published content in a website or application.

Manage publications and editorial content in the M7 Blog Service control panel.

Base URL

https://api.blog.service.m7.org/v1

Authentication and publication access

Protected endpoints require an authenticated bearer token:

Authorization: Bearer ACCESS_TOKEN
Content-Type: application/json

User and delegate principals need an active membership in the target publication. An author or moderator membership has the basic publication and post-read management capabilities; an editor can manage editorial content, taxonomy, media, redirects, and revision history; an owner or publication admin has the full publication capability set. Trusted internal principals use the service-wide boundary described in the authorization guide. Creating a publication requires the principal capability publication.create.

Most protected routes need a publication selector. Supply exactly one when the resource ID does not already determine the publication:

{ "publication_id": "PUBLICATION_UUID" }
{ "publication_slug": "engineering-notes" }

Public read routes do not require a token, but only expose active, unarchived publications and their eligible content.

Response envelope

JSON endpoints return an application envelope. HTTP status indicates request transport and authorization status; inspect status before using data.

{
  "status": 1,
  "comment": "post loaded",
  "data": {}
}

On an application error, status is 0; comment is safe to show to a user; and data.code is the HTTP status. Expect 400 for invalid input, 401 for a missing token on a protected route, 403 for insufficient publication access, 404 for an unavailable resource, and 409 for a conflicting lifecycle or uniqueness state.

/read/feed and /read/sitemap are the exceptions: they stream XML instead of this JSON envelope.

Pagination

List endpoints accept these optional fields:

Field Type Behavior
limit Integer Defaults to 50; values above 200 are capped.
cursor String Opaque cursor from a prior next_cursor; takes precedence over the other position fields.
offset Integer Zero-based offset; used when cursor is absent.
page_number Integer One-based page number; used when cursor and offset are absent.

A paginated result includes items, limit, total_count, next_offset, page_number, page_total, and next_cursor. Some routes also include a named compatibility array such as posts; use items in new integrations.

Guides