HTTP API
Всё, что делает кабинет, можно сделать запросом: интерфейс — это клиент того же API. Ответы всегда
в одном конверте: data и meta, а ошибки — {"error": {"code", "message"}} с подходящим кодом.
Адреса
| Метод | Путь | Что делает |
|---|---|---|
GET |
/api/me |
кто я и в каких workspace состою |
GET |
/api/workspaces |
список workspace |
GET |
/api/plans |
тарифы: хостинг и свой сервер |
POST |
/api/runs |
запустить прогон: {workspace, kind, input} |
GET |
/api/runs/{id} |
состояние прогона |
POST |
/api/runs/{id}/review |
решение по спорным строкам |
GET |
/api/mcp-config?workspace= |
готовая конфигурация MCP |
POST |
/api/license |
поставить лицензию |
GET |
/api/license |
какая лицензия стоит и до какого числа |
GET |
/api/analytics |
счётчики отправки событий: отправлено, отброшено, неудачно |
GET |
/api/usage?workspace= |
расход моделей и счёт |
POST |
/mcp |
MCP-сервер (нужен токен workspace) |
GET |
/docs, /docs.pdf |
документация страницами и одним файлом |
GET |
/logo.svg, /favicon.svg |
знак продукта |
Пример: запустить сопоставление
curl -X POST https://predicteka.example/api/runs \
-H "Cookie: pk_session=…" -H "Content-Type: application/json" \
-d '{"workspace":"acme","kind":"import",
"input":{"source":"inbox/contractors.csv","classifier":"okved2"}}'
Ответ 202 Accepted содержит id прогона. Дальше GET /api/runs/{id} показывает статус, а
POST /api/runs/{id}/review принимает решение по строкам, где система не уверена.
Идемпотентность
Идентификатор прогона — производная от работы: workspace, вид, файл и то, что меняет результат (классификатор для сопоставления, шаблон для пакета). Повторный запрос с теми же параметрами не создаёт второй прогон, а возвращает существующий — это спасает от двойной отправки, когда интеграция повторяет запрос после таймаута. Тот же файл с другим шаблоном — другая работа, и это другой прогон.
Ограничения
Файл — до 32 МБ. Пакет документов — до 200 строк за прогон (печатайте частями). Тяжёлые операции (печать, сшивка, модели) идут через очередь, поэтому ответ приходит сразу, а работа продолжается.