Перейти к содержанию

API TenderLens

Base URL: http://localhost:8000.

Ошибки

{
  "error": {
    "code": "api_key_required",
    "message": "Требуется заголовок X-API-Key.",
    "request_id": "uuid",
    "details": null
  }
}

Каждый ответ содержит X-Request-ID. Технический stack trace клиенту не возвращается.

Health

GET /health/live
GET /health/ready

live проверяет процесс. ready проверяет PostgreSQL и активный AI provider.

Карточка закупки

GET /api/v1/tenders/{uuid}
X-API-Key: tl_...

Ответ не содержит raw_payload, content_hash, indexed_hash, local_path и key hashes.

POST /api/v1/search
Content-Type: application/json
X-API-Key: tl_...

{
  "query": "server storage warranty",
  "limit": 5
}

Пример:

{
  "query": "server storage warranty",
  "items": [
    {
      "tender_id": "00000000-0000-0000-0000-000000000001",
      "title": "Supply of server and storage equipment",
      "source": "ted",
      "source_url": "https://example.test/tender/1",
      "snippet": "Technical requirements: rack servers...",
      "score": 0.84,
      "attachment": {
        "id": "00000000-0000-0000-0000-000000000002",
        "filename": "specification.pdf"
      }
    }
  ]
}

Ask

POST /api/v1/ask
Content-Type: application/json
X-API-Key: tl_...

{
  "query": "Какие сроки гарантии указаны?",
  "limit": 5
}
{
  "answer": "В найденных документах указана гарантия 36 месяцев.",
  "sources": [
    {
      "tender_id": "00000000-0000-0000-0000-000000000001",
      "title": "Supply of server and storage equipment",
      "source": "ted",
      "source_url": "https://example.test/tender/1",
      "snippet": "Warranty period: 36 months...",
      "score": 0.91,
      "attachment": null
    }
  ]
}

При пустом индексе:

{
  "answer": "Недостаточно данных в базе знаний.",
  "sources": []
}

Rate limit

Первые пять запросов /search и /ask одного ключа в текущей UTC-минуте проходят. Следующий:

HTTP/1.1 429 Too Many Requests
Retry-After: 17
X-RateLimit-Limit: 5
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1787210400

Счётчик общий: три Search + два Ask исчерпывают лимит пять.