{
  "components": {
    "schemas": {
      "ColumnInfo": {
        "additionalProperties": false,
        "properties": {
          "aggregates": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "deprecated": {
            "$ref": "#/components/schemas/DeprecationInfo"
          },
          "description": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "operators": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "select_only": {
            "type": "boolean"
          },
          "type": {
            "type": "string"
          }
        },
        "required": [
          "aggregates",
          "name",
          "operators",
          "type"
        ],
        "type": "object"
      },
      "CompareSpec": {
        "additionalProperties": false,
        "properties": {
          "gte": {
            "type": "integer"
          },
          "lte": {
            "type": "integer"
          },
          "period": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "ConditionItem": {
        "additionalProperties": false,
        "properties": {
          "column": {
            "type": "string"
          },
          "op": {
            "enum": [
              "eq",
              "gt",
              "gte",
              "has",
              "has_all",
              "has_any",
              "ilike",
              "in",
              "like",
              "lt",
              "lte",
              "neq",
              "not_has",
              "not_ilike",
              "not_in",
              "not_like"
            ],
            "type": "string"
          },
          "value": {},
          "values": {}
        },
        "required": [
          "column"
        ],
        "type": "object"
      },
      "DeprecationInfo": {
        "additionalProperties": false,
        "properties": {
          "date": {
            "type": "string"
          },
          "replacement": {
            "type": "string"
          }
        },
        "required": [
          "date"
        ],
        "type": "object"
      },
      "ErrorBody": {
        "additionalProperties": false,
        "properties": {
          "code": {
            "enum": [
              "budget_exceeded",
              "forbidden",
              "internal",
              "invalid_request",
              "not_found",
              "rate_limited",
              "timeout",
              "unauthorized",
              "upstream_failure"
            ],
            "type": "string"
          },
          "details": {
            "additionalProperties": {},
            "description": "Machine-readable failure metadata; keys are append-only. Known keys: reason (auth: unknown | revoked | plan_disabled | app_not_allowed | level_not_allowed; rate_limited: rate_limit | monthly_quota | concurrency), cap + limit (budget_exceeded: memory | bytes_read | rows_read | read_budget), scope + resets_at (rate_limited monthly quota), unknown_entity | unknown_column | unknown_metric + entity + did_you_mean (invalid names), dimension + key (not_found: no group matches a group-column key), alias (invalid_request: an alias names a column the query filters on).",
            "type": "object"
          },
          "message": {
            "type": "string"
          },
          "query_id": {
            "description": "The request's query id, also sent as the X-Query-Id header. Quote it when contacting support.",
            "type": "string"
          }
        },
        "required": [
          "code",
          "message",
          "query_id"
        ],
        "type": "object"
      },
      "ErrorResponse": {
        "additionalProperties": false,
        "properties": {
          "error": {
            "$ref": "#/components/schemas/ErrorBody"
          }
        },
        "required": [
          "error"
        ],
        "type": "object"
      },
      "GroupByItem": {
        "additionalProperties": false,
        "properties": {
          "as": {
            "type": "string"
          },
          "column": {
            "type": "string"
          },
          "time_bucket": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "Limits": {
        "additionalProperties": false,
        "properties": {
          "default_rows": {
            "type": "integer"
          },
          "max_rows": {
            "type": "integer"
          },
          "max_top_n": {
            "type": "integer"
          }
        },
        "required": [
          "default_rows",
          "max_rows",
          "max_top_n"
        ],
        "type": "object"
      },
      "Meta": {
        "additionalProperties": false,
        "properties": {
          "elapsed_ms": {
            "type": "integer"
          },
          "next_offset": {
            "type": "integer"
          },
          "query_id": {
            "type": "string"
          },
          "resolved": {
            "additionalProperties": {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            "type": "object"
          },
          "store": {
            "type": "string"
          },
          "total": {
            "type": "integer"
          },
          "truncated": {
            "type": "boolean"
          }
        },
        "required": [
          "elapsed_ms",
          "query_id"
        ],
        "type": "object"
      },
      "OrderByItem": {
        "additionalProperties": false,
        "properties": {
          "column": {
            "type": "string"
          },
          "dir": {
            "enum": [
              "asc",
              "desc"
            ],
            "type": "string"
          }
        },
        "required": [
          "column"
        ],
        "type": "object"
      },
      "PinnedConditionInfo": {
        "additionalProperties": false,
        "properties": {
          "column": {
            "type": "string"
          },
          "op": {
            "type": "string"
          },
          "value": {}
        },
        "required": [
          "column",
          "op",
          "value"
        ],
        "type": "object"
      },
      "PublicEntitiesResponse": {
        "additionalProperties": false,
        "properties": {
          "catalog_version": {
            "type": "string"
          },
          "entities": {
            "items": {
              "$ref": "#/components/schemas/PublicEntity"
            },
            "type": "array"
          },
          "limits": {
            "$ref": "#/components/schemas/Limits"
          },
          "vocabulary": {
            "$ref": "#/components/schemas/Vocabulary"
          }
        },
        "required": [
          "catalog_version",
          "entities",
          "limits",
          "vocabulary"
        ],
        "type": "object"
      },
      "PublicEntity": {
        "additionalProperties": false,
        "properties": {
          "column_info": {
            "items": {
              "$ref": "#/components/schemas/ColumnInfo"
            },
            "type": "array"
          },
          "level": {
            "type": "string"
          },
          "metrics": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "name": {
            "type": "string"
          },
          "pinned_conditions": {
            "additionalProperties": {
              "items": {
                "$ref": "#/components/schemas/PinnedConditionInfo"
              },
              "type": "array"
            },
            "type": "object"
          }
        },
        "required": [
          "column_info",
          "level",
          "metrics",
          "name"
        ],
        "type": "object"
      },
      "QueryRequest": {
        "additionalProperties": false,
        "properties": {
          "application": {
            "type": "string"
          },
          "application_token": {
            "type": "string"
          },
          "compare_to": {
            "$ref": "#/components/schemas/CompareSpec"
          },
          "conditions": {
            "items": {
              "$ref": "#/components/schemas/ConditionItem"
            },
            "type": "array"
          },
          "entity": {
            "type": "string"
          },
          "environment": {
            "type": "string"
          },
          "group_by": {
            "items": {
              "$ref": "#/components/schemas/GroupByItem"
            },
            "type": "array"
          },
          "having": {
            "items": {
              "$ref": "#/components/schemas/ConditionItem"
            },
            "type": "array"
          },
          "include_totals": {
            "type": "boolean"
          },
          "limit": {
            "default": 100,
            "description": "Row limit. Omitted or 0 defaults to 100, then the plan's sync max_rows clamps it (see /v1/entities limits).",
            "maximum": 50000,
            "minimum": 0,
            "type": "integer"
          },
          "offset": {
            "type": "integer"
          },
          "order_by": {
            "items": {
              "$ref": "#/components/schemas/OrderByItem"
            },
            "type": "array"
          },
          "referrer": {
            "type": "string"
          },
          "select": {
            "items": {
              "$ref": "#/components/schemas/SelectItem"
            },
            "type": "array"
          },
          "time_range": {
            "$ref": "#/components/schemas/TimeRange"
          },
          "time_zone": {
            "type": "string"
          },
          "top_n": {
            "$ref": "#/components/schemas/TopNSpec"
          }
        },
        "required": [
          "entity",
          "select",
          "time_range"
        ],
        "type": "object"
      },
      "QueryResponse": {
        "additionalProperties": false,
        "properties": {
          "columns": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "meta": {
            "$ref": "#/components/schemas/Meta"
          },
          "rows": {
            "items": {
              "items": {},
              "type": "array"
            },
            "type": "array"
          },
          "totals": {
            "$ref": "#/components/schemas/Totals"
          }
        },
        "required": [
          "columns",
          "meta",
          "rows"
        ],
        "type": "object"
      },
      "QuotaState": {
        "additionalProperties": false,
        "properties": {
          "limit": {
            "type": "integer"
          },
          "remaining": {
            "type": "integer"
          },
          "resets_at": {
            "type": "integer"
          },
          "used": {
            "type": "integer"
          }
        },
        "required": [
          "limit",
          "remaining",
          "resets_at",
          "used"
        ],
        "type": "object"
      },
      "RateLimitRequest": {
        "additionalProperties": false,
        "properties": {
          "application": {
            "type": "string"
          },
          "environment": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "RateLimitRequests": {
        "additionalProperties": false,
        "properties": {
          "per_hour": {
            "$ref": "#/components/schemas/WindowState"
          },
          "per_minute": {
            "$ref": "#/components/schemas/WindowState"
          }
        },
        "required": [
          "per_hour",
          "per_minute"
        ],
        "type": "object"
      },
      "RateLimitResponse": {
        "additionalProperties": false,
        "properties": {
          "quota": {
            "$ref": "#/components/schemas/QuotaState"
          },
          "requests": {
            "$ref": "#/components/schemas/RateLimitRequests"
          }
        },
        "required": [
          "quota",
          "requests"
        ],
        "type": "object"
      },
      "SelectItem": {
        "additionalProperties": false,
        "properties": {
          "aggregate": {
            "enum": [
              "avg",
              "count",
              "max",
              "min",
              "sum",
              "uniq"
            ],
            "type": "string"
          },
          "as": {
            "type": "string"
          },
          "column": {
            "type": "string"
          },
          "metric": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "TimeRange": {
        "additionalProperties": false,
        "properties": {
          "gte": {
            "type": "integer"
          },
          "last": {
            "pattern": "^[1-9][0-9]{0,6}[mhdw]$",
            "type": "string"
          },
          "lte": {
            "type": "integer"
          }
        },
        "type": "object"
      },
      "TopNSpec": {
        "additionalProperties": false,
        "properties": {
          "by": {
            "type": "string"
          },
          "dir": {
            "type": "string"
          },
          "n": {
            "maximum": 100,
            "minimum": 1,
            "type": "integer"
          }
        },
        "required": [
          "by",
          "n"
        ],
        "type": "object"
      },
      "Totals": {
        "additionalProperties": false,
        "properties": {
          "columns": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "rows": {
            "items": {
              "items": {},
              "type": "array"
            },
            "type": "array"
          }
        },
        "required": [
          "columns",
          "rows"
        ],
        "type": "object"
      },
      "ValidateResponse": {
        "additionalProperties": false,
        "properties": {
          "valid": {
            "type": "boolean"
          }
        },
        "required": [
          "valid"
        ],
        "type": "object"
      },
      "Vocabulary": {
        "additionalProperties": false,
        "properties": {
          "compare_periods": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "having_operators": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "time_buckets": {
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "required": [
          "compare_periods",
          "having_operators",
          "time_buckets"
        ],
        "type": "object"
      },
      "WindowState": {
        "additionalProperties": false,
        "properties": {
          "limit": {
            "type": "integer"
          },
          "remaining": {
            "type": "integer"
          },
          "resets_at": {
            "type": "integer"
          }
        },
        "required": [
          "limit",
          "remaining",
          "resets_at"
        ],
        "type": "object"
      }
    },
    "securitySchemes": {
      "apiKey": {
        "bearerFormat": "lq_ key",
        "description": "Luciq query API key (lq_...).",
        "scheme": "bearer",
        "type": "http"
      }
    }
  },
  "info": {
    "description": "Query gateway public surface. Authenticate with a company-owned API key (Authorization: Bearer lq_...). Address an application with the optional {application, environment} pair (POST body fields / GET query params): both present = application level, both absent = company level. Entity content is per-tenant — discover it via /v1/entities.",
    "title": "Luciq Query API",
    "version": "1.0.0",
    "x-luciq-vocabulary": {
      "aggregates": [
        "avg",
        "count",
        "max",
        "min",
        "sum",
        "uniq"
      ],
      "column_types": [
        "array",
        "bool",
        "float",
        "int",
        "string",
        "timestamp"
      ],
      "error_codes": [
        "budget_exceeded",
        "forbidden",
        "internal",
        "invalid_request",
        "not_found",
        "rate_limited",
        "timeout",
        "unauthorized",
        "upstream_failure"
      ],
      "operators": [
        "eq",
        "gt",
        "gte",
        "has",
        "has_all",
        "has_any",
        "ilike",
        "in",
        "like",
        "lt",
        "lte",
        "neq",
        "not_has",
        "not_ilike",
        "not_in",
        "not_like"
      ],
      "operators_by_type": {
        "array": [
          "has",
          "has_all",
          "has_any",
          "not_has"
        ],
        "bool": [
          "eq",
          "neq"
        ],
        "float": [
          "eq",
          "gt",
          "gte",
          "has",
          "in",
          "lt",
          "lte",
          "neq",
          "not_has",
          "not_in"
        ],
        "int": [
          "eq",
          "gt",
          "gte",
          "has",
          "in",
          "lt",
          "lte",
          "neq",
          "not_has",
          "not_in"
        ],
        "string": [
          "eq",
          "has",
          "ilike",
          "in",
          "like",
          "neq",
          "not_has",
          "not_in"
        ],
        "timestamp": [
          "eq",
          "gt",
          "gte",
          "lt",
          "lte",
          "neq"
        ]
      }
    }
  },
  "openapi": "3.1.0",
  "paths": {
    "/v1/entities": {
      "get": {
        "operationId": "listEntities",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicEntitiesResponse"
                }
              }
            },
            "description": "Entity listing (/v1 shape)",
            "headers": {
              "X-Query-Id": {
                "description": "The request's query id; the same value as meta.query_id or error.query_id.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "Invalid request",
            "headers": {
              "X-Query-Id": {
                "description": "The request's query id; the same value as meta.query_id or error.query_id.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "Missing or invalid API key",
            "headers": {
              "X-Query-Id": {
                "description": "The request's query id; the same value as meta.query_id or error.query_id.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "Key does not cover the application, entity scope, or level",
            "headers": {
              "X-Query-Id": {
                "description": "The request's query id; the same value as meta.query_id or error.query_id.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "Rate limited, monthly quota exhausted, or too many concurrent queries. details.reason says which (rate_limit | monthly_quota | concurrency); Retry-After says when to retry",
            "headers": {
              "X-Query-Id": {
                "description": "The request's query id; the same value as meta.query_id or error.query_id.",
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "summary": "The catalog surface visible to this key: entities with typed column_info (type, operators, aggregates), metrics, and a trimmed request vocabulary. Identity-free; never consumes quota."
      }
    },
    "/v1/openapi.json": {
      "get": {
        "operationId": "openapi",
        "responses": {
          "200": {
            "description": "OpenAPI 3.1 document"
          }
        },
        "security": [],
        "summary": "This document. Public — no API key required."
      }
    },
    "/v1/query": {
      "post": {
        "operationId": "query",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QueryRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QueryResponse"
                }
              }
            },
            "description": "Columnar result",
            "headers": {
              "X-Query-Id": {
                "description": "The request's query id; the same value as meta.query_id or error.query_id.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "Invalid request",
            "headers": {
              "X-Query-Id": {
                "description": "The request's query id; the same value as meta.query_id or error.query_id.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "Missing or invalid API key",
            "headers": {
              "X-Query-Id": {
                "description": "The request's query id; the same value as meta.query_id or error.query_id.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "Key does not cover the application, entity scope, or level",
            "headers": {
              "X-Query-Id": {
                "description": "The request's query id; the same value as meta.query_id or error.query_id.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "Unknown entity",
            "headers": {
              "X-Query-Id": {
                "description": "The request's query id; the same value as meta.query_id or error.query_id.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "Valid query, but it exceeded a resource budget (code budget_exceeded; details.cap + details.limit)",
            "headers": {
              "X-Query-Id": {
                "description": "The request's query id; the same value as meta.query_id or error.query_id.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "Rate limited, monthly quota exhausted, or too many concurrent queries. details.reason says which (rate_limit | monthly_quota | concurrency); Retry-After says when to retry",
            "headers": {
              "X-Query-Id": {
                "description": "The request's query id; the same value as meta.query_id or error.query_id.",
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "summary": "Run one query. Consumes the monthly quota."
      }
    },
    "/v1/query/validate": {
      "post": {
        "operationId": "validateQuery",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QueryRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidateResponse"
                }
              }
            },
            "description": "The query is valid",
            "headers": {
              "X-Query-Id": {
                "description": "The request's query id; the same value as meta.query_id or error.query_id.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "Invalid request",
            "headers": {
              "X-Query-Id": {
                "description": "The request's query id; the same value as meta.query_id or error.query_id.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "Missing or invalid API key",
            "headers": {
              "X-Query-Id": {
                "description": "The request's query id; the same value as meta.query_id or error.query_id.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "Key does not cover the application, entity scope, or level",
            "headers": {
              "X-Query-Id": {
                "description": "The request's query id; the same value as meta.query_id or error.query_id.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "Unknown entity",
            "headers": {
              "X-Query-Id": {
                "description": "The request's query id; the same value as meta.query_id or error.query_id.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "Rate limited, monthly quota exhausted, or too many concurrent queries. details.reason says which (rate_limit | monthly_quota | concurrency); Retry-After says when to retry",
            "headers": {
              "X-Query-Id": {
                "description": "The request's query id; the same value as meta.query_id or error.query_id.",
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "summary": "Dry-run: plan and serialize without executing. Rate limited; never consumes quota."
      }
    },
    "/v1/rate_limit": {
      "post": {
        "operationId": "rateLimitState",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RateLimitRequest"
              }
            }
          },
          "required": false
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitResponse"
                }
              }
            },
            "description": "Limiter state",
            "headers": {
              "X-Query-Id": {
                "description": "The request's query id; the same value as meta.query_id or error.query_id.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "Invalid request",
            "headers": {
              "X-Query-Id": {
                "description": "The request's query id; the same value as meta.query_id or error.query_id.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "Missing or invalid API key",
            "headers": {
              "X-Query-Id": {
                "description": "The request's query id; the same value as meta.query_id or error.query_id.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "Key does not cover the application, entity scope, or level",
            "headers": {
              "X-Query-Id": {
                "description": "The request's query id; the same value as meta.query_id or error.query_id.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            },
            "description": "Rate limited, monthly quota exhausted, or too many concurrent queries. details.reason says which (rate_limit | monthly_quota | concurrency); Retry-After says when to retry",
            "headers": {
              "X-Query-Id": {
                "description": "The request's query id; the same value as meta.query_id or error.query_id.",
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "summary": "Current rate-window and quota state for the addressed level. Free: reads counters without consuming; reachable while limited. The optional body identity picks the pool; an empty body reads the company pool."
      }
    }
  },
  "security": [
    {
      "apiKey": []
    }
  ]
}
