HTTP /api/v2
REST-эндпоинты DLE API: Bearer, /table, фильтры, xfields, upload.
Базовый путь: /api/v2. Persistence — Cycle ORM из DevCraft (dle_api_db()). Админка модуля только настраивает ключи, OAuth и уровни доступа — сами HTTP-запросы идут на /api/v2.
На ресурсах нужен заголовок Authorization: Bearer <access_token> (сырой API-ключ не принимается). Как получить токен: Авторизация и OAuth-сервер.
Исключения без AuthToken: GET /health, GET /.well-known/oauth-authorization-server. Для проверки сырого API-ключа — GET /key/check с Authorization: Bearer <apiKey> (не access_token).
Trailing slash опционален: /me и /me/ одинаковы.
Свой домен
В OpenAPI server variable apiBase подставьте URL сайта до /api/v2.
Эндпоинты (обзор)
| Метод | Путь | Описание |
|---|---|---|
| GET | /table/{name}/ | Список + фильтры |
| GET | /table/{name}/{id}/ | Одна запись |
| POST | /table/{name}/ | Create |
| PUT | /table/{name}/{id}/ | Update |
| DELETE | /table/{name}/{id}/ | Delete |
| GET/POST | /post/ … | Новости (sugar + BC-фильтры) |
| POST | /user/, /usergroup/, /plugin/ | Sugar create |
| POST | /upload/ | multipart-загрузка |
| GET | /conversations/ | Переписки |
| GET | /health/ | Healthcheck |
| GET | /key/check/ | Проверка сырого API-ключа (Bearer <apiKey>, не AuthToken) |
| GET | /me/, /oauth/userinfo/ | Субъект токена |
| POST | /oauth/token/, /oauth/revoke/ | Токен / revoke |
| GET/POST | /oauth/authorize/ | Authorization Code |
| GET/POST/PUT/PATCH/DELETE | /xfields/{scope}/… | Каталог доп. полей |
Полная схема: OpenAPI.
GET /table/{name}/ — список и фильтры
- Таблица из SchemaRegistry или через интроспекцию
SHOW COLUMNS(если нет*Schema.php). - Deny-list:
api_keys,api_scope,oauth_*/api_oauth_*,devcraft_*. - Права — scopes ключа (
read/write/delete;is_adminбез ограничений). - Фильтры — query-параметры имён колонок.
- Virtual FK (RelationMap, без MySQL FK):
csv/csv_or_all→FIND_IN_SET,one→=. - Операторы в значении:
!— negate,%— LIKE. - Доп. поля поста:
xf[name]=value(pad-LIKE поxfields).
GET /api/v2/table/banners/?category=1&approve=1&limit=20
GET /api/v2/table/banners/?grouplevel=2
GET /api/v2/table/post/?category=1&xf[linked_data]=сдасдлGET /post/ — sugar над TableQuery('post') плюс часть legacy header-фильтров (BC). Для post.category дополнительно OR EXISTS post_extras_cats.
Доп. поля (/xfields)
Каталог: GET/POST/PUT/PATCH/DELETE /xfields/{scope}/… (scope = post | user) с typed validation (details.fields при 422).
Сериализация значений в строку post.xfields:
POST /api/v2/xfields/post/encode
Content-Type: application/json
{ "fields": { "linked_data": "…", "note": "a|b" } }Ответ: { "raw": "…", "parsed": {…} }.
Upload
POST /upload/ — multipart через штатный пайплайн DLE. Нужен Bearer с правом записи.
Ошибки (ApiError)
Большинство 4xx/5xx отдают JSON схемы ApiError:
| Поле | Тип | Описание |
|---|---|---|
error | string | Код (unauthorized, validation, …) |
message | string | Человекочитаемое сообщение |
details | object|null | Доп. данные (например fields при 422) |
Пример:
{
"error": "unauthorized",
"message": "Требуется Authorization: Bearer <AuthToken>"
}Схема в OpenAPI → components.schemas.ApiError.
См. также
- SDK (
DcApi) — in-process PHP, не HTTP-клиент - Миграция v1 → v2
- OAuth-клиенты
- Безопасность