Files
crank/docs/admin-api.md
github-ops 9331ee1d89
Deploy / deploy (push) Successful in 37s
CI / Rust Checks (push) Successful in 27m22s
CI / UI Checks (push) Successful in 6s
CI / Deployment Manifests (push) Successful in 3s
CI / Frontend E2E (push) Successful in 20m44s
Complete markdown documentation
2026-06-21 12:49:56 +00:00

272 lines
8.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Admin API
Admin API используется веб-интерфейсом Crank. Его можно использовать и напрямую для автоматизации настройки.
Base path:
```text
/api/admin
```
Auth path:
```text
/api/auth
```
## Авторизация
Администратор входит по email и паролю. После входа сервер устанавливает HttpOnly session cookie.
```bash
curl -i https://crank.example.com/api/auth/login \
-H 'Content-Type: application/json' \
--data '{
"email": "owner@example.com",
"password": "change-me"
}'
```
Дальше используйте cookie из ответа:
```bash
curl https://crank.example.com/api/auth/session \
-b 'crank_session=<cookie_value>'
```
Endpoints:
- `POST /api/auth/login`
- `POST /api/auth/logout`
- `GET /api/auth/session`
- `GET /api/auth/profile`
- `PATCH /api/auth/profile`
- `POST /api/auth/password`
## Capabilities
```bash
curl https://crank.example.com/api/admin/capabilities \
-b 'crank_session=<cookie_value>'
```
Community capabilities:
- protocol: `rest`;
- operation security level: `standard`;
- machine access: static agent API keys.
## Workspaces
Community работает с одним workspace.
- `GET /api/admin/workspaces`
- `GET /api/admin/workspaces/{workspace_id}`
- `PATCH /api/admin/workspaces/{workspace_id}`
Пример:
```bash
curl https://crank.example.com/api/admin/workspaces \
-b 'crank_session=<cookie_value>'
```
## Upstreams
Upstream хранит базовый URL внешнего REST API и необязательные статические заголовки.
- `GET /api/admin/workspaces/{workspace_id}/upstreams`
- `POST /api/admin/workspaces/{workspace_id}/upstreams`
- `PATCH /api/admin/workspaces/{workspace_id}/upstreams/{upstream_id}`
Пример создания:
```bash
curl https://crank.example.com/api/admin/workspaces/ws_default/upstreams \
-b 'crank_session=<cookie_value>' \
-H 'Content-Type: application/json' \
--data '{
"name": "Frankfurter",
"base_url": "https://api.frankfurter.dev",
"static_headers": {},
"auth_profile_id": null
}'
```
## Operations
Операция описывает один REST endpoint как MCP-инструмент.
- `GET /api/admin/workspaces/{workspace_id}/operations`
- `POST /api/admin/workspaces/{workspace_id}/operations`
- `POST /api/admin/workspaces/{workspace_id}/operations/analyze-quality`
- `GET /api/admin/workspaces/{workspace_id}/operations/{operation_id}`
- `PATCH /api/admin/workspaces/{workspace_id}/operations/{operation_id}`
- `DELETE /api/admin/workspaces/{workspace_id}/operations/{operation_id}`
- `POST /api/admin/workspaces/{workspace_id}/operations/{operation_id}/versions`
- `GET /api/admin/workspaces/{workspace_id}/operations/{operation_id}/versions/{version}`
- `POST /api/admin/workspaces/{workspace_id}/operations/{operation_id}/publish`
- `POST /api/admin/workspaces/{workspace_id}/operations/{operation_id}/archive`
- `POST /api/admin/workspaces/{workspace_id}/operations/{operation_id}/test-runs`
- `GET /api/admin/workspaces/{workspace_id}/operations/{operation_id}/export`
- `POST /api/admin/workspaces/{workspace_id}/operations/import`
Пример тестового запуска:
```bash
curl https://crank.example.com/api/admin/workspaces/ws_default/operations/<operation_id>/test-runs \
-b 'crank_session=<cookie_value>' \
-H 'Content-Type: application/json' \
--data '{
"version": 1,
"input": {
"base": "USD",
"quote": "EUR"
}
}'
```
Пример публикации:
```bash
curl https://crank.example.com/api/admin/workspaces/ws_default/operations/<operation_id>/publish \
-b 'crank_session=<cookie_value>' \
-H 'Content-Type: application/json' \
--data '{ "version": 1 }'
```
`analyze-quality` принимает payload операции и возвращает рекомендации:
```json
{
"blocking": false,
"findings": [
{
"severity": "warning",
"code": "tool_description_too_short",
"message": "Описание инструмента слишком короткое.",
"suggested_action": "Добавьте назначение, условия применения и ожидаемый успешный результат.",
"field_path": "tool_description.description"
}
]
}
```
## Samples
- `POST /api/admin/workspaces/{workspace_id}/operations/{operation_id}/samples/input-json`
- `POST /api/admin/workspaces/{workspace_id}/operations/{operation_id}/samples/output-json`
- `POST /api/admin/workspaces/{workspace_id}/operations/{operation_id}/drafts/generate`
Samples используются для генерации схемы, стартового маппинга и сохранения тестовых примеров wizard-а.
## Secrets
- `GET /api/admin/workspaces/{workspace_id}/secrets`
- `POST /api/admin/workspaces/{workspace_id}/secrets`
- `GET /api/admin/workspaces/{workspace_id}/secrets/{secret_id}`
- `POST /api/admin/workspaces/{workspace_id}/secrets/{secret_id}/rotate`
- `DELETE /api/admin/workspaces/{workspace_id}/secrets/{secret_id}`
Пример создания token secret:
```bash
curl https://crank.example.com/api/admin/workspaces/ws_default/secrets \
-b 'crank_session=<cookie_value>' \
-H 'Content-Type: application/json' \
--data '{
"name": "production-api-token",
"kind": "token",
"value": "secret-token-value"
}'
```
После создания или ротации API возвращает только metadata. Значение секрета нельзя прочитать повторно.
## Auth profiles
- `GET /api/admin/workspaces/{workspace_id}/auth-profiles`
- `POST /api/admin/workspaces/{workspace_id}/auth-profiles`
- `GET /api/admin/workspaces/{workspace_id}/auth-profiles/{auth_profile_id}`
- `PATCH /api/admin/workspaces/{workspace_id}/auth-profiles/{auth_profile_id}`
- `DELETE /api/admin/workspaces/{workspace_id}/auth-profiles/{auth_profile_id}`
Auth profile хранит ссылки на secrets и способ применения секрета к REST-запросу.
## Agents
- `GET /api/admin/workspaces/{workspace_id}/agents`
- `POST /api/admin/workspaces/{workspace_id}/agents`
- `GET /api/admin/workspaces/{workspace_id}/agents/{agent_id}`
- `PATCH /api/admin/workspaces/{workspace_id}/agents/{agent_id}`
- `DELETE /api/admin/workspaces/{workspace_id}/agents/{agent_id}`
- `POST /api/admin/workspaces/{workspace_id}/agents/{agent_id}/versions`
- `GET /api/admin/workspaces/{workspace_id}/agents/{agent_id}/versions/{version}`
- `POST /api/admin/workspaces/{workspace_id}/agents/{agent_id}/publish`
- `POST /api/admin/workspaces/{workspace_id}/agents/{agent_id}/unpublish`
- `POST /api/admin/workspaces/{workspace_id}/agents/{agent_id}/archive`
- `POST /api/admin/workspaces/{workspace_id}/agents/{agent_id}/bindings`
- `DELETE /api/admin/workspaces/{workspace_id}/agents/{agent_id}/bindings/{operation_id}`
Пример создания агента:
```bash
curl https://crank.example.com/api/admin/workspaces/ws_default/agents \
-b 'crank_session=<cookie_value>' \
-H 'Content-Type: application/json' \
--data '{
"slug": "currency-rates",
"display_name": "Курсы валют",
"description": "Агент с инструментами для получения курсов валют.",
"instructions": {},
"tool_selection_policy": {}
}'
```
## Agent API keys
- `GET /api/admin/workspaces/{workspace_id}/agents/{agent_id}/platform-api-keys`
- `POST /api/admin/workspaces/{workspace_id}/agents/{agent_id}/platform-api-keys`
- `POST /api/admin/workspaces/{workspace_id}/agents/{agent_id}/platform-api-keys/{key_id}/revoke`
- `DELETE /api/admin/workspaces/{workspace_id}/agents/{agent_id}/platform-api-keys/{key_id}`
Пример создания ключа:
```bash
curl https://crank.example.com/api/admin/workspaces/ws_default/agents/<agent_id>/platform-api-keys \
-b 'crank_session=<cookie_value>' \
-H 'Content-Type: application/json' \
--data '{
"name": "Demo MCP client",
"scopes": ["read", "write"]
}'
```
Полное значение ключа доступно только в create response.
## Logs и usage
- `GET /api/admin/workspaces/{workspace_id}/logs`
- `GET /api/admin/workspaces/{workspace_id}/usage`
Пример:
```bash
curl 'https://crank.example.com/api/admin/workspaces/ws_default/logs?limit=20' \
-b 'crank_session=<cookie_value>'
```
## Ошибки
Admin API возвращает JSON-ошибки с человекочитаемым сообщением и контекстом, если он доступен.
Частые HTTP-коды:
- `400` - неверный payload;
- `401` - нет сессии;
- `403` - действие запрещено;
- `404` - сущность не найдена;
- `409` - конфликт состояния;
- `429` - rate limit;
- `500` - внутренняя ошибка.