API Документация
Полная документация по API Document Processor
Base URL
http://localhost:8080/api
Аутентификация
API Keys (dp_live_...)
Долгоживущие ключи для серверных интеграций. Генерируются через админ-панель. Не имеют срока действия, пока не будут отозваны.
JWT Tokens
Короткоживущие токены (24 часа). Получаются обменом API-ключа через POST /auth/token.
Используются для сессий и фронтенд-клиентов.
Передавайте токен в заголовке:
Authorization: Bearer <token>
Обработка документов
Загружает файл и запускает обработку. В синхронном режиме возвращает результат напрямую (200), в асинхронном — task_id (202).
Content-Type: multipart/form-data file: (binary) # Required. The document file hint: "price list" # Optional. Processing hint
// 200 OK (synchronous)
{
"type": "PDF",
"text": ["paragraph 1", "paragraph 2"],
"tables": [
{
"source": "Sheet1",
"columns": ["Name", "Value"],
"data": [{"Name": "A", "Value": "1"}],
"column_descriptions": {}
}
],
"metadata": {"page_count": 3, "author": "..."},
"hash": "sha256:abc123...",
"s3_key": "documents/abc123.pdf",
"from_cache": false
}
// 202 Accepted (async)
{
"task_id": "abc-123-def",
"status": "queued",
"queue_info": {
"queue_position": 3,
"estimated_wait_seconds": 12.5
}
}
Обрабатывает документ по пути на сервере. Полезно для интеграций, когда файл уже доступен на диске или в S3.
{
"file_path": "/data/documents/invoice.pdf",
"hint": "invoice"
}
{
"type": "PDF",
"text": ["..."],
"tables": [],
"metadata": {},
"hash": "sha256:...",
"from_cache": false
}
Пакетная загрузка нескольких файлов за один запрос. Лимит зависит от плана (Free: 5, Enterprise: 10).
Content-Type: multipart/form-data files[]: (binary) # Required. Multiple files hint: "invoices" # Optional. Hint for all files
{
"total_files": 3,
"results": [
{
"file_name": "doc1.pdf",
"status": "completed",
"result": { "type": "PDF", "text": [...], ... }
},
{
"file_name": "doc2.xlsx",
"status": "accepted",
"task_id": "abc-123"
},
{
"file_name": "bad.txt",
"status": "error",
"error": "Unsupported file type"
}
]
}
Проверяет статус асинхронной задачи. Используйте для polling при получении 202 ответа.
// PENDING
{
"status": "PENDING",
"queue_info": {
"queue_position": 2,
"estimated_wait_seconds": 8.0
}
}
// SUCCESS
{
"status": "SUCCESS",
"result": { "type": "PDF", "text": [...], ... }
}
// FAILURE
{
"status": "FAILURE",
"error": "Processing failed: corrupt file"
}
Возвращает текущую статистику очереди задач.
{
"total_in_queue": 5,
"estimated_wait_seconds": 20.0,
"sync_mode": false
}
WebSocket-соединение для получения обновлений статуса задачи в реальном времени. Альтернатива polling.
const ws = new WebSocket('ws://localhost:8080/api/ws/task/abc-123');
ws.onmessage = (event) => {
const data = JSON.parse(event.data);
console.log(data.status); // PENDING | STARTED | SUCCESS | FAILURE
if (data.status === 'SUCCESS') {
console.log(data.result);
ws.close();
}
};
// Progress update
{
"status": "STARTED",
"queue_info": { "queue_position": 0 }
}
// Completion
{
"status": "SUCCESS",
"result": { "type": "PDF", "text": [...], ... }
}
// Error
{
"status": "FAILURE",
"error": "Out of memory"
}
Аутентификация
Обменивает API-ключ на короткоживущий JWT-токен (24 часа).
{
"api_key": "dp_live_abc123def456..."
}
{
"access_token": "eyJhbGciOiJIUzI1NiIs...",
"token_type": "bearer",
"expires_in": 86400
}
Биллинг
Возвращает текущую статистику использования, лимиты плана и историю за прошлые месяцы.
{
"plan": "starter",
"current_month": {
"year_month": "2025-02",
"used": 142,
"limit": 5000,
"remaining": 4858
},
"plan_limits": {
"requests_per_month": 5000,
"requests_per_minute": 30,
"max_file_size_mb": 25,
"batch_size": 5
},
"history": [
{
"year_month": "2025-01",
"request_count": 312,
"bytes_processed": 52428800
}
]
}
Возвращает список доступных тарифных планов с лимитами и ценами.
{
"plans": {
"free": {
"label": "Free",
"requests_per_month": 100,
"requests_per_minute": 5,
"max_file_size_mb": 10,
"batch_size": 2,
"price_monthly_usd": 0
},
"starter": { ... },
"pro": { ... },
"enterprise": { ... }
}
}
Администрирование Admin Token Required
Создает новый API-ключ с указанным планом и владельцем.
{
"owner": "acme-corp",
"plan": "pro",
"expires_days": 365
}
{
"api_key": "dp_live_abc123def456ghi789...",
"owner": "acme-corp",
"plan": "pro",
"created_at": "2025-02-18T10:30:00Z",
"expires_at": "2026-02-18T10:30:00Z"
}
Отзывает (деактивирует) указанный API-ключ. Немедленно прекращает доступ.
{
"api_key": "dp_live_abc123def456..."
}
{
"status": "revoked",
"api_key": "dp_live_abc1...6789"
}
Генерирует новый ключ, отзывая старый. Сохраняет владельца и план.
{
"api_key": "dp_live_old_key..."
}
{
"old_key": "dp_live_old_...",
"new_key": "dp_live_new_abc123...",
"owner": "acme-corp",
"plan": "pro"
}
Возвращает список всех API-ключей с информацией о владельце, плане и статусе.
{
"keys": [
{
"key_prefix": "dp_live_abc1...6789",
"owner": "acme-corp",
"plan": "pro",
"is_active": true,
"created_at": "2025-01-15T08:00:00Z",
"expires_at": "2026-01-15T08:00:00Z",
"last_used_at": "2025-02-17T14:22:00Z"
}
]
}
Системная статистика для дашборда администратора.
{
"total_keys": 12,
"active_keys": 10,
"total_requests_today": 456,
"total_requests_month": 8923,
"plans_distribution": {
"free": 5, "starter": 3, "pro": 3, "enterprise": 1
}
}
Журнал аудита всех административных действий.
Query parameters:
page- Page number (default: 1)per_page- Items per page (default: 50)event- Filter by event type
{
"logs": [
{
"id": 42,
"timestamp": "2025-02-18T10:30:00Z",
"event": "key_created",
"actor": "admin",
"details": {"owner": "acme-corp", "plan": "pro"},
"ip_address": "192.168.1.100"
}
],
"page": 1,
"per_page": 50,
"total": 128
}
Системные
Проверка здоровья сервиса. Используйте для мониторинга и load balancer health checks.
{
"status": "ok",
"version": "3.0"
}
Экспорт метрик в формате Prometheus. Подключается к Grafana или другим системам мониторинга.
# HELP doc_processor_requests_total Total requests
# TYPE doc_processor_requests_total counter
doc_processor_requests_total{method="POST",endpoint="/process-document"} 1234
# HELP doc_processor_processing_seconds Processing duration
# TYPE doc_processor_processing_seconds histogram
doc_processor_processing_seconds_bucket{le="1.0"} 800
...
Очищает кеш обработанных документов. Следующие запросы будут обрабатываться заново.
{
"status": "ok",
"purged": 47
}
Коды ошибок
| Код | Статус | Описание |
|---|---|---|
| 200 | Success | Запрос выполнен успешно |
| 202 | Accepted | Задача принята в обработку (асинхронный режим). Используйте task_id для отслеживания. |
| 400 | Bad Request | Некорректный запрос (отсутствует файл, неподдерживаемый формат, и т.д.) |
| 401 | Unauthorized | Отсутствует или недействительный токен аутентификации |
| 403 | Forbidden | Недостаточно прав (требуется админ-токен) |
| 429 | Rate Limited | Превышен лимит запросов. Подождите или обновите план. |
| 500 | Internal Error | Внутренняя ошибка сервера. Повторите позже или обратитесь к администратору. |
Лимиты по планам
| План | Запросов/мес | Запросов/мин | Макс. файл | Пакет | Цена |
|---|---|---|---|---|---|
| Free | 100 | 5 | 10 MB | 2 files | $0 |
| Starter | 5,000 | 30 | 25 MB | 5 files | $29/mo |
| Pro | 50,000 | 120 | 50 MB | 5 files | $99/mo |
| Enterprise | 500,000 | 600 | 100 MB | 10 files | $499/mo |