{
  "openapi": "3.0.3",
  "info": {
    "title": "OXI PRO Public Page API",
    "version": "1.1.0",
    "description": "Read-only access to the public snapshots of nine service and quality pages. No authentication is required. The versioned v1 endpoint and its legacy alias expose the same snapshot; no order creation, account access or write operations are provided. Compatible additions may be made within v1; breaking changes require a new major URL. The legacy /api/public-page/{slug} alias remains supported with no announced retirement date. Known-page GET and HEAD requests share a fixed-window quota of 600 requests per 60 seconds per runtime instance across both aliases. This is not a per-IP or global quota; restarts reset it and autoscaling creates independent counters. Unknown routes and unsupported methods report quota hints without consuming quota. A 429 response is returned before public content is read. RateLimit and RateLimit-Policy use IETF draft-ietf-httpapi-ratelimit-headers-11 structured fields. RateLimit-Reset and Retry-After are relative delay seconds, not timestamps. Honor Retry-After on 429 and reduce concurrency; a different instance can report a different remaining quota."
  },
  "servers": [
    {
      "url": "https://oxi-pro.ru"
    }
  ],
  "security": [],
  "paths": {
    "/api/public-page/{slug}": {
      "get": {
        "operationId": "getPublicPageSnapshot",
        "summary": "Read a public page snapshot",
        "description": "Returns the current public page data used by the server-rendered page and its browser client. Use one of the documented slugs, without a trailing slash or editor/preview query parameters. A snapshot can change as public content is edited. HEAD is also supported at the HTTP level and returns no response body. Compatible additions may be made within v1; breaking changes require a new major URL. The legacy /api/public-page/{slug} alias remains supported with no announced retirement date. Known-page GET and HEAD requests share a fixed-window quota of 600 requests per 60 seconds per runtime instance across both aliases. This is not a per-IP or global quota; restarts reset it and autoscaling creates independent counters. Unknown routes and unsupported methods report quota hints without consuming quota. A 429 response is returned before public content is read. RateLimit and RateLimit-Policy use IETF draft-ietf-httpapi-ratelimit-headers-11 structured fields. RateLimit-Reset and Retry-After are relative delay seconds, not timestamps. Honor Retry-After on 429 and reduce concurrency; a different instance can report a different remaining quota.",
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "description": "Public page slug, without leading or trailing slashes. Only the nine listed pages expose this JSON endpoint.",
            "schema": {
              "$ref": "#/components/schemas/PublicPillarSlug"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Current public page snapshot.",
            "headers": {
              "Cache-Control": {
                "description": "This snapshot is read fresh and must not be stored in a shared cache.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "private, no-store"
                  ]
                }
              },
              "X-Oxi-Site-Release": {
                "description": "Site release identifier, equal to the snapshot siteRelease field.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Public API major version. The legacy alias also serves version 1.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "RateLimit-Policy": {
                "description": "Fixed-window policy: 600 known-page GET/HEAD requests per 60 seconds per runtime instance, shared by both aliases. IETF draft 11 structured field.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "\"public-read\";q=600;w=60"
                  ]
                }
              },
              "RateLimit": {
                "description": "IETF draft 11 structured field: \"public-read\";r=<remaining>;t=<seconds until reset>. Remaining is 0 through 600; reset is 1 through 60 seconds.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Limit": {
                "description": "Compatibility quota hint: requests per instance window.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "600"
                  ]
                }
              },
              "RateLimit-Remaining": {
                "description": "Compatibility quota hint: remaining requests on this instance, matching RateLimit r.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Reset": {
                "description": "Compatibility quota hint: relative delay seconds until this instance window resets, matching RateLimit t. This is not a Unix timestamp.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicPillarSnapshot"
                }
              }
            }
          },
          "404": {
            "description": "The public page does not exist, is unpublished, or its slug is unsupported.",
            "headers": {
              "Cache-Control": {
                "description": "This snapshot is read fresh and must not be stored in a shared cache.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "private, no-store"
                  ]
                }
              },
              "API-Version": {
                "description": "Public API major version. The legacy alias also serves version 1.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "RateLimit-Policy": {
                "description": "Fixed-window policy: 600 known-page GET/HEAD requests per 60 seconds per runtime instance, shared by both aliases. IETF draft 11 structured field.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "\"public-read\";q=600;w=60"
                  ]
                }
              },
              "RateLimit": {
                "description": "IETF draft 11 structured field: \"public-read\";r=<remaining>;t=<seconds until reset>. Remaining is 0 through 600; reset is 1 through 60 seconds.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Limit": {
                "description": "Compatibility quota hint: requests per instance window.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "600"
                  ]
                }
              },
              "RateLimit-Remaining": {
                "description": "Compatibility quota hint: remaining requests on this instance, matching RateLimit r.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Reset": {
                "description": "Compatibility quota hint: relative delay seconds until this instance window resets, matching RateLimit t. This is not a Unix timestamp.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                },
                "example": {
                  "error": "not_found",
                  "message": "Public page not found.",
                  "resolution": "Choose one of the documented public page slugs."
                }
              }
            }
          },
          "405": {
            "description": "The request method is not supported. Only GET and HEAD are accepted.",
            "headers": {
              "Cache-Control": {
                "description": "This snapshot is read fresh and must not be stored in a shared cache.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "private, no-store"
                  ]
                }
              },
              "Allow": {
                "description": "Supported request methods.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "GET, HEAD"
                  ]
                }
              },
              "API-Version": {
                "description": "Public API major version. The legacy alias also serves version 1.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "RateLimit-Policy": {
                "description": "Fixed-window policy: 600 known-page GET/HEAD requests per 60 seconds per runtime instance, shared by both aliases. IETF draft 11 structured field.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "\"public-read\";q=600;w=60"
                  ]
                }
              },
              "RateLimit": {
                "description": "IETF draft 11 structured field: \"public-read\";r=<remaining>;t=<seconds until reset>. Remaining is 0 through 600; reset is 1 through 60 seconds.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Limit": {
                "description": "Compatibility quota hint: requests per instance window.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "600"
                  ]
                }
              },
              "RateLimit-Remaining": {
                "description": "Compatibility quota hint: remaining requests on this instance, matching RateLimit r.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Reset": {
                "description": "Compatibility quota hint: relative delay seconds until this instance window resets, matching RateLimit t. This is not a Unix timestamp.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                },
                "example": {
                  "error": "method_not_allowed",
                  "message": "Method not allowed.",
                  "resolution": "Use GET to read the public page snapshot."
                }
              }
            }
          },
          "503": {
            "description": "The public snapshot could not be read or rendered. No stale or fabricated snapshot is returned.",
            "headers": {
              "Cache-Control": {
                "description": "This snapshot is read fresh and must not be stored in a shared cache.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "private, no-store"
                  ]
                }
              },
              "Retry-After": {
                "description": "Minimum suggested delay, in seconds, before retrying.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "30"
                  ]
                }
              },
              "API-Version": {
                "description": "Public API major version. The legacy alias also serves version 1.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "RateLimit-Policy": {
                "description": "Fixed-window policy: 600 known-page GET/HEAD requests per 60 seconds per runtime instance, shared by both aliases. IETF draft 11 structured field.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "\"public-read\";q=600;w=60"
                  ]
                }
              },
              "RateLimit": {
                "description": "IETF draft 11 structured field: \"public-read\";r=<remaining>;t=<seconds until reset>. Remaining is 0 through 600; reset is 1 through 60 seconds.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Limit": {
                "description": "Compatibility quota hint: requests per instance window.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "600"
                  ]
                }
              },
              "RateLimit-Remaining": {
                "description": "Compatibility quota hint: remaining requests on this instance, matching RateLimit r.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Reset": {
                "description": "Compatibility quota hint: relative delay seconds until this instance window resets, matching RateLimit t. This is not a Unix timestamp.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                },
                "example": {
                  "error": "temporarily_unavailable",
                  "message": "Public page is temporarily unavailable.",
                  "resolution": "Retry after the interval specified by Retry-After."
                }
              }
            }
          },
          "429": {
            "description": "This instance has exhausted its shared legacy/v1 read quota. No public content was read. Wait for Retry-After and reduce concurrency.",
            "headers": {
              "Cache-Control": {
                "description": "This snapshot is read fresh and must not be stored in a shared cache.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "private, no-store"
                  ]
                }
              },
              "Retry-After": {
                "description": "Relative delay seconds until this instance window resets, equal to RateLimit t and RateLimit-Reset.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Public API major version. The legacy alias also serves version 1.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "RateLimit-Policy": {
                "description": "Fixed-window policy: 600 known-page GET/HEAD requests per 60 seconds per runtime instance, shared by both aliases. IETF draft 11 structured field.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "\"public-read\";q=600;w=60"
                  ]
                }
              },
              "RateLimit": {
                "description": "IETF draft 11 structured field: \"public-read\";r=<remaining>;t=<seconds until reset>. Remaining is 0 through 600; reset is 1 through 60 seconds.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Limit": {
                "description": "Compatibility quota hint: requests per instance window.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "600"
                  ]
                }
              },
              "RateLimit-Remaining": {
                "description": "Compatibility quota hint: remaining requests on this instance, matching RateLimit r.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Reset": {
                "description": "Compatibility quota hint: relative delay seconds until this instance window resets, matching RateLimit t. This is not a Unix timestamp.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                },
                "example": {
                  "error": "rate_limited",
                  "message": "Public read API request limit reached on this instance.",
                  "resolution": "Wait for the Retry-After interval before retrying. Reduce request concurrency and frequency."
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/public-page/{slug}": {
      "get": {
        "operationId": "getPublicPageSnapshotV1",
        "summary": "Read a version 1 public page snapshot",
        "description": "Returns the current public page data used by the server-rendered page and its browser client. Use one of the documented slugs, without a trailing slash or editor/preview query parameters. A snapshot can change as public content is edited. HEAD is also supported at the HTTP level and returns no response body. Compatible additions may be made within v1; breaking changes require a new major URL. The legacy /api/public-page/{slug} alias remains supported with no announced retirement date. Known-page GET and HEAD requests share a fixed-window quota of 600 requests per 60 seconds per runtime instance across both aliases. This is not a per-IP or global quota; restarts reset it and autoscaling creates independent counters. Unknown routes and unsupported methods report quota hints without consuming quota. A 429 response is returned before public content is read. RateLimit and RateLimit-Policy use IETF draft-ietf-httpapi-ratelimit-headers-11 structured fields. RateLimit-Reset and Retry-After are relative delay seconds, not timestamps. Honor Retry-After on 429 and reduce concurrency; a different instance can report a different remaining quota.",
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "description": "Public page slug, without leading or trailing slashes. Only the nine listed pages expose this JSON endpoint.",
            "schema": {
              "$ref": "#/components/schemas/PublicPillarSlug"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Current public page snapshot.",
            "headers": {
              "Cache-Control": {
                "description": "This snapshot is read fresh and must not be stored in a shared cache.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "private, no-store"
                  ]
                }
              },
              "X-Oxi-Site-Release": {
                "description": "Site release identifier, equal to the snapshot siteRelease field.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Public API major version. The legacy alias also serves version 1.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "RateLimit-Policy": {
                "description": "Fixed-window policy: 600 known-page GET/HEAD requests per 60 seconds per runtime instance, shared by both aliases. IETF draft 11 structured field.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "\"public-read\";q=600;w=60"
                  ]
                }
              },
              "RateLimit": {
                "description": "IETF draft 11 structured field: \"public-read\";r=<remaining>;t=<seconds until reset>. Remaining is 0 through 600; reset is 1 through 60 seconds.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Limit": {
                "description": "Compatibility quota hint: requests per instance window.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "600"
                  ]
                }
              },
              "RateLimit-Remaining": {
                "description": "Compatibility quota hint: remaining requests on this instance, matching RateLimit r.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Reset": {
                "description": "Compatibility quota hint: relative delay seconds until this instance window resets, matching RateLimit t. This is not a Unix timestamp.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicPillarSnapshot"
                }
              }
            }
          },
          "404": {
            "description": "The public page does not exist, is unpublished, or its slug is unsupported.",
            "headers": {
              "Cache-Control": {
                "description": "This snapshot is read fresh and must not be stored in a shared cache.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "private, no-store"
                  ]
                }
              },
              "API-Version": {
                "description": "Public API major version. The legacy alias also serves version 1.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "RateLimit-Policy": {
                "description": "Fixed-window policy: 600 known-page GET/HEAD requests per 60 seconds per runtime instance, shared by both aliases. IETF draft 11 structured field.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "\"public-read\";q=600;w=60"
                  ]
                }
              },
              "RateLimit": {
                "description": "IETF draft 11 structured field: \"public-read\";r=<remaining>;t=<seconds until reset>. Remaining is 0 through 600; reset is 1 through 60 seconds.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Limit": {
                "description": "Compatibility quota hint: requests per instance window.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "600"
                  ]
                }
              },
              "RateLimit-Remaining": {
                "description": "Compatibility quota hint: remaining requests on this instance, matching RateLimit r.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Reset": {
                "description": "Compatibility quota hint: relative delay seconds until this instance window resets, matching RateLimit t. This is not a Unix timestamp.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                },
                "example": {
                  "error": "not_found",
                  "message": "Public page not found.",
                  "resolution": "Choose one of the documented public page slugs."
                }
              }
            }
          },
          "405": {
            "description": "The request method is not supported. Only GET and HEAD are accepted.",
            "headers": {
              "Cache-Control": {
                "description": "This snapshot is read fresh and must not be stored in a shared cache.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "private, no-store"
                  ]
                }
              },
              "Allow": {
                "description": "Supported request methods.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "GET, HEAD"
                  ]
                }
              },
              "API-Version": {
                "description": "Public API major version. The legacy alias also serves version 1.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "RateLimit-Policy": {
                "description": "Fixed-window policy: 600 known-page GET/HEAD requests per 60 seconds per runtime instance, shared by both aliases. IETF draft 11 structured field.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "\"public-read\";q=600;w=60"
                  ]
                }
              },
              "RateLimit": {
                "description": "IETF draft 11 structured field: \"public-read\";r=<remaining>;t=<seconds until reset>. Remaining is 0 through 600; reset is 1 through 60 seconds.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Limit": {
                "description": "Compatibility quota hint: requests per instance window.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "600"
                  ]
                }
              },
              "RateLimit-Remaining": {
                "description": "Compatibility quota hint: remaining requests on this instance, matching RateLimit r.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Reset": {
                "description": "Compatibility quota hint: relative delay seconds until this instance window resets, matching RateLimit t. This is not a Unix timestamp.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                },
                "example": {
                  "error": "method_not_allowed",
                  "message": "Method not allowed.",
                  "resolution": "Use GET to read the public page snapshot."
                }
              }
            }
          },
          "503": {
            "description": "The public snapshot could not be read or rendered. No stale or fabricated snapshot is returned.",
            "headers": {
              "Cache-Control": {
                "description": "This snapshot is read fresh and must not be stored in a shared cache.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "private, no-store"
                  ]
                }
              },
              "Retry-After": {
                "description": "Minimum suggested delay, in seconds, before retrying.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "30"
                  ]
                }
              },
              "API-Version": {
                "description": "Public API major version. The legacy alias also serves version 1.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "RateLimit-Policy": {
                "description": "Fixed-window policy: 600 known-page GET/HEAD requests per 60 seconds per runtime instance, shared by both aliases. IETF draft 11 structured field.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "\"public-read\";q=600;w=60"
                  ]
                }
              },
              "RateLimit": {
                "description": "IETF draft 11 structured field: \"public-read\";r=<remaining>;t=<seconds until reset>. Remaining is 0 through 600; reset is 1 through 60 seconds.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Limit": {
                "description": "Compatibility quota hint: requests per instance window.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "600"
                  ]
                }
              },
              "RateLimit-Remaining": {
                "description": "Compatibility quota hint: remaining requests on this instance, matching RateLimit r.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Reset": {
                "description": "Compatibility quota hint: relative delay seconds until this instance window resets, matching RateLimit t. This is not a Unix timestamp.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                },
                "example": {
                  "error": "temporarily_unavailable",
                  "message": "Public page is temporarily unavailable.",
                  "resolution": "Retry after the interval specified by Retry-After."
                }
              }
            }
          },
          "429": {
            "description": "This instance has exhausted its shared legacy/v1 read quota. No public content was read. Wait for Retry-After and reduce concurrency.",
            "headers": {
              "Cache-Control": {
                "description": "This snapshot is read fresh and must not be stored in a shared cache.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "private, no-store"
                  ]
                }
              },
              "Retry-After": {
                "description": "Relative delay seconds until this instance window resets, equal to RateLimit t and RateLimit-Reset.",
                "schema": {
                  "type": "string"
                }
              },
              "API-Version": {
                "description": "Public API major version. The legacy alias also serves version 1.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "1"
                  ]
                }
              },
              "RateLimit-Policy": {
                "description": "Fixed-window policy: 600 known-page GET/HEAD requests per 60 seconds per runtime instance, shared by both aliases. IETF draft 11 structured field.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "\"public-read\";q=600;w=60"
                  ]
                }
              },
              "RateLimit": {
                "description": "IETF draft 11 structured field: \"public-read\";r=<remaining>;t=<seconds until reset>. Remaining is 0 through 600; reset is 1 through 60 seconds.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Limit": {
                "description": "Compatibility quota hint: requests per instance window.",
                "schema": {
                  "type": "string",
                  "enum": [
                    "600"
                  ]
                }
              },
              "RateLimit-Remaining": {
                "description": "Compatibility quota hint: remaining requests on this instance, matching RateLimit r.",
                "schema": {
                  "type": "string"
                }
              },
              "RateLimit-Reset": {
                "description": "Compatibility quota hint: relative delay seconds until this instance window resets, matching RateLimit t. This is not a Unix timestamp.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicApiError"
                },
                "example": {
                  "error": "rate_limited",
                  "message": "Public read API request limit reached on this instance.",
                  "resolution": "Wait for the Retry-After interval before retrying. Reduce request concurrency and frequency."
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "PublicPillarSlug": {
        "type": "string",
        "enum": [
          "anodirovanie",
          "mehanicheskaya-obrabotka",
          "frezerovka-alyuminiya",
          "tokarnaya-obrabotka-alyuminiya",
          "rezka-alyuminiya",
          "gibka-alyuminievogo-profilya",
          "sistema-kachestva",
          "sertifikatsiya",
          "reglament-rabot"
        ]
      },
      "PublicPillarSnapshot": {
        "type": "object",
        "description": "Complete public page snapshot. Content and theme are public JSON objects with extensible fields; optional versions are omitted rather than null.",
        "required": [
          "schemaVersion",
          "pathname",
          "siteRelease",
          "designReview",
          "pillar",
          "content",
          "theme",
          "year"
        ],
        "properties": {
          "schemaVersion": {
            "type": "integer",
            "enum": [
              1
            ]
          },
          "pathname": {
            "type": "string",
            "enum": [
              "/anodirovanie",
              "/mehanicheskaya-obrabotka",
              "/frezerovka-alyuminiya",
              "/tokarnaya-obrabotka-alyuminiya",
              "/rezka-alyuminiya",
              "/gibka-alyuminievogo-profilya",
              "/sistema-kachestva",
              "/sertifikatsiya",
              "/reglament-rabot"
            ],
            "description": "Canonical page path, always / followed by pillar.slug."
          },
          "siteRelease": {
            "type": "string",
            "description": "Release identifier of the page renderer and its browser assets."
          },
          "designReview": {
            "type": "boolean",
            "description": "Design variant selected for the public page."
          },
          "pillar": {
            "$ref": "#/components/schemas/PillarDoc"
          },
          "content": {
            "$ref": "#/components/schemas/PublicJsonObject"
          },
          "theme": {
            "$ref": "#/components/schemas/PublicJsonObject"
          },
          "contentVersion": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "Optional public content revision. Omitted when the source has no version."
          },
          "themeVersion": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "Optional public content revision. Omitted when the source has no version."
          },
          "year": {
            "type": "integer",
            "description": "UTC year supplied to the page renderer."
          }
        }
      },
      "PublicJsonObject": {
        "type": "object",
        "description": "Public CMS content or visual theme. Field names are extensible; values can be any JSON value, including nested objects, arrays and null.",
        "additionalProperties": true
      },
      "PillarDoc": {
        "type": "object",
        "required": [
          "slug",
          "seo",
          "hero",
          "trust",
          "services",
          "steps",
          "faq",
          "fullCycle",
          "cta"
        ],
        "properties": {
          "slug": {
            "$ref": "#/components/schemas/PublicPillarSlug"
          },
          "isPublished": {
            "type": "boolean"
          },
          "updatedAt": {
            "type": "string",
            "description": "Optional public last-modified date as supplied by the page content."
          },
          "seo": {
            "$ref": "#/components/schemas/PillarSeo"
          },
          "hero": {
            "$ref": "#/components/schemas/PillarHero"
          },
          "trust": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PillarTrust"
            }
          },
          "services": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PillarCard"
            },
            "minItems": 1
          },
          "colors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PillarColor"
            }
          },
          "steps": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PillarStep"
            }
          },
          "pricing": {
            "$ref": "#/components/schemas/PillarPricing"
          },
          "faq": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PillarFaq"
            },
            "minItems": 1
          },
          "fullCycle": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PillarCycleStage"
            }
          },
          "cta": {
            "$ref": "#/components/schemas/PillarCta"
          },
          "headings": {
            "type": "object",
            "properties": {
              "types": {
                "$ref": "#/components/schemas/PillarSectionHead"
              },
              "process": {
                "$ref": "#/components/schemas/PillarSectionHead"
              },
              "pricing": {
                "$ref": "#/components/schemas/PillarSectionHead"
              },
              "faq": {
                "$ref": "#/components/schemas/PillarSectionHead"
              },
              "fullCycle": {
                "$ref": "#/components/schemas/PillarSectionHead"
              }
            }
          },
          "video": {
            "$ref": "#/components/schemas/PillarVideo"
          }
        }
      },
      "PillarSeo": {
        "type": "object",
        "required": [
          "title",
          "description",
          "canonical",
          "ogTitle",
          "ogDescription",
          "ogUrl",
          "ogType",
          "jsonLd",
          "noscriptHtml"
        ],
        "properties": {
          "title": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "keywords": {
            "type": "string"
          },
          "canonical": {
            "type": "string",
            "description": "Canonical public page URL: https://oxi-pro.ru/ followed by the slug."
          },
          "ogTitle": {
            "type": "string"
          },
          "ogDescription": {
            "type": "string"
          },
          "ogImage": {
            "type": "string"
          },
          "ogImageAlt": {
            "type": "string"
          },
          "ogUrl": {
            "type": "string"
          },
          "ogType": {
            "type": "string",
            "enum": [
              "website"
            ]
          },
          "jsonLd": {
            "type": "string",
            "description": "Serialized JSON-LD string, not a nested JSON object."
          },
          "noscriptHtml": {
            "type": "string",
            "description": "SEO fallback HTML string."
          }
        }
      },
      "PillarHero": {
        "type": "object",
        "required": [
          "eyebrow",
          "h1",
          "lead",
          "priceAnchor",
          "priceNote",
          "ctaPrimary",
          "ctaSecondary"
        ],
        "properties": {
          "eyebrow": {
            "type": "string"
          },
          "h1": {
            "type": "string"
          },
          "lead": {
            "type": "string"
          },
          "priceAnchor": {
            "type": "string"
          },
          "priceNote": {
            "type": "string"
          },
          "ctaPrimary": {
            "$ref": "#/components/schemas/PillarHeroCta"
          },
          "ctaSecondary": {
            "$ref": "#/components/schemas/PillarHeroCta"
          }
        }
      },
      "PillarHeroCta": {
        "type": "object",
        "required": [
          "label",
          "target"
        ],
        "properties": {
          "label": {
            "type": "string"
          },
          "target": {
            "type": "string",
            "description": "In-page scroll target or internal path."
          }
        }
      },
      "PillarTrust": {
        "type": "object",
        "required": [
          "metric",
          "label"
        ],
        "properties": {
          "metric": {
            "type": "string"
          },
          "label": {
            "type": "string"
          },
          "kind": {
            "type": "string",
            "enum": [
              "rating",
              "price",
              "plain"
            ]
          },
          "href": {
            "type": "string"
          }
        }
      },
      "PillarCard": {
        "type": "object",
        "required": [
          "icon",
          "title",
          "body",
          "href"
        ],
        "properties": {
          "icon": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "body": {
            "type": "string"
          },
          "href": {
            "type": "string",
            "description": "In-page anchor or internal path."
          }
        }
      },
      "PillarColor": {
        "type": "object",
        "required": [
          "name",
          "hex",
          "desc",
          "cTop",
          "cLeft",
          "cRight"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "hex": {
            "type": "string"
          },
          "desc": {
            "type": "string"
          },
          "cTop": {
            "type": "string"
          },
          "cLeft": {
            "type": "string"
          },
          "cRight": {
            "type": "string"
          },
          "gost": {
            "type": "string"
          },
          "microns": {
            "type": "string"
          },
          "texture": {
            "type": "string"
          }
        }
      },
      "PillarStep": {
        "type": "object",
        "required": [
          "num",
          "title",
          "desc"
        ],
        "properties": {
          "num": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "desc": {
            "type": "string"
          }
        }
      },
      "PillarSpec": {
        "type": "object",
        "required": [
          "label",
          "value"
        ],
        "properties": {
          "label": {
            "type": "string"
          },
          "value": {
            "type": "string"
          }
        }
      },
      "PillarPricing": {
        "type": "object",
        "required": [
          "plateValue",
          "plateNote",
          "specs",
          "microCta"
        ],
        "properties": {
          "plateValue": {
            "type": "string"
          },
          "plateNote": {
            "type": "string"
          },
          "specs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PillarSpec"
            }
          },
          "microCta": {
            "type": "string"
          }
        }
      },
      "PillarFaq": {
        "type": "object",
        "required": [
          "q",
          "a"
        ],
        "properties": {
          "q": {
            "type": "string"
          },
          "a": {
            "type": "string"
          }
        }
      },
      "PillarCycleStage": {
        "type": "object",
        "required": [
          "label"
        ],
        "properties": {
          "label": {
            "type": "string"
          },
          "href": {
            "type": "string"
          },
          "lit": {
            "type": "boolean"
          }
        }
      },
      "PillarCta": {
        "type": "object",
        "required": [
          "eyebrow",
          "title",
          "subtitle",
          "ctaPrimaryLabel",
          "ctaSecondaryLabel",
          "phone",
          "hours",
          "addressOffice",
          "addressProduction"
        ],
        "properties": {
          "eyebrow": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "subtitle": {
            "type": "string"
          },
          "ctaPrimaryLabel": {
            "type": "string"
          },
          "ctaSecondaryLabel": {
            "type": "string"
          },
          "phone": {
            "type": "string"
          },
          "hours": {
            "type": "string"
          },
          "addressOffice": {
            "type": "string"
          },
          "addressProduction": {
            "type": "string"
          }
        }
      },
      "PillarSectionHead": {
        "type": "object",
        "properties": {
          "eyebrow": {
            "type": "string"
          },
          "h2": {
            "type": "string"
          },
          "lead": {
            "type": "string"
          }
        }
      },
      "PillarVideo": {
        "type": "object",
        "required": [
          "videoUrl"
        ],
        "properties": {
          "videoUrl": {
            "type": "string",
            "description": "Root-relative or absolute production video URL."
          },
          "videoUrlMobile": {
            "type": "string"
          },
          "posterUrl": {
            "type": "string"
          },
          "eyebrow": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "caption": {
            "type": "string"
          }
        }
      },
      "PublicApiError": {
        "type": "object",
        "required": [
          "error",
          "message",
          "resolution"
        ],
        "properties": {
          "error": {
            "type": "string",
            "enum": [
              "not_found",
              "method_not_allowed",
              "temporarily_unavailable",
              "rate_limited"
            ],
            "description": "Stable machine-readable error code."
          },
          "message": {
            "type": "string",
            "minLength": 1,
            "description": "Human-readable explanation of the failure."
          },
          "resolution": {
            "type": "string",
            "minLength": 1,
            "description": "Suggested action for the API consumer."
          }
        }
      }
    }
  }
}
