Skip to content
mxHeadless
REST API gateway для headless-фронтендов на MODX 3. Ресурсы, объекты, OpenAPI, API keys и OAuth
  1. Компоненты
  2. mxHeadless
  3. API

Обзор API

Базовый URL: {prefix}/v1, по умолчанию /api/v1.

Живой каталог на установленном сайте: GET /meta/endpoints и Swagger UI /docs. Ниже маршруты core из RoutesRegistrar и CoreEndpointBootstrap (версия пакета 1.0.42). Extras могут добавить свои через registerEndpoint.

Envelope успеха

json
{
  "data": {},
  "meta": {
    "total": 100,
    "count": 20,
    "limit": 20,
    "offset": 0,
    "has_more": true
  },
  "links": {
    "self": "/api/v1/resources?limit=20&offset=0",
    "next": "/api/v1/resources?limit=20&offset=20"
  }
}

При ошибке ответ в формате RFC 9457, без обёртки data/meta.

Meta и auth

MethodPathPublicScopeНазначение
GET/да-Discovery: версия, capabilities
GET/healthда-Health (БД). Доступен при kill switch
GET/schemaда-Схема зарегистрированных объектов
GET/docsда-Swagger UI (mxheadless_swagger_enabled)
GET/meta/endpointsда-Живой каталог эндпоинтов
GET/meta/openapiда-OpenAPI в envelope
GET/meta/openapi.jsonда-Raw OpenAPI 3.0 JSON
POST/auth/tokenда*-OAuth token. Работает только при mxheadless_oauth_enabled

*Маршрут публичный, но endpoint отключён настройкой, пока OAuth выключен.

Resources и pages

MethodPathPublicScope
GET/resourcesдаresources.read
GET/resources/{id}даresources.read
POST/resourcesнетresources.create
PUT, PATCH/resources/{id}нетresources.update
DELETE/resources/{id}нетresources.delete
GET/pages/{uri}даresources.read

Публичный GET для anonymous. API key / OAuth на публичном GET всё равно должны иметь указанный scope.

Contexts

MethodPathPublicScope
GET/contextsнетcontexts.read
GET/contexts/{key}нетcontexts.read
GET/contexts/{key}/settingsнетcontexts.read

{key}: ключ контекста (web, mgr, …). Settings по allowlist.

Elements (read-only)

MethodPathPublicScope
GET/chunksнетchunks.read
GET/chunks/{id}нетchunks.read
GET/templatesнетtemplates.read
GET/templates/{id}нетtemplates.read
GET/snippetsнетsnippets.read
GET/snippets/{id}нетsnippets.read
GET/tvsнетtvs.read
GET/tvs/{id}нетtvs.read
GET/categoriesнетcategories.read
GET/categories/{id}нетcategories.read
GET/content_typesнетcontent_types.read
GET/content_types/{id}нетcontent_types.read

Generic objects

Только для имён из ObjectRegistry (core + extras). Незарегистрированное {name}404.

MethodPathPublicScope
GET/objects/{name}нет{name}.read
GET/objects/{name}/{id}нет{name}.read
POST/objects/{name}нет{name}.create
PUT, PATCH/objects/{name}/{id}нет{name}.update
DELETE/objects/{name}/{id}нет{name}.delete

Пример: object products → scopes products.read, products.create, …

Полный список scopes: Авторизация.

Kill switch

При mxheadless_enabled=false работают только GET / и GET /health. Остальное → 503 service_disabled.

Заголовки

ЗаголовокРоль
Authorization / X-API-KeyCredentials
X-ContextКонтекст MODX
X-CSRF-TokenМутации по сессии
Idempotency-KeyИдемпотентный POST
X-Request-IDКорреляция (если клиент задаёт)

Ответы rate limit: X-RateLimit-Limit, Remaining, Reset.

Дальше по группам