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.