{"openapi":"3.1.0","info":{"title":"ProTarget — мобильный API торговых точек — System","description":"Системные эндпоинты: health, readiness и т.п.","version":"1.0.0"},"servers":[{"url":"/system"}],"paths":{"/health":{"get":{"tags":["System"],"summary":"Readiness probe","description":"Проверяет доступность инфраструктуры:\n- PostgreSQL (все контуры)\n- Redis (все кэши)\n\nКоды:\n- 200: всё ок\n- 503: что-то недоступно","operationId":"health_health_get","responses":{"200":{"description":"Healthy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"}}}},"503":{"description":"Unhealthy"}}}},"/errors":{"get":{"tags":["System"],"summary":"Error catalog","description":"Возвращает полный каталог ошибок сервиса:\n- все i18n-ключи ошибок (`errors.*`)\n- тексты по языкам (`ru`/`en`)\n- все зафиксированные в коде варианты (factory + http_status + service_code)\n- locations (файлы и строки), где эти варианты используются.","operationId":"errors_catalog_errors_get","responses":{"200":{"description":"Error catalog","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorCatalogResponse"}}}}}}}},"components":{"schemas":{"ErrorBaseSpecResponse":{"properties":{"factory":{"type":"string","title":"Factory","examples":["unprocessable"]},"service_code":{"type":"integer","title":"Service Code","examples":[4]},"http_status":{"type":"integer","title":"Http Status","examples":[422]},"default_key":{"type":"string","title":"Default Key","examples":["errors.unprocessable"]},"default_message":{"type":"string","title":"Default Message","examples":["Unprocessable entity"]}},"type":"object","required":["factory","service_code","http_status","default_key","default_message"],"title":"ErrorBaseSpecResponse"},"ErrorCatalogResponse":{"properties":{"generated_at":{"type":"string","format":"date-time","title":"Generated At"},"message_languages":{"items":{"type":"string"},"type":"array","title":"Message Languages","examples":[["en","ru"]]},"total_error_keys":{"type":"integer","title":"Total Error Keys","examples":[45]},"total_usage_variants":{"type":"integer","title":"Total Usage Variants","examples":[58]},"base_specs":{"items":{"$ref":"#/components/schemas/ErrorBaseSpecResponse"},"type":"array","title":"Base Specs"},"missing_message_keys":{"items":{"type":"string"},"type":"array","title":"Missing Message Keys","examples":[[]]},"errors":{"items":{"$ref":"#/components/schemas/ErrorKeyCatalogItemResponse"},"type":"array","title":"Errors"}},"type":"object","required":["generated_at","total_error_keys","total_usage_variants"],"title":"ErrorCatalogResponse"},"ErrorKeyCatalogItemResponse":{"properties":{"key":{"type":"string","title":"Key","examples":["errors.cart.invalid_state"]},"messages":{"additionalProperties":{"type":"string"},"type":"object","title":"Messages","examples":[{"en":"Cart is in an invalid state. Please refresh and try again.","ru":"Корзина в некорректном состоянии. Обновите и попробуйте ещё раз."}]},"placeholders":{"items":{"type":"string"},"type":"array","title":"Placeholders","examples":[[]]},"variants":{"items":{"$ref":"#/components/schemas/ErrorKeyVariantResponse"},"type":"array","title":"Variants"}},"type":"object","required":["key"],"title":"ErrorKeyCatalogItemResponse"},"ErrorKeyVariantResponse":{"properties":{"factory":{"type":"string","title":"Factory","examples":["internal"]},"service_code":{"type":"integer","title":"Service Code","examples":[8]},"http_status":{"type":"integer","title":"Http Status","examples":[500]},"occurrences":{"type":"integer","title":"Occurrences","examples":[12]},"locations":{"items":{"type":"string"},"type":"array","title":"Locations","examples":[["src/services/cart.py:602","src/services/order.py:1881"]]}},"type":"object","required":["factory","service_code","http_status","occurrences"],"title":"ErrorKeyVariantResponse"},"HealthResponse":{"properties":{"status":{"type":"string","enum":["healthy","unhealthy"],"title":"Status","examples":["healthy"]},"app":{"type":"string","title":"App","examples":["ProTarget Outlet Mobile API"]},"version":{"type":"string","title":"Version","examples":["1.0.0"]},"checks":{"additionalProperties":{"type":"string"},"type":"object","title":"Checks","examples":[{"db_main":"ok","db_user":"ok"}]}},"type":"object","required":["status","app","version"],"title":"HealthResponse"}}},"tags":[{"name":"System","description":"Системные эндпоинты сервиса (без версий API).\n\nЗдесь находятся ручки для проверки работоспособности сервиса:\n- `/health` — readiness/liveness проверки\n\n- `/errors` — полный каталог ошибок сервиса и их вариаций\n\n⚙️ Эти эндпоинты используются инфраструктурой (k8s, балансировщики, мониторинг) и внешним клиентам обычно не нужны."}]}