{
  "openapi": "3.1.0",
  "info": {
    "title": "Каталог КБП API",
    "version": "1.0.0",
    "description": "Пошук і підбір кандидатів у знімку відкритого довідника ЄДЕССБ. Пошуковий бал не є ймовірністю, а код не доводить цінову чи технічну зіставність."
  },
  "servers": [{"url": "https://kdb.arm20.com"}],
  "paths": {
    "/api/v1/version": {"get": {"summary": "Версія активної бази", "responses": {"200": {"description": "Версія та джерело"}}}},
    "/api/v1/search": {"get": {"summary": "Пошук за кодом, назвою або характеристикою", "parameters": [
      {"name": "q", "in": "query", "schema": {"type": "string", "maxLength": 200}},
      {"name": "category", "in": "query", "schema": {"type": "string"}},
      {"name": "unit", "in": "query", "schema": {"type": "string"}},
      {"name": "catalog_kind", "in": "query", "schema": {"type": "string", "enum": ["main", "temporary", "all"], "default": "main"}},
      {"name": "page", "in": "query", "schema": {"type": "integer", "minimum": 1, "default": 1}},
      {"name": "per_page", "in": "query", "schema": {"type": "integer", "minimum": 1, "maximum": 100, "default": 25}}
    ], "responses": {"200": {"description": "Сторінка кандидатів"}, "429": {"description": "Перевищено ліміт"}}}},
    "/api/v1/resources/{code}": {"get": {"summary": "Запис за точним основним або тимчасовим кодом", "parameters": [{"name": "code", "in": "path", "required": true, "schema": {"type": "string", "pattern": "^(\\d{2}\\.\\d{2}\\.\\d{2}\\.\\d{9}|KPBT-\\d{6})$"}}], "responses": {"200": {"description": "Картка ресурсу"}, "404": {"description": "Код не знайдено"}}}},
    "/api/v1/match": {"post": {"summary": "Ранжований підбір одного ресурсу", "requestBody": {"required": true, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/MatchInput"}}}}, "responses": {"200": {"description": "Точний збіг, можливий аналог, неоднозначність або відсутність результату"}, "422": {"description": "Помилка вхідних даних"}, "429": {"description": "Перевищено ліміт"}}}},
    "/api/v1/batch-match": {"post": {"summary": "Пакетний підбір до 25 ресурсів", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "required": ["items"], "properties": {"items": {"type": "array", "minItems": 1, "maxItems": 25, "items": {"$ref": "#/components/schemas/MatchInput"}}}}}}}, "responses": {"200": {"description": "Результати у порядку вхідного масиву"}, "422": {"description": "Некоректний пакет"}, "429": {"description": "Перевищено ліміт"}}}}
  },
  "components": {"schemas": {"MatchInput": {"type": "object", "required": ["name"], "properties": {
    "name": {"type": "string", "maxLength": 300},
    "unit": {"type": "string", "maxLength": 128},
    "dimensions": {"type": "string", "maxLength": 120},
    "brand": {"type": "string", "maxLength": 120},
    "parameters": {"type": "object", "additionalProperties": {"type": ["string", "number", "boolean"]}}
  }}}}
}
