# api.developer.m7.org Endpoint Documentation

Generated on 2026-07-19 from `cli/endpoints.php --json`, `config/general.json`, and the PHP handlers under `lib/php/thisProject/api`.

## Conventions

- Base URL: `https://api.developer.m7.org`
- Response format: `json`; error format: `json`.
- Request parameters are read from the parsed request payload (`$this->r`), which may include query, form, or JSON body values depending on the router parser.
- `ANY` means the route is registered without an HTTP-method constraint. Prefer `POST` for mutations and request bodies unless the caller contract says otherwise.
- "Detected request fields" are statically extracted from handlers and delegated service methods; table-backed filters may accept additional fields.

## Authentication

- M7 token config: check `soft`, issuer `id.m7.org`; allowed algorithms `RS512`.
- Principal route protection from config:
  - `/v1/admin` -> admin, root

## Endpoint Summary

| Method | Path | Auth | Handler |
| --- | --- | --- | --- |
| `ANY` | `/admin/hello` | admin namespace; deployment/config may restrict access | `admin\hello\Controller` |
| `ANY` | `/docs` | no explicit auth gate detected in route/handler | `docs\Controller` |
| `ANY` | `/hello` | no explicit auth gate detected in route/handler | `hello\Controller` |
| `ANY` | `/members/hello` | no explicit auth gate detected in route/handler | `members\hello\Controller` |
| `ANY` | `/v1/admin/asset/delete` | principal route rule: admin, root | `admin\asset\Delete` |
| `ANY` | `/v1/admin/asset/get` | principal route rule: admin, root | `admin\asset\Get` |
| `ANY` | `/v1/admin/asset/list` | principal route rule: admin, root | `admin\asset\ListItems` |
| `ANY` | `/v1/admin/asset/save` | principal route rule: admin, root | `admin\asset\Save` |
| `ANY` | `/v1/admin/cache/delete` | principal route rule: admin, root | `admin\cache\Delete` |
| `ANY` | `/v1/admin/cache/get` | principal route rule: admin, root | `admin\cache\Get` |
| `ANY` | `/v1/admin/cache/list` | principal route rule: admin, root | `admin\cache\ListItems` |
| `ANY` | `/v1/admin/cache/save` | principal route rule: admin, root | `admin\cache\Save` |
| `ANY` | `/v1/admin/config/delete` | principal route rule: admin, root | `admin\config\Delete` |
| `ANY` | `/v1/admin/config/get` | principal route rule: admin, root | `admin\config\Get` |
| `ANY` | `/v1/admin/config/list` | principal route rule: admin, root | `admin\config\ListItems` |
| `ANY` | `/v1/admin/config/save` | principal route rule: admin, root | `admin\config\Save` |
| `ANY` | `/v1/admin/docs/page/cache/clear` | principal route rule: admin, root | `admin\docs\page\ClearCache` |
| `ANY` | `/v1/admin/docs/page/get` | principal route rule: admin, root | `admin\docs\page\Get` |
| `ANY` | `/v1/admin/docs/page/preview` | principal route rule: admin, root | `admin\docs\page\Preview` |
| `ANY` | `/v1/admin/docs/page/save` | principal route rule: admin, root | `admin\docs\page\Save` |
| `ANY` | `/v1/admin/hook/delete` | principal route rule: admin, root | `admin\hook\Delete` |
| `ANY` | `/v1/admin/hook/get` | principal route rule: admin, root | `admin\hook\Get` |
| `ANY` | `/v1/admin/hook/list` | principal route rule: admin, root | `admin\hook\ListItems` |
| `ANY` | `/v1/admin/hook/save` | principal route rule: admin, root | `admin\hook\Save` |

## Endpoints

### ANY /admin/hello

Handles hello.

- Handler: `thisProject\api\admin\hello\Controller`
- Source: `lib/php/thisProject/api/admin/hello/Controller.php`
- Auth: admin namespace; deployment/config may restrict access
- Detected request fields: none in the handler; endpoint may be informational or delegates opaque input.
- Response: success comment(s): `OK`.

### ANY /docs

Handles docs.

- Handler: `thisProject\api\docs\Controller`
- Source: `lib/php/thisProject/api/docs/Controller.php`
- Auth: no explicit auth gate detected in route/handler
- Detected request fields: none in the handler; endpoint may be informational or delegates opaque input.
- Response: success comment(s): `OK`.

### ANY /hello

Handles hello.

- Handler: `thisProject\api\hello\Controller`
- Source: `lib/php/thisProject/api/hello/Controller.php`
- Auth: no explicit auth gate detected in route/handler
- Detected request fields: none in the handler; endpoint may be informational or delegates opaque input.
- Response: success comment(s): `OK`.

### ANY /members/hello

Handles hello.

- Handler: `thisProject\api\members\hello\Controller`
- Source: `lib/php/thisProject/api/members/hello/Controller.php`
- Auth: no explicit auth gate detected in route/handler
- Detected request fields: none in the handler; endpoint may be informational or delegates opaque input.
- Response: JSON response from the handler/delegated service.

### ANY /v1/admin/asset/delete

Deletes asset.

- Handler: `thisProject\api\admin\asset\Delete`
- Source: `lib/php/thisProject/api/admin/asset/Delete.php`
- Delegates to: `lib/php/thisProject/service/DocAssetTable.php::delete`
- Auth: principal route rule: admin, root
- Detected request fields:
  - `blob` (optional/detected). Detected in handler or delegated service code.
  - `id` (optional/detected). Record identifier. Many handlers accept this as the primary lookup key. Default: `''`.
- Response: success comment(s): `OK`; data key(s): `id`, `deleted`, `item`.
- Notable errors: `Doc asset not found`; `Missing asset lookup fields`.

### ANY /v1/admin/asset/get

Gets asset.

- Handler: `thisProject\api\admin\asset\Get`
- Source: `lib/php/thisProject/api/admin/asset/Get.php`
- Delegates to: `lib/php/thisProject/service/DocAssetTable.php::get`
- Auth: principal route rule: admin, root
- Detected request fields:
  - `blob` (optional/detected). Detected in handler or delegated service code.
  - `id` (optional/detected). Record identifier. Many handlers accept this as the primary lookup key. Default: `''`.
  - `include_blob` (optional/detected). Detected in handler or delegated service code.
- Response: success comment(s): `OK`.
- Notable errors: `Doc asset not found`; `Missing asset lookup fields`.

### ANY /v1/admin/asset/list

Lists asset.

- Handler: `thisProject\api\admin\asset\ListItems`
- Source: `lib/php/thisProject/api/admin/asset/ListItems.php`
- Delegates to: `lib/php/thisProject/service/DocAssetTable.php::listItems`
- Auth: principal route rule: admin, root
- Detected request fields:
  - `blob` (optional/detected). Detected in handler or delegated service code.
  - `cursor` (optional/detected). Opaque pagination cursor.
  - `id` (optional/detected). Record identifier. Many handlers accept this as the primary lookup key. Default: `''`.
  - `include_blob` (optional/detected). Detected in handler or delegated service code.
  - `limit` (optional/detected). Page size limit. Default: `25`.
  - `offset` (optional/detected). Zero-based pagination offset.
  - `page_number` (optional/detected). One-based page number.
- Response: success comment(s): `OK`; data key(s): `items`, `limit`, `total_count`, `next_offset`, `page_number`, `page_total`, `next_cursor`.
- Notable errors: `Invalid offset`; `Invalid page_number`; `Invalid cursor`.

### ANY /v1/admin/asset/save

Creates or updates asset.

- Handler: `thisProject\api\admin\asset\Save`
- Source: `lib/php/thisProject/api/admin/asset/Save.php`
- Delegates to: `lib/php/thisProject/service/DocAssetTable.php::save`
- Auth: principal route rule: admin, root
- Detected request fields:
  - `blob` (required). Detected in handler or delegated service code.
  - `blob_base64` (required). Detected in handler or delegated service code. Default: `''`.
  - `id` (optional/detected). Record identifier. Many handlers accept this as the primary lookup key. Default: `''`.
- Response: success comment(s): `OK`.
- Notable errors: `Doc asset not found`; `Missing asset lookup fields`; `Missing blob_base64`; `Invalid blob_base64`; `Missing blob`.

### ANY /v1/admin/cache/delete

Deletes cache.

- Handler: `thisProject\api\admin\cache\Delete`
- Source: `lib/php/thisProject/api/admin/cache/Delete.php`
- Delegates to: `lib/php/thisProject/service/DocCacheTable.php::delete`
- Auth: principal route rule: admin, root
- Detected request fields:
  - `doc_path` (required). Detected in handler or delegated service code. Default: `''`.
  - `repo` (required). Detected in handler or delegated service code. Default: `''`.
  - `id` (optional/detected). Record identifier. Many handlers accept this as the primary lookup key. Default: `''`.
  - `type` (optional/detected). Type discriminator. Default: `'html'`.
  - `version` (optional/detected). Asset version. Default: `'1'`.
- Response: success comment(s): `OK`; data key(s): `id`, `deleted`, `item`.
- Notable errors: `Doc cache entry not found`; `Missing cache lookup fields`; `Missing repo`; `Missing doc_path`; `Invalid type`; `Invalid version`.

### ANY /v1/admin/cache/get

Gets cache.

- Handler: `thisProject\api\admin\cache\Get`
- Source: `lib/php/thisProject/api/admin/cache/Get.php`
- Delegates to: `lib/php/thisProject/service/DocCacheTable.php::get`
- Auth: principal route rule: admin, root
- Detected request fields:
  - `doc_path` (required). Detected in handler or delegated service code. Default: `''`.
  - `repo` (required). Detected in handler or delegated service code. Default: `''`.
  - `id` (optional/detected). Record identifier. Many handlers accept this as the primary lookup key. Default: `''`.
  - `type` (optional/detected). Type discriminator. Default: `'html'`.
  - `version` (optional/detected). Asset version. Default: `'1'`.
- Response: success comment(s): `OK`.
- Notable errors: `Doc cache entry not found`; `Missing cache lookup fields`; `Missing repo`; `Missing doc_path`; `Invalid type`; `Invalid version`.

### ANY /v1/admin/cache/list

Lists cache.

- Handler: `thisProject\api\admin\cache\ListItems`
- Source: `lib/php/thisProject/api/admin/cache/ListItems.php`
- Delegates to: `lib/php/thisProject/service/DocCacheTable.php::listItems`
- Auth: principal route rule: admin, root
- Detected request fields:
  - `doc_path` (required). Detected in handler or delegated service code. Default: `''`.
  - `repo` (required). Detected in handler or delegated service code. Default: `''`.
  - `type` (required). Type discriminator. Default: `''`.
  - `version` (required). Asset version. Default: `''`.
  - `asset` (optional/detected). Asset id. Default: `''`.
  - `cursor` (optional/detected). Opaque pagination cursor.
  - `doc_path_hash` (optional/detected). Detected in handler or delegated service code. Default: `''`.
  - `id` (optional/detected). Record identifier. Many handlers accept this as the primary lookup key. Default: `''`.
  - `limit` (optional/detected). Page size limit. Default: `25`.
  - `offset` (optional/detected). Zero-based pagination offset.
  - `page_number` (optional/detected). One-based page number.
  - `source_hash` (optional/detected). Detected in handler or delegated service code. Default: `''`.
  - `status` (optional/detected). Status filter or value. Default: `true`.
- Response: success comment(s): `OK`; data key(s): `items`, `limit`, `total_count`, `next_offset`, `page_number`, `page_total`, `next_cursor`.
- Notable errors: `Invalid offset`; `Invalid page_number`; `Missing repo`; `Missing doc_path`; `Missing type`; `Missing version`; `Invalid cursor`.

### ANY /v1/admin/cache/save

Creates or updates cache.

- Handler: `thisProject\api\admin\cache\Save`
- Source: `lib/php/thisProject/api/admin/cache/Save.php`
- Delegates to: `lib/php/thisProject/service/DocCacheTable.php::save`
- Auth: principal route rule: admin, root
- Detected request fields:
  - `doc_path` (required). Detected in handler or delegated service code. Default: `''`.
  - `repo` (required). Detected in handler or delegated service code. Default: `''`.
  - `source_hash` (required). Detected in handler or delegated service code. Default: `''`.
  - `type` (required). Type discriminator. Default: `'html'`.
  - `version` (required). Asset version. Default: `'1'`.
  - `accessed` (optional/detected). Detected in handler or delegated service code. Default: `null`.
  - `asset` (optional/detected). Asset id. Default: `null`.
  - `data` (optional/detected). Payload/data value.
  - `error` (optional/detected). Detected in handler or delegated service code. Default: `null`.
  - `id` (optional/detected). Record identifier. Many handlers accept this as the primary lookup key. Default: `''`.
  - `source_bytes` (optional/detected). Detected in handler or delegated service code. Default: `null`.
  - `source_modified` (optional/detected). Detected in handler or delegated service code. Default: `null`.
  - `status` (optional/detected). Status filter or value.
- Response: success comment(s): `OK`.
- Notable errors: `Doc cache entry not found`; `Missing cache lookup fields`; `Missing repo`; `Missing doc_path`; `Invalid type`; `Invalid version`; `Missing type`; `Missing version`.

### ANY /v1/admin/config/delete

Deletes config.

- Handler: `thisProject\api\admin\config\Delete`
- Source: `lib/php/thisProject/api/admin/config/Delete.php`
- Delegates to: `lib/php/thisProject/service/ConfigTable.php::delete`
- Auth: principal route rule: admin, root
- Detected request fields:
  - `key` (required). Key id/name or drop encryption key depending on the endpoint. Default: `''`.
  - `id` (optional/detected). Record identifier. Many handlers accept this as the primary lookup key. Default: `''`.
  - `scope` (optional/detected). Requested OAuth scope string. Default: `null`.
  - `type` (optional/detected). Type discriminator. Default: `'scalar'`.
  - `value` (optional/detected). Detected in handler or delegated service code.
- Response: success comment(s): `OK`; data key(s): `id`, `deleted`, `item`, `cols`, `allow_null`, `key`, `es2null`, `type`, `scope`, `wrap`.
- Notable errors: `Config entry not found`; `Missing config lookup fields`; `Invalid id`; `Missing key`; `Config service is disabled`.

### ANY /v1/admin/config/get

Gets config.

- Handler: `thisProject\api\admin\config\Get`
- Source: `lib/php/thisProject/api/admin/config/Get.php`
- Delegates to: `lib/php/thisProject/service/ConfigTable.php::get`
- Auth: principal route rule: admin, root
- Detected request fields:
  - `key` (required). Key id/name or drop encryption key depending on the endpoint. Default: `''`.
  - `id` (optional/detected). Record identifier. Many handlers accept this as the primary lookup key. Default: `''`.
  - `scope` (optional/detected). Requested OAuth scope string. Default: `null`.
  - `type` (optional/detected). Type discriminator. Default: `'scalar'`.
  - `value` (optional/detected). Detected in handler or delegated service code.
- Response: success comment(s): `OK`; data key(s): `cols`, `id`, `allow_null`, `key`, `es2null`, `type`, `scope`, `wrap`.
- Notable errors: `Config entry not found`; `Missing config lookup fields`; `Invalid id`; `Missing key`; `Config service is disabled`.

### ANY /v1/admin/config/list

Lists config.

- Handler: `thisProject\api\admin\config\ListItems`
- Source: `lib/php/thisProject/api/admin/config/ListItems.php`
- Delegates to: `lib/php/thisProject/service/ConfigTable.php::listItems`
- Auth: principal route rule: admin, root
- Detected request fields:
  - `key` (required). Key id/name or drop encryption key depending on the endpoint. Default: `''`.
  - `count` (optional/detected). Detected in handler or delegated service code. Default: `0`.
  - `cursor` (optional/detected). Opaque pagination cursor.
  - `id` (optional/detected). Record identifier. Many handlers accept this as the primary lookup key. Default: `''`.
  - `limit` (optional/detected). Page size limit. Default: `25`.
  - `offset` (optional/detected). Zero-based pagination offset.
  - `page_number` (optional/detected). One-based page number.
  - `scope` (optional/detected). Requested OAuth scope string. Default: `null`.
  - `type` (optional/detected). Type discriminator. Default: `''`.
  - `value` (optional/detected). Detected in handler or delegated service code.
- Response: success comment(s): `OK`; data key(s): `items`, `limit`, `total_count`, `next_offset`, `page_number`, `page_total`, `next_cursor`, `cols`, `id`, `allow_null`, `key`, `es2null`, `type`, `scope`, `wrap`.
- Notable errors: `Invalid offset`; `Invalid page_number`; `Invalid id`; `Missing key`; `Invalid cursor`.

### ANY /v1/admin/config/save

Creates or updates config.

- Handler: `thisProject\api\admin\config\Save`
- Source: `lib/php/thisProject/api/admin/config/Save.php`
- Delegates to: `lib/php/thisProject/service/ConfigTable.php::save`
- Auth: principal route rule: admin, root
- Detected request fields:
  - `key` (required). Key id/name or drop encryption key depending on the endpoint. Default: `''`.
  - `value` (required). Detected in handler or delegated service code.
  - `id` (optional/detected). Record identifier. Many handlers accept this as the primary lookup key.
  - `scope` (optional/detected). Requested OAuth scope string. Default: `null`.
  - `type` (optional/detected). Type discriminator. Default: `''`.
- Response: success comment(s): `OK`.
- Notable errors: `Missing value`; `Config service is disabled`; `Missing key`.

### ANY /v1/admin/docs/page/cache/clear

Handles docs page cache.

- Handler: `thisProject\api\admin\docs\page\ClearCache`
- Source: `lib/php/thisProject/api/admin/docs/page/ClearCache.php`
- Delegates to: `lib/php/thisProject/service/DocsPage.php::clearCache`
- Auth: principal route rule: admin, root
- Detected request fields: none in the handler; endpoint may be informational or delegates opaque input.
- Response: success comment(s): `OK`; data key(s): `scope`, `key`, `config`, `source`, `cache`, `name`, `label`, `visible`, `reachable`, `data`, `data_type`, `cache_data`, `cache_data_type`, `cache_on_update`, `comment`, `asset`.

### ANY /v1/admin/docs/page/get

Gets docs page.

- Handler: `thisProject\api\admin\docs\page\Get`
- Source: `lib/php/thisProject/api/admin/docs/page/Get.php`
- Delegates to: `lib/php/thisProject/service/DocsPage.php::get`
- Auth: principal route rule: admin, root
- Detected request fields: none in the handler; endpoint may be informational or delegates opaque input.
- Response: success comment(s): `OK`; data key(s): `scope`, `key`, `config`, `source`, `cache`, `name`, `label`, `visible`, `reachable`, `data`, `data_type`, `cache_data`, `cache_data_type`, `cache_on_update`, `comment`, `asset`.

### ANY /v1/admin/docs/page/preview

Builds preview for docs page.

- Handler: `thisProject\api\admin\docs\page\Preview`
- Source: `lib/php/thisProject/api/admin/docs/page/Preview.php`
- Delegates to: `lib/php/thisProject/service/DocsPage.php::preview`
- Auth: principal route rule: admin, root
- Detected request fields:
  - `data_type` (optional/detected). Detected in handler or delegated service code.
  - `source` (optional/detected). Source document/content payload.
- Response: success comment(s): `OK`; data key(s): `rendered`, `data_type`, `source`, `html`, `comment`, `scope`, `key`, `config`, `cache`, `name`, `label`, `visible`, `reachable`, `data`, `cache_data`, `cache_data_type`.

### ANY /v1/admin/docs/page/save

Creates or updates docs page.

- Handler: `thisProject\api\admin\docs\page\Save`
- Source: `lib/php/thisProject/api/admin/docs/page/Save.php`
- Delegates to: `lib/php/thisProject/service/DocsPage.php::save`
- Auth: principal route rule: admin, root
- Detected request fields:
  - `cache` (optional/detected). Detected in handler or delegated service code.
  - `source` (optional/detected). Source document/content payload.
- Response: success comment(s): `OK`; data key(s): `name`, `label`, `visible`, `reachable`, `data`, `data_type`, `cache_data`, `cache_data_type`, `cache_on_update`, `comment`, `scope`, `key`, `config`, `source`, `cache`, `asset`.

### ANY /v1/admin/hook/delete

Deletes hook.

- Handler: `thisProject\api\admin\hook\Delete`
- Source: `lib/php/thisProject/api/admin/hook/Delete.php`
- Delegates to: `lib/php/thisProject/service/DocHook.php::delete`
- Auth: principal route rule: admin, root
- Detected request fields:
  - `hook` (required). Detected in handler or delegated service code. Default: `''`.
  - `id` (optional/detected). Record identifier. Many handlers accept this as the primary lookup key. Default: `''`.
- Response: success comment(s): `OK`; data key(s): `id`, `deleted`, `item`.
- Notable errors: `Doc hook not found`; `Missing hook lookup fields`.

### ANY /v1/admin/hook/get

Gets hook.

- Handler: `thisProject\api\admin\hook\Get`
- Source: `lib/php/thisProject/api/admin/hook/Get.php`
- Delegates to: `lib/php/thisProject/service/DocHook.php::get`
- Auth: principal route rule: admin, root
- Detected request fields:
  - `hook` (required). Detected in handler or delegated service code. Default: `''`.
  - `id` (optional/detected). Record identifier. Many handlers accept this as the primary lookup key. Default: `''`.
- Response: success comment(s): `OK`.
- Notable errors: `Doc hook not found`; `Missing hook lookup fields`.

### ANY /v1/admin/hook/list

Lists hook.

- Handler: `thisProject\api\admin\hook\ListItems`
- Source: `lib/php/thisProject/api/admin/hook/ListItems.php`
- Delegates to: `lib/php/thisProject/service/DocHook.php::listItems`
- Auth: principal route rule: admin, root
- Detected request fields:
  - `hook` (required). Detected in handler or delegated service code. Default: `''`.
  - `cursor` (optional/detected). Opaque pagination cursor.
  - `id` (optional/detected). Record identifier. Many handlers accept this as the primary lookup key. Default: `''`.
  - `limit` (optional/detected). Page size limit. Default: `25`.
  - `offset` (optional/detected). Zero-based pagination offset.
  - `page_number` (optional/detected). One-based page number.
  - `root_path` (optional/detected). Detected in handler or delegated service code. Default: `null`.
  - `status` (optional/detected). Status filter or value. Default: `true`.
  - `type` (optional/detected). Type discriminator. Default: `''`.
- Response: success comment(s): `OK`; data key(s): `items`, `limit`, `total_count`, `next_offset`, `page_number`, `page_total`, `next_cursor`.
- Notable errors: `Invalid offset`; `Invalid page_number`; `Missing hook`; `Invalid root_path`; `Invalid cursor`.

### ANY /v1/admin/hook/save

Creates or updates hook.

- Handler: `thisProject\api\admin\hook\Save`
- Source: `lib/php/thisProject/api/admin/hook/Save.php`
- Delegates to: `lib/php/thisProject/service/DocHook.php::save`
- Auth: principal route rule: admin, root
- Detected request fields:
  - `hook` (required). Detected in handler or delegated service code. Default: `''`.
  - `type` (required). Type discriminator.
  - `accessed` (optional/detected). Detected in handler or delegated service code. Default: `null`.
  - `comment` (optional/detected). Detected in handler or delegated service code. Default: `null`.
  - `id` (optional/detected). Record identifier. Many handlers accept this as the primary lookup key. Default: `''`.
  - `opts` (optional/detected). Detected in handler or delegated service code.
  - `root_path` (optional/detected). Detected in handler or delegated service code. Default: `null`.
  - `status` (optional/detected). Status filter or value.
- Response: success comment(s): `OK`.
- Notable errors: `Doc hook not found`; `Missing hook lookup fields`; `Missing hook`; `Missing type`; `Invalid root_path`.
