{
  "components": {
    "headers": {
      "Age": {
        "description": "Seconds since the cached response was stored (cache hits only).",
        "schema": {
          "type": "integer"
        }
      },
      "Link": {
        "description": "`<url>; rel=\"help\"`: help link an administrator attached to this error (buffered responses only).",
        "schema": {
          "type": "string"
        }
      },
      "RateLimit": {
        "description": "IETF RateLimit for the tightest quota: `limit=<n>, remaining=<n>, reset=<seconds>` (`reset` omitted for lifetime windows). Present when a quota or budget applies to the request (on success, on later errors and on streams). Values are a snapshot taken before the upstream call: this request's request count is included, its tokens and spend are not.",
        "schema": {
          "type": "string"
        }
      },
      "RateLimit-Policy": {
        "description": "IETF RateLimit-Policy: one item per enforced quota, `<limit>;w=<window seconds>;qu=\"<metric>\";id=\"<quota id>\"` (`w` omitted for lifetime windows; spend in USD). Present when a quota or budget applies to the request (on success, on later errors and on streams). Values are a snapshot taken before the upstream call: this request's request count is included, its tokens and spend are not.",
        "schema": {
          "type": "string"
        }
      },
      "Retry-After": {
        "description": "Seconds to wait before retrying (quota and limit refusals, no available target, or relayed from the provider).",
        "schema": {
          "type": "integer"
        }
      },
      "X-Quilr-Attempts": {
        "description": "Number of upstream sends made, same-target retries included. Only sent when greater than 1; also on errors.",
        "schema": {
          "minimum": 2,
          "type": "integer"
        }
      },
      "X-Quilr-Budget-Overflow": {
        "description": "`true` when a quota admitted this request inside its overflow band (at or over its limit but under the hard stop).",
        "schema": {
          "enum": [
            "true"
          ],
          "type": "string"
        }
      },
      "X-Quilr-Cache": {
        "description": "`HIT` or `MISS` when the app's response cache is on and the request was eligible (non-streaming Chat Completions, Anthropic Messages, Embeddings). Absent on bypass. Send `Cache-Control: no-cache` to skip the lookup (the response is still stored) or `no-store` to skip both.",
        "schema": {
          "enum": [
            "HIT",
            "MISS"
          ],
          "type": "string"
        }
      },
      "X-Quilr-Error-Code": {
        "description": "The error code (see `x-quilr-error-codes`). Sent on upstream failures, routing and translation errors, and Bedrock and Google-format errors that carry a gateway code; elsewhere the code is in the body.",
        "schema": {
          "type": "string"
        }
      },
      "X-Quilr-Error-Source": {
        "description": "`upstream` when the provider failed (status and scrubbed reason relayed), `gateway` for the gateway's own routing refusals.",
        "schema": {
          "enum": [
            "upstream",
            "gateway"
          ],
          "type": "string"
        }
      },
      "X-Quilr-Failover": {
        "description": "Failover tier of the target that served, when it was not the first choice: `route` (another member of the route), `fallback` (an explicit fallback), `same_model` (the same model on another provider) or `app` (another target of the app). Also on errors.",
        "schema": {
          "enum": [
            "route",
            "fallback",
            "same_model",
            "app"
          ],
          "type": "string"
        }
      },
      "X-Quilr-Quota-Blocked-By": {
        "description": "Comma-separated ids of every quota that refused the request (429).",
        "schema": {
          "type": "string"
        }
      },
      "X-Quilr-Quota-Id": {
        "description": "Id of the primary exhausted quota (429 `quota_exceeded`).",
        "schema": {
          "type": "string"
        }
      },
      "X-Quilr-Quota-Remaining": {
        "description": "Remaining allowance of the tightest quota (USD for spend). Present when a quota or budget applies to the request (on success, on later errors and on streams). Values are a snapshot taken before the upstream call: this request's request count is included, its tokens and spend are not.",
        "schema": {
          "type": "string"
        }
      },
      "X-Quilr-Quota-Reset": {
        "description": "Reset time of the tightest quota (ISO 8601 UTC); omitted for lifetime windows. Present when a quota or budget applies to the request (on success, on later errors and on streams). Values are a snapshot taken before the upstream call: this request's request count is included, its tokens and spend are not.",
        "schema": {
          "type": "string"
        }
      },
      "X-Quilr-Quota-Scope": {
        "description": "`node`: quota counters are kept per gateway node; `shared`: counters are shared by every gateway node in the region. Sent whenever any quota header is.",
        "schema": {
          "enum": [
            "node",
            "shared"
          ],
          "type": "string"
        }
      },
      "X-Quilr-Quota-Warning": {
        "description": "`id=<quota id>; pct=<used percent>`: the most-used quota at or past one of its alert thresholds.",
        "schema": {
          "type": "string"
        }
      },
      "X-Quilr-Request-ID": {
        "description": "Gateway request id (UUID). Quote it to support. Sent on every response of Chat Completions, Anthropic Messages, Embeddings and Bedrock Runtime, and on streams the gateway had to commit early; on other APIs only on errors rewritten by an administrator's friendly-error rule.",
        "schema": {
          "type": "string"
        }
      },
      "X-Quilr-Route": {
        "description": "Opaque, stable id of the routing rule that chose the upstream: `r_` plus 16 hex digits, or `default`. Never a rule name; administrators map it to a rule in the routing summary. Sent on successful responses (status below 400) that reached routing, cached responses included.",
        "schema": {
          "type": "string"
        }
      },
      "X-Quilr-Served-Model": {
        "description": "Upstream model id the gateway actually called (on a cache hit, the model of the cached response). Same condition as `X-Quilr-Route`; omitted when the deployment hides model identity, and on streams the gateway had to commit early.",
        "schema": {
          "type": "string"
        }
      },
      "X-Quilr-Token-Count-Source": {
        "description": "`estimate` when the gateway counted tokens itself instead of the provider (the provider has no counting endpoint, or the model is served through another API).",
        "schema": {
          "enum": [
            "estimate"
          ],
          "type": "string"
        }
      },
      "X-RateLimit-Limit": {
        "description": "Limit of the exhausted quota or app limit (429).",
        "schema": {
          "type": "number"
        }
      },
      "X-RateLimit-Remaining": {
        "description": "Remaining allowance of the exhausted quota or app limit (429).",
        "schema": {
          "type": "number"
        }
      },
      "X-RateLimit-Reset": {
        "description": "Unix time (seconds) the exhausted quota or limit resets (429).",
        "schema": {
          "type": "integer"
        }
      },
      "X-Should-Retry": {
        "description": "`false` when retrying cannot help (a budget is exhausted, a zero allowance, or the administrator chose so). OpenAI and Anthropic SDKs honour it.",
        "schema": {
          "enum": [
            "false"
          ],
          "type": "string"
        }
      },
      "x-amzn-ErrorType": {
        "description": "Bedrock APIs: AWS exception name of the error, e.g. `ThrottlingException`.",
        "schema": {
          "type": "string"
        }
      },
      "x-amzn-RequestId": {
        "description": "Bedrock APIs: request id (the gateway's on gateway errors, AWS's on success).",
        "schema": {
          "type": "string"
        }
      }
    },
    "responses": {
      "AnthropicError400": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/AnthropicError"
            }
          }
        },
        "description": "Invalid request, a request the target provider cannot serve, or blocked by a guardrail (sensitive data, prompt attack, custom intent, language, task adherence, hallucination).",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          }
        }
      },
      "AnthropicError401": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/AnthropicError"
            }
          }
        },
        "description": "Missing or invalid Quilr credential, or a required user identity could not be verified.",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          }
        }
      },
      "AnthropicError403": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/AnthropicError"
            }
          }
        },
        "description": "Denied by gateway policy or access rules (model, tool, source IP, routing constraints), or an attachment was blocked.",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          }
        }
      },
      "AnthropicError404": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/AnthropicError"
            }
          }
        },
        "description": "Unknown model, deployment or resource.",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          }
        }
      },
      "AnthropicError408": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/AnthropicError"
            }
          }
        },
        "description": "Timed out.",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          }
        }
      },
      "AnthropicError409": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/AnthropicError"
            }
          }
        },
        "description": "The request depends on state held by an upstream it may not use.",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          }
        }
      },
      "AnthropicError413": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/AnthropicError"
            }
          }
        },
        "description": "Request body or attachment too large.",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          }
        }
      },
      "AnthropicError415": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/AnthropicError"
            }
          }
        },
        "description": "Unsupported media type, content encoding or attachment type.",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          }
        }
      },
      "AnthropicError422": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/AnthropicError"
            }
          }
        },
        "description": "Request is well formed but cannot be processed, e.g. an attachment cannot be scanned.",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          }
        }
      },
      "AnthropicError429": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/AnthropicError"
            }
          }
        },
        "description": "Rate limit, budget or quota exceeded (gateway or provider). Upstream errors also relay the provider's retry hints when it sent them: `retry-after`, `retry-after-ms`, `x-should-retry`, `x-ratelimit-{limit,remaining,reset}-{requests,tokens}` and `anthropic-ratelimit-*`.",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "Retry-After": {
            "$ref": "#/components/headers/Retry-After"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Blocked-By": {
            "$ref": "#/components/headers/X-Quilr-Quota-Blocked-By"
          },
          "X-Quilr-Quota-Id": {
            "$ref": "#/components/headers/X-Quilr-Quota-Id"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          },
          "X-RateLimit-Limit": {
            "$ref": "#/components/headers/X-RateLimit-Limit"
          },
          "X-RateLimit-Remaining": {
            "$ref": "#/components/headers/X-RateLimit-Remaining"
          },
          "X-RateLimit-Reset": {
            "$ref": "#/components/headers/X-RateLimit-Reset"
          },
          "X-Should-Retry": {
            "$ref": "#/components/headers/X-Should-Retry"
          }
        }
      },
      "AnthropicError500": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/AnthropicError"
            }
          }
        },
        "description": "Gateway error or configuration problem.",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          }
        }
      },
      "AnthropicError502": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/AnthropicError"
            }
          }
        },
        "description": "Upstream provider error, or a provider response the gateway could not read. Upstream errors also relay the provider's retry hints when it sent them: `retry-after`, `retry-after-ms`, `x-should-retry`, `x-ratelimit-{limit,remaining,reset}-{requests,tokens}` and `anthropic-ratelimit-*`.",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          }
        }
      },
      "AnthropicError503": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/AnthropicError"
            }
          }
        },
        "description": "No upstream target is available, or a required check could not complete. Upstream errors also relay the provider's retry hints when it sent them: `retry-after`, `retry-after-ms`, `x-should-retry`, `x-ratelimit-{limit,remaining,reset}-{requests,tokens}` and `anthropic-ratelimit-*`.",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "Retry-After": {
            "$ref": "#/components/headers/Retry-After"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          }
        }
      },
      "AnthropicError504": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/AnthropicError"
            }
          }
        },
        "description": "Upstream provider timed out. Upstream errors also relay the provider's retry hints when it sent them: `retry-after`, `retry-after-ms`, `x-should-retry`, `x-ratelimit-{limit,remaining,reset}-{requests,tokens}` and `anthropic-ratelimit-*`.",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          }
        }
      },
      "AnthropicError529": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/AnthropicError"
            }
          }
        },
        "description": "Upstream provider overloaded. Upstream errors also relay the provider's retry hints when it sent them: `retry-after`, `retry-after-ms`, `x-should-retry`, `x-ratelimit-{limit,remaining,reset}-{requests,tokens}` and `anthropic-ratelimit-*`.",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          }
        }
      },
      "BedrockError400": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/BedrockError"
            }
          }
        },
        "description": "Invalid request, a request the target provider cannot serve, or blocked by a guardrail (sensitive data, prompt attack, custom intent, language, task adherence, hallucination).",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          },
          "x-amzn-ErrorType": {
            "$ref": "#/components/headers/x-amzn-ErrorType"
          },
          "x-amzn-RequestId": {
            "$ref": "#/components/headers/x-amzn-RequestId"
          }
        }
      },
      "BedrockError401": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/BedrockError"
            }
          }
        },
        "description": "Missing or invalid Quilr credential, or a required user identity could not be verified.",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          },
          "x-amzn-ErrorType": {
            "$ref": "#/components/headers/x-amzn-ErrorType"
          },
          "x-amzn-RequestId": {
            "$ref": "#/components/headers/x-amzn-RequestId"
          }
        }
      },
      "BedrockError403": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/BedrockError"
            }
          }
        },
        "description": "Denied by gateway policy or access rules (model, tool, source IP, routing constraints), or an attachment was blocked.",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          },
          "x-amzn-ErrorType": {
            "$ref": "#/components/headers/x-amzn-ErrorType"
          },
          "x-amzn-RequestId": {
            "$ref": "#/components/headers/x-amzn-RequestId"
          }
        }
      },
      "BedrockError404": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/BedrockError"
            }
          }
        },
        "description": "Unknown model, deployment or resource.",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          },
          "x-amzn-ErrorType": {
            "$ref": "#/components/headers/x-amzn-ErrorType"
          },
          "x-amzn-RequestId": {
            "$ref": "#/components/headers/x-amzn-RequestId"
          }
        }
      },
      "BedrockError408": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/BedrockError"
            }
          }
        },
        "description": "Timed out.",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          },
          "x-amzn-ErrorType": {
            "$ref": "#/components/headers/x-amzn-ErrorType"
          },
          "x-amzn-RequestId": {
            "$ref": "#/components/headers/x-amzn-RequestId"
          }
        }
      },
      "BedrockError409": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/BedrockError"
            }
          }
        },
        "description": "The request depends on state held by an upstream it may not use.",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          },
          "x-amzn-ErrorType": {
            "$ref": "#/components/headers/x-amzn-ErrorType"
          },
          "x-amzn-RequestId": {
            "$ref": "#/components/headers/x-amzn-RequestId"
          }
        }
      },
      "BedrockError413": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/BedrockError"
            }
          }
        },
        "description": "Request body or attachment too large.",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          },
          "x-amzn-ErrorType": {
            "$ref": "#/components/headers/x-amzn-ErrorType"
          },
          "x-amzn-RequestId": {
            "$ref": "#/components/headers/x-amzn-RequestId"
          }
        }
      },
      "BedrockError415": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/BedrockError"
            }
          }
        },
        "description": "Unsupported media type, content encoding or attachment type.",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          },
          "x-amzn-ErrorType": {
            "$ref": "#/components/headers/x-amzn-ErrorType"
          },
          "x-amzn-RequestId": {
            "$ref": "#/components/headers/x-amzn-RequestId"
          }
        }
      },
      "BedrockError422": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/BedrockError"
            }
          }
        },
        "description": "Request is well formed but cannot be processed, e.g. an attachment cannot be scanned.",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          },
          "x-amzn-ErrorType": {
            "$ref": "#/components/headers/x-amzn-ErrorType"
          },
          "x-amzn-RequestId": {
            "$ref": "#/components/headers/x-amzn-RequestId"
          }
        }
      },
      "BedrockError429": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/BedrockError"
            }
          }
        },
        "description": "Rate limit, budget or quota exceeded (gateway or provider). Upstream errors also relay the provider's retry hints when it sent them: `retry-after`, `retry-after-ms`, `x-should-retry`, `x-ratelimit-{limit,remaining,reset}-{requests,tokens}` and `anthropic-ratelimit-*`.",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "Retry-After": {
            "$ref": "#/components/headers/Retry-After"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Blocked-By": {
            "$ref": "#/components/headers/X-Quilr-Quota-Blocked-By"
          },
          "X-Quilr-Quota-Id": {
            "$ref": "#/components/headers/X-Quilr-Quota-Id"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          },
          "X-RateLimit-Limit": {
            "$ref": "#/components/headers/X-RateLimit-Limit"
          },
          "X-RateLimit-Remaining": {
            "$ref": "#/components/headers/X-RateLimit-Remaining"
          },
          "X-RateLimit-Reset": {
            "$ref": "#/components/headers/X-RateLimit-Reset"
          },
          "X-Should-Retry": {
            "$ref": "#/components/headers/X-Should-Retry"
          },
          "x-amzn-ErrorType": {
            "$ref": "#/components/headers/x-amzn-ErrorType"
          },
          "x-amzn-RequestId": {
            "$ref": "#/components/headers/x-amzn-RequestId"
          }
        }
      },
      "BedrockError500": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/BedrockError"
            }
          }
        },
        "description": "Gateway error or configuration problem.",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          },
          "x-amzn-ErrorType": {
            "$ref": "#/components/headers/x-amzn-ErrorType"
          },
          "x-amzn-RequestId": {
            "$ref": "#/components/headers/x-amzn-RequestId"
          }
        }
      },
      "BedrockError502": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/BedrockError"
            }
          }
        },
        "description": "Upstream provider error, or a provider response the gateway could not read. Upstream errors also relay the provider's retry hints when it sent them: `retry-after`, `retry-after-ms`, `x-should-retry`, `x-ratelimit-{limit,remaining,reset}-{requests,tokens}` and `anthropic-ratelimit-*`.",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          },
          "x-amzn-ErrorType": {
            "$ref": "#/components/headers/x-amzn-ErrorType"
          },
          "x-amzn-RequestId": {
            "$ref": "#/components/headers/x-amzn-RequestId"
          }
        }
      },
      "BedrockError503": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/BedrockError"
            }
          }
        },
        "description": "No upstream target is available, or a required check could not complete. Upstream errors also relay the provider's retry hints when it sent them: `retry-after`, `retry-after-ms`, `x-should-retry`, `x-ratelimit-{limit,remaining,reset}-{requests,tokens}` and `anthropic-ratelimit-*`.",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "Retry-After": {
            "$ref": "#/components/headers/Retry-After"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          },
          "x-amzn-ErrorType": {
            "$ref": "#/components/headers/x-amzn-ErrorType"
          },
          "x-amzn-RequestId": {
            "$ref": "#/components/headers/x-amzn-RequestId"
          }
        }
      },
      "BedrockError504": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/BedrockError"
            }
          }
        },
        "description": "Upstream provider timed out. Upstream errors also relay the provider's retry hints when it sent them: `retry-after`, `retry-after-ms`, `x-should-retry`, `x-ratelimit-{limit,remaining,reset}-{requests,tokens}` and `anthropic-ratelimit-*`.",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          },
          "x-amzn-ErrorType": {
            "$ref": "#/components/headers/x-amzn-ErrorType"
          },
          "x-amzn-RequestId": {
            "$ref": "#/components/headers/x-amzn-RequestId"
          }
        }
      },
      "BedrockError529": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/BedrockError"
            }
          }
        },
        "description": "Upstream provider overloaded. Upstream errors also relay the provider's retry hints when it sent them: `retry-after`, `retry-after-ms`, `x-should-retry`, `x-ratelimit-{limit,remaining,reset}-{requests,tokens}` and `anthropic-ratelimit-*`.",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          },
          "x-amzn-ErrorType": {
            "$ref": "#/components/headers/x-amzn-ErrorType"
          },
          "x-amzn-RequestId": {
            "$ref": "#/components/headers/x-amzn-RequestId"
          }
        }
      },
      "GoogleError400": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/GoogleError"
            }
          }
        },
        "description": "Invalid request, a request the target provider cannot serve, or blocked by a guardrail (sensitive data, prompt attack, custom intent, language, task adherence, hallucination).",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          }
        }
      },
      "GoogleError401": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/GoogleError"
            }
          }
        },
        "description": "Missing or invalid Quilr credential, or a required user identity could not be verified.",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          }
        }
      },
      "GoogleError403": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/GoogleError"
            }
          }
        },
        "description": "Denied by gateway policy or access rules (model, tool, source IP, routing constraints), or an attachment was blocked.",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          }
        }
      },
      "GoogleError404": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/GoogleError"
            }
          }
        },
        "description": "Unknown model, deployment or resource.",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          }
        }
      },
      "GoogleError408": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/GoogleError"
            }
          }
        },
        "description": "Timed out.",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          }
        }
      },
      "GoogleError409": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/GoogleError"
            }
          }
        },
        "description": "The request depends on state held by an upstream it may not use.",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          }
        }
      },
      "GoogleError413": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/GoogleError"
            }
          }
        },
        "description": "Request body or attachment too large.",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          }
        }
      },
      "GoogleError415": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/GoogleError"
            }
          }
        },
        "description": "Unsupported media type, content encoding or attachment type.",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          }
        }
      },
      "GoogleError422": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/GoogleError"
            }
          }
        },
        "description": "Request is well formed but cannot be processed, e.g. an attachment cannot be scanned.",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          }
        }
      },
      "GoogleError429": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/GoogleError"
            }
          }
        },
        "description": "Rate limit, budget or quota exceeded (gateway or provider). Upstream errors also relay the provider's retry hints when it sent them: `retry-after`, `retry-after-ms`, `x-should-retry`, `x-ratelimit-{limit,remaining,reset}-{requests,tokens}` and `anthropic-ratelimit-*`.",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "Retry-After": {
            "$ref": "#/components/headers/Retry-After"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Blocked-By": {
            "$ref": "#/components/headers/X-Quilr-Quota-Blocked-By"
          },
          "X-Quilr-Quota-Id": {
            "$ref": "#/components/headers/X-Quilr-Quota-Id"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          },
          "X-RateLimit-Limit": {
            "$ref": "#/components/headers/X-RateLimit-Limit"
          },
          "X-RateLimit-Remaining": {
            "$ref": "#/components/headers/X-RateLimit-Remaining"
          },
          "X-RateLimit-Reset": {
            "$ref": "#/components/headers/X-RateLimit-Reset"
          },
          "X-Should-Retry": {
            "$ref": "#/components/headers/X-Should-Retry"
          }
        }
      },
      "GoogleError500": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/GoogleError"
            }
          }
        },
        "description": "Gateway error or configuration problem.",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          }
        }
      },
      "GoogleError502": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/GoogleError"
            }
          }
        },
        "description": "Upstream provider error, or a provider response the gateway could not read. Upstream errors also relay the provider's retry hints when it sent them: `retry-after`, `retry-after-ms`, `x-should-retry`, `x-ratelimit-{limit,remaining,reset}-{requests,tokens}` and `anthropic-ratelimit-*`.",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          }
        }
      },
      "GoogleError503": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/GoogleError"
            }
          }
        },
        "description": "No upstream target is available, or a required check could not complete. Upstream errors also relay the provider's retry hints when it sent them: `retry-after`, `retry-after-ms`, `x-should-retry`, `x-ratelimit-{limit,remaining,reset}-{requests,tokens}` and `anthropic-ratelimit-*`.",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "Retry-After": {
            "$ref": "#/components/headers/Retry-After"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          }
        }
      },
      "GoogleError504": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/GoogleError"
            }
          }
        },
        "description": "Upstream provider timed out. Upstream errors also relay the provider's retry hints when it sent them: `retry-after`, `retry-after-ms`, `x-should-retry`, `x-ratelimit-{limit,remaining,reset}-{requests,tokens}` and `anthropic-ratelimit-*`.",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          }
        }
      },
      "GoogleError529": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/GoogleError"
            }
          }
        },
        "description": "Upstream provider overloaded. Upstream errors also relay the provider's retry hints when it sent them: `retry-after`, `retry-after-ms`, `x-should-retry`, `x-ratelimit-{limit,remaining,reset}-{requests,tokens}` and `anthropic-ratelimit-*`.",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          }
        }
      },
      "OpenAIError400": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/OpenAIError"
            }
          }
        },
        "description": "Invalid request, a request the target provider cannot serve, or blocked by a guardrail (sensitive data, prompt attack, custom intent, language, task adherence, hallucination).",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          }
        }
      },
      "OpenAIError401": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/OpenAIError"
            }
          }
        },
        "description": "Missing or invalid Quilr credential, or a required user identity could not be verified.",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          }
        }
      },
      "OpenAIError403": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/OpenAIError"
            }
          }
        },
        "description": "Denied by gateway policy or access rules (model, tool, source IP, routing constraints), or an attachment was blocked.",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          }
        }
      },
      "OpenAIError404": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/OpenAIError"
            }
          }
        },
        "description": "Unknown model, deployment or resource.",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          }
        }
      },
      "OpenAIError408": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/OpenAIError"
            }
          }
        },
        "description": "Timed out.",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          }
        }
      },
      "OpenAIError409": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/OpenAIError"
            }
          }
        },
        "description": "The request depends on state held by an upstream it may not use.",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          }
        }
      },
      "OpenAIError413": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/OpenAIError"
            }
          }
        },
        "description": "Request body or attachment too large.",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          }
        }
      },
      "OpenAIError415": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/OpenAIError"
            }
          }
        },
        "description": "Unsupported media type, content encoding or attachment type.",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          }
        }
      },
      "OpenAIError422": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/OpenAIError"
            }
          }
        },
        "description": "Request is well formed but cannot be processed, e.g. an attachment cannot be scanned.",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          }
        }
      },
      "OpenAIError429": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/OpenAIError"
            }
          }
        },
        "description": "Rate limit, budget or quota exceeded (gateway or provider). Upstream errors also relay the provider's retry hints when it sent them: `retry-after`, `retry-after-ms`, `x-should-retry`, `x-ratelimit-{limit,remaining,reset}-{requests,tokens}` and `anthropic-ratelimit-*`.",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "Retry-After": {
            "$ref": "#/components/headers/Retry-After"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Blocked-By": {
            "$ref": "#/components/headers/X-Quilr-Quota-Blocked-By"
          },
          "X-Quilr-Quota-Id": {
            "$ref": "#/components/headers/X-Quilr-Quota-Id"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          },
          "X-RateLimit-Limit": {
            "$ref": "#/components/headers/X-RateLimit-Limit"
          },
          "X-RateLimit-Remaining": {
            "$ref": "#/components/headers/X-RateLimit-Remaining"
          },
          "X-RateLimit-Reset": {
            "$ref": "#/components/headers/X-RateLimit-Reset"
          },
          "X-Should-Retry": {
            "$ref": "#/components/headers/X-Should-Retry"
          }
        }
      },
      "OpenAIError500": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/OpenAIError"
            }
          }
        },
        "description": "Gateway error or configuration problem.",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          }
        }
      },
      "OpenAIError502": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/OpenAIError"
            }
          }
        },
        "description": "Upstream provider error, or a provider response the gateway could not read. Upstream errors also relay the provider's retry hints when it sent them: `retry-after`, `retry-after-ms`, `x-should-retry`, `x-ratelimit-{limit,remaining,reset}-{requests,tokens}` and `anthropic-ratelimit-*`.",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          }
        }
      },
      "OpenAIError503": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/OpenAIError"
            }
          }
        },
        "description": "No upstream target is available, or a required check could not complete. Upstream errors also relay the provider's retry hints when it sent them: `retry-after`, `retry-after-ms`, `x-should-retry`, `x-ratelimit-{limit,remaining,reset}-{requests,tokens}` and `anthropic-ratelimit-*`.",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "Retry-After": {
            "$ref": "#/components/headers/Retry-After"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          }
        }
      },
      "OpenAIError504": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/OpenAIError"
            }
          }
        },
        "description": "Upstream provider timed out. Upstream errors also relay the provider's retry hints when it sent them: `retry-after`, `retry-after-ms`, `x-should-retry`, `x-ratelimit-{limit,remaining,reset}-{requests,tokens}` and `anthropic-ratelimit-*`.",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          }
        }
      },
      "OpenAIError529": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/OpenAIError"
            }
          }
        },
        "description": "Upstream provider overloaded. Upstream errors also relay the provider's retry hints when it sent them: `retry-after`, `retry-after-ms`, `x-should-retry`, `x-ratelimit-{limit,remaining,reset}-{requests,tokens}` and `anthropic-ratelimit-*`.",
        "headers": {
          "Link": {
            "$ref": "#/components/headers/Link"
          },
          "RateLimit": {
            "$ref": "#/components/headers/RateLimit"
          },
          "RateLimit-Policy": {
            "$ref": "#/components/headers/RateLimit-Policy"
          },
          "X-Quilr-Attempts": {
            "$ref": "#/components/headers/X-Quilr-Attempts"
          },
          "X-Quilr-Error-Code": {
            "$ref": "#/components/headers/X-Quilr-Error-Code"
          },
          "X-Quilr-Error-Source": {
            "$ref": "#/components/headers/X-Quilr-Error-Source"
          },
          "X-Quilr-Failover": {
            "$ref": "#/components/headers/X-Quilr-Failover"
          },
          "X-Quilr-Quota-Remaining": {
            "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
          },
          "X-Quilr-Quota-Reset": {
            "$ref": "#/components/headers/X-Quilr-Quota-Reset"
          },
          "X-Quilr-Quota-Scope": {
            "$ref": "#/components/headers/X-Quilr-Quota-Scope"
          },
          "X-Quilr-Request-ID": {
            "$ref": "#/components/headers/X-Quilr-Request-ID"
          }
        }
      }
    },
    "schemas": {
      "AnthropicCountTokensRequest": {
        "additionalProperties": true,
        "properties": {
          "messages": {
            "items": {
              "additionalProperties": true,
              "properties": {
                "content": {
                  "items": {
                    "additionalProperties": true,
                    "properties": {
                      "type": {
                        "description": "`text`, `image`, `document`, `tool_use`, `tool_result`, `thinking`, and other Anthropic block types.",
                        "type": "string"
                      }
                    },
                    "required": [
                      "type"
                    ],
                    "type": "object"
                  },
                  "type": [
                    "string",
                    "array"
                  ]
                },
                "role": {
                  "enum": [
                    "user",
                    "assistant"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "role",
                "content"
              ],
              "type": "object"
            },
            "type": "array"
          },
          "model": {
            "type": "string"
          },
          "system": {
            "type": [
              "string",
              "array"
            ]
          },
          "thinking": {
            "additionalProperties": true,
            "properties": {
              "type": {
                "type": "string"
              }
            },
            "type": "object"
          },
          "tools": {
            "items": {
              "additionalProperties": true,
              "properties": {
                "name": {
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          }
        },
        "required": [
          "model",
          "messages"
        ],
        "type": "object"
      },
      "AnthropicCountTokensResponse": {
        "additionalProperties": true,
        "properties": {
          "input_tokens": {
            "type": "integer"
          }
        },
        "required": [
          "input_tokens"
        ],
        "type": "object"
      },
      "AnthropicError": {
        "additionalProperties": true,
        "description": "Anthropic-style error envelope. The gateway adds `code` (and the other fields listed) inside `error`; guardrail blocks keep `code` but not `details`.",
        "properties": {
          "error": {
            "additionalProperties": true,
            "properties": {
              "blocked_by": {
                "description": "Every quota that refused the request.",
                "items": {
                  "$ref": "#/components/schemas/QuotaInfo"
                },
                "type": "array"
              },
              "code": {
                "description": "Error code: a gateway or provider code from the catalog in `x-quilr-error-codes` (codes are only ever added, never renamed), or a provider's own code passed through. Adapter-specific codes not in the catalog may also appear.",
                "type": "string"
              },
              "help_url": {
                "description": "Help link an administrator attached to this error (also appended to `message`).",
                "format": "uri",
                "type": "string"
              },
              "message": {
                "type": "string"
              },
              "provider": {
                "description": "Provider the gateway called (upstream errors).",
                "type": "string"
              },
              "quota": {
                "$ref": "#/components/schemas/QuotaInfo",
                "description": "The exhausted quota (`quota_exceeded`)."
              },
              "source": {
                "description": "Present when the provider failed; the gateway relays its status and a scrubbed reason.",
                "enum": [
                  "upstream"
                ],
                "type": "string"
              },
              "type": {
                "type": "string"
              },
              "upstream_request_id": {
                "description": "The provider's request id, when it sent one.",
                "type": "string"
              }
            },
            "required": [
              "type",
              "message"
            ],
            "type": "object"
          },
          "type": {
            "const": "error"
          }
        },
        "required": [
          "type",
          "error"
        ],
        "type": "object"
      },
      "AnthropicMessage": {
        "additionalProperties": true,
        "description": "A Messages API response.",
        "properties": {
          "content": {
            "items": {
              "additionalProperties": true,
              "properties": {
                "type": {
                  "description": "`text`, `image`, `document`, `tool_use`, `tool_result`, `thinking`, and other Anthropic block types.",
                  "type": "string"
                }
              },
              "required": [
                "type"
              ],
              "type": "object"
            },
            "type": "array"
          },
          "id": {
            "type": "string"
          },
          "model": {
            "type": "string"
          },
          "role": {
            "const": "assistant"
          },
          "stop_reason": {
            "type": [
              "string",
              "null"
            ]
          },
          "stop_sequence": {
            "type": [
              "string",
              "null"
            ]
          },
          "type": {
            "const": "message"
          },
          "usage": {
            "additionalProperties": true,
            "properties": {
              "cache_creation_input_tokens": {
                "type": [
                  "integer",
                  "null"
                ]
              },
              "cache_read_input_tokens": {
                "type": [
                  "integer",
                  "null"
                ]
              },
              "input_tokens": {
                "type": "integer"
              },
              "output_tokens": {
                "type": "integer"
              }
            },
            "type": "object"
          }
        },
        "type": "object"
      },
      "AnthropicMessagesRequest": {
        "additionalProperties": true,
        "properties": {
          "max_tokens": {
            "description": "Maximum output tokens. Required by Anthropic.",
            "type": "integer"
          },
          "messages": {
            "items": {
              "additionalProperties": true,
              "properties": {
                "content": {
                  "items": {
                    "additionalProperties": true,
                    "properties": {
                      "type": {
                        "description": "`text`, `image`, `document`, `tool_use`, `tool_result`, `thinking`, and other Anthropic block types.",
                        "type": "string"
                      }
                    },
                    "required": [
                      "type"
                    ],
                    "type": "object"
                  },
                  "type": [
                    "string",
                    "array"
                  ]
                },
                "role": {
                  "enum": [
                    "user",
                    "assistant"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "role",
                "content"
              ],
              "type": "object"
            },
            "type": "array"
          },
          "metadata": {
            "additionalProperties": true,
            "properties": {
              "user_id": {
                "type": "string"
              }
            },
            "type": "object"
          },
          "model": {
            "description": "Model id or alias configured for the app.",
            "type": "string"
          },
          "stop_sequences": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "stream": {
            "description": "Stream the response as server-sent events.",
            "type": "boolean"
          },
          "system": {
            "description": "System prompt: text or text blocks.",
            "type": [
              "string",
              "array"
            ]
          },
          "temperature": {
            "type": "number"
          },
          "thinking": {
            "additionalProperties": true,
            "properties": {
              "type": {
                "type": "string"
              }
            },
            "type": "object"
          },
          "tool_choice": {
            "additionalProperties": true,
            "properties": {
              "type": {
                "type": "string"
              }
            },
            "type": "object"
          },
          "tools": {
            "items": {
              "additionalProperties": true,
              "properties": {
                "name": {
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "top_k": {
            "type": "integer"
          },
          "top_p": {
            "type": "number"
          }
        },
        "required": [
          "model",
          "messages"
        ],
        "type": "object"
      },
      "AnthropicModel": {
        "additionalProperties": true,
        "properties": {
          "created_at": {
            "type": "string"
          },
          "display_name": {
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "type": {
            "const": "model"
          }
        },
        "required": [
          "type",
          "id"
        ],
        "type": "object"
      },
      "AnthropicModelList": {
        "additionalProperties": true,
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/AnthropicModel"
            },
            "type": "array"
          },
          "first_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "has_more": {
            "type": "boolean"
          },
          "last_id": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "data"
        ],
        "type": "object"
      },
      "AnthropicQuotaUsage": {
        "additionalProperties": true,
        "description": "The caller's own quota buckets.",
        "properties": {
          "node": {
            "description": "Opaque identifier of the gateway node that answered.",
            "type": "string"
          },
          "observed_at": {
            "format": "date-time",
            "type": "string"
          },
          "quotas": {
            "items": {
              "additionalProperties": true,
              "properties": {
                "bucket": {
                  "type": "string"
                },
                "id": {
                  "type": "string"
                },
                "kind": {
                  "type": "string"
                },
                "label": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "limit": {
                  "type": [
                    "number",
                    "string"
                  ]
                },
                "metric": {
                  "type": "string"
                },
                "remaining": {
                  "type": [
                    "number",
                    "string"
                  ]
                },
                "reset_at": {
                  "format": "date-time",
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "used": {
                  "type": [
                    "number",
                    "string"
                  ]
                },
                "window": {
                  "type": "object"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "scope": {
            "description": "`node` when the counters are kept per gateway node, `shared` when they are shared by the region.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "AnthropicStreamEvent": {
        "description": "Anthropic server-sent events: `message_start`, `content_block_start`, `content_block_delta`, `content_block_stop`, `message_delta`, `message_stop`, `ping` and `error`.",
        "type": "string"
      },
      "AssistantsAssistant": {
        "additionalProperties": true,
        "properties": {
          "created_at": {
            "type": "integer"
          },
          "id": {
            "type": "string"
          },
          "instructions": {
            "type": [
              "string",
              "null"
            ]
          },
          "metadata": {
            "additionalProperties": true,
            "type": [
              "object",
              "null"
            ]
          },
          "model": {
            "type": "string"
          },
          "name": {
            "type": [
              "string",
              "null"
            ]
          },
          "object": {
            "const": "assistant",
            "type": "string"
          },
          "tools": {
            "type": "array"
          }
        },
        "type": "object"
      },
      "AssistantsAssistantCreateRequest": {
        "additionalProperties": true,
        "properties": {
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "instructions": {
            "type": [
              "string",
              "null"
            ]
          },
          "metadata": {
            "additionalProperties": true,
            "description": "Up to 16 key-value pairs.",
            "type": "object"
          },
          "model": {
            "type": "string"
          },
          "name": {
            "type": [
              "string",
              "null"
            ]
          },
          "reasoning_effort": {
            "type": [
              "string",
              "null"
            ]
          },
          "response_format": {
            "type": [
              "string",
              "object",
              "null"
            ]
          },
          "temperature": {
            "type": [
              "number",
              "null"
            ]
          },
          "tool_resources": {
            "additionalProperties": true,
            "type": [
              "object",
              "null"
            ]
          },
          "tools": {
            "description": "Tools: `code_interpreter`, `file_search` or `function`.",
            "items": {
              "additionalProperties": true,
              "properties": {
                "type": {
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "top_p": {
            "type": [
              "number",
              "null"
            ]
          }
        },
        "required": [
          "model"
        ],
        "type": "object"
      },
      "AssistantsAssistantModifyRequest": {
        "additionalProperties": true,
        "properties": {
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "instructions": {
            "type": [
              "string",
              "null"
            ]
          },
          "metadata": {
            "additionalProperties": true,
            "description": "Up to 16 key-value pairs.",
            "type": "object"
          },
          "model": {
            "type": "string"
          },
          "name": {
            "type": [
              "string",
              "null"
            ]
          },
          "reasoning_effort": {
            "type": [
              "string",
              "null"
            ]
          },
          "response_format": {
            "type": [
              "string",
              "object",
              "null"
            ]
          },
          "temperature": {
            "type": [
              "number",
              "null"
            ]
          },
          "tool_resources": {
            "additionalProperties": true,
            "type": [
              "object",
              "null"
            ]
          },
          "tools": {
            "description": "Tools: `code_interpreter`, `file_search` or `function`.",
            "items": {
              "additionalProperties": true,
              "properties": {
                "type": {
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "top_p": {
            "type": [
              "number",
              "null"
            ]
          }
        },
        "type": "object"
      },
      "AssistantsDeleted": {
        "additionalProperties": true,
        "properties": {
          "deleted": {
            "type": "boolean"
          },
          "id": {
            "type": "string"
          },
          "object": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "AssistantsList": {
        "additionalProperties": true,
        "description": "A page of objects.",
        "properties": {
          "data": {
            "items": {
              "additionalProperties": true,
              "type": "object"
            },
            "type": "array"
          },
          "first_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "has_more": {
            "type": "boolean"
          },
          "last_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "object": {
            "const": "list",
            "type": "string"
          }
        },
        "type": "object"
      },
      "AssistantsMessage": {
        "additionalProperties": true,
        "properties": {
          "assistant_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "attachments": {
            "type": [
              "array",
              "null"
            ]
          },
          "content": {
            "items": {
              "additionalProperties": true,
              "properties": {
                "type": {
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "created_at": {
            "type": "integer"
          },
          "id": {
            "type": "string"
          },
          "metadata": {
            "additionalProperties": true,
            "type": [
              "object",
              "null"
            ]
          },
          "object": {
            "const": "thread.message",
            "type": "string"
          },
          "role": {
            "type": "string"
          },
          "run_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "status": {
            "type": [
              "string",
              "null"
            ]
          },
          "thread_id": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "AssistantsMessageCreateRequest": {
        "additionalProperties": true,
        "properties": {
          "attachments": {
            "items": {
              "additionalProperties": true,
              "type": "object"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "content": {
            "description": "Text, or an array of `text`, `image_file` and `image_url` parts.",
            "items": {
              "additionalProperties": true,
              "properties": {
                "type": {
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": [
              "string",
              "array"
            ]
          },
          "metadata": {
            "additionalProperties": true,
            "description": "Up to 16 key-value pairs.",
            "type": "object"
          },
          "role": {
            "enum": [
              "user",
              "assistant"
            ],
            "type": "string"
          }
        },
        "required": [
          "role",
          "content"
        ],
        "type": "object"
      },
      "AssistantsMetadataRequest": {
        "additionalProperties": true,
        "properties": {
          "metadata": {
            "additionalProperties": true,
            "description": "Up to 16 key-value pairs.",
            "type": "object"
          }
        },
        "type": "object"
      },
      "AssistantsRun": {
        "additionalProperties": true,
        "properties": {
          "assistant_id": {
            "type": "string"
          },
          "created_at": {
            "type": "integer"
          },
          "id": {
            "type": "string"
          },
          "last_error": {
            "additionalProperties": true,
            "type": [
              "object",
              "null"
            ]
          },
          "metadata": {
            "additionalProperties": true,
            "type": [
              "object",
              "null"
            ]
          },
          "model": {
            "type": "string"
          },
          "object": {
            "const": "thread.run",
            "type": "string"
          },
          "required_action": {
            "additionalProperties": true,
            "type": [
              "object",
              "null"
            ]
          },
          "status": {
            "description": "`queued`, `in_progress`, `requires_action`, `cancelling`, `cancelled`, `failed`, `completed`, `incomplete` or `expired`.",
            "type": "string"
          },
          "thread_id": {
            "type": "string"
          },
          "usage": {
            "additionalProperties": true,
            "type": [
              "object",
              "null"
            ]
          }
        },
        "type": "object"
      },
      "AssistantsRunCreateRequest": {
        "additionalProperties": true,
        "properties": {
          "additional_instructions": {
            "type": [
              "string",
              "null"
            ]
          },
          "additional_messages": {
            "items": {
              "additionalProperties": true,
              "properties": {
                "attachments": {
                  "items": {
                    "additionalProperties": true,
                    "type": "object"
                  },
                  "type": [
                    "array",
                    "null"
                  ]
                },
                "content": {
                  "description": "Text, or an array of `text`, `image_file` and `image_url` parts.",
                  "items": {
                    "additionalProperties": true,
                    "properties": {
                      "type": {
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  "type": [
                    "string",
                    "array"
                  ]
                },
                "metadata": {
                  "additionalProperties": true,
                  "description": "Up to 16 key-value pairs.",
                  "type": "object"
                },
                "role": {
                  "enum": [
                    "user",
                    "assistant"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "role",
                "content"
              ],
              "type": "object"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "assistant_id": {
            "type": "string"
          },
          "instructions": {
            "type": [
              "string",
              "null"
            ]
          },
          "max_completion_tokens": {
            "type": [
              "integer",
              "null"
            ]
          },
          "max_prompt_tokens": {
            "type": [
              "integer",
              "null"
            ]
          },
          "metadata": {
            "additionalProperties": true,
            "description": "Up to 16 key-value pairs.",
            "type": "object"
          },
          "model": {
            "description": "Overrides the assistant's model.",
            "type": [
              "string",
              "null"
            ]
          },
          "parallel_tool_calls": {
            "type": "boolean"
          },
          "response_format": {
            "type": [
              "string",
              "object",
              "null"
            ]
          },
          "stream": {
            "description": "Return a server-sent event stream.",
            "type": [
              "boolean",
              "null"
            ]
          },
          "temperature": {
            "type": [
              "number",
              "null"
            ]
          },
          "tool_choice": {
            "type": [
              "string",
              "object",
              "null"
            ]
          },
          "tools": {
            "description": "Tools: `code_interpreter`, `file_search` or `function`.",
            "items": {
              "additionalProperties": true,
              "properties": {
                "type": {
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "top_p": {
            "type": [
              "number",
              "null"
            ]
          },
          "truncation_strategy": {
            "additionalProperties": true,
            "type": [
              "object",
              "null"
            ]
          }
        },
        "required": [
          "assistant_id"
        ],
        "type": "object"
      },
      "AssistantsRunStep": {
        "additionalProperties": true,
        "properties": {
          "created_at": {
            "type": "integer"
          },
          "id": {
            "type": "string"
          },
          "metadata": {
            "additionalProperties": true,
            "type": [
              "object",
              "null"
            ]
          },
          "object": {
            "const": "thread.run.step",
            "type": "string"
          },
          "run_id": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "step_details": {
            "additionalProperties": true,
            "type": "object"
          },
          "thread_id": {
            "type": "string"
          },
          "type": {
            "enum": [
              "message_creation",
              "tool_calls"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "AssistantsSubmitToolOutputsRequest": {
        "additionalProperties": true,
        "properties": {
          "stream": {
            "description": "Return a server-sent event stream.",
            "type": [
              "boolean",
              "null"
            ]
          },
          "tool_outputs": {
            "items": {
              "additionalProperties": true,
              "properties": {
                "output": {
                  "type": "string"
                },
                "tool_call_id": {
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          }
        },
        "required": [
          "tool_outputs"
        ],
        "type": "object"
      },
      "AssistantsThread": {
        "additionalProperties": true,
        "properties": {
          "created_at": {
            "type": "integer"
          },
          "id": {
            "type": "string"
          },
          "metadata": {
            "additionalProperties": true,
            "type": [
              "object",
              "null"
            ]
          },
          "object": {
            "const": "thread",
            "type": "string"
          },
          "tool_resources": {
            "additionalProperties": true,
            "type": [
              "object",
              "null"
            ]
          }
        },
        "type": "object"
      },
      "AssistantsThreadAndRunCreateRequest": {
        "additionalProperties": true,
        "properties": {
          "assistant_id": {
            "type": "string"
          },
          "instructions": {
            "type": [
              "string",
              "null"
            ]
          },
          "max_completion_tokens": {
            "type": [
              "integer",
              "null"
            ]
          },
          "max_prompt_tokens": {
            "type": [
              "integer",
              "null"
            ]
          },
          "metadata": {
            "additionalProperties": true,
            "description": "Up to 16 key-value pairs.",
            "type": "object"
          },
          "model": {
            "description": "Overrides the assistant's model.",
            "type": [
              "string",
              "null"
            ]
          },
          "parallel_tool_calls": {
            "type": "boolean"
          },
          "response_format": {
            "type": [
              "string",
              "object",
              "null"
            ]
          },
          "stream": {
            "description": "Return a server-sent event stream.",
            "type": [
              "boolean",
              "null"
            ]
          },
          "temperature": {
            "type": [
              "number",
              "null"
            ]
          },
          "thread": {
            "$ref": "#/components/schemas/AssistantsThreadCreateRequest"
          },
          "tool_choice": {
            "type": [
              "string",
              "object",
              "null"
            ]
          },
          "tool_resources": {
            "additionalProperties": true,
            "type": [
              "object",
              "null"
            ]
          },
          "tools": {
            "description": "Tools: `code_interpreter`, `file_search` or `function`.",
            "items": {
              "additionalProperties": true,
              "properties": {
                "type": {
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "top_p": {
            "type": [
              "number",
              "null"
            ]
          },
          "truncation_strategy": {
            "additionalProperties": true,
            "type": [
              "object",
              "null"
            ]
          }
        },
        "required": [
          "assistant_id"
        ],
        "type": "object"
      },
      "AssistantsThreadCreateRequest": {
        "additionalProperties": true,
        "properties": {
          "messages": {
            "items": {
              "additionalProperties": true,
              "properties": {
                "attachments": {
                  "items": {
                    "additionalProperties": true,
                    "type": "object"
                  },
                  "type": [
                    "array",
                    "null"
                  ]
                },
                "content": {
                  "description": "Text, or an array of `text`, `image_file` and `image_url` parts.",
                  "items": {
                    "additionalProperties": true,
                    "properties": {
                      "type": {
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  "type": [
                    "string",
                    "array"
                  ]
                },
                "metadata": {
                  "additionalProperties": true,
                  "description": "Up to 16 key-value pairs.",
                  "type": "object"
                },
                "role": {
                  "enum": [
                    "user",
                    "assistant"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "role",
                "content"
              ],
              "type": "object"
            },
            "type": "array"
          },
          "metadata": {
            "additionalProperties": true,
            "description": "Up to 16 key-value pairs.",
            "type": "object"
          },
          "tool_resources": {
            "additionalProperties": true,
            "type": [
              "object",
              "null"
            ]
          }
        },
        "type": "object"
      },
      "AssistantsThreadModifyRequest": {
        "additionalProperties": true,
        "properties": {
          "metadata": {
            "additionalProperties": true,
            "description": "Up to 16 key-value pairs.",
            "type": "object"
          },
          "tool_resources": {
            "additionalProperties": true,
            "type": [
              "object",
              "null"
            ]
          }
        },
        "type": "object"
      },
      "AzureOpenAIChatCompletion": {
        "additionalProperties": true,
        "description": "A chat completion.",
        "properties": {
          "choices": {
            "items": {
              "additionalProperties": true,
              "properties": {
                "finish_reason": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "index": {
                  "type": "integer"
                },
                "message": {
                  "additionalProperties": true,
                  "properties": {
                    "content": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "role": {
                      "type": "string"
                    },
                    "tool_calls": {
                      "items": {
                        "additionalProperties": true,
                        "type": "object"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "created": {
            "type": "integer"
          },
          "id": {
            "type": "string"
          },
          "model": {
            "type": "string"
          },
          "object": {
            "const": "chat.completion",
            "type": "string"
          },
          "usage": {
            "additionalProperties": true,
            "properties": {
              "completion_tokens": {
                "type": "integer"
              },
              "prompt_tokens": {
                "type": "integer"
              },
              "total_tokens": {
                "type": "integer"
              }
            },
            "type": "object"
          }
        },
        "type": "object"
      },
      "AzureOpenAIChatCompletionChunk": {
        "additionalProperties": true,
        "description": "Data of one server-sent event; the stream ends with `data: [DONE]`.",
        "properties": {
          "choices": {
            "items": {
              "additionalProperties": true,
              "type": "object"
            },
            "type": "array"
          },
          "id": {
            "type": "string"
          },
          "object": {
            "const": "chat.completion.chunk",
            "type": "string"
          },
          "usage": {
            "additionalProperties": true,
            "type": [
              "object",
              "null"
            ]
          }
        },
        "type": "object"
      },
      "AzureOpenAIChatCompletionRequest": {
        "additionalProperties": true,
        "description": "Chat completions body. Fields not listed are forwarded to the provider.",
        "properties": {
          "max_completion_tokens": {
            "type": [
              "integer",
              "null"
            ]
          },
          "max_tokens": {
            "type": [
              "integer",
              "null"
            ]
          },
          "messages": {
            "items": {
              "additionalProperties": true,
              "properties": {
                "content": {
                  "items": {
                    "additionalProperties": true,
                    "type": "object"
                  },
                  "type": [
                    "string",
                    "array",
                    "null"
                  ]
                },
                "name": {
                  "type": "string"
                },
                "role": {
                  "description": "`system`, `developer`, `user`, `assistant` or `tool`.",
                  "type": "string"
                },
                "tool_call_id": {
                  "type": "string"
                },
                "tool_calls": {
                  "items": {
                    "additionalProperties": true,
                    "type": "object"
                  },
                  "type": "array"
                }
              },
              "required": [
                "role"
              ],
              "type": "object"
            },
            "type": "array"
          },
          "model": {
            "description": "Model; the deployment name when omitted.",
            "type": "string"
          },
          "response_format": {
            "additionalProperties": true,
            "type": "object"
          },
          "stream": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "stream_options": {
            "additionalProperties": true,
            "type": [
              "object",
              "null"
            ]
          },
          "temperature": {
            "type": [
              "number",
              "null"
            ]
          },
          "tool_choice": {
            "type": [
              "string",
              "object"
            ]
          },
          "tools": {
            "items": {
              "additionalProperties": true,
              "type": "object"
            },
            "type": "array"
          },
          "top_p": {
            "type": [
              "number",
              "null"
            ]
          },
          "user": {
            "type": "string"
          }
        },
        "required": [
          "messages"
        ],
        "type": "object"
      },
      "AzureOpenAICreateRequest": {
        "additionalProperties": true,
        "description": "Responses create body. Fields not listed are forwarded to the provider.",
        "properties": {
          "background": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "conversation": {
            "description": "Conversation this response belongs to (upstream state).",
            "type": [
              "string",
              "object",
              "null"
            ]
          },
          "include": {
            "items": {
              "type": "string"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "input": {
            "description": "Text, or a list of input items (messages, function call outputs, ...).",
            "items": {
              "additionalProperties": true,
              "type": "object"
            },
            "type": [
              "string",
              "array"
            ]
          },
          "instructions": {
            "description": "System or developer instructions.",
            "type": [
              "string",
              "null"
            ]
          },
          "max_output_tokens": {
            "type": [
              "integer",
              "null"
            ]
          },
          "metadata": {
            "additionalProperties": true,
            "type": [
              "object",
              "null"
            ]
          },
          "model": {
            "description": "Model id or alias configured for the app.",
            "type": "string"
          },
          "previous_response_id": {
            "description": "Continue from a stored response. Stays on the upstream that stored it.",
            "type": [
              "string",
              "null"
            ]
          },
          "reasoning": {
            "additionalProperties": true,
            "type": [
              "object",
              "null"
            ]
          },
          "store": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "stream": {
            "description": "Stream the answer as server-sent events.",
            "type": [
              "boolean",
              "null"
            ]
          },
          "temperature": {
            "type": [
              "number",
              "null"
            ]
          },
          "text": {
            "additionalProperties": true,
            "type": [
              "object",
              "null"
            ]
          },
          "tool_choice": {
            "type": [
              "string",
              "object"
            ]
          },
          "tools": {
            "items": {
              "additionalProperties": true,
              "type": "object"
            },
            "type": "array"
          },
          "top_p": {
            "type": [
              "number",
              "null"
            ]
          }
        },
        "type": "object"
      },
      "AzureOpenAIDeletedResponse": {
        "additionalProperties": true,
        "properties": {
          "deleted": {
            "type": "boolean"
          },
          "id": {
            "type": "string"
          },
          "object": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "AzureOpenAIEmbeddingList": {
        "additionalProperties": true,
        "properties": {
          "data": {
            "items": {
              "additionalProperties": true,
              "properties": {
                "embedding": {
                  "items": {
                    "type": "number"
                  },
                  "type": [
                    "array",
                    "string"
                  ]
                },
                "index": {
                  "type": "integer"
                },
                "object": {
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "model": {
            "type": "string"
          },
          "object": {
            "const": "list",
            "type": "string"
          },
          "usage": {
            "additionalProperties": true,
            "properties": {
              "prompt_tokens": {
                "type": "integer"
              },
              "total_tokens": {
                "type": "integer"
              }
            },
            "type": "object"
          }
        },
        "type": "object"
      },
      "AzureOpenAIEmbeddingRequest": {
        "additionalProperties": true,
        "properties": {
          "dimensions": {
            "type": "integer"
          },
          "encoding_format": {
            "enum": [
              "float",
              "base64"
            ],
            "type": "string"
          },
          "input": {
            "description": "Text, a list of texts, or token arrays.",
            "items": {
              "type": [
                "string",
                "integer",
                "array"
              ]
            },
            "type": [
              "string",
              "array"
            ]
          },
          "model": {
            "type": "string"
          },
          "user": {
            "type": "string"
          }
        },
        "required": [
          "model",
          "input"
        ],
        "type": "object"
      },
      "AzureOpenAIInputItemList": {
        "additionalProperties": true,
        "properties": {
          "data": {
            "items": {
              "additionalProperties": true,
              "type": "object"
            },
            "type": "array"
          },
          "first_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "has_more": {
            "type": "boolean"
          },
          "last_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "object": {
            "const": "list",
            "type": "string"
          }
        },
        "type": "object"
      },
      "AzureOpenAIModelList": {
        "additionalProperties": true,
        "properties": {
          "data": {
            "items": {
              "additionalProperties": true,
              "properties": {
                "created": {
                  "type": "integer"
                },
                "id": {
                  "type": "string"
                },
                "object": {
                  "const": "model",
                  "type": "string"
                },
                "owned_by": {
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "object": {
            "const": "list",
            "type": "string"
          }
        },
        "type": "object"
      },
      "AzureOpenAIResponse": {
        "additionalProperties": true,
        "description": "A model response.",
        "properties": {
          "created_at": {
            "type": "number"
          },
          "error": {
            "additionalProperties": true,
            "type": [
              "object",
              "null"
            ]
          },
          "id": {
            "type": "string"
          },
          "incomplete_details": {
            "additionalProperties": true,
            "type": [
              "object",
              "null"
            ]
          },
          "model": {
            "type": "string"
          },
          "object": {
            "const": "response",
            "type": "string"
          },
          "output": {
            "items": {
              "additionalProperties": true,
              "type": "object"
            },
            "type": "array"
          },
          "output_text": {
            "type": [
              "string",
              "null"
            ]
          },
          "previous_response_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "status": {
            "description": "`completed`, `in_progress`, `queued`, `failed`, `incomplete` or `cancelled`.",
            "type": "string"
          },
          "usage": {
            "additionalProperties": true,
            "properties": {
              "input_tokens": {
                "type": "integer"
              },
              "input_tokens_details": {
                "additionalProperties": true,
                "properties": {
                  "cached_tokens": {
                    "type": "integer"
                  }
                },
                "type": "object"
              },
              "output_tokens": {
                "type": "integer"
              },
              "output_tokens_details": {
                "additionalProperties": true,
                "properties": {
                  "reasoning_tokens": {
                    "type": "integer"
                  }
                },
                "type": "object"
              },
              "total_tokens": {
                "type": "integer"
              }
            },
            "type": "object"
          }
        },
        "type": "object"
      },
      "AzureOpenAISpeechRequest": {
        "additionalProperties": true,
        "properties": {
          "input": {
            "description": "Text to speak.",
            "type": "string"
          },
          "instructions": {
            "type": "string"
          },
          "model": {
            "type": "string"
          },
          "response_format": {
            "description": "`mp3` (default), `opus`, `aac`, `flac`, `wav` or `pcm`.",
            "type": "string"
          },
          "speed": {
            "type": "number"
          },
          "stream_format": {
            "description": "`sse` streams server-sent audio events.",
            "enum": [
              "audio",
              "sse"
            ],
            "type": "string"
          },
          "voice": {
            "type": [
              "string",
              "object"
            ]
          }
        },
        "required": [
          "model",
          "input"
        ],
        "type": "object"
      },
      "AzureOpenAIStreamEvent": {
        "additionalProperties": true,
        "description": "Data of one server-sent event (`event: <type>` / `data: <json>`).",
        "properties": {
          "delta": {
            "type": "string"
          },
          "response": {
            "additionalProperties": true,
            "type": "object"
          },
          "sequence_number": {
            "type": "integer"
          },
          "type": {
            "description": "Event type, for example `response.created`, `response.output_text.delta`, `response.completed`, `error`.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "AzureOpenAITranscription": {
        "additionalProperties": true,
        "properties": {
          "text": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "AzureOpenAITranscriptionRequest": {
        "additionalProperties": true,
        "properties": {
          "file": {
            "description": "Audio file.",
            "format": "binary",
            "type": "string"
          },
          "language": {
            "type": "string"
          },
          "model": {
            "type": "string"
          },
          "prompt": {
            "type": "string"
          },
          "response_format": {
            "description": "`json` (default), `text`, `srt`, `verbose_json` or `vtt`.",
            "type": "string"
          },
          "stream": {
            "description": "Transcriptions only: stream server-sent events.",
            "type": "boolean"
          },
          "temperature": {
            "type": "number"
          }
        },
        "required": [
          "file",
          "model"
        ],
        "type": "object"
      },
      "BedrockConverseRequest": {
        "additionalProperties": true,
        "description": "Converse request. The model comes from the path.",
        "properties": {
          "additionalModelRequestFields": {
            "additionalProperties": true,
            "type": "object"
          },
          "additionalModelResponseFieldPaths": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "guardrailConfig": {
            "additionalProperties": true,
            "type": "object"
          },
          "inferenceConfig": {
            "additionalProperties": true,
            "properties": {
              "maxTokens": {
                "type": "integer"
              },
              "stopSequences": {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              "temperature": {
                "type": "number"
              },
              "topP": {
                "type": "number"
              }
            },
            "type": "object"
          },
          "messages": {
            "items": {
              "additionalProperties": true,
              "properties": {
                "content": {
                  "items": {
                    "additionalProperties": true,
                    "description": "One content block; set exactly one member.",
                    "properties": {
                      "cachePoint": {
                        "type": "object"
                      },
                      "document": {
                        "type": "object"
                      },
                      "image": {
                        "type": "object"
                      },
                      "reasoningContent": {
                        "type": "object"
                      },
                      "text": {
                        "type": "string"
                      },
                      "toolResult": {
                        "type": "object"
                      },
                      "toolUse": {
                        "type": "object"
                      }
                    },
                    "type": "object"
                  },
                  "type": "array"
                },
                "role": {
                  "enum": [
                    "user",
                    "assistant"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "role",
                "content"
              ],
              "type": "object"
            },
            "type": "array"
          },
          "performanceConfig": {
            "additionalProperties": true,
            "properties": {
              "latency": {
                "type": "string"
              }
            },
            "type": "object"
          },
          "promptVariables": {
            "additionalProperties": true,
            "type": "object"
          },
          "requestMetadata": {
            "additionalProperties": {
              "type": "string"
            },
            "type": "object"
          },
          "system": {
            "items": {
              "additionalProperties": true,
              "properties": {
                "text": {
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "toolConfig": {
            "additionalProperties": true,
            "properties": {
              "toolChoice": {
                "type": "object"
              },
              "tools": {
                "items": {
                  "type": "object"
                },
                "type": "array"
              }
            },
            "type": "object"
          }
        },
        "required": [
          "messages"
        ],
        "type": "object"
      },
      "BedrockConverseResponse": {
        "additionalProperties": true,
        "properties": {
          "additionalModelResponseFields": {
            "additionalProperties": true,
            "type": "object"
          },
          "metrics": {
            "additionalProperties": true,
            "properties": {
              "latencyMs": {
                "type": "integer"
              }
            },
            "type": "object"
          },
          "output": {
            "additionalProperties": true,
            "properties": {
              "message": {
                "additionalProperties": true,
                "properties": {
                  "content": {
                    "items": {
                      "additionalProperties": true,
                      "description": "One content block; set exactly one member.",
                      "properties": {
                        "cachePoint": {
                          "type": "object"
                        },
                        "document": {
                          "type": "object"
                        },
                        "image": {
                          "type": "object"
                        },
                        "reasoningContent": {
                          "type": "object"
                        },
                        "text": {
                          "type": "string"
                        },
                        "toolResult": {
                          "type": "object"
                        },
                        "toolUse": {
                          "type": "object"
                        }
                      },
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "role": {
                    "enum": [
                      "user",
                      "assistant"
                    ],
                    "type": "string"
                  }
                },
                "required": [
                  "role",
                  "content"
                ],
                "type": "object"
              }
            },
            "type": "object"
          },
          "stopReason": {
            "type": "string"
          },
          "trace": {
            "additionalProperties": true,
            "type": "object"
          },
          "usage": {
            "additionalProperties": true,
            "properties": {
              "cacheReadInputTokens": {
                "type": "integer"
              },
              "cacheWriteInputTokens": {
                "type": "integer"
              },
              "inputTokens": {
                "type": "integer"
              },
              "outputTokens": {
                "type": "integer"
              },
              "totalTokens": {
                "type": "integer"
              }
            },
            "type": "object"
          }
        },
        "type": "object"
      },
      "BedrockError": {
        "additionalProperties": true,
        "description": "AWS-style error body; the error type is also in the `x-amzn-ErrorType` header. Gateway decisions that have a code put it in `reason` and `X-Quilr-Error-Code`, and append `(reason: <code>)` to the message. Guardrail blocks of request or response text carry no code.",
        "properties": {
          "__type": {
            "description": "Error type, e.g. `ValidationException`.",
            "type": "string"
          },
          "blocked_by": {
            "description": "Every quota that refused the request.",
            "items": {
              "$ref": "#/components/schemas/QuotaInfo"
            },
            "type": "array"
          },
          "code": {
            "description": "Quota errors: `quota_exceeded`.",
            "type": "string"
          },
          "help_url": {
            "description": "Help link an administrator attached to this error (also appended to `message`).",
            "format": "uri",
            "type": "string"
          },
          "message": {
            "type": "string"
          },
          "quota": {
            "$ref": "#/components/schemas/QuotaInfo",
            "description": "The exhausted quota (`quota_exceeded`)."
          },
          "reason": {
            "description": "Error code: a gateway or provider code from the catalog in `x-quilr-error-codes` (codes are only ever added, never renamed), or a provider's own code passed through. Adapter-specific codes not in the catalog may also appear.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "BedrockInvokeRequest": {
        "additionalProperties": true,
        "description": "The model's own request body (for example Anthropic Messages with `anthropic_version`, Amazon Titan or Nova, Meta Llama, Cohere embeddings). Passed to the model after guardrails.",
        "type": "object"
      },
      "BedrockInvokeResponse": {
        "additionalProperties": true,
        "description": "The model's own response body, as Bedrock returns it.",
        "type": "object"
      },
      "GeminiBatchEmbedContentsRequest": {
        "additionalProperties": true,
        "properties": {
          "requests": {
            "items": {
              "$ref": "#/components/schemas/GeminiEmbedContentRequest"
            },
            "type": "array"
          }
        },
        "required": [
          "requests"
        ],
        "type": "object"
      },
      "GeminiBatchEmbedContentsResponse": {
        "additionalProperties": true,
        "properties": {
          "embeddings": {
            "items": {
              "additionalProperties": true,
              "properties": {
                "values": {
                  "items": {
                    "type": "number"
                  },
                  "type": "array"
                }
              },
              "type": "object"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "GeminiCountTokensRequest": {
        "additionalProperties": true,
        "properties": {
          "contents": {
            "items": {
              "additionalProperties": true,
              "properties": {
                "parts": {
                  "items": {
                    "additionalProperties": true,
                    "description": "One part; set one data member.",
                    "properties": {
                      "fileData": {
                        "additionalProperties": true,
                        "properties": {
                          "fileUri": {
                            "type": "string"
                          },
                          "mimeType": {
                            "type": "string"
                          }
                        },
                        "type": "object"
                      },
                      "functionCall": {
                        "additionalProperties": true,
                        "type": "object"
                      },
                      "functionResponse": {
                        "additionalProperties": true,
                        "type": "object"
                      },
                      "inlineData": {
                        "additionalProperties": true,
                        "properties": {
                          "data": {
                            "type": "string"
                          },
                          "mimeType": {
                            "type": "string"
                          }
                        },
                        "type": "object"
                      },
                      "text": {
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  "type": "array"
                },
                "role": {
                  "enum": [
                    "user",
                    "model"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "parts"
              ],
              "type": "object"
            },
            "type": "array"
          },
          "generateContentRequest": {
            "additionalProperties": true,
            "type": "object"
          },
          "systemInstruction": {
            "additionalProperties": true,
            "properties": {
              "parts": {
                "items": {
                  "additionalProperties": true,
                  "description": "One part; set one data member.",
                  "properties": {
                    "fileData": {
                      "additionalProperties": true,
                      "properties": {
                        "fileUri": {
                          "type": "string"
                        },
                        "mimeType": {
                          "type": "string"
                        }
                      },
                      "type": "object"
                    },
                    "functionCall": {
                      "additionalProperties": true,
                      "type": "object"
                    },
                    "functionResponse": {
                      "additionalProperties": true,
                      "type": "object"
                    },
                    "inlineData": {
                      "additionalProperties": true,
                      "properties": {
                        "data": {
                          "type": "string"
                        },
                        "mimeType": {
                          "type": "string"
                        }
                      },
                      "type": "object"
                    },
                    "text": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "type": "array"
              },
              "role": {
                "enum": [
                  "user",
                  "model"
                ],
                "type": "string"
              }
            },
            "required": [
              "parts"
            ],
            "type": "object"
          },
          "tools": {
            "items": {
              "additionalProperties": true,
              "type": "object"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "GeminiCountTokensResponse": {
        "additionalProperties": true,
        "properties": {
          "totalBillableCharacters": {
            "type": "integer"
          },
          "totalTokens": {
            "type": "integer"
          }
        },
        "type": "object"
      },
      "GeminiEmbedContentRequest": {
        "additionalProperties": true,
        "properties": {
          "content": {
            "additionalProperties": true,
            "properties": {
              "parts": {
                "items": {
                  "additionalProperties": true,
                  "description": "One part; set one data member.",
                  "properties": {
                    "fileData": {
                      "additionalProperties": true,
                      "properties": {
                        "fileUri": {
                          "type": "string"
                        },
                        "mimeType": {
                          "type": "string"
                        }
                      },
                      "type": "object"
                    },
                    "functionCall": {
                      "additionalProperties": true,
                      "type": "object"
                    },
                    "functionResponse": {
                      "additionalProperties": true,
                      "type": "object"
                    },
                    "inlineData": {
                      "additionalProperties": true,
                      "properties": {
                        "data": {
                          "type": "string"
                        },
                        "mimeType": {
                          "type": "string"
                        }
                      },
                      "type": "object"
                    },
                    "text": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "type": "array"
              },
              "role": {
                "enum": [
                  "user",
                  "model"
                ],
                "type": "string"
              }
            },
            "required": [
              "parts"
            ],
            "type": "object"
          },
          "outputDimensionality": {
            "type": "integer"
          },
          "taskType": {
            "type": "string"
          },
          "title": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "GeminiEmbedContentResponse": {
        "additionalProperties": true,
        "properties": {
          "embedding": {
            "additionalProperties": true,
            "properties": {
              "values": {
                "items": {
                  "type": "number"
                },
                "type": "array"
              }
            },
            "type": "object"
          }
        },
        "type": "object"
      },
      "GeminiGenerateContentBodyModelRequest": {
        "additionalProperties": true,
        "description": "generateContent request with the model in the body.",
        "properties": {
          "cachedContent": {
            "type": "string"
          },
          "contents": {
            "items": {
              "additionalProperties": true,
              "properties": {
                "parts": {
                  "items": {
                    "additionalProperties": true,
                    "description": "One part; set one data member.",
                    "properties": {
                      "fileData": {
                        "additionalProperties": true,
                        "properties": {
                          "fileUri": {
                            "type": "string"
                          },
                          "mimeType": {
                            "type": "string"
                          }
                        },
                        "type": "object"
                      },
                      "functionCall": {
                        "additionalProperties": true,
                        "type": "object"
                      },
                      "functionResponse": {
                        "additionalProperties": true,
                        "type": "object"
                      },
                      "inlineData": {
                        "additionalProperties": true,
                        "properties": {
                          "data": {
                            "type": "string"
                          },
                          "mimeType": {
                            "type": "string"
                          }
                        },
                        "type": "object"
                      },
                      "text": {
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  "type": "array"
                },
                "role": {
                  "enum": [
                    "user",
                    "model"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "parts"
              ],
              "type": "object"
            },
            "type": "array"
          },
          "generationConfig": {
            "additionalProperties": true,
            "properties": {
              "maxOutputTokens": {
                "type": "integer"
              },
              "responseMimeType": {
                "type": "string"
              },
              "responseSchema": {
                "type": "object"
              },
              "stopSequences": {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              "temperature": {
                "type": "number"
              },
              "thinkingConfig": {
                "type": "object"
              },
              "topK": {
                "type": "number"
              },
              "topP": {
                "type": "number"
              }
            },
            "type": "object"
          },
          "labels": {
            "additionalProperties": {
              "type": "string"
            },
            "type": "object"
          },
          "model": {
            "description": "Model id or a model alias configured for the app.",
            "type": "string"
          },
          "safetySettings": {
            "items": {
              "additionalProperties": true,
              "type": "object"
            },
            "type": "array"
          },
          "stream": {
            "description": "Stream the response as server-sent events.",
            "type": "boolean"
          },
          "systemInstruction": {
            "additionalProperties": true,
            "properties": {
              "parts": {
                "items": {
                  "additionalProperties": true,
                  "description": "One part; set one data member.",
                  "properties": {
                    "fileData": {
                      "additionalProperties": true,
                      "properties": {
                        "fileUri": {
                          "type": "string"
                        },
                        "mimeType": {
                          "type": "string"
                        }
                      },
                      "type": "object"
                    },
                    "functionCall": {
                      "additionalProperties": true,
                      "type": "object"
                    },
                    "functionResponse": {
                      "additionalProperties": true,
                      "type": "object"
                    },
                    "inlineData": {
                      "additionalProperties": true,
                      "properties": {
                        "data": {
                          "type": "string"
                        },
                        "mimeType": {
                          "type": "string"
                        }
                      },
                      "type": "object"
                    },
                    "text": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "type": "array"
              },
              "role": {
                "enum": [
                  "user",
                  "model"
                ],
                "type": "string"
              }
            },
            "required": [
              "parts"
            ],
            "type": "object"
          },
          "toolConfig": {
            "additionalProperties": true,
            "type": "object"
          },
          "tools": {
            "items": {
              "additionalProperties": true,
              "type": "object"
            },
            "type": "array"
          }
        },
        "required": [
          "model",
          "contents"
        ],
        "type": "object"
      },
      "GeminiGenerateContentRequest": {
        "additionalProperties": true,
        "description": "generateContent request. The model comes from the path.",
        "properties": {
          "cachedContent": {
            "type": "string"
          },
          "contents": {
            "items": {
              "additionalProperties": true,
              "properties": {
                "parts": {
                  "items": {
                    "additionalProperties": true,
                    "description": "One part; set one data member.",
                    "properties": {
                      "fileData": {
                        "additionalProperties": true,
                        "properties": {
                          "fileUri": {
                            "type": "string"
                          },
                          "mimeType": {
                            "type": "string"
                          }
                        },
                        "type": "object"
                      },
                      "functionCall": {
                        "additionalProperties": true,
                        "type": "object"
                      },
                      "functionResponse": {
                        "additionalProperties": true,
                        "type": "object"
                      },
                      "inlineData": {
                        "additionalProperties": true,
                        "properties": {
                          "data": {
                            "type": "string"
                          },
                          "mimeType": {
                            "type": "string"
                          }
                        },
                        "type": "object"
                      },
                      "text": {
                        "type": "string"
                      }
                    },
                    "type": "object"
                  },
                  "type": "array"
                },
                "role": {
                  "enum": [
                    "user",
                    "model"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "parts"
              ],
              "type": "object"
            },
            "type": "array"
          },
          "generationConfig": {
            "additionalProperties": true,
            "properties": {
              "maxOutputTokens": {
                "type": "integer"
              },
              "responseMimeType": {
                "type": "string"
              },
              "responseSchema": {
                "type": "object"
              },
              "stopSequences": {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              "temperature": {
                "type": "number"
              },
              "thinkingConfig": {
                "type": "object"
              },
              "topK": {
                "type": "number"
              },
              "topP": {
                "type": "number"
              }
            },
            "type": "object"
          },
          "labels": {
            "additionalProperties": {
              "type": "string"
            },
            "type": "object"
          },
          "safetySettings": {
            "items": {
              "additionalProperties": true,
              "type": "object"
            },
            "type": "array"
          },
          "systemInstruction": {
            "additionalProperties": true,
            "properties": {
              "parts": {
                "items": {
                  "additionalProperties": true,
                  "description": "One part; set one data member.",
                  "properties": {
                    "fileData": {
                      "additionalProperties": true,
                      "properties": {
                        "fileUri": {
                          "type": "string"
                        },
                        "mimeType": {
                          "type": "string"
                        }
                      },
                      "type": "object"
                    },
                    "functionCall": {
                      "additionalProperties": true,
                      "type": "object"
                    },
                    "functionResponse": {
                      "additionalProperties": true,
                      "type": "object"
                    },
                    "inlineData": {
                      "additionalProperties": true,
                      "properties": {
                        "data": {
                          "type": "string"
                        },
                        "mimeType": {
                          "type": "string"
                        }
                      },
                      "type": "object"
                    },
                    "text": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "type": "array"
              },
              "role": {
                "enum": [
                  "user",
                  "model"
                ],
                "type": "string"
              }
            },
            "required": [
              "parts"
            ],
            "type": "object"
          },
          "toolConfig": {
            "additionalProperties": true,
            "type": "object"
          },
          "tools": {
            "items": {
              "additionalProperties": true,
              "type": "object"
            },
            "type": "array"
          }
        },
        "required": [
          "contents"
        ],
        "type": "object"
      },
      "GeminiGenerateContentResponse": {
        "additionalProperties": true,
        "properties": {
          "candidates": {
            "items": {
              "additionalProperties": true,
              "properties": {
                "content": {
                  "additionalProperties": true,
                  "properties": {
                    "parts": {
                      "items": {
                        "additionalProperties": true,
                        "description": "One part; set one data member.",
                        "properties": {
                          "fileData": {
                            "additionalProperties": true,
                            "properties": {
                              "fileUri": {
                                "type": "string"
                              },
                              "mimeType": {
                                "type": "string"
                              }
                            },
                            "type": "object"
                          },
                          "functionCall": {
                            "additionalProperties": true,
                            "type": "object"
                          },
                          "functionResponse": {
                            "additionalProperties": true,
                            "type": "object"
                          },
                          "inlineData": {
                            "additionalProperties": true,
                            "properties": {
                              "data": {
                                "type": "string"
                              },
                              "mimeType": {
                                "type": "string"
                              }
                            },
                            "type": "object"
                          },
                          "text": {
                            "type": "string"
                          }
                        },
                        "type": "object"
                      },
                      "type": "array"
                    },
                    "role": {
                      "enum": [
                        "user",
                        "model"
                      ],
                      "type": "string"
                    }
                  },
                  "required": [
                    "parts"
                  ],
                  "type": "object"
                },
                "finishReason": {
                  "type": "string"
                },
                "safetyRatings": {
                  "items": {
                    "type": "object"
                  },
                  "type": "array"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "modelVersion": {
            "type": "string"
          },
          "promptFeedback": {
            "additionalProperties": true,
            "type": "object"
          },
          "responseId": {
            "type": "string"
          },
          "usageMetadata": {
            "additionalProperties": true,
            "properties": {
              "cachedContentTokenCount": {
                "type": "integer"
              },
              "candidatesTokenCount": {
                "type": "integer"
              },
              "promptTokenCount": {
                "type": "integer"
              },
              "thoughtsTokenCount": {
                "type": "integer"
              },
              "totalTokenCount": {
                "type": "integer"
              }
            },
            "type": "object"
          }
        },
        "type": "object"
      },
      "GeminiProviderRequest": {
        "additionalProperties": true,
        "description": "Provider-native request body, forwarded as sent.",
        "type": "object"
      },
      "GeminiProviderResponse": {
        "additionalProperties": true,
        "description": "Provider-native response body, returned unchanged.",
        "type": "object"
      },
      "GeminiStreamEvent": {
        "description": "With `alt=sse`: server-sent events whose `data` is one GenerateContentResponse.",
        "type": "string"
      },
      "GeminiStreamResponse": {
        "description": "Without `alt=sse`: all streamed responses as one JSON array.",
        "items": {
          "$ref": "#/components/schemas/GeminiGenerateContentResponse"
        },
        "type": "array"
      },
      "GoogleError": {
        "additionalProperties": true,
        "description": "Google API-style error envelope. Gateway decisions that have a code put it in `details[].reason` and `X-Quilr-Error-Code`; guardrail blocks of request or response text carry no code.",
        "properties": {
          "error": {
            "additionalProperties": true,
            "properties": {
              "code": {
                "type": "integer"
              },
              "details": {
                "items": {
                  "additionalProperties": true,
                  "properties": {
                    "@type": {
                      "type": "string"
                    },
                    "blocked_by": {
                      "description": "Every quota that refused the request.",
                      "items": {
                        "$ref": "#/components/schemas/QuotaInfo"
                      },
                      "type": "array"
                    },
                    "domain": {
                      "description": "`quilr.ai` on gateway errors.",
                      "type": "string"
                    },
                    "help_url": {
                      "description": "Help link an administrator attached to this error (also appended to `message`).",
                      "format": "uri",
                      "type": "string"
                    },
                    "quota": {
                      "$ref": "#/components/schemas/QuotaInfo",
                      "description": "The exhausted quota (`quota_exceeded`)."
                    },
                    "reason": {
                      "description": "Error code: a gateway or provider code from the catalog in `x-quilr-error-codes` (codes are only ever added, never renamed), or a provider's own code passed through. Adapter-specific codes not in the catalog may also appear.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "type": "array"
              },
              "message": {
                "type": "string"
              },
              "status": {
                "type": "string"
              }
            },
            "type": "object"
          }
        },
        "required": [
          "error"
        ],
        "type": "object"
      },
      "MistralFimRequest": {
        "additionalProperties": true,
        "properties": {
          "max_tokens": {
            "type": [
              "integer",
              "null"
            ]
          },
          "min_tokens": {
            "type": [
              "integer",
              "null"
            ]
          },
          "model": {
            "example": "codestral-latest",
            "type": "string"
          },
          "prompt": {
            "description": "Code before the cursor.",
            "type": "string"
          },
          "random_seed": {
            "type": [
              "integer",
              "null"
            ]
          },
          "stop": {
            "type": [
              "string",
              "array"
            ]
          },
          "stream": {
            "description": "Return a server-sent event stream.",
            "type": "boolean"
          },
          "suffix": {
            "description": "Code after the cursor.",
            "type": [
              "string",
              "null"
            ]
          },
          "temperature": {
            "type": [
              "number",
              "null"
            ]
          },
          "top_p": {
            "type": "number"
          }
        },
        "required": [
          "model",
          "prompt"
        ],
        "type": "object"
      },
      "MistralFimResponse": {
        "additionalProperties": true,
        "description": "Mistral's chat-shaped completion.",
        "properties": {
          "choices": {
            "items": {
              "additionalProperties": true,
              "properties": {
                "finish_reason": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "index": {
                  "type": "integer"
                },
                "message": {
                  "additionalProperties": true,
                  "properties": {
                    "content": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "role": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "created": {
            "type": "integer"
          },
          "id": {
            "type": "string"
          },
          "model": {
            "type": "string"
          },
          "object": {
            "type": "string"
          },
          "usage": {
            "additionalProperties": true,
            "properties": {
              "completion_tokens": {
                "type": "integer"
              },
              "prompt_tokens": {
                "type": "integer"
              },
              "total_tokens": {
                "type": "integer"
              }
            },
            "type": "object"
          }
        },
        "type": "object"
      },
      "MistralOcrRequest": {
        "additionalProperties": true,
        "properties": {
          "document": {
            "additionalProperties": true,
            "description": "The document or image to read.",
            "properties": {
              "document_url": {
                "type": "string"
              },
              "file_id": {
                "type": "string"
              },
              "image_url": {
                "type": [
                  "string",
                  "object"
                ]
              },
              "type": {
                "enum": [
                  "document_url",
                  "image_url",
                  "file"
                ],
                "type": "string"
              }
            },
            "required": [
              "type"
            ],
            "type": "object"
          },
          "image_limit": {
            "type": [
              "integer",
              "null"
            ]
          },
          "image_min_size": {
            "type": [
              "integer",
              "null"
            ]
          },
          "include_image_base64": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "model": {
            "example": "mistral-ocr-latest",
            "type": "string"
          },
          "pages": {
            "items": {
              "type": "integer"
            },
            "type": [
              "array",
              "null"
            ]
          }
        },
        "required": [
          "model",
          "document"
        ],
        "type": "object"
      },
      "MistralOcrResponse": {
        "additionalProperties": true,
        "properties": {
          "model": {
            "type": "string"
          },
          "pages": {
            "items": {
              "additionalProperties": true,
              "properties": {
                "dimensions": {
                  "additionalProperties": true,
                  "type": [
                    "object",
                    "null"
                  ]
                },
                "images": {
                  "items": {
                    "additionalProperties": true,
                    "type": "object"
                  },
                  "type": "array"
                },
                "index": {
                  "type": "integer"
                },
                "markdown": {
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "usage_info": {
            "additionalProperties": true,
            "properties": {
              "doc_size_bytes": {
                "type": [
                  "integer",
                  "null"
                ]
              },
              "pages_processed": {
                "type": "integer"
              }
            },
            "type": "object"
          }
        },
        "type": "object"
      },
      "OpenAIBatch": {
        "additionalProperties": true,
        "properties": {
          "completion_window": {
            "type": "string"
          },
          "created_at": {
            "type": "integer"
          },
          "endpoint": {
            "type": "string"
          },
          "error_file_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "id": {
            "type": "string"
          },
          "input_file_id": {
            "type": "string"
          },
          "metadata": {
            "additionalProperties": true,
            "type": [
              "object",
              "null"
            ]
          },
          "object": {
            "const": "batch",
            "type": "string"
          },
          "output_file_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "request_counts": {
            "additionalProperties": true,
            "properties": {
              "completed": {
                "type": "integer"
              },
              "failed": {
                "type": "integer"
              },
              "total": {
                "type": "integer"
              }
            },
            "type": "object"
          },
          "status": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "OpenAIBatchList": {
        "additionalProperties": true,
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/OpenAIBatch"
            },
            "type": "array"
          },
          "first_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "has_more": {
            "type": "boolean"
          },
          "last_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "object": {
            "const": "list",
            "type": "string"
          }
        },
        "type": "object"
      },
      "OpenAIBatchRequest": {
        "additionalProperties": true,
        "properties": {
          "completion_window": {
            "description": "For example `24h`.",
            "type": "string"
          },
          "endpoint": {
            "description": "For example `/v1/chat/completions`.",
            "type": "string"
          },
          "input_file_id": {
            "type": "string"
          },
          "metadata": {
            "additionalProperties": true,
            "type": [
              "object",
              "null"
            ]
          },
          "provider_label": {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one. Takes precedence over the header; not forwarded.",
            "type": "string"
          }
        },
        "required": [
          "input_file_id",
          "endpoint",
          "completion_window"
        ],
        "type": "object"
      },
      "OpenAIBatchResults": {
        "additionalProperties": true,
        "description": "Per-request batch results, in the provider's own shape.",
        "properties": {
          "results": {
            "items": {
              "additionalProperties": true,
              "type": "object"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "OpenAIChatCompletion": {
        "additionalProperties": true,
        "properties": {
          "choices": {
            "items": {
              "additionalProperties": true,
              "properties": {
                "finish_reason": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "index": {
                  "type": "integer"
                },
                "message": {
                  "$ref": "#/components/schemas/OpenAIChatMessage"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "created": {
            "type": "integer"
          },
          "id": {
            "type": "string"
          },
          "model": {
            "type": "string"
          },
          "object": {
            "const": "chat.completion",
            "type": "string"
          },
          "usage": {
            "$ref": "#/components/schemas/OpenAIUsage"
          }
        },
        "type": "object"
      },
      "OpenAIChatCompletionChunk": {
        "additionalProperties": true,
        "description": "One `data:` event of a chat completion stream; the stream ends with `data: [DONE]`.",
        "properties": {
          "choices": {
            "items": {
              "additionalProperties": true,
              "type": "object"
            },
            "type": "array"
          },
          "id": {
            "type": "string"
          },
          "model": {
            "type": "string"
          },
          "object": {
            "const": "chat.completion.chunk",
            "type": "string"
          },
          "usage": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/OpenAIUsage"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "type": "object"
      },
      "OpenAIChatCompletionRequest": {
        "additionalProperties": true,
        "properties": {
          "max_completion_tokens": {
            "type": [
              "integer",
              "null"
            ]
          },
          "max_tokens": {
            "type": [
              "integer",
              "null"
            ]
          },
          "messages": {
            "items": {
              "$ref": "#/components/schemas/OpenAIChatMessage"
            },
            "minItems": 1,
            "type": "array"
          },
          "model": {
            "description": "Model id, or a routing alias configured for the app.",
            "type": "string"
          },
          "n": {
            "type": [
              "integer",
              "null"
            ]
          },
          "reasoning_effort": {
            "type": [
              "string",
              "null"
            ]
          },
          "response_format": {
            "additionalProperties": true,
            "type": "object"
          },
          "stop": {
            "type": [
              "string",
              "array",
              "null"
            ]
          },
          "stream": {
            "description": "Return a server-sent event stream.",
            "type": [
              "boolean",
              "null"
            ]
          },
          "stream_options": {
            "additionalProperties": true,
            "properties": {
              "include_usage": {
                "type": "boolean"
              }
            },
            "type": "object"
          },
          "temperature": {
            "type": [
              "number",
              "null"
            ]
          },
          "tool_choice": {
            "additionalProperties": true,
            "type": [
              "string",
              "object"
            ]
          },
          "tools": {
            "items": {
              "additionalProperties": true,
              "type": "object"
            },
            "type": "array"
          },
          "top_p": {
            "type": [
              "number",
              "null"
            ]
          },
          "user": {
            "type": "string"
          }
        },
        "required": [
          "model",
          "messages"
        ],
        "type": "object"
      },
      "OpenAIChatMessage": {
        "additionalProperties": true,
        "properties": {
          "content": {
            "description": "Text, or a list of content parts (text, image_url, input_audio, file).",
            "type": [
              "string",
              "array",
              "null"
            ]
          },
          "name": {
            "type": "string"
          },
          "role": {
            "enum": [
              "system",
              "developer",
              "user",
              "assistant",
              "tool",
              "function"
            ],
            "type": "string"
          },
          "tool_call_id": {
            "type": "string"
          },
          "tool_calls": {
            "items": {
              "additionalProperties": true,
              "type": "object"
            },
            "type": "array"
          }
        },
        "required": [
          "role"
        ],
        "type": "object"
      },
      "OpenAICompletion": {
        "additionalProperties": true,
        "properties": {
          "choices": {
            "items": {
              "additionalProperties": true,
              "properties": {
                "finish_reason": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "index": {
                  "type": "integer"
                },
                "text": {
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "id": {
            "type": "string"
          },
          "model": {
            "type": "string"
          },
          "object": {
            "const": "text_completion",
            "type": "string"
          },
          "usage": {
            "$ref": "#/components/schemas/OpenAIUsage"
          }
        },
        "type": "object"
      },
      "OpenAICompletionRequest": {
        "additionalProperties": true,
        "properties": {
          "max_tokens": {
            "type": [
              "integer",
              "null"
            ]
          },
          "model": {
            "type": "string"
          },
          "prompt": {
            "type": [
              "string",
              "array"
            ]
          },
          "stop": {
            "type": [
              "string",
              "array",
              "null"
            ]
          },
          "stream": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "suffix": {
            "description": "Text after the insertion point (fill in the middle).",
            "type": [
              "string",
              "null"
            ]
          },
          "temperature": {
            "type": [
              "number",
              "null"
            ]
          }
        },
        "required": [
          "model",
          "prompt"
        ],
        "type": "object"
      },
      "OpenAIDecisionsRequest": {
        "additionalProperties": true,
        "properties": {
          "input": {
            "description": "Text, or a list of user messages whose content is text or `input_text` parts. Images are refused.",
            "type": [
              "string",
              "array"
            ]
          },
          "model": {
            "description": "Decision model id or deployment configured for the app.",
            "type": "string"
          },
          "questions": {
            "items": {
              "additionalProperties": true,
              "description": "`choice` questions need `choices`, `score` questions need `levels`.",
              "properties": {
                "choices": {
                  "items": {
                    "additionalProperties": true,
                    "properties": {
                      "description": {
                        "type": "string"
                      },
                      "value": {
                        "type": [
                          "string",
                          "boolean"
                        ]
                      }
                    },
                    "required": [
                      "value"
                    ],
                    "type": "object"
                  },
                  "maxItems": 255,
                  "minItems": 2,
                  "type": "array"
                },
                "instructions": {
                  "type": "string"
                },
                "levels": {
                  "items": {
                    "additionalProperties": true,
                    "properties": {
                      "description": {
                        "type": "string"
                      },
                      "label": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "label"
                    ],
                    "type": "object"
                  },
                  "maxItems": 10,
                  "minItems": 2,
                  "type": "array"
                },
                "name": {
                  "type": "string"
                },
                "type": {
                  "enum": [
                    "predicate",
                    "choice",
                    "score"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "type",
                "instructions"
              ],
              "type": "object"
            },
            "maxItems": 128,
            "minItems": 1,
            "type": "array"
          },
          "safety_identifier": {
            "description": "Accepted and not forwarded.",
            "type": "string"
          }
        },
        "required": [
          "model",
          "input",
          "questions"
        ],
        "type": "object"
      },
      "OpenAIDecisionsResponse": {
        "additionalProperties": true,
        "properties": {
          "answers": {
            "items": {
              "additionalProperties": true,
              "description": "One answer per question, in question order.",
              "properties": {
                "choice": {
                  "type": [
                    "string",
                    "boolean"
                  ]
                },
                "confidence": {
                  "type": "number"
                },
                "name": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "probabilities": {
                  "items": {
                    "additionalProperties": true,
                    "type": "object"
                  },
                  "type": "array"
                },
                "probability": {
                  "type": "number"
                },
                "score": {
                  "type": "number"
                },
                "type": {
                  "enum": [
                    "predicate",
                    "choice",
                    "score",
                    "refusal"
                  ],
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "model": {
            "type": "string"
          },
          "usage": {
            "additionalProperties": true,
            "type": "object"
          }
        },
        "type": "object"
      },
      "OpenAIDeleted": {
        "additionalProperties": true,
        "properties": {
          "deleted": {
            "type": "boolean"
          },
          "id": {
            "type": "string"
          },
          "object": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "OpenAIEmbeddingList": {
        "additionalProperties": true,
        "properties": {
          "data": {
            "items": {
              "additionalProperties": true,
              "properties": {
                "embedding": {
                  "items": {
                    "type": "number"
                  },
                  "type": [
                    "array",
                    "string"
                  ]
                },
                "index": {
                  "type": "integer"
                },
                "object": {
                  "const": "embedding",
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "model": {
            "type": "string"
          },
          "object": {
            "const": "list",
            "type": "string"
          },
          "usage": {
            "additionalProperties": true,
            "properties": {
              "prompt_tokens": {
                "type": "integer"
              },
              "total_tokens": {
                "type": "integer"
              }
            },
            "type": "object"
          }
        },
        "type": "object"
      },
      "OpenAIEmbeddingRequest": {
        "additionalProperties": true,
        "properties": {
          "dimensions": {
            "type": "integer"
          },
          "encoding_format": {
            "enum": [
              "float",
              "base64"
            ],
            "type": "string"
          },
          "input": {
            "description": "Text, a list of texts, or token arrays.",
            "type": [
              "string",
              "array"
            ]
          },
          "model": {
            "type": "string"
          },
          "user": {
            "type": "string"
          }
        },
        "required": [
          "model",
          "input"
        ],
        "type": "object"
      },
      "OpenAIError": {
        "additionalProperties": true,
        "description": "OpenAI-style error envelope, with the gateway's additional fields.",
        "properties": {
          "error": {
            "additionalProperties": true,
            "properties": {
              "blocked_by": {
                "description": "Every quota that refused the request.",
                "items": {
                  "$ref": "#/components/schemas/QuotaInfo"
                },
                "type": "array"
              },
              "code": {
                "description": "Error code: a gateway or provider code from the catalog in `x-quilr-error-codes` (codes are only ever added, never renamed), or a provider's own code passed through. Adapter-specific codes not in the catalog may also appear.",
                "type": [
                  "string",
                  "integer",
                  "null"
                ]
              },
              "details": {
                "description": "Guardrail blocks: a short reason (never the detected values). Legacy limits: an object.",
                "type": [
                  "string",
                  "object"
                ]
              },
              "help_url": {
                "description": "Help link an administrator attached to this error (also appended to `message`).",
                "format": "uri",
                "type": "string"
              },
              "message": {
                "type": "string"
              },
              "param": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "provider": {
                "description": "Provider the gateway called (upstream errors).",
                "type": "string"
              },
              "quota": {
                "$ref": "#/components/schemas/QuotaInfo",
                "description": "The exhausted quota (`quota_exceeded`)."
              },
              "source": {
                "description": "Present when the provider failed; the gateway relays its status and a scrubbed reason.",
                "enum": [
                  "upstream"
                ],
                "type": "string"
              },
              "type": {
                "description": "Provider error type, or a gateway type: `content_policy_violation` (guardrail block), `policy_error` (policy or routing denial), `quota_exceeded`, `policy_accounting_error`.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "upstream_request_id": {
                "description": "The provider's request id, when it sent one.",
                "type": "string"
              }
            },
            "required": [
              "message"
            ],
            "type": "object"
          }
        },
        "required": [
          "error"
        ],
        "type": "object"
      },
      "OpenAIFile": {
        "additionalProperties": true,
        "properties": {
          "bytes": {
            "type": "integer"
          },
          "created_at": {
            "type": "integer"
          },
          "filename": {
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "object": {
            "const": "file",
            "type": "string"
          },
          "purpose": {
            "type": "string"
          },
          "status": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "OpenAIFileList": {
        "additionalProperties": true,
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/OpenAIFile"
            },
            "type": "array"
          },
          "first_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "has_more": {
            "type": "boolean"
          },
          "last_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "object": {
            "const": "list",
            "type": "string"
          }
        },
        "type": "object"
      },
      "OpenAIFileUploadRequest": {
        "additionalProperties": true,
        "properties": {
          "file": {
            "format": "binary",
            "type": "string"
          },
          "provider_label": {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one. Takes precedence over the header; not forwarded.",
            "type": "string"
          },
          "purpose": {
            "description": "For example `batch`, `fine-tune`, `assistants`, `user_data`.",
            "type": "string"
          }
        },
        "required": [
          "file",
          "purpose"
        ],
        "type": "object"
      },
      "OpenAIImageEditJsonRequest": {
        "additionalProperties": true,
        "properties": {
          "image": {
            "additionalProperties": true,
            "description": "Image by URL or data URI (xAI style).",
            "type": [
              "object",
              "string"
            ]
          },
          "images": {
            "description": "Images by URL or file id.",
            "items": {
              "additionalProperties": true,
              "type": "object"
            },
            "type": "array"
          },
          "model": {
            "type": "string"
          },
          "n": {
            "minimum": 1,
            "type": [
              "integer",
              "null"
            ]
          },
          "prompt": {
            "type": "string"
          },
          "quality": {
            "type": [
              "string",
              "null"
            ]
          },
          "response_format": {
            "enum": [
              "url",
              "b64_json",
              null
            ],
            "type": [
              "string",
              "null"
            ]
          },
          "size": {
            "type": [
              "string",
              "null"
            ]
          },
          "user": {
            "type": "string"
          }
        },
        "required": [
          "prompt"
        ],
        "type": "object"
      },
      "OpenAIImageEditRequest": {
        "additionalProperties": true,
        "properties": {
          "image": {
            "description": "Image file(s) to edit.",
            "oneOf": [
              {
                "format": "binary",
                "type": "string"
              },
              {
                "items": {
                  "format": "binary",
                  "type": "string"
                },
                "type": "array"
              }
            ]
          },
          "mask": {
            "format": "binary",
            "type": "string"
          },
          "model": {
            "type": "string"
          },
          "n": {
            "minimum": 1,
            "type": [
              "integer",
              "null"
            ]
          },
          "prompt": {
            "type": "string"
          },
          "quality": {
            "type": [
              "string",
              "null"
            ]
          },
          "response_format": {
            "enum": [
              "url",
              "b64_json",
              null
            ],
            "type": [
              "string",
              "null"
            ]
          },
          "size": {
            "type": [
              "string",
              "null"
            ]
          },
          "user": {
            "type": "string"
          }
        },
        "required": [
          "prompt"
        ],
        "type": "object"
      },
      "OpenAIImageGenerationRequest": {
        "additionalProperties": true,
        "properties": {
          "background": {
            "type": [
              "string",
              "null"
            ]
          },
          "model": {
            "type": "string"
          },
          "n": {
            "minimum": 1,
            "type": [
              "integer",
              "null"
            ]
          },
          "output_format": {
            "type": [
              "string",
              "null"
            ]
          },
          "prompt": {
            "type": "string"
          },
          "quality": {
            "type": [
              "string",
              "null"
            ]
          },
          "response_format": {
            "enum": [
              "url",
              "b64_json",
              null
            ],
            "type": [
              "string",
              "null"
            ]
          },
          "size": {
            "type": [
              "string",
              "null"
            ]
          },
          "style": {
            "type": [
              "string",
              "null"
            ]
          },
          "user": {
            "type": "string"
          }
        },
        "required": [
          "prompt"
        ],
        "type": "object"
      },
      "OpenAIImageVariationRequest": {
        "additionalProperties": true,
        "properties": {
          "image": {
            "format": "binary",
            "type": "string"
          },
          "model": {
            "type": "string"
          },
          "n": {
            "type": "integer"
          },
          "response_format": {
            "enum": [
              "url",
              "b64_json"
            ],
            "type": "string"
          },
          "size": {
            "type": "string"
          },
          "user": {
            "type": "string"
          }
        },
        "required": [
          "image"
        ],
        "type": "object"
      },
      "OpenAIImagesResponse": {
        "additionalProperties": true,
        "properties": {
          "created": {
            "type": "integer"
          },
          "data": {
            "items": {
              "additionalProperties": true,
              "properties": {
                "b64_json": {
                  "type": "string"
                },
                "revised_prompt": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "usage": {
            "additionalProperties": true,
            "type": "object"
          }
        },
        "type": "object"
      },
      "OpenAIModel": {
        "additionalProperties": true,
        "properties": {
          "created": {
            "type": "integer"
          },
          "id": {
            "type": "string"
          },
          "object": {
            "const": "model",
            "type": "string"
          },
          "owned_by": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "OpenAIModelList": {
        "additionalProperties": true,
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/OpenAIModel"
            },
            "type": "array"
          },
          "object": {
            "const": "list",
            "type": "string"
          }
        },
        "type": "object"
      },
      "OpenAIModeration": {
        "additionalProperties": true,
        "properties": {
          "id": {
            "type": "string"
          },
          "model": {
            "type": "string"
          },
          "results": {
            "items": {
              "additionalProperties": true,
              "properties": {
                "categories": {
                  "additionalProperties": true,
                  "type": "object"
                },
                "category_scores": {
                  "additionalProperties": true,
                  "type": "object"
                },
                "flagged": {
                  "type": "boolean"
                }
              },
              "type": "object"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "OpenAIModerationRequest": {
        "additionalProperties": true,
        "properties": {
          "input": {
            "type": [
              "string",
              "array"
            ]
          },
          "model": {
            "type": "string"
          }
        },
        "required": [
          "input"
        ],
        "type": "object"
      },
      "OpenAIOcrRequest": {
        "additionalProperties": true,
        "description": "Mistral OCR request shape.",
        "properties": {
          "document": {
            "additionalProperties": true,
            "description": "The document to read.",
            "properties": {
              "document_url": {
                "type": "string"
              },
              "image_url": {
                "type": [
                  "string",
                  "object"
                ]
              },
              "type": {
                "description": "For example `document_url` or `image_url`.",
                "type": "string"
              }
            },
            "type": "object"
          },
          "include_image_base64": {
            "type": "boolean"
          },
          "model": {
            "type": "string"
          },
          "pages": {
            "items": {
              "type": "integer"
            },
            "type": "array"
          }
        },
        "required": [
          "model",
          "document"
        ],
        "type": "object"
      },
      "OpenAIOcrResponse": {
        "additionalProperties": true,
        "properties": {
          "model": {
            "type": "string"
          },
          "pages": {
            "items": {
              "additionalProperties": true,
              "properties": {
                "index": {
                  "type": "integer"
                },
                "markdown": {
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "usage_info": {
            "additionalProperties": true,
            "type": "object"
          }
        },
        "type": "object"
      },
      "OpenAIQuotaUsage": {
        "additionalProperties": true,
        "properties": {
          "observed_at": {
            "format": "date-time",
            "type": "string"
          },
          "quotas": {
            "items": {
              "additionalProperties": true,
              "properties": {
                "bucket": {
                  "additionalProperties": true,
                  "type": [
                    "object",
                    "null"
                  ]
                },
                "id": {
                  "type": "string"
                },
                "kind": {
                  "type": "string"
                },
                "label": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "limit": {
                  "type": [
                    "number",
                    "string"
                  ]
                },
                "metric": {
                  "type": "string"
                },
                "remaining": {
                  "type": [
                    "number",
                    "string"
                  ]
                },
                "reset_at": {
                  "format": "date-time",
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "used": {
                  "type": [
                    "number",
                    "string"
                  ]
                },
                "window": {
                  "additionalProperties": true,
                  "type": "object"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "scope": {
            "description": "`node` when counters are kept per gateway node, `shared` when shared across the region.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "OpenAISpeechRequest": {
        "additionalProperties": true,
        "properties": {
          "input": {
            "description": "Text to speak; scanned by the app's request guardrails.",
            "type": "string"
          },
          "instructions": {
            "type": "string"
          },
          "model": {
            "type": "string"
          },
          "response_format": {
            "description": "Audio format, for example `mp3`, `opus`, `aac`, `flac`, `wav`, `pcm`.",
            "type": "string"
          },
          "speed": {
            "type": "number"
          },
          "stream_format": {
            "description": "`sse` streams audio chunks as server-sent events.",
            "enum": [
              "audio",
              "sse"
            ],
            "type": "string"
          },
          "voice": {
            "additionalProperties": true,
            "type": [
              "string",
              "object"
            ]
          }
        },
        "required": [
          "model",
          "input"
        ],
        "type": "object"
      },
      "OpenAITranscription": {
        "additionalProperties": true,
        "description": "Transcript; the transcript text is scanned by the app's response guardrails.",
        "properties": {
          "duration": {
            "type": "number"
          },
          "language": {
            "type": "string"
          },
          "segments": {
            "items": {
              "additionalProperties": true,
              "type": "object"
            },
            "type": "array"
          },
          "text": {
            "type": "string"
          },
          "usage": {
            "additionalProperties": true,
            "type": "object"
          }
        },
        "type": "object"
      },
      "OpenAITranscriptionRequest": {
        "additionalProperties": true,
        "properties": {
          "file": {
            "description": "Audio file.",
            "format": "binary",
            "type": "string"
          },
          "language": {
            "type": "string"
          },
          "model": {
            "type": "string"
          },
          "prompt": {
            "type": "string"
          },
          "response_format": {
            "enum": [
              "json",
              "text",
              "srt",
              "verbose_json",
              "vtt",
              "diarized_json"
            ],
            "type": "string"
          },
          "stream": {
            "description": "Stream the transcript as server-sent events.",
            "type": "boolean"
          },
          "temperature": {
            "type": "number"
          }
        },
        "required": [
          "file",
          "model"
        ],
        "type": "object"
      },
      "OpenAITranslationRequest": {
        "additionalProperties": true,
        "properties": {
          "file": {
            "description": "Audio file.",
            "format": "binary",
            "type": "string"
          },
          "model": {
            "type": "string"
          },
          "prompt": {
            "type": "string"
          },
          "response_format": {
            "enum": [
              "json",
              "text",
              "srt",
              "verbose_json",
              "vtt"
            ],
            "type": "string"
          },
          "temperature": {
            "type": "number"
          }
        },
        "required": [
          "file",
          "model"
        ],
        "type": "object"
      },
      "OpenAIUsage": {
        "additionalProperties": true,
        "properties": {
          "completion_tokens": {
            "type": "integer"
          },
          "prompt_tokens": {
            "type": "integer"
          },
          "total_tokens": {
            "type": "integer"
          }
        },
        "type": "object"
      },
      "OpenAIVideo": {
        "additionalProperties": true,
        "properties": {
          "created_at": {
            "type": [
              "integer",
              "null"
            ]
          },
          "id": {
            "type": "string"
          },
          "model": {
            "type": "string"
          },
          "object": {
            "type": "string"
          },
          "progress": {
            "type": [
              "integer",
              "number",
              "null"
            ]
          },
          "seconds": {
            "type": [
              "string",
              "integer",
              "null"
            ]
          },
          "size": {
            "type": [
              "string",
              "null"
            ]
          },
          "status": {
            "description": "For example `queued`, `in_progress`, `completed`, `failed`.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "OpenAIVideoEditRequest": {
        "additionalProperties": true,
        "properties": {
          "model": {
            "type": "string"
          },
          "prompt": {
            "type": "string"
          },
          "video": {
            "additionalProperties": true,
            "description": "The video to edit, by URL.",
            "type": [
              "object",
              "string"
            ]
          }
        },
        "required": [
          "prompt"
        ],
        "type": "object"
      },
      "OpenAIVideoList": {
        "additionalProperties": true,
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/OpenAIVideo"
            },
            "type": "array"
          },
          "first_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "has_more": {
            "type": "boolean"
          },
          "last_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "object": {
            "const": "list",
            "type": "string"
          }
        },
        "type": "object"
      },
      "OpenAIVideoMultipartRequest": {
        "additionalProperties": true,
        "properties": {
          "input_reference": {
            "description": "Optional reference image.",
            "format": "binary",
            "type": "string"
          },
          "model": {
            "type": "string"
          },
          "prompt": {
            "type": "string"
          },
          "seconds": {
            "type": "string"
          },
          "size": {
            "type": "string"
          }
        },
        "required": [
          "prompt"
        ],
        "type": "object"
      },
      "OpenAIVideoRequest": {
        "additionalProperties": true,
        "properties": {
          "model": {
            "type": "string"
          },
          "prompt": {
            "type": "string"
          },
          "seconds": {
            "type": [
              "string",
              "integer"
            ]
          },
          "size": {
            "type": "string"
          }
        },
        "required": [
          "prompt"
        ],
        "type": "object"
      },
      "PerplexityDecisionsRequest": {
        "additionalProperties": true,
        "properties": {
          "model": {
            "description": "pplx-decider model id or alias configured for the app.",
            "type": "string"
          },
          "questions": {
            "additionalProperties": {
              "additionalProperties": true,
              "properties": {
                "type": {
                  "enum": [
                    "noul",
                    "choice",
                    "score"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "type"
              ],
              "type": "object"
            },
            "description": "Named questions. Image (`box`) questions are refused.",
            "minProperties": 1,
            "type": "object"
          },
          "state": {
            "description": "The input the questions are about: text or JSON.",
            "type": [
              "string",
              "object",
              "array"
            ]
          }
        },
        "required": [
          "state",
          "questions"
        ],
        "type": "object"
      },
      "PerplexityDecisionsResponse": {
        "additionalProperties": true,
        "description": "Perplexity's answer, returned unchanged.",
        "properties": {
          "answers": {
            "description": "Answer per question name.",
            "type": "object"
          }
        },
        "type": "object"
      },
      "PerplexityEmbeddingList": {
        "additionalProperties": true,
        "description": "Perplexity's answer, returned unchanged.",
        "properties": {
          "data": {
            "items": {
              "additionalProperties": true,
              "properties": {
                "embedding": {
                  "description": "Base64 int8 values, or packed bits for `base64_binary`.",
                  "type": "string"
                },
                "index": {
                  "type": "integer"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "model": {
            "type": "string"
          },
          "object": {
            "type": "string"
          },
          "usage": {
            "additionalProperties": true,
            "type": "object"
          }
        },
        "type": "object"
      },
      "PerplexityEmbeddingRequest": {
        "additionalProperties": true,
        "properties": {
          "dimensions": {
            "description": "Truncated vector length (Matryoshka).",
            "minimum": 128,
            "type": "integer"
          },
          "encoding_format": {
            "description": "Perplexity's encodings; `float` and `base64` are refused by Perplexity. Use `/openai_compatible/v1/embeddings` for floats.",
            "enum": [
              "base64_int8",
              "base64_binary"
            ],
            "type": "string"
          },
          "input": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "items": {
                  "type": "string"
                },
                "maxItems": 512,
                "type": "array"
              }
            ],
            "description": "Text, or up to 512 texts."
          },
          "model": {
            "description": "pplx-embed model id or alias configured for the app.",
            "type": "string"
          }
        },
        "required": [
          "model",
          "input"
        ],
        "type": "object"
      },
      "QuotaInfo": {
        "additionalProperties": true,
        "description": "A usage quota or budget as reported in quota errors.",
        "properties": {
          "current_usage": {
            "type": "number"
          },
          "current_usage_micro_usd": {
            "type": "integer"
          },
          "estimated_request_amount": {
            "description": "This request's estimated charge, when it tipped the quota over.",
            "type": "number"
          },
          "id": {
            "type": "string"
          },
          "label": {
            "type": [
              "string",
              "null"
            ]
          },
          "limit": {
            "type": "number"
          },
          "limit_micro_usd": {
            "type": "integer"
          },
          "metric": {
            "description": "What is counted, e.g. requests, tokens or spend.",
            "type": "string"
          },
          "reset_at": {
            "description": "Null for lifetime windows or a zero allowance.",
            "format": "date-time",
            "type": [
              "string",
              "null"
            ]
          },
          "unit": {
            "description": "`usd` for spend quotas.",
            "type": "string"
          },
          "window": {
            "additionalProperties": true,
            "type": [
              "object",
              "string",
              "null"
            ]
          }
        },
        "type": "object"
      },
      "RerankRequest": {
        "additionalProperties": true,
        "properties": {
          "documents": {
            "description": "Documents to rank: strings, or objects with a `text` field.",
            "items": {
              "additionalProperties": true,
              "type": [
                "string",
                "object"
              ]
            },
            "minItems": 1,
            "type": "array"
          },
          "max_tokens_per_doc": {
            "type": "integer"
          },
          "model": {
            "description": "Rerank model id enabled for the app.",
            "type": "string"
          },
          "query": {
            "description": "Search query.",
            "minLength": 1,
            "type": "string"
          },
          "return_documents": {
            "description": "Include each ranked document in its result.",
            "type": "boolean"
          },
          "top_n": {
            "description": "Return only the best N results.",
            "minimum": 1,
            "type": "integer"
          }
        },
        "required": [
          "model",
          "query",
          "documents"
        ],
        "type": "object"
      },
      "RerankResponse": {
        "additionalProperties": true,
        "description": "Cohere-shaped results, most relevant first, whatever the provider.",
        "properties": {
          "id": {
            "type": [
              "string",
              "null"
            ]
          },
          "model": {
            "type": "string"
          },
          "results": {
            "items": {
              "additionalProperties": true,
              "properties": {
                "document": {
                  "additionalProperties": true,
                  "properties": {
                    "text": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "index": {
                  "description": "Position in the request's `documents`.",
                  "type": "integer"
                },
                "relevance_score": {
                  "type": "number"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "usage": {
            "additionalProperties": true,
            "properties": {
              "search_units": {
                "type": "integer"
              },
              "total_tokens": {
                "type": "integer"
              }
            },
            "type": "object"
          }
        },
        "type": "object"
      },
      "ResponsesCreateRequest": {
        "additionalProperties": true,
        "description": "Responses create body. Fields not listed are forwarded to the provider.",
        "properties": {
          "background": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "conversation": {
            "description": "Conversation this response belongs to (upstream state).",
            "type": [
              "string",
              "object",
              "null"
            ]
          },
          "include": {
            "items": {
              "type": "string"
            },
            "type": [
              "array",
              "null"
            ]
          },
          "input": {
            "description": "Text, or a list of input items (messages, function call outputs, ...).",
            "items": {
              "additionalProperties": true,
              "type": "object"
            },
            "type": [
              "string",
              "array"
            ]
          },
          "instructions": {
            "description": "System or developer instructions.",
            "type": [
              "string",
              "null"
            ]
          },
          "max_output_tokens": {
            "type": [
              "integer",
              "null"
            ]
          },
          "metadata": {
            "additionalProperties": true,
            "type": [
              "object",
              "null"
            ]
          },
          "model": {
            "description": "Model id or alias configured for the app.",
            "type": "string"
          },
          "previous_response_id": {
            "description": "Continue from a stored response. Stays on the upstream that stored it.",
            "type": [
              "string",
              "null"
            ]
          },
          "reasoning": {
            "additionalProperties": true,
            "type": [
              "object",
              "null"
            ]
          },
          "store": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "stream": {
            "description": "Stream the answer as server-sent events.",
            "type": [
              "boolean",
              "null"
            ]
          },
          "temperature": {
            "type": [
              "number",
              "null"
            ]
          },
          "text": {
            "additionalProperties": true,
            "type": [
              "object",
              "null"
            ]
          },
          "tool_choice": {
            "type": [
              "string",
              "object"
            ]
          },
          "tools": {
            "items": {
              "additionalProperties": true,
              "type": "object"
            },
            "type": "array"
          },
          "top_p": {
            "type": [
              "number",
              "null"
            ]
          }
        },
        "type": "object"
      },
      "ResponsesDeletedResponse": {
        "additionalProperties": true,
        "properties": {
          "deleted": {
            "type": "boolean"
          },
          "id": {
            "type": "string"
          },
          "object": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "ResponsesInputItemList": {
        "additionalProperties": true,
        "properties": {
          "data": {
            "items": {
              "additionalProperties": true,
              "type": "object"
            },
            "type": "array"
          },
          "first_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "has_more": {
            "type": "boolean"
          },
          "last_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "object": {
            "const": "list",
            "type": "string"
          }
        },
        "type": "object"
      },
      "ResponsesQuilrUsage": {
        "additionalProperties": true,
        "description": "The caller's own quota buckets for Responses requests.",
        "properties": {
          "node": {
            "description": "Opaque identifier of the gateway node that answered.",
            "type": "string"
          },
          "observed_at": {
            "format": "date-time",
            "type": "string"
          },
          "quotas": {
            "items": {
              "additionalProperties": true,
              "properties": {
                "base_limit": {
                  "description": "Limit before a grant or overflow; present only then.",
                  "type": [
                    "number",
                    "string"
                  ]
                },
                "bucket": {
                  "additionalProperties": true,
                  "type": [
                    "object",
                    "string",
                    "null"
                  ]
                },
                "grant": {
                  "additionalProperties": true,
                  "type": "object"
                },
                "id": {
                  "type": "string"
                },
                "kind": {
                  "type": "string"
                },
                "label": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "limit": {
                  "type": [
                    "number",
                    "string"
                  ]
                },
                "metric": {
                  "description": "What is counted, for example requests, tokens or cost.",
                  "type": "string"
                },
                "overflow": {
                  "additionalProperties": true,
                  "type": "object"
                },
                "remaining": {
                  "type": [
                    "number",
                    "string"
                  ]
                },
                "reset_at": {
                  "format": "date-time",
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "used": {
                  "type": [
                    "number",
                    "string"
                  ]
                },
                "window": {
                  "additionalProperties": true,
                  "type": "object"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "scope": {
            "description": "`node` when the counts are those of the gateway node that answered, `shared` when counters are shared across the region's nodes.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "ResponsesResponse": {
        "additionalProperties": true,
        "description": "A model response.",
        "properties": {
          "created_at": {
            "type": "number"
          },
          "error": {
            "additionalProperties": true,
            "type": [
              "object",
              "null"
            ]
          },
          "id": {
            "type": "string"
          },
          "incomplete_details": {
            "additionalProperties": true,
            "type": [
              "object",
              "null"
            ]
          },
          "model": {
            "type": "string"
          },
          "object": {
            "const": "response",
            "type": "string"
          },
          "output": {
            "items": {
              "additionalProperties": true,
              "type": "object"
            },
            "type": "array"
          },
          "output_text": {
            "type": [
              "string",
              "null"
            ]
          },
          "previous_response_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "status": {
            "description": "`completed`, `in_progress`, `queued`, `failed`, `incomplete` or `cancelled`.",
            "type": "string"
          },
          "usage": {
            "additionalProperties": true,
            "properties": {
              "input_tokens": {
                "type": "integer"
              },
              "input_tokens_details": {
                "additionalProperties": true,
                "properties": {
                  "cached_tokens": {
                    "type": "integer"
                  }
                },
                "type": "object"
              },
              "output_tokens": {
                "type": "integer"
              },
              "output_tokens_details": {
                "additionalProperties": true,
                "properties": {
                  "reasoning_tokens": {
                    "type": "integer"
                  }
                },
                "type": "object"
              },
              "total_tokens": {
                "type": "integer"
              }
            },
            "type": "object"
          }
        },
        "type": "object"
      },
      "ResponsesStreamEvent": {
        "additionalProperties": true,
        "description": "Data of one server-sent event (`event: <type>` / `data: <json>`).",
        "properties": {
          "delta": {
            "type": "string"
          },
          "response": {
            "additionalProperties": true,
            "type": "object"
          },
          "sequence_number": {
            "type": "integer"
          },
          "type": {
            "description": "Event type, for example `response.created`, `response.output_text.delta`, `response.completed`, `error`.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "SarvamSpeechToTextRequest": {
        "additionalProperties": true,
        "properties": {
          "file": {
            "description": "Audio file.",
            "format": "binary",
            "type": "string"
          },
          "language_code": {
            "description": "BCP-47 style code such as `hi-IN`, `en-IN`, or `auto` where Sarvam accepts it.",
            "type": "string"
          },
          "mode": {
            "description": "For example `transcribe` or `translate`.",
            "type": "string"
          },
          "model": {
            "description": "Speech model (default `saaras:v3`).",
            "type": "string"
          },
          "with_timestamps": {
            "enum": [
              "true",
              "false"
            ],
            "type": "string"
          }
        },
        "required": [
          "file"
        ],
        "type": "object"
      },
      "SarvamSpeechToTextResponse": {
        "additionalProperties": true,
        "properties": {
          "diarized_transcript": {
            "additionalProperties": true,
            "type": [
              "object",
              "null"
            ]
          },
          "language_code": {
            "type": [
              "string",
              "null"
            ]
          },
          "request_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "timestamps": {
            "additionalProperties": true,
            "type": [
              "object",
              "null"
            ]
          },
          "transcript": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "SarvamSpeechToTextTranslateRequest": {
        "additionalProperties": true,
        "properties": {
          "file": {
            "description": "Audio file.",
            "format": "binary",
            "type": "string"
          },
          "model": {
            "type": "string"
          },
          "prompt": {
            "type": "string"
          }
        },
        "required": [
          "file"
        ],
        "type": "object"
      },
      "SarvamTextLidRequest": {
        "additionalProperties": true,
        "properties": {
          "input": {
            "type": "string"
          }
        },
        "required": [
          "input"
        ],
        "type": "object"
      },
      "SarvamTextLidResponse": {
        "additionalProperties": true,
        "properties": {
          "language_code": {
            "type": [
              "string",
              "null"
            ]
          },
          "request_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "script_code": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "type": "object"
      },
      "SarvamTextToSpeechRequest": {
        "additionalProperties": true,
        "properties": {
          "model": {
            "description": "Voice model (default `bulbul:v3`).",
            "type": "string"
          },
          "output_audio_codec": {
            "type": "string"
          },
          "pace": {
            "type": "number"
          },
          "speaker": {
            "type": "string"
          },
          "speech_sample_rate": {
            "type": "integer"
          },
          "target_language_code": {
            "description": "BCP-47 style code such as `hi-IN`, `en-IN`, or `auto` where Sarvam accepts it.",
            "type": "string"
          },
          "text": {
            "type": "string"
          }
        },
        "required": [
          "text",
          "target_language_code"
        ],
        "type": "object"
      },
      "SarvamTextToSpeechResponse": {
        "additionalProperties": true,
        "properties": {
          "audios": {
            "description": "Base64 audio, as fragments of one payload.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "request_id": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "type": "object"
      },
      "SarvamTranslateRequest": {
        "additionalProperties": true,
        "properties": {
          "input": {
            "type": "string"
          },
          "mode": {
            "type": "string"
          },
          "model": {
            "description": "Translation model (default `mayura:v1`).",
            "type": "string"
          },
          "source_language_code": {
            "description": "BCP-47 style code such as `hi-IN`, `en-IN`, or `auto` where Sarvam accepts it.",
            "type": "string"
          },
          "speaker_gender": {
            "type": "string"
          },
          "target_language_code": {
            "description": "BCP-47 style code such as `hi-IN`, `en-IN`, or `auto` where Sarvam accepts it.",
            "type": "string"
          }
        },
        "required": [
          "input",
          "source_language_code",
          "target_language_code"
        ],
        "type": "object"
      },
      "SarvamTranslateResponse": {
        "additionalProperties": true,
        "properties": {
          "request_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "source_language_code": {
            "type": [
              "string",
              "null"
            ]
          },
          "translated_text": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "SarvamTransliterateRequest": {
        "additionalProperties": true,
        "properties": {
          "input": {
            "type": "string"
          },
          "numerals_format": {
            "type": "string"
          },
          "source_language_code": {
            "description": "BCP-47 style code such as `hi-IN`, `en-IN`, or `auto` where Sarvam accepts it.",
            "type": "string"
          },
          "spoken_form": {
            "type": "boolean"
          },
          "target_language_code": {
            "description": "BCP-47 style code such as `hi-IN`, `en-IN`, or `auto` where Sarvam accepts it.",
            "type": "string"
          }
        },
        "required": [
          "input",
          "source_language_code",
          "target_language_code"
        ],
        "type": "object"
      },
      "SarvamTransliterateResponse": {
        "additionalProperties": true,
        "properties": {
          "request_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "source_language_code": {
            "type": [
              "string",
              "null"
            ]
          },
          "transliterated_text": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "TypeSafeModelList": {
        "additionalProperties": true,
        "properties": {
          "models": {
            "items": {
              "additionalProperties": true,
              "properties": {
                "description": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "name": {
                  "type": "string"
                },
                "release_date": {
                  "type": [
                    "string",
                    "null"
                  ]
                }
              },
              "type": "object"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "TypeSafeSystemOneRequest": {
        "additionalProperties": true,
        "properties": {
          "model": {
            "description": "Decision model id or alias configured for the app.",
            "type": "string"
          },
          "questions": {
            "additionalProperties": {
              "additionalProperties": true,
              "properties": {
                "type": {
                  "enum": [
                    "noul",
                    "choice",
                    "score"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "type"
              ],
              "type": "object"
            },
            "description": "Named questions. Image (`box`) questions are refused.",
            "minProperties": 1,
            "type": "object"
          },
          "state": {
            "description": "The input the questions are about: text or JSON.",
            "type": [
              "string",
              "object",
              "array"
            ]
          }
        },
        "required": [
          "state",
          "questions"
        ],
        "type": "object"
      },
      "TypeSafeSystemOneResponse": {
        "additionalProperties": true,
        "description": "The provider's answer, returned unchanged.",
        "properties": {
          "answers": {
            "description": "Answer per question name.",
            "type": "object"
          }
        },
        "type": "object"
      },
      "XAIBatch": {
        "additionalProperties": true,
        "properties": {
          "batch_id": {
            "type": "string"
          },
          "create_time": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "state": {
            "additionalProperties": true,
            "properties": {
              "num_cancelled": {
                "type": "integer"
              },
              "num_error": {
                "type": "integer"
              },
              "num_pending": {
                "type": "integer"
              },
              "num_requests": {
                "type": "integer"
              },
              "num_success": {
                "type": "integer"
              }
            },
            "type": "object"
          }
        },
        "type": "object"
      },
      "XAIBatchCreateRequest": {
        "additionalProperties": true,
        "properties": {
          "input_file_id": {
            "description": "Optional uploaded JSONL file of requests.",
            "type": "string"
          },
          "name": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "XAIBatchList": {
        "additionalProperties": true,
        "properties": {
          "batches": {
            "items": {
              "$ref": "#/components/schemas/XAIBatch"
            },
            "type": "array"
          },
          "pagination_token": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "type": "object"
      },
      "XAIBatchPage": {
        "additionalProperties": true,
        "description": "A page of batch requests or results, in xAI's format.",
        "properties": {
          "pagination_token": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "type": "object"
      },
      "XAIBatchRequestsAddRequest": {
        "additionalProperties": true,
        "properties": {
          "batch_requests": {
            "items": {
              "additionalProperties": true,
              "properties": {
                "batch_request": {
                  "additionalProperties": true,
                  "type": "object"
                },
                "batch_request_id": {
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          }
        },
        "required": [
          "batch_requests"
        ],
        "type": "object"
      },
      "XAIImageEditRequest": {
        "additionalProperties": true,
        "properties": {
          "image": {
            "anyOf": [
              {
                "additionalProperties": true,
                "properties": {
                  "type": {
                    "type": "string"
                  },
                  "url": {
                    "description": "Image URL or `data:` URI.",
                    "type": "string"
                  }
                },
                "type": "object"
              },
              {
                "items": {
                  "additionalProperties": true,
                  "properties": {
                    "type": {
                      "type": "string"
                    },
                    "url": {
                      "description": "Image URL or `data:` URI.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "type": "array"
              }
            ],
            "description": "Source image or images."
          },
          "model": {
            "type": "string"
          },
          "n": {
            "minimum": 1,
            "type": "integer"
          },
          "prompt": {
            "type": "string"
          },
          "response_format": {
            "enum": [
              "url",
              "b64_json"
            ],
            "type": "string"
          }
        },
        "required": [
          "model",
          "prompt"
        ],
        "type": "object"
      },
      "XAIImageGenerationRequest": {
        "additionalProperties": true,
        "properties": {
          "aspect_ratio": {
            "type": "string"
          },
          "model": {
            "type": "string"
          },
          "n": {
            "minimum": 1,
            "type": "integer"
          },
          "prompt": {
            "type": "string"
          },
          "resolution": {
            "type": "string"
          },
          "response_format": {
            "enum": [
              "url",
              "b64_json"
            ],
            "type": "string"
          }
        },
        "required": [
          "model",
          "prompt"
        ],
        "type": "object"
      },
      "XAIImageResponse": {
        "additionalProperties": true,
        "properties": {
          "data": {
            "items": {
              "additionalProperties": true,
              "properties": {
                "b64_json": {
                  "type": "string"
                },
                "revised_prompt": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "url": {
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "usage": {
            "additionalProperties": true,
            "type": "object"
          }
        },
        "type": "object"
      },
      "XAIResponse": {
        "additionalProperties": true,
        "properties": {
          "created_at": {
            "type": "integer"
          },
          "id": {
            "type": "string"
          },
          "model": {
            "type": "string"
          },
          "object": {
            "const": "response",
            "type": "string"
          },
          "output": {
            "items": {
              "additionalProperties": true,
              "type": "object"
            },
            "type": "array"
          },
          "status": {
            "type": "string"
          },
          "usage": {
            "additionalProperties": true,
            "type": [
              "object",
              "null"
            ]
          }
        },
        "type": "object"
      },
      "XAIResponseDeleted": {
        "additionalProperties": true,
        "properties": {
          "deleted": {
            "type": "boolean"
          },
          "id": {
            "type": "string"
          },
          "object": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "XAIResponseRequest": {
        "additionalProperties": true,
        "properties": {
          "input": {
            "items": {
              "additionalProperties": true,
              "type": "object"
            },
            "type": [
              "string",
              "array"
            ]
          },
          "instructions": {
            "type": [
              "string",
              "null"
            ]
          },
          "max_output_tokens": {
            "type": [
              "integer",
              "null"
            ]
          },
          "model": {
            "example": "grok-4",
            "type": "string"
          },
          "previous_response_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "store": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "stream": {
            "description": "Return a server-sent event stream.",
            "type": [
              "boolean",
              "null"
            ]
          },
          "temperature": {
            "type": [
              "number",
              "null"
            ]
          },
          "tools": {
            "description": "Function tools and xAI server-side tools.",
            "items": {
              "additionalProperties": true,
              "properties": {
                "type": {
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          }
        },
        "required": [
          "model",
          "input"
        ],
        "type": "object"
      },
      "XAIVideo": {
        "additionalProperties": true,
        "properties": {
          "model": {
            "type": "string"
          },
          "status": {
            "description": "`pending`, `done`, `expired` or `failed`.",
            "type": "string"
          },
          "video": {
            "additionalProperties": true,
            "properties": {
              "duration": {
                "type": "number"
              },
              "url": {
                "type": "string"
              }
            },
            "type": "object"
          }
        },
        "type": "object"
      },
      "XAIVideoEditRequest": {
        "additionalProperties": true,
        "properties": {
          "model": {
            "type": "string"
          },
          "prompt": {
            "type": "string"
          },
          "video": {
            "additionalProperties": true,
            "description": "Source video.",
            "properties": {
              "url": {
                "type": "string"
              }
            },
            "type": "object"
          }
        },
        "required": [
          "model",
          "prompt"
        ],
        "type": "object"
      },
      "XAIVideoGenerationRequest": {
        "additionalProperties": true,
        "properties": {
          "aspect_ratio": {
            "type": "string"
          },
          "duration": {
            "description": "Length in seconds.",
            "type": "integer"
          },
          "image": {
            "additionalProperties": true,
            "description": "Optional starting image.",
            "properties": {
              "url": {
                "type": "string"
              }
            },
            "type": "object"
          },
          "model": {
            "type": "string"
          },
          "prompt": {
            "type": "string"
          },
          "resolution": {
            "type": "string"
          }
        },
        "required": [
          "model",
          "prompt"
        ],
        "type": "object"
      },
      "XAIVideoJob": {
        "additionalProperties": true,
        "properties": {
          "request_id": {
            "description": "Poll it with the get video operation.",
            "type": "string"
          }
        },
        "type": "object"
      }
    },
    "securitySchemes": {
      "ApigeeApiKey": {
        "description": "Apigee style `x-apikey` header with a Quilr API key (`sk-quilr-...`) or a Quilr-verified JWT.",
        "in": "header",
        "name": "x-apikey",
        "type": "apiKey"
      },
      "ApimSubscriptionKey": {
        "description": "Azure API Management style header with a Quilr API key (`sk-quilr-...`) or a Quilr-verified JWT.",
        "in": "header",
        "name": "ocp-apim-subscription-key",
        "type": "apiKey"
      },
      "AwsSigV4": {
        "description": "AWS Signature Version 4 (`AWS4-HMAC-SHA256 ...`) computed by an AWS SDK configured with the gateway as its endpoint; the access key id is the Quilr API key. A Bearer Quilr API key is accepted instead.",
        "in": "header",
        "name": "Authorization",
        "type": "apiKey"
      },
      "KongApiKey": {
        "description": "Kong key-auth style `apikey` header with a Quilr API key (`sk-quilr-...`) or a Quilr-verified JWT.",
        "in": "header",
        "name": "apikey",
        "type": "apiKey"
      },
      "QuilrApiKeyHeader": {
        "description": "Azure OpenAI style `api-key` with a Quilr API key (`sk-quilr-...`) or a Quilr-verified JWT.",
        "in": "header",
        "name": "api-key",
        "type": "apiKey"
      },
      "QuilrBearer": {
        "description": "`Authorization: Bearer` with a Quilr API key (`sk-quilr-...`) or a Quilr-verified JWT. When present, this header decides: a malformed value is rejected and no other header is tried.",
        "scheme": "bearer",
        "type": "http"
      },
      "QuilrGoogApiKey": {
        "description": "Gemini SDK style `x-goog-api-key` with a Quilr API key (`sk-quilr-...`) or a Quilr-verified JWT.",
        "in": "header",
        "name": "x-goog-api-key",
        "type": "apiKey"
      },
      "QuilrSarvamKey": {
        "description": "Sarvam SDK style `api-subscription-key` with a Quilr API key (`sk-quilr-...`) or a Quilr-verified JWT.",
        "in": "header",
        "name": "api-subscription-key",
        "type": "apiKey"
      },
      "QuilrXApiKey": {
        "description": "`x-api-key` with a Quilr API key (`sk-quilr-...`) or a Quilr-verified JWT.",
        "in": "header",
        "name": "x-api-key",
        "type": "apiKey"
      }
    }
  },
  "info": {
    "description": "Client-facing model APIs of the Quilr LLM Gateway. Each API family speaks a provider's own wire format (OpenAI, Azure OpenAI, Anthropic, AWS Bedrock Runtime, Google Gemini and Vertex AI, and others), so an existing SDK works by pointing its base URL at the gateway. Requests pass through the gateway features that apply to their route (see below), then reach the configured upstream provider.\n\n**Authentication.** Send a Quilr API key (`sk-quilr-...`) or a Quilr-verified JWT. Every family accepts `Authorization: Bearer`, plus the header its provider's SDK uses (listed per operation) and the key headers common API gateways use (`apikey`, `ocp-apim-subscription-key`, `x-apikey`). When `Authorization` is present it decides; send one credential header only. The credential header is never forwarded upstream.\n\n**Bodies.** Request and response schemas document the main fields only and allow additional fields: the gateway forwards provider options it does not know. Do not enable strict body validation that rejects unknown fields.\n\n**Streaming.** Operations that stream return `text/event-stream` (Bedrock streaming operations return `application/vnd.amazon.eventstream`). Disable response buffering for these paths.\n\n**Aliases.** Several paths are aliases of a canonical path (marked with `x-quilr-alias-of`), kept so every SDK base-URL convention resolves. Route all of them.\n\n**Gateway features per route.** Not every route runs every gateway feature. Each model-call operation lists what applies to it in `x-quilr-gateway-features` and in its description: guardrails, Guardian, attachment scanning, model access, routing, failover, limits and quotas, token saving, Prompt Store, response cache. Guardrails do not scan the moderations, images, OCR, completions, files, batches and videos routes (and the Mistral and xAI image, video, batch and fill-in-the-middle routes).\n\n**Gateway response headers.** Most model-call routes relay the provider's own response headers (the endpoint-family routes above do not). The gateway adds: `X-Quilr-Request-ID` (correlation), `X-Quilr-Route` (opaque id of the routing rule that chose the upstream), `X-Quilr-Served-Model` (model actually called), `X-Quilr-Attempts` and `X-Quilr-Failover` (retries and failover), `X-Quilr-Cache` and `Age` (response cache), and the quota headers `RateLimit-Policy`, `RateLimit`, `X-Quilr-Quota-Remaining`, `X-Quilr-Quota-Reset`, `X-Quilr-Quota-Warning`, `X-Quilr-Budget-Overflow` and `X-Quilr-Quota-Scope`. Errors add `X-Quilr-Error-Source`, `X-Quilr-Error-Code`, `Retry-After`, `Link` (help) and, on 429, `X-RateLimit-*`, `X-Quilr-Quota-Id`, `X-Quilr-Quota-Blocked-By` and `X-Should-Retry`. Each header's exact format and condition is under `components.headers`. A provider can never set an `x-quilr-*` header: they are removed from upstream responses. Browsers cannot read these headers from cross-origin JavaScript (they are not CORS-exposed); server-side clients can.\n\n**Guardrail blocks.** A request or response stopped by a guardrail returns 400 with error type `content_policy_violation` and a code: `sensitive_data_blocked` (details give only a count, never the values), `adversarial_content_blocked`, `custom_intent_blocked`, `language_blocked`, `guardian_task_adherence_blocked` or `hallucination_blocked`. Policy and access denials return 403 (`policy_error`). Administrators may replace the message and attach a help link (`help_url`, `Link`). Anthropic-format errors keep the code but not `details`; Bedrock and Google-format guardrail blocks carry no code. Response checks run on non-streaming responses only.\n\n**Redaction.** When a guardrail redacts instead of blocking, detected values are masked in place: fully with `X` characters of the same length (text to speech uses `REDACTED`), or partially, keeping the first and last characters. Request-side redaction changes what the model receives; response-side redaction (non-streaming) changes what the client receives. No field marks a redaction.\n\n**Advisories.** When coding-helper checks are on, a non-streaming response may end with an appended paragraph starting `Guardian note:` about dependency vulnerabilities or newer versions.\n\n**Streams.** While a stream is idle for 15 seconds the gateway writes SSE comment lines (`: ` prefix); SSE parsers ignore them. If the gateway has not answered 15 seconds after admitting a request it starts a `200` event stream early; a later failure then arrives as an in-stream error event carrying an added `status_code` field instead of an HTTP status. Bedrock streams end with an exception frame (`modelStreamErrorException` or `internalServerException`) when the upstream stream is interrupted.\n\n**Error codes.** `x-quilr-error-codes` lists every gateway code (`source: gateway`) and the gateway's names for provider failures (`source: provider`) with their usual status. Codes are only ever added, never renamed. A code marked `also_sent_by_providers` does not by itself say who raised the error: read `X-Quilr-Error-Source` or `error.source`. Responses API ids starting `resp_qtx_` were issued by the gateway for a translated provider and are valid only against the gateway.",
    "title": "Quilr LLM Gateway Inference APIs",
    "version": "1.0.0"
  },
  "openapi": "3.1.0",
  "paths": {
    "/anthropic_messages/models": {
      "get": {
        "description": "Models enabled for the app on its Anthropic-family providers, in Anthropic's list format. Makes no upstream call. Models the app hides from listings are left out but stay callable.",
        "operationId": "Anthropic_list_models_alias1",
        "parameters": [
          {
            "description": "Anthropic API version, forwarded to the provider. When absent, the gateway sends the version configured for the provider (by default `2023-06-01`).",
            "in": "header",
            "name": "anthropic-version",
            "required": false,
            "schema": {
              "example": "2023-06-01",
              "type": "string"
            }
          },
          {
            "description": "Comma separated Anthropic beta feature names. Repeated headers are joined. Forwarded to the provider; betas a provider does not support may be dropped for that provider.",
            "in": "header",
            "name": "anthropic-beta",
            "required": false,
            "schema": {
              "example": "prompt-caching-2024-07-31",
              "type": "string"
            }
          },
          {
            "description": "Accepted for SDK compatibility; the full list is returned in one page.",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Accepted for SDK compatibility; ignored.",
            "in": "query",
            "name": "before_id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Accepted for SDK compatibility; ignored.",
            "in": "query",
            "name": "after_id",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AnthropicModelList"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/AnthropicError400"
          },
          "401": {
            "$ref": "#/components/responses/AnthropicError401"
          },
          "403": {
            "$ref": "#/components/responses/AnthropicError403"
          },
          "500": {
            "$ref": "#/components/responses/AnthropicError500"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "List models",
        "tags": [
          "Anthropic Messages"
        ],
        "x-quilr-alias-of": "/anthropic_messages/v1/models"
      }
    },
    "/anthropic_messages/models/{model_id}": {
      "get": {
        "description": "One model enabled for the app on its Anthropic-family providers. Makes no upstream call.",
        "operationId": "Anthropic_retrieve_model_alias1",
        "parameters": [
          {
            "description": "Model id.",
            "in": "path",
            "name": "model_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Anthropic API version, forwarded to the provider. When absent, the gateway sends the version configured for the provider (by default `2023-06-01`).",
            "in": "header",
            "name": "anthropic-version",
            "required": false,
            "schema": {
              "example": "2023-06-01",
              "type": "string"
            }
          },
          {
            "description": "Comma separated Anthropic beta feature names. Repeated headers are joined. Forwarded to the provider; betas a provider does not support may be dropped for that provider.",
            "in": "header",
            "name": "anthropic-beta",
            "required": false,
            "schema": {
              "example": "prompt-caching-2024-07-31",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AnthropicModel"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/AnthropicError400"
          },
          "401": {
            "$ref": "#/components/responses/AnthropicError401"
          },
          "403": {
            "$ref": "#/components/responses/AnthropicError403"
          },
          "404": {
            "$ref": "#/components/responses/AnthropicError404"
          },
          "500": {
            "$ref": "#/components/responses/AnthropicError500"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Retrieve a model",
        "tags": [
          "Anthropic Messages"
        ],
        "x-quilr-alias-of": "/anthropic_messages/v1/models/{model_id}"
      }
    },
    "/anthropic_messages/v1/messages": {
      "post": {
        "description": "Anthropic Messages API. Runs the app's guardrails, routing, failover and limits, then calls the provider serving `model`. With `stream: true` the response is a server-sent event stream in Anthropic's event format. Other client headers are forwarded to the provider.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, hallucination check (non-streaming), attachment scanning, model access rules, routing groups, content routing, failover, limits, quotas and budgets, token saving, Prompt Store, universal system prompt, response cache.",
        "operationId": "Anthropic_create_message",
        "parameters": [
          {
            "description": "Anthropic API version, forwarded to the provider. When absent, the gateway sends the version configured for the provider (by default `2023-06-01`).",
            "in": "header",
            "name": "anthropic-version",
            "required": false,
            "schema": {
              "example": "2023-06-01",
              "type": "string"
            }
          },
          {
            "description": "Comma separated Anthropic beta feature names. Repeated headers are joined. Forwarded to the provider; betas a provider does not support may be dropped for that provider.",
            "in": "header",
            "name": "anthropic-beta",
            "required": false,
            "schema": {
              "example": "prompt-caching-2024-07-31",
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "JSON object of Prompt Store variable values keyed by prompt reference, e.g. `{\"<prompt reference>\": {\"tone\": \"formal\"}}`. Fills `{{variable}}` placeholders of stored prompts.",
            "in": "header",
            "name": "X-Prompt-Variables",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "example": {
                "max_tokens": 1024,
                "messages": [
                  {
                    "content": "Hello",
                    "role": "user"
                  }
                ],
                "model": "claude-sonnet-4-5"
              },
              "schema": {
                "$ref": "#/components/schemas/AnthropicMessagesRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AnthropicMessage"
                }
              },
              "text/event-stream": {
                "schema": {
                  "$ref": "#/components/schemas/AnthropicStreamEvent"
                }
              }
            },
            "description": "Success; a server-sent event stream when the request asks to stream.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/AnthropicError400"
          },
          "401": {
            "$ref": "#/components/responses/AnthropicError401"
          },
          "403": {
            "$ref": "#/components/responses/AnthropicError403"
          },
          "404": {
            "$ref": "#/components/responses/AnthropicError404"
          },
          "409": {
            "$ref": "#/components/responses/AnthropicError409"
          },
          "413": {
            "$ref": "#/components/responses/AnthropicError413"
          },
          "415": {
            "$ref": "#/components/responses/AnthropicError415"
          },
          "422": {
            "$ref": "#/components/responses/AnthropicError422"
          },
          "429": {
            "$ref": "#/components/responses/AnthropicError429"
          },
          "500": {
            "$ref": "#/components/responses/AnthropicError500"
          },
          "502": {
            "$ref": "#/components/responses/AnthropicError502"
          },
          "503": {
            "$ref": "#/components/responses/AnthropicError503"
          },
          "504": {
            "$ref": "#/components/responses/AnthropicError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Create a message",
        "tags": [
          "Anthropic Messages"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "hallucination",
          "attachments",
          "model_access",
          "group_routing",
          "context_routing",
          "failover",
          "limits",
          "token_saving",
          "prompt_store",
          "universal_system_prompt",
          "response_cache"
        ]
      }
    },
    "/anthropic_messages/v1/messages/count_tokens": {
      "post": {
        "description": "Counts input tokens with the provider serving `model`. Provider errors are returned as the provider sent them. When the provider has no counting endpoint the gateway returns a local estimate and sets the response header `x-quilr-token-count-source: estimate`.",
        "operationId": "Anthropic_count_message_tokens",
        "parameters": [
          {
            "description": "Anthropic API version, forwarded to the provider. When absent, the gateway sends the version configured for the provider (by default `2023-06-01`).",
            "in": "header",
            "name": "anthropic-version",
            "required": false,
            "schema": {
              "example": "2023-06-01",
              "type": "string"
            }
          },
          {
            "description": "Comma separated Anthropic beta feature names. Repeated headers are joined. Forwarded to the provider; betas a provider does not support may be dropped for that provider.",
            "in": "header",
            "name": "anthropic-beta",
            "required": false,
            "schema": {
              "example": "prompt-caching-2024-07-31",
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AnthropicCountTokensRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AnthropicCountTokensResponse"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              },
              "X-Quilr-Token-Count-Source": {
                "$ref": "#/components/headers/X-Quilr-Token-Count-Source"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/AnthropicError400"
          },
          "401": {
            "$ref": "#/components/responses/AnthropicError401"
          },
          "403": {
            "$ref": "#/components/responses/AnthropicError403"
          },
          "404": {
            "$ref": "#/components/responses/AnthropicError404"
          },
          "429": {
            "$ref": "#/components/responses/AnthropicError429"
          },
          "500": {
            "$ref": "#/components/responses/AnthropicError500"
          },
          "502": {
            "$ref": "#/components/responses/AnthropicError502"
          },
          "503": {
            "$ref": "#/components/responses/AnthropicError503"
          },
          "504": {
            "$ref": "#/components/responses/AnthropicError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Count message tokens",
        "tags": [
          "Anthropic Messages"
        ]
      }
    },
    "/anthropic_messages/v1/models": {
      "get": {
        "description": "Models enabled for the app on its Anthropic-family providers, in Anthropic's list format. Makes no upstream call. Models the app hides from listings are left out but stay callable.",
        "operationId": "Anthropic_list_models",
        "parameters": [
          {
            "description": "Anthropic API version, forwarded to the provider. When absent, the gateway sends the version configured for the provider (by default `2023-06-01`).",
            "in": "header",
            "name": "anthropic-version",
            "required": false,
            "schema": {
              "example": "2023-06-01",
              "type": "string"
            }
          },
          {
            "description": "Comma separated Anthropic beta feature names. Repeated headers are joined. Forwarded to the provider; betas a provider does not support may be dropped for that provider.",
            "in": "header",
            "name": "anthropic-beta",
            "required": false,
            "schema": {
              "example": "prompt-caching-2024-07-31",
              "type": "string"
            }
          },
          {
            "description": "Accepted for SDK compatibility; the full list is returned in one page.",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Accepted for SDK compatibility; ignored.",
            "in": "query",
            "name": "before_id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Accepted for SDK compatibility; ignored.",
            "in": "query",
            "name": "after_id",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AnthropicModelList"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/AnthropicError400"
          },
          "401": {
            "$ref": "#/components/responses/AnthropicError401"
          },
          "403": {
            "$ref": "#/components/responses/AnthropicError403"
          },
          "500": {
            "$ref": "#/components/responses/AnthropicError500"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "List models",
        "tags": [
          "Anthropic Messages"
        ]
      }
    },
    "/anthropic_messages/v1/models/{model_id}": {
      "get": {
        "description": "One model enabled for the app on its Anthropic-family providers. Makes no upstream call.",
        "operationId": "Anthropic_retrieve_model",
        "parameters": [
          {
            "description": "Model id.",
            "in": "path",
            "name": "model_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Anthropic API version, forwarded to the provider. When absent, the gateway sends the version configured for the provider (by default `2023-06-01`).",
            "in": "header",
            "name": "anthropic-version",
            "required": false,
            "schema": {
              "example": "2023-06-01",
              "type": "string"
            }
          },
          {
            "description": "Comma separated Anthropic beta feature names. Repeated headers are joined. Forwarded to the provider; betas a provider does not support may be dropped for that provider.",
            "in": "header",
            "name": "anthropic-beta",
            "required": false,
            "schema": {
              "example": "prompt-caching-2024-07-31",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AnthropicModel"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/AnthropicError400"
          },
          "401": {
            "$ref": "#/components/responses/AnthropicError401"
          },
          "403": {
            "$ref": "#/components/responses/AnthropicError403"
          },
          "404": {
            "$ref": "#/components/responses/AnthropicError404"
          },
          "500": {
            "$ref": "#/components/responses/AnthropicError500"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Retrieve a model",
        "tags": [
          "Anthropic Messages"
        ]
      }
    },
    "/anthropic_messages/v1/quilr/usage": {
      "get": {
        "description": "The caller's own quota buckets for this app: limit, used, remaining and reset time. Quotas grouped per person are included only when the caller's identity is verified (a Quilr-verified JWT or a per-user key). Makes no upstream call.",
        "operationId": "Anthropic_get_quota_usage",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AnthropicQuotaUsage"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AnthropicError401"
          },
          "403": {
            "$ref": "#/components/responses/AnthropicError403"
          },
          "500": {
            "$ref": "#/components/responses/AnthropicError500"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Get the caller's quota usage",
        "tags": [
          "Anthropic Messages"
        ]
      }
    },
    "/bedrock-runtime/model/{model_id}/converse": {
      "post": {
        "description": "Bedrock Converse. Runs the app's guardrails, routing, failover and limits, then calls the model. The app may serve the request from another provider in Converse format.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, hallucination check (non-streaming), attachment scanning, model access rules, routing groups, content routing, failover, limits, quotas and budgets, universal system prompt.",
        "operationId": "Bedrock_converse_alias1",
        "parameters": [
          {
            "description": "Bedrock model id, inference profile id or ARN, or a model alias configured for the app, e.g. `anthropic.claude-3-5-sonnet-20240620-v1:0`. Ids may contain `:`. ARNs contain `/`, which must be percent-encoded as `%2F` (AWS SDKs do this); the path segment is decoded by the gateway.",
            "in": "path",
            "name": "model_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "SigV4 request time. Required with a SigV4 `Authorization` header.",
            "in": "header",
            "name": "X-Amz-Date",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "SigV4 body hash, or `UNSIGNED-PAYLOAD`. Checked against the body when sent.",
            "in": "header",
            "name": "X-Amz-Content-Sha256",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sent by AWS SDKs with temporary credentials; not used by the gateway.",
            "in": "header",
            "name": "X-Amz-Security-Token",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "example": {
                "inferenceConfig": {
                  "maxTokens": 512
                },
                "messages": [
                  {
                    "content": [
                      {
                        "text": "Hello"
                      }
                    ],
                    "role": "user"
                  }
                ]
              },
              "schema": {
                "$ref": "#/components/schemas/BedrockConverseRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BedrockConverseResponse"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BedrockError400"
          },
          "401": {
            "$ref": "#/components/responses/BedrockError401"
          },
          "403": {
            "$ref": "#/components/responses/BedrockError403"
          },
          "404": {
            "$ref": "#/components/responses/BedrockError404"
          },
          "408": {
            "$ref": "#/components/responses/BedrockError408"
          },
          "409": {
            "$ref": "#/components/responses/BedrockError409"
          },
          "413": {
            "$ref": "#/components/responses/BedrockError413"
          },
          "415": {
            "$ref": "#/components/responses/BedrockError415"
          },
          "422": {
            "$ref": "#/components/responses/BedrockError422"
          },
          "429": {
            "$ref": "#/components/responses/BedrockError429"
          },
          "500": {
            "$ref": "#/components/responses/BedrockError500"
          },
          "502": {
            "$ref": "#/components/responses/BedrockError502"
          },
          "503": {
            "$ref": "#/components/responses/BedrockError503"
          },
          "504": {
            "$ref": "#/components/responses/BedrockError504"
          }
        },
        "security": [
          {
            "AwsSigV4": []
          },
          {
            "QuilrBearer": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Converse",
        "tags": [
          "AWS Bedrock Runtime"
        ],
        "x-quilr-alias-of": "/model/{model_id}/converse",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "hallucination",
          "attachments",
          "model_access",
          "group_routing",
          "context_routing",
          "failover",
          "limits",
          "universal_system_prompt"
        ]
      }
    },
    "/bedrock-runtime/model/{model_id}/converse-stream": {
      "post": {
        "description": "Bedrock ConverseStream. Same request as Converse; the response is an AWS event stream (`messageStart`, `contentBlockDelta`, `contentBlockStop`, `messageStop`, `metadata`, and exception events). Errors before the stream starts are JSON.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, hallucination check (non-streaming), attachment scanning, model access rules, routing groups, content routing, failover, limits, quotas and budgets, universal system prompt.",
        "operationId": "Bedrock_converse_stream_alias1",
        "parameters": [
          {
            "description": "Bedrock model id, inference profile id or ARN, or a model alias configured for the app, e.g. `anthropic.claude-3-5-sonnet-20240620-v1:0`. Ids may contain `:`. ARNs contain `/`, which must be percent-encoded as `%2F` (AWS SDKs do this); the path segment is decoded by the gateway.",
            "in": "path",
            "name": "model_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "SigV4 request time. Required with a SigV4 `Authorization` header.",
            "in": "header",
            "name": "X-Amz-Date",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "SigV4 body hash, or `UNSIGNED-PAYLOAD`. Checked against the body when sent.",
            "in": "header",
            "name": "X-Amz-Content-Sha256",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sent by AWS SDKs with temporary credentials; not used by the gateway.",
            "in": "header",
            "name": "X-Amz-Security-Token",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BedrockConverseRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/vnd.amazon.eventstream": {
                "schema": {
                  "description": "AWS event stream frames, as Bedrock sends them.",
                  "format": "binary",
                  "type": "string"
                }
              }
            },
            "description": "AWS event stream of Converse events.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BedrockError400"
          },
          "401": {
            "$ref": "#/components/responses/BedrockError401"
          },
          "403": {
            "$ref": "#/components/responses/BedrockError403"
          },
          "404": {
            "$ref": "#/components/responses/BedrockError404"
          },
          "408": {
            "$ref": "#/components/responses/BedrockError408"
          },
          "409": {
            "$ref": "#/components/responses/BedrockError409"
          },
          "413": {
            "$ref": "#/components/responses/BedrockError413"
          },
          "415": {
            "$ref": "#/components/responses/BedrockError415"
          },
          "422": {
            "$ref": "#/components/responses/BedrockError422"
          },
          "429": {
            "$ref": "#/components/responses/BedrockError429"
          },
          "500": {
            "$ref": "#/components/responses/BedrockError500"
          },
          "502": {
            "$ref": "#/components/responses/BedrockError502"
          },
          "503": {
            "$ref": "#/components/responses/BedrockError503"
          },
          "504": {
            "$ref": "#/components/responses/BedrockError504"
          }
        },
        "security": [
          {
            "AwsSigV4": []
          },
          {
            "QuilrBearer": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Converse with a response stream",
        "tags": [
          "AWS Bedrock Runtime"
        ],
        "x-quilr-alias-of": "/model/{model_id}/converse-stream",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "hallucination",
          "attachments",
          "model_access",
          "group_routing",
          "context_routing",
          "failover",
          "limits",
          "universal_system_prompt"
        ]
      }
    },
    "/bedrock-runtime/model/{model_id}/invoke": {
      "post": {
        "description": "Bedrock InvokeModel with the model's own request body. Recognisable text is checked by the app's guardrails; the body is otherwise forwarded unchanged, as are `X-Amzn-Bedrock-*` headers. `Content-Type` (default `application/json`) and `Accept` are forwarded to the model.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, hallucination check (non-streaming), attachment scanning, model access rules, routing groups, content routing, failover, limits, quotas and budgets, universal system prompt.",
        "operationId": "Bedrock_invoke_model_alias1",
        "parameters": [
          {
            "description": "Bedrock model id, inference profile id or ARN, or a model alias configured for the app, e.g. `anthropic.claude-3-5-sonnet-20240620-v1:0`. Ids may contain `:`. ARNs contain `/`, which must be percent-encoded as `%2F` (AWS SDKs do this); the path segment is decoded by the gateway.",
            "in": "path",
            "name": "model_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Bedrock guardrail trace: `ENABLED`, `DISABLED` or `ENABLED_FULL`. Forwarded.",
            "in": "header",
            "name": "X-Amzn-Bedrock-Trace",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Bedrock guardrail id or ARN. Forwarded.",
            "in": "header",
            "name": "X-Amzn-Bedrock-GuardrailIdentifier",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Bedrock guardrail version. Forwarded.",
            "in": "header",
            "name": "X-Amzn-Bedrock-GuardrailVersion",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "`standard` or `optimized`. Forwarded.",
            "in": "header",
            "name": "X-Amzn-Bedrock-PerformanceConfig-Latency",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Bedrock service tier. Forwarded.",
            "in": "header",
            "name": "X-Amzn-Bedrock-Service-Tier",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "SigV4 request time. Required with a SigV4 `Authorization` header.",
            "in": "header",
            "name": "X-Amz-Date",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "SigV4 body hash, or `UNSIGNED-PAYLOAD`. Checked against the body when sent.",
            "in": "header",
            "name": "X-Amz-Content-Sha256",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sent by AWS SDKs with temporary credentials; not used by the gateway.",
            "in": "header",
            "name": "X-Amz-Security-Token",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "*/*": {
              "schema": {
                "format": "binary",
                "type": "string"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BedrockInvokeRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "*/*": {
                "schema": {
                  "format": "binary",
                  "type": "string"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BedrockInvokeResponse"
                }
              }
            },
            "description": "The model's response. Its media type follows the model and the `Accept` header.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Amzn-Bedrock-Input-Token-Count": {
                "description": "Input tokens.",
                "schema": {
                  "type": "string"
                }
              },
              "X-Amzn-Bedrock-Output-Token-Count": {
                "description": "Output tokens.",
                "schema": {
                  "type": "string"
                }
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BedrockError400"
          },
          "401": {
            "$ref": "#/components/responses/BedrockError401"
          },
          "403": {
            "$ref": "#/components/responses/BedrockError403"
          },
          "404": {
            "$ref": "#/components/responses/BedrockError404"
          },
          "408": {
            "$ref": "#/components/responses/BedrockError408"
          },
          "409": {
            "$ref": "#/components/responses/BedrockError409"
          },
          "413": {
            "$ref": "#/components/responses/BedrockError413"
          },
          "415": {
            "$ref": "#/components/responses/BedrockError415"
          },
          "422": {
            "$ref": "#/components/responses/BedrockError422"
          },
          "429": {
            "$ref": "#/components/responses/BedrockError429"
          },
          "500": {
            "$ref": "#/components/responses/BedrockError500"
          },
          "502": {
            "$ref": "#/components/responses/BedrockError502"
          },
          "503": {
            "$ref": "#/components/responses/BedrockError503"
          },
          "504": {
            "$ref": "#/components/responses/BedrockError504"
          }
        },
        "security": [
          {
            "AwsSigV4": []
          },
          {
            "QuilrBearer": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Invoke a model",
        "tags": [
          "AWS Bedrock Runtime"
        ],
        "x-quilr-alias-of": "/model/{model_id}/invoke",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "hallucination",
          "attachments",
          "model_access",
          "group_routing",
          "context_routing",
          "failover",
          "limits",
          "universal_system_prompt"
        ]
      }
    },
    "/bedrock-runtime/model/{model_id}/invoke-with-response-stream": {
      "post": {
        "description": "Bedrock InvokeModelWithResponseStream. The response is an AWS event stream of `chunk` events whose `bytes` carry the model's own streaming payload. Errors before the stream starts are JSON.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, hallucination check (non-streaming), attachment scanning, model access rules, routing groups, content routing, failover, limits, quotas and budgets, universal system prompt.",
        "operationId": "Bedrock_invoke_model_with_response_stream_alias1",
        "parameters": [
          {
            "description": "Bedrock model id, inference profile id or ARN, or a model alias configured for the app, e.g. `anthropic.claude-3-5-sonnet-20240620-v1:0`. Ids may contain `:`. ARNs contain `/`, which must be percent-encoded as `%2F` (AWS SDKs do this); the path segment is decoded by the gateway.",
            "in": "path",
            "name": "model_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Bedrock guardrail trace: `ENABLED`, `DISABLED` or `ENABLED_FULL`. Forwarded.",
            "in": "header",
            "name": "X-Amzn-Bedrock-Trace",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Bedrock guardrail id or ARN. Forwarded.",
            "in": "header",
            "name": "X-Amzn-Bedrock-GuardrailIdentifier",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Bedrock guardrail version. Forwarded.",
            "in": "header",
            "name": "X-Amzn-Bedrock-GuardrailVersion",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "`standard` or `optimized`. Forwarded.",
            "in": "header",
            "name": "X-Amzn-Bedrock-PerformanceConfig-Latency",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Bedrock service tier. Forwarded.",
            "in": "header",
            "name": "X-Amzn-Bedrock-Service-Tier",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Media type of each streamed chunk.",
            "in": "header",
            "name": "X-Amzn-Bedrock-Accept",
            "required": false,
            "schema": {
              "default": "application/json",
              "type": "string"
            }
          },
          {
            "description": "SigV4 request time. Required with a SigV4 `Authorization` header.",
            "in": "header",
            "name": "X-Amz-Date",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "SigV4 body hash, or `UNSIGNED-PAYLOAD`. Checked against the body when sent.",
            "in": "header",
            "name": "X-Amz-Content-Sha256",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sent by AWS SDKs with temporary credentials; not used by the gateway.",
            "in": "header",
            "name": "X-Amz-Security-Token",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "*/*": {
              "schema": {
                "format": "binary",
                "type": "string"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BedrockInvokeRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/vnd.amazon.eventstream": {
                "schema": {
                  "description": "AWS event stream frames, as Bedrock sends them.",
                  "format": "binary",
                  "type": "string"
                }
              }
            },
            "description": "AWS event stream of model chunks.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BedrockError400"
          },
          "401": {
            "$ref": "#/components/responses/BedrockError401"
          },
          "403": {
            "$ref": "#/components/responses/BedrockError403"
          },
          "404": {
            "$ref": "#/components/responses/BedrockError404"
          },
          "408": {
            "$ref": "#/components/responses/BedrockError408"
          },
          "409": {
            "$ref": "#/components/responses/BedrockError409"
          },
          "413": {
            "$ref": "#/components/responses/BedrockError413"
          },
          "415": {
            "$ref": "#/components/responses/BedrockError415"
          },
          "422": {
            "$ref": "#/components/responses/BedrockError422"
          },
          "429": {
            "$ref": "#/components/responses/BedrockError429"
          },
          "500": {
            "$ref": "#/components/responses/BedrockError500"
          },
          "502": {
            "$ref": "#/components/responses/BedrockError502"
          },
          "503": {
            "$ref": "#/components/responses/BedrockError503"
          },
          "504": {
            "$ref": "#/components/responses/BedrockError504"
          }
        },
        "security": [
          {
            "AwsSigV4": []
          },
          {
            "QuilrBearer": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Invoke a model with a response stream",
        "tags": [
          "AWS Bedrock Runtime"
        ],
        "x-quilr-alias-of": "/model/{model_id}/invoke-with-response-stream",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "hallucination",
          "attachments",
          "model_access",
          "group_routing",
          "context_routing",
          "failover",
          "limits",
          "universal_system_prompt"
        ]
      }
    },
    "/llmgateway_inference_apis/v1/openapi.json": {
      "get": {
        "description": "Returns the inference OpenAPI document. Pass `family` for one API family only.",
        "operationId": "Get_inference_openapi",
        "parameters": [
          {
            "description": "Return only this API family.",
            "in": "query",
            "name": "family",
            "required": false,
            "schema": {
              "enum": [
                "openai_compatible",
                "openai_responses",
                "azure_openai",
                "openai_realtime",
                "openai_assistants",
                "anthropic_messages",
                "bedrock_runtime",
                "google_gemini",
                "rerank",
                "mistral",
                "xai",
                "sarvam",
                "typesafe",
                "perplexity"
              ],
              "type": "string"
            }
          },
          {
            "description": "Publish this region's URL as the only server (e.g. `guardrails-europe-1` to keep every imported route in Europe). Default: a `region` server variable.",
            "in": "query",
            "name": "region",
            "required": false,
            "schema": {
              "enum": [
                "guardrails-usa-1",
                "guardrails-usa-2",
                "guardrails-europe-1",
                "guardrails-india-1",
                "guardrails-india-2",
                "guardrails-jp-1",
                "guardrails"
              ],
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "OpenAPI 3.1 document."
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Get this OpenAPI document",
        "tags": [
          "Specification"
        ]
      }
    },
    "/mistral/v1/fim/completions": {
      "post": {
        "description": "Completes code between `prompt` and `suffix`. With `stream: true` the response is a server-sent event stream of Mistral completion chunks ending with `data: [DONE]`.\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "Mistral_create_fim_completion",
        "parameters": [
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "example": {
                "model": "codestral-latest",
                "prompt": "def fib(n):",
                "suffix": "\nprint(fib(10))"
              },
              "schema": {
                "$ref": "#/components/schemas/MistralFimRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MistralFimResponse"
                }
              },
              "text/event-stream": {
                "schema": {
                  "description": "Server-sent events.",
                  "type": "string"
                }
              }
            },
            "description": "Success; a server-sent event stream when the request asks to stream.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Create a fill-in-the-middle completion",
        "tags": [
          "Mistral"
        ],
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      }
    },
    "/mistral/v1/ocr": {
      "post": {
        "description": "Runs Mistral OCR on a document or image and returns each page as Markdown.\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "Mistral_ocr",
        "parameters": [
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "example": {
                "document": {
                  "document_url": "https://example.com/invoice.pdf",
                  "type": "document_url"
                },
                "model": "mistral-ocr-latest"
              },
              "schema": {
                "$ref": "#/components/schemas/MistralOcrRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MistralOcrResponse"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Extract text from a document",
        "tags": [
          "Mistral"
        ],
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      }
    },
    "/model/{model_id}/converse": {
      "post": {
        "description": "Bedrock Converse. Runs the app's guardrails, routing, failover and limits, then calls the model. The app may serve the request from another provider in Converse format.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, hallucination check (non-streaming), attachment scanning, model access rules, routing groups, content routing, failover, limits, quotas and budgets, universal system prompt.",
        "operationId": "Bedrock_converse",
        "parameters": [
          {
            "description": "Bedrock model id, inference profile id or ARN, or a model alias configured for the app, e.g. `anthropic.claude-3-5-sonnet-20240620-v1:0`. Ids may contain `:`. ARNs contain `/`, which must be percent-encoded as `%2F` (AWS SDKs do this); the path segment is decoded by the gateway.",
            "in": "path",
            "name": "model_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "SigV4 request time. Required with a SigV4 `Authorization` header.",
            "in": "header",
            "name": "X-Amz-Date",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "SigV4 body hash, or `UNSIGNED-PAYLOAD`. Checked against the body when sent.",
            "in": "header",
            "name": "X-Amz-Content-Sha256",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sent by AWS SDKs with temporary credentials; not used by the gateway.",
            "in": "header",
            "name": "X-Amz-Security-Token",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "example": {
                "inferenceConfig": {
                  "maxTokens": 512
                },
                "messages": [
                  {
                    "content": [
                      {
                        "text": "Hello"
                      }
                    ],
                    "role": "user"
                  }
                ]
              },
              "schema": {
                "$ref": "#/components/schemas/BedrockConverseRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BedrockConverseResponse"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BedrockError400"
          },
          "401": {
            "$ref": "#/components/responses/BedrockError401"
          },
          "403": {
            "$ref": "#/components/responses/BedrockError403"
          },
          "404": {
            "$ref": "#/components/responses/BedrockError404"
          },
          "408": {
            "$ref": "#/components/responses/BedrockError408"
          },
          "409": {
            "$ref": "#/components/responses/BedrockError409"
          },
          "413": {
            "$ref": "#/components/responses/BedrockError413"
          },
          "415": {
            "$ref": "#/components/responses/BedrockError415"
          },
          "422": {
            "$ref": "#/components/responses/BedrockError422"
          },
          "429": {
            "$ref": "#/components/responses/BedrockError429"
          },
          "500": {
            "$ref": "#/components/responses/BedrockError500"
          },
          "502": {
            "$ref": "#/components/responses/BedrockError502"
          },
          "503": {
            "$ref": "#/components/responses/BedrockError503"
          },
          "504": {
            "$ref": "#/components/responses/BedrockError504"
          }
        },
        "security": [
          {
            "AwsSigV4": []
          },
          {
            "QuilrBearer": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Converse",
        "tags": [
          "AWS Bedrock Runtime"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "hallucination",
          "attachments",
          "model_access",
          "group_routing",
          "context_routing",
          "failover",
          "limits",
          "universal_system_prompt"
        ]
      }
    },
    "/model/{model_id}/converse-stream": {
      "post": {
        "description": "Bedrock ConverseStream. Same request as Converse; the response is an AWS event stream (`messageStart`, `contentBlockDelta`, `contentBlockStop`, `messageStop`, `metadata`, and exception events). Errors before the stream starts are JSON.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, hallucination check (non-streaming), attachment scanning, model access rules, routing groups, content routing, failover, limits, quotas and budgets, universal system prompt.",
        "operationId": "Bedrock_converse_stream",
        "parameters": [
          {
            "description": "Bedrock model id, inference profile id or ARN, or a model alias configured for the app, e.g. `anthropic.claude-3-5-sonnet-20240620-v1:0`. Ids may contain `:`. ARNs contain `/`, which must be percent-encoded as `%2F` (AWS SDKs do this); the path segment is decoded by the gateway.",
            "in": "path",
            "name": "model_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "SigV4 request time. Required with a SigV4 `Authorization` header.",
            "in": "header",
            "name": "X-Amz-Date",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "SigV4 body hash, or `UNSIGNED-PAYLOAD`. Checked against the body when sent.",
            "in": "header",
            "name": "X-Amz-Content-Sha256",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sent by AWS SDKs with temporary credentials; not used by the gateway.",
            "in": "header",
            "name": "X-Amz-Security-Token",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BedrockConverseRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/vnd.amazon.eventstream": {
                "schema": {
                  "description": "AWS event stream frames, as Bedrock sends them.",
                  "format": "binary",
                  "type": "string"
                }
              }
            },
            "description": "AWS event stream of Converse events.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BedrockError400"
          },
          "401": {
            "$ref": "#/components/responses/BedrockError401"
          },
          "403": {
            "$ref": "#/components/responses/BedrockError403"
          },
          "404": {
            "$ref": "#/components/responses/BedrockError404"
          },
          "408": {
            "$ref": "#/components/responses/BedrockError408"
          },
          "409": {
            "$ref": "#/components/responses/BedrockError409"
          },
          "413": {
            "$ref": "#/components/responses/BedrockError413"
          },
          "415": {
            "$ref": "#/components/responses/BedrockError415"
          },
          "422": {
            "$ref": "#/components/responses/BedrockError422"
          },
          "429": {
            "$ref": "#/components/responses/BedrockError429"
          },
          "500": {
            "$ref": "#/components/responses/BedrockError500"
          },
          "502": {
            "$ref": "#/components/responses/BedrockError502"
          },
          "503": {
            "$ref": "#/components/responses/BedrockError503"
          },
          "504": {
            "$ref": "#/components/responses/BedrockError504"
          }
        },
        "security": [
          {
            "AwsSigV4": []
          },
          {
            "QuilrBearer": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Converse with a response stream",
        "tags": [
          "AWS Bedrock Runtime"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "hallucination",
          "attachments",
          "model_access",
          "group_routing",
          "context_routing",
          "failover",
          "limits",
          "universal_system_prompt"
        ]
      }
    },
    "/model/{model_id}/invoke": {
      "post": {
        "description": "Bedrock InvokeModel with the model's own request body. Recognisable text is checked by the app's guardrails; the body is otherwise forwarded unchanged, as are `X-Amzn-Bedrock-*` headers. `Content-Type` (default `application/json`) and `Accept` are forwarded to the model.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, hallucination check (non-streaming), attachment scanning, model access rules, routing groups, content routing, failover, limits, quotas and budgets, universal system prompt.",
        "operationId": "Bedrock_invoke_model",
        "parameters": [
          {
            "description": "Bedrock model id, inference profile id or ARN, or a model alias configured for the app, e.g. `anthropic.claude-3-5-sonnet-20240620-v1:0`. Ids may contain `:`. ARNs contain `/`, which must be percent-encoded as `%2F` (AWS SDKs do this); the path segment is decoded by the gateway.",
            "in": "path",
            "name": "model_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Bedrock guardrail trace: `ENABLED`, `DISABLED` or `ENABLED_FULL`. Forwarded.",
            "in": "header",
            "name": "X-Amzn-Bedrock-Trace",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Bedrock guardrail id or ARN. Forwarded.",
            "in": "header",
            "name": "X-Amzn-Bedrock-GuardrailIdentifier",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Bedrock guardrail version. Forwarded.",
            "in": "header",
            "name": "X-Amzn-Bedrock-GuardrailVersion",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "`standard` or `optimized`. Forwarded.",
            "in": "header",
            "name": "X-Amzn-Bedrock-PerformanceConfig-Latency",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Bedrock service tier. Forwarded.",
            "in": "header",
            "name": "X-Amzn-Bedrock-Service-Tier",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "SigV4 request time. Required with a SigV4 `Authorization` header.",
            "in": "header",
            "name": "X-Amz-Date",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "SigV4 body hash, or `UNSIGNED-PAYLOAD`. Checked against the body when sent.",
            "in": "header",
            "name": "X-Amz-Content-Sha256",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sent by AWS SDKs with temporary credentials; not used by the gateway.",
            "in": "header",
            "name": "X-Amz-Security-Token",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "*/*": {
              "schema": {
                "format": "binary",
                "type": "string"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BedrockInvokeRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "*/*": {
                "schema": {
                  "format": "binary",
                  "type": "string"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BedrockInvokeResponse"
                }
              }
            },
            "description": "The model's response. Its media type follows the model and the `Accept` header.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Amzn-Bedrock-Input-Token-Count": {
                "description": "Input tokens.",
                "schema": {
                  "type": "string"
                }
              },
              "X-Amzn-Bedrock-Output-Token-Count": {
                "description": "Output tokens.",
                "schema": {
                  "type": "string"
                }
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BedrockError400"
          },
          "401": {
            "$ref": "#/components/responses/BedrockError401"
          },
          "403": {
            "$ref": "#/components/responses/BedrockError403"
          },
          "404": {
            "$ref": "#/components/responses/BedrockError404"
          },
          "408": {
            "$ref": "#/components/responses/BedrockError408"
          },
          "409": {
            "$ref": "#/components/responses/BedrockError409"
          },
          "413": {
            "$ref": "#/components/responses/BedrockError413"
          },
          "415": {
            "$ref": "#/components/responses/BedrockError415"
          },
          "422": {
            "$ref": "#/components/responses/BedrockError422"
          },
          "429": {
            "$ref": "#/components/responses/BedrockError429"
          },
          "500": {
            "$ref": "#/components/responses/BedrockError500"
          },
          "502": {
            "$ref": "#/components/responses/BedrockError502"
          },
          "503": {
            "$ref": "#/components/responses/BedrockError503"
          },
          "504": {
            "$ref": "#/components/responses/BedrockError504"
          }
        },
        "security": [
          {
            "AwsSigV4": []
          },
          {
            "QuilrBearer": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Invoke a model",
        "tags": [
          "AWS Bedrock Runtime"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "hallucination",
          "attachments",
          "model_access",
          "group_routing",
          "context_routing",
          "failover",
          "limits",
          "universal_system_prompt"
        ]
      }
    },
    "/model/{model_id}/invoke-with-response-stream": {
      "post": {
        "description": "Bedrock InvokeModelWithResponseStream. The response is an AWS event stream of `chunk` events whose `bytes` carry the model's own streaming payload. Errors before the stream starts are JSON.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, hallucination check (non-streaming), attachment scanning, model access rules, routing groups, content routing, failover, limits, quotas and budgets, universal system prompt.",
        "operationId": "Bedrock_invoke_model_with_response_stream",
        "parameters": [
          {
            "description": "Bedrock model id, inference profile id or ARN, or a model alias configured for the app, e.g. `anthropic.claude-3-5-sonnet-20240620-v1:0`. Ids may contain `:`. ARNs contain `/`, which must be percent-encoded as `%2F` (AWS SDKs do this); the path segment is decoded by the gateway.",
            "in": "path",
            "name": "model_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Bedrock guardrail trace: `ENABLED`, `DISABLED` or `ENABLED_FULL`. Forwarded.",
            "in": "header",
            "name": "X-Amzn-Bedrock-Trace",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Bedrock guardrail id or ARN. Forwarded.",
            "in": "header",
            "name": "X-Amzn-Bedrock-GuardrailIdentifier",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Bedrock guardrail version. Forwarded.",
            "in": "header",
            "name": "X-Amzn-Bedrock-GuardrailVersion",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "`standard` or `optimized`. Forwarded.",
            "in": "header",
            "name": "X-Amzn-Bedrock-PerformanceConfig-Latency",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Bedrock service tier. Forwarded.",
            "in": "header",
            "name": "X-Amzn-Bedrock-Service-Tier",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Media type of each streamed chunk.",
            "in": "header",
            "name": "X-Amzn-Bedrock-Accept",
            "required": false,
            "schema": {
              "default": "application/json",
              "type": "string"
            }
          },
          {
            "description": "SigV4 request time. Required with a SigV4 `Authorization` header.",
            "in": "header",
            "name": "X-Amz-Date",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "SigV4 body hash, or `UNSIGNED-PAYLOAD`. Checked against the body when sent.",
            "in": "header",
            "name": "X-Amz-Content-Sha256",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sent by AWS SDKs with temporary credentials; not used by the gateway.",
            "in": "header",
            "name": "X-Amz-Security-Token",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "*/*": {
              "schema": {
                "format": "binary",
                "type": "string"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BedrockInvokeRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/vnd.amazon.eventstream": {
                "schema": {
                  "description": "AWS event stream frames, as Bedrock sends them.",
                  "format": "binary",
                  "type": "string"
                }
              }
            },
            "description": "AWS event stream of model chunks.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BedrockError400"
          },
          "401": {
            "$ref": "#/components/responses/BedrockError401"
          },
          "403": {
            "$ref": "#/components/responses/BedrockError403"
          },
          "404": {
            "$ref": "#/components/responses/BedrockError404"
          },
          "408": {
            "$ref": "#/components/responses/BedrockError408"
          },
          "409": {
            "$ref": "#/components/responses/BedrockError409"
          },
          "413": {
            "$ref": "#/components/responses/BedrockError413"
          },
          "415": {
            "$ref": "#/components/responses/BedrockError415"
          },
          "422": {
            "$ref": "#/components/responses/BedrockError422"
          },
          "429": {
            "$ref": "#/components/responses/BedrockError429"
          },
          "500": {
            "$ref": "#/components/responses/BedrockError500"
          },
          "502": {
            "$ref": "#/components/responses/BedrockError502"
          },
          "503": {
            "$ref": "#/components/responses/BedrockError503"
          },
          "504": {
            "$ref": "#/components/responses/BedrockError504"
          }
        },
        "security": [
          {
            "AwsSigV4": []
          },
          {
            "QuilrBearer": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Invoke a model with a response stream",
        "tags": [
          "AWS Bedrock Runtime"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "hallucination",
          "attachments",
          "model_access",
          "group_routing",
          "context_routing",
          "failover",
          "limits",
          "universal_system_prompt"
        ]
      }
    },
    "/openai/deployments/{deployment}/audio/speech": {
      "post": {
        "description": "Text to speech for the body's `model`. Returns audio bytes in `response_format`; with `stream_format: sse`, server-sent audio events as they arrive.\n\n**Gateway features on this route:** request guardrails, model access rules, limits, quotas and budgets.",
        "operationId": "AzureOpenAI_create_speech",
        "parameters": [
          {
            "description": "Azure deployment name, as the SDK builds it. Used as the model only where the operation says so.",
            "in": "path",
            "name": "deployment",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sent by Azure OpenAI SDKs. Optional; client query parameters are forwarded upstream, where `api-version` replaces the configured version for an Azure OpenAI upstream and is dropped for upstreams that reject it.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AzureOpenAISpeechRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "audio/aac": {
                "schema": {
                  "format": "binary",
                  "type": "string"
                }
              },
              "audio/flac": {
                "schema": {
                  "format": "binary",
                  "type": "string"
                }
              },
              "audio/mpeg": {
                "schema": {
                  "format": "binary",
                  "type": "string"
                }
              },
              "audio/opus": {
                "schema": {
                  "format": "binary",
                  "type": "string"
                }
              },
              "audio/pcm": {
                "schema": {
                  "format": "binary",
                  "type": "string"
                }
              },
              "audio/wav": {
                "schema": {
                  "format": "binary",
                  "type": "string"
                }
              },
              "text/event-stream": {
                "schema": {
                  "description": "Audio events when `stream_format` is `sse`.",
                  "type": "string"
                }
              }
            },
            "description": "Audio in the requested format.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "409": {
            "$ref": "#/components/responses/OpenAIError409"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Generate speech",
        "tags": [
          "Azure OpenAI"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "model_access",
          "limits"
        ]
      }
    },
    "/openai/deployments/{deployment}/audio/transcriptions": {
      "post": {
        "description": "Speech to text for the form's `model`. With `stream=true` the transcript is streamed as server-sent events, unless the app scans the transcript before delivery, in which case it is returned when complete.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), model access rules, limits, quotas and budgets.",
        "operationId": "AzureOpenAI_create_transcription",
        "parameters": [
          {
            "description": "Azure deployment name, as the SDK builds it. Used as the model only where the operation says so.",
            "in": "path",
            "name": "deployment",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sent by Azure OpenAI SDKs. Optional; client query parameters are forwarded upstream, where `api-version` replaces the configured version for an Azure OpenAI upstream and is dropped for upstreams that reject it.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/AzureOpenAITranscriptionRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AzureOpenAITranscription"
                }
              },
              "text/event-stream": {
                "schema": {
                  "description": "Server-sent events.",
                  "type": "string"
                }
              },
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "description": "Success; plain text for `text`, `srt` and `vtt` formats, server-sent events when streaming.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "409": {
            "$ref": "#/components/responses/OpenAIError409"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Transcribe audio",
        "tags": [
          "Azure OpenAI"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "model_access",
          "limits"
        ]
      }
    },
    "/openai/deployments/{deployment}/audio/translations": {
      "post": {
        "description": "Speech to English text for the form's `model`.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), model access rules, limits, quotas and budgets.",
        "operationId": "AzureOpenAI_create_translation",
        "parameters": [
          {
            "description": "Azure deployment name, as the SDK builds it. Used as the model only where the operation says so.",
            "in": "path",
            "name": "deployment",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sent by Azure OpenAI SDKs. Optional; client query parameters are forwarded upstream, where `api-version` replaces the configured version for an Azure OpenAI upstream and is dropped for upstreams that reject it.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/AzureOpenAITranscriptionRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AzureOpenAITranscription"
                }
              },
              "text/event-stream": {
                "schema": {
                  "description": "Server-sent events.",
                  "type": "string"
                }
              },
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "description": "Success; plain text for `text`, `srt` and `vtt` formats, server-sent events when streaming.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "409": {
            "$ref": "#/components/responses/OpenAIError409"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Translate audio to English",
        "tags": [
          "Azure OpenAI"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "model_access",
          "limits"
        ]
      }
    },
    "/openai/deployments/{deployment}/chat/completions": {
      "post": {
        "description": "Chat completions for a deployment. The deployment name is the model when the body has no `model`. With `stream: true` the answer is a server-sent event stream of chunks ending with `data: [DONE]`. Guardrails can redact, or block (400 with a guardrail code; policy and access denials are 403).\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, hallucination check (non-streaming), attachment scanning, model access rules, routing groups, content routing, failover, limits, quotas and budgets, token saving, Prompt Store, universal system prompt, response cache.",
        "operationId": "AzureOpenAI_create_chat_completion",
        "parameters": [
          {
            "description": "Azure deployment name, as the SDK builds it. Used as the model only where the operation says so.",
            "in": "path",
            "name": "deployment",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sent by Azure OpenAI SDKs. Optional; client query parameters are forwarded upstream, where `api-version` replaces the configured version for an Azure OpenAI upstream and is dropped for upstreams that reject it.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "JSON object of Prompt Store variable values keyed by prompt reference, e.g. `{\"<prompt reference>\": {\"tone\": \"formal\"}}`. Fills `{{variable}}` placeholders of stored prompts.",
            "in": "header",
            "name": "X-Prompt-Variables",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AzureOpenAIChatCompletionRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AzureOpenAIChatCompletion"
                }
              },
              "text/event-stream": {
                "schema": {
                  "$ref": "#/components/schemas/AzureOpenAIChatCompletionChunk"
                }
              }
            },
            "description": "Success; a server-sent event stream when the request asks to stream.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "409": {
            "$ref": "#/components/responses/OpenAIError409"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "415": {
            "$ref": "#/components/responses/OpenAIError415"
          },
          "422": {
            "$ref": "#/components/responses/OpenAIError422"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Create a chat completion",
        "tags": [
          "Azure OpenAI"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "hallucination",
          "attachments",
          "model_access",
          "group_routing",
          "context_routing",
          "failover",
          "limits",
          "token_saving",
          "prompt_store",
          "universal_system_prompt",
          "response_cache"
        ]
      }
    },
    "/openai/deployments/{deployment}/embeddings": {
      "post": {
        "description": "Embeddings for the body's `model` (the Azure SDK sends the deployment name there).\n\n**Gateway features on this route:** request guardrails, model access rules, failover, limits, quotas and budgets, response cache.",
        "operationId": "AzureOpenAI_create_embeddings",
        "parameters": [
          {
            "description": "Azure deployment name, as the SDK builds it. Used as the model only where the operation says so.",
            "in": "path",
            "name": "deployment",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sent by Azure OpenAI SDKs. Optional; client query parameters are forwarded upstream, where `api-version` replaces the configured version for an Azure OpenAI upstream and is dropped for upstreams that reject it.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AzureOpenAIEmbeddingRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AzureOpenAIEmbeddingList"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "409": {
            "$ref": "#/components/responses/OpenAIError409"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Create embeddings",
        "tags": [
          "Azure OpenAI"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "model_access",
          "failover",
          "limits",
          "response_cache"
        ]
      }
    },
    "/openai/deployments/{deployment}/responses": {
      "post": {
        "description": "Creates a model response. `model` selects the model among those configured for the app (the app's routing may choose the upstream). With `stream: true` the answer is a server-sent event stream of Responses events, ending with `response.completed` (or `response.failed` / `response.incomplete`). Guardrails can redact the input or output, or block it (400 with a guardrail code; policy and access denials are 403). Requests that depend on state held by one upstream (`previous_response_id`, `conversation`, stored prompts) stay on that upstream; when that is not possible the request fails with 400 or 409. Responses served by translation to a provider without a Responses API are not stored and cannot be retrieved later. Deployment-style path built by older Azure OpenAI SDKs; for create, the deployment name is the model when the body has none, and it is otherwise ignored.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, hallucination check (non-streaming), attachment scanning, model access rules, routing groups, content routing, failover, limits, quotas and budgets, token saving, Prompt Store, universal system prompt.",
        "operationId": "AzureOpenAI_create_response",
        "parameters": [
          {
            "description": "Azure deployment name, as the SDK builds it. Used as the model only where the operation says so.",
            "in": "path",
            "name": "deployment",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sent by Azure OpenAI SDKs. Optional; client query parameters are forwarded upstream, where `api-version` replaces the configured version for an Azure OpenAI upstream and is dropped for upstreams that reject it.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "JSON object of Prompt Store variable values keyed by prompt reference, e.g. `{\"<prompt reference>\": {\"tone\": \"formal\"}}`. Fills `{{variable}}` placeholders of stored prompts.",
            "in": "header",
            "name": "X-Prompt-Variables",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AzureOpenAICreateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AzureOpenAIResponse"
                }
              },
              "text/event-stream": {
                "schema": {
                  "$ref": "#/components/schemas/AzureOpenAIStreamEvent"
                }
              }
            },
            "description": "Success; a server-sent event stream when the request asks to stream.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "409": {
            "$ref": "#/components/responses/OpenAIError409"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "415": {
            "$ref": "#/components/responses/OpenAIError415"
          },
          "422": {
            "$ref": "#/components/responses/OpenAIError422"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Create a model response",
        "tags": [
          "Azure OpenAI"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "hallucination",
          "attachments",
          "model_access",
          "group_routing",
          "context_routing",
          "failover",
          "limits",
          "token_saving",
          "prompt_store",
          "universal_system_prompt"
        ]
      }
    },
    "/openai/deployments/{deployment}/responses/{response_id}": {
      "delete": {
        "description": "Deletes a stored response at the upstream that created it. Deployment-style path built by older Azure OpenAI SDKs; for create, the deployment name is the model when the body has none, and it is otherwise ignored.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, hallucination check (non-streaming), attachment scanning, model access rules, routing groups, content routing, failover, limits, quotas and budgets, token saving, Prompt Store, universal system prompt.",
        "operationId": "AzureOpenAI_delete_response",
        "parameters": [
          {
            "description": "Azure deployment name, as the SDK builds it. Used as the model only where the operation says so.",
            "in": "path",
            "name": "deployment",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sent by Azure OpenAI SDKs. Optional; client query parameters are forwarded upstream, where `api-version` replaces the configured version for an Azure OpenAI upstream and is dropped for upstreams that reject it.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Id of a stored response (`resp_...`).",
            "in": "path",
            "name": "response_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AzureOpenAIDeletedResponse"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "409": {
            "$ref": "#/components/responses/OpenAIError409"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "415": {
            "$ref": "#/components/responses/OpenAIError415"
          },
          "422": {
            "$ref": "#/components/responses/OpenAIError422"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Delete a stored response",
        "tags": [
          "Azure OpenAI"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "hallucination",
          "attachments",
          "model_access",
          "group_routing",
          "context_routing",
          "failover",
          "limits",
          "token_saving",
          "prompt_store",
          "universal_system_prompt"
        ]
      },
      "get": {
        "description": "Returns a stored response from the upstream that created it. With `stream=true` the upstream's event stream is returned as `text/event-stream`. Deployment-style path built by older Azure OpenAI SDKs; for create, the deployment name is the model when the body has none, and it is otherwise ignored.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, hallucination check (non-streaming), attachment scanning, model access rules, routing groups, content routing, failover, limits, quotas and budgets, token saving, Prompt Store, universal system prompt.",
        "operationId": "AzureOpenAI_retrieve_response",
        "parameters": [
          {
            "description": "Azure deployment name, as the SDK builds it. Used as the model only where the operation says so.",
            "in": "path",
            "name": "deployment",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sent by Azure OpenAI SDKs. Optional; client query parameters are forwarded upstream, where `api-version` replaces the configured version for an Azure OpenAI upstream and is dropped for upstreams that reject it.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Id of a stored response (`resp_...`).",
            "in": "path",
            "name": "response_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Additional output data to include, for example `reasoning.encrypted_content` or `message.output_text.logprobs`. Repeat for several values. Forwarded unchanged.",
            "in": "query",
            "name": "include[]",
            "required": false,
            "schema": {
              "items": {
                "type": "string"
              },
              "type": "array"
            }
          },
          {
            "description": "Replay the response as server-sent events.",
            "in": "query",
            "name": "stream",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "description": "With `stream=true`, the event sequence number to resume after.",
            "in": "query",
            "name": "starting_after",
            "required": false,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AzureOpenAIResponse"
                }
              },
              "text/event-stream": {
                "schema": {
                  "$ref": "#/components/schemas/AzureOpenAIStreamEvent"
                }
              }
            },
            "description": "Success; server-sent events with `stream=true`.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "409": {
            "$ref": "#/components/responses/OpenAIError409"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "415": {
            "$ref": "#/components/responses/OpenAIError415"
          },
          "422": {
            "$ref": "#/components/responses/OpenAIError422"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Retrieve a stored response",
        "tags": [
          "Azure OpenAI"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "hallucination",
          "attachments",
          "model_access",
          "group_routing",
          "context_routing",
          "failover",
          "limits",
          "token_saving",
          "prompt_store",
          "universal_system_prompt"
        ]
      }
    },
    "/openai/deployments/{deployment}/responses/{response_id}/cancel": {
      "post": {
        "description": "Cancels a response created with `background: true`. No request body is needed. Deployment-style path built by older Azure OpenAI SDKs; for create, the deployment name is the model when the body has none, and it is otherwise ignored.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, hallucination check (non-streaming), attachment scanning, model access rules, routing groups, content routing, failover, limits, quotas and budgets, token saving, Prompt Store, universal system prompt.",
        "operationId": "AzureOpenAI_cancel_response",
        "parameters": [
          {
            "description": "Azure deployment name, as the SDK builds it. Used as the model only where the operation says so.",
            "in": "path",
            "name": "deployment",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sent by Azure OpenAI SDKs. Optional; client query parameters are forwarded upstream, where `api-version` replaces the configured version for an Azure OpenAI upstream and is dropped for upstreams that reject it.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Id of a stored response (`resp_...`).",
            "in": "path",
            "name": "response_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AzureOpenAIResponse"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "409": {
            "$ref": "#/components/responses/OpenAIError409"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "415": {
            "$ref": "#/components/responses/OpenAIError415"
          },
          "422": {
            "$ref": "#/components/responses/OpenAIError422"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Cancel a background response",
        "tags": [
          "Azure OpenAI"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "hallucination",
          "attachments",
          "model_access",
          "group_routing",
          "context_routing",
          "failover",
          "limits",
          "token_saving",
          "prompt_store",
          "universal_system_prompt"
        ]
      }
    },
    "/openai/deployments/{deployment}/responses/{response_id}/input_items": {
      "get": {
        "description": "Lists the input items of a stored response, paginated by the upstream. Deployment-style path built by older Azure OpenAI SDKs; for create, the deployment name is the model when the body has none, and it is otherwise ignored.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, hallucination check (non-streaming), attachment scanning, model access rules, routing groups, content routing, failover, limits, quotas and budgets, token saving, Prompt Store, universal system prompt.",
        "operationId": "AzureOpenAI_list_input_items",
        "parameters": [
          {
            "description": "Azure deployment name, as the SDK builds it. Used as the model only where the operation says so.",
            "in": "path",
            "name": "deployment",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sent by Azure OpenAI SDKs. Optional; client query parameters are forwarded upstream, where `api-version` replaces the configured version for an Azure OpenAI upstream and is dropped for upstreams that reject it.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Id of a stored response (`resp_...`).",
            "in": "path",
            "name": "response_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Number of items to return (1 to 100).",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "maximum": 100,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Return items after this item id.",
            "in": "query",
            "name": "after",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Return items before this item id.",
            "in": "query",
            "name": "before",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sort order.",
            "in": "query",
            "name": "order",
            "required": false,
            "schema": {
              "enum": [
                "asc",
                "desc"
              ],
              "type": "string"
            }
          },
          {
            "description": "Additional output data to include, for example `reasoning.encrypted_content` or `message.output_text.logprobs`. Repeat for several values. Forwarded unchanged.",
            "in": "query",
            "name": "include[]",
            "required": false,
            "schema": {
              "items": {
                "type": "string"
              },
              "type": "array"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AzureOpenAIInputItemList"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "409": {
            "$ref": "#/components/responses/OpenAIError409"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "415": {
            "$ref": "#/components/responses/OpenAIError415"
          },
          "422": {
            "$ref": "#/components/responses/OpenAIError422"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "List a response's input items",
        "tags": [
          "Azure OpenAI"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "hallucination",
          "attachments",
          "model_access",
          "group_routing",
          "context_routing",
          "failover",
          "limits",
          "token_saving",
          "prompt_store",
          "universal_system_prompt"
        ]
      }
    },
    "/openai/realtime": {
      "get": {
        "description": "Upgrades to a WebSocket and relays Realtime client and server events between the caller and the upstream session. `model` (or the Azure preview `deployment`) selects the model among those configured for the app; a transcription session (`intent=transcription`) may omit it and set its model in the session configuration. Other query parameters are forwarded upstream.\n\n**Credentials.** A credential header is read first: `Authorization: Bearer`, `api-key`, `x-api-key`, then the API-gateway key headers. Only when the handshake carries none of them, the gateway also accepts the key in the `api-key`, `api_key` or `authorization` query parameter, or in a `Sec-WebSocket-Protocol` entry `openai-insecure-api-key.<key>` (browser clients). Credentials are never forwarded upstream. Prefer a header: query-string credentials can appear in proxy access logs.\n\n**Subprotocols.** `openai-beta.realtime-v1` and `realtime` are accepted when offered.\n\n**Gateway features on this route:** model access rules, routing groups, limits, quotas and budgets. Guardrails do not scan this route.",
        "operationId": "Realtime_connect_root",
        "parameters": [
          {
            "description": "Realtime model id or alias configured for the app. Required unless `deployment` is sent or `intent=transcription`.",
            "in": "query",
            "name": "model",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI preview form of `model`; used when `model` is absent.",
            "in": "query",
            "name": "deployment",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "`transcription` opens a transcription session.",
            "in": "query",
            "name": "intent",
            "required": false,
            "schema": {
              "enum": [
                "transcription"
              ],
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI SDKs send it; for an Azure OpenAI upstream a client value replaces the configured version.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Offered subprotocols, for example `realtime, openai-insecure-api-key.<key>`.",
            "in": "header",
            "name": "Sec-WebSocket-Protocol",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Forwarded upstream, except the retired `realtime=v1` value, which is dropped.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "101": {
            "description": "Switching Protocols: the WebSocket session is open. Messages are Realtime events as JSON text frames."
          },
          "400": {
            "description": "Missing `model`, or a model or option the upstream cannot serve. Reported after the upgrade: the gateway accepts the WebSocket, sends one Realtime `error` event (`error.type`, `error.code`, `error.message`) and closes with code 1008 and reason `<status>:<code>`."
          },
          "401": {
            "description": "Missing or invalid Quilr credential. Reported after the upgrade: the gateway accepts the WebSocket, sends one Realtime `error` event (`error.type`, `error.code`, `error.message`) and closes with code 1008 and reason `<status>:<code>`."
          },
          "403": {
            "description": "The model is not allowed for this credential, or a policy blocks the session. Reported after the upgrade: the gateway accepts the WebSocket, sends one Realtime `error` event (`error.type`, `error.code`, `error.message`) and closes with code 1008 and reason `<status>:<code>`."
          },
          "429": {
            "description": "Rate limit, concurrency limit or quota exceeded. Reported after the upgrade: the gateway accepts the WebSocket, sends one Realtime `error` event (`error.type`, `error.code`, `error.message`) and closes with code 1008 and reason `<status>:<code>`."
          },
          "500": {
            "description": "Gateway error, or the app's realtime upstream is misconfigured. Reported after the upgrade: the gateway accepts the WebSocket, sends one Realtime `error` event (`error.type`, `error.code`, `error.message`) and closes with code 1008 and reason `<status>:<code>`."
          },
          "502": {
            "description": "The upstream realtime session could not be opened. Reported after the upgrade: the gateway accepts the WebSocket, sends one Realtime `error` event (`error.type`, `error.code`, `error.message`) and closes with code 1008 and reason `<status>:<code>`."
          },
          "504": {
            "description": "The upstream realtime handshake timed out. Reported after the upgrade: the gateway accepts the WebSocket, sends one Realtime `error` event (`error.type`, `error.code`, `error.message`) and closes with code 1008 and reason `<status>:<code>`."
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Open a Realtime session (WebSocket)",
        "tags": [
          "OpenAI Realtime"
        ],
        "x-quilr-alias-of": "/openai_realtime/v1/realtime",
        "x-quilr-gateway-features": [
          "model_access",
          "group_routing",
          "limits"
        ],
        "x-quilr-websocket": true
      }
    },
    "/openai/v1/realtime": {
      "get": {
        "description": "Upgrades to a WebSocket and relays Realtime client and server events between the caller and the upstream session. `model` (or the Azure preview `deployment`) selects the model among those configured for the app; a transcription session (`intent=transcription`) may omit it and set its model in the session configuration. Other query parameters are forwarded upstream.\n\n**Credentials.** A credential header is read first: `Authorization: Bearer`, `api-key`, `x-api-key`, then the API-gateway key headers. Only when the handshake carries none of them, the gateway also accepts the key in the `api-key`, `api_key` or `authorization` query parameter, or in a `Sec-WebSocket-Protocol` entry `openai-insecure-api-key.<key>` (browser clients). Credentials are never forwarded upstream. Prefer a header: query-string credentials can appear in proxy access logs.\n\n**Subprotocols.** `openai-beta.realtime-v1` and `realtime` are accepted when offered.\n\n**Gateway features on this route:** model access rules, routing groups, limits, quotas and budgets. Guardrails do not scan this route.",
        "operationId": "Realtime_connect_root_v1",
        "parameters": [
          {
            "description": "Realtime model id or alias configured for the app. Required unless `deployment` is sent or `intent=transcription`.",
            "in": "query",
            "name": "model",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI preview form of `model`; used when `model` is absent.",
            "in": "query",
            "name": "deployment",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "`transcription` opens a transcription session.",
            "in": "query",
            "name": "intent",
            "required": false,
            "schema": {
              "enum": [
                "transcription"
              ],
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI SDKs send it; for an Azure OpenAI upstream a client value replaces the configured version.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Offered subprotocols, for example `realtime, openai-insecure-api-key.<key>`.",
            "in": "header",
            "name": "Sec-WebSocket-Protocol",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Forwarded upstream, except the retired `realtime=v1` value, which is dropped.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "101": {
            "description": "Switching Protocols: the WebSocket session is open. Messages are Realtime events as JSON text frames."
          },
          "400": {
            "description": "Missing `model`, or a model or option the upstream cannot serve. Reported after the upgrade: the gateway accepts the WebSocket, sends one Realtime `error` event (`error.type`, `error.code`, `error.message`) and closes with code 1008 and reason `<status>:<code>`."
          },
          "401": {
            "description": "Missing or invalid Quilr credential. Reported after the upgrade: the gateway accepts the WebSocket, sends one Realtime `error` event (`error.type`, `error.code`, `error.message`) and closes with code 1008 and reason `<status>:<code>`."
          },
          "403": {
            "description": "The model is not allowed for this credential, or a policy blocks the session. Reported after the upgrade: the gateway accepts the WebSocket, sends one Realtime `error` event (`error.type`, `error.code`, `error.message`) and closes with code 1008 and reason `<status>:<code>`."
          },
          "429": {
            "description": "Rate limit, concurrency limit or quota exceeded. Reported after the upgrade: the gateway accepts the WebSocket, sends one Realtime `error` event (`error.type`, `error.code`, `error.message`) and closes with code 1008 and reason `<status>:<code>`."
          },
          "500": {
            "description": "Gateway error, or the app's realtime upstream is misconfigured. Reported after the upgrade: the gateway accepts the WebSocket, sends one Realtime `error` event (`error.type`, `error.code`, `error.message`) and closes with code 1008 and reason `<status>:<code>`."
          },
          "502": {
            "description": "The upstream realtime session could not be opened. Reported after the upgrade: the gateway accepts the WebSocket, sends one Realtime `error` event (`error.type`, `error.code`, `error.message`) and closes with code 1008 and reason `<status>:<code>`."
          },
          "504": {
            "description": "The upstream realtime handshake timed out. Reported after the upgrade: the gateway accepts the WebSocket, sends one Realtime `error` event (`error.type`, `error.code`, `error.message`) and closes with code 1008 and reason `<status>:<code>`."
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Open a Realtime session (WebSocket)",
        "tags": [
          "OpenAI Realtime"
        ],
        "x-quilr-alias-of": "/openai_realtime/v1/realtime",
        "x-quilr-gateway-features": [
          "model_access",
          "group_routing",
          "limits"
        ],
        "x-quilr-websocket": true
      }
    },
    "/openai_assistants/openai/assistants": {
      "get": {
        "description": "Lists assistants.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_list_assistants_azure",
        "parameters": [
          {
            "description": "Number of objects to return, 1 to 100 (default 20).",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "maximum": 100,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Sort order by `created_at`.",
            "in": "query",
            "name": "order",
            "required": false,
            "schema": {
              "enum": [
                "asc",
                "desc"
              ],
              "type": "string"
            }
          },
          {
            "description": "Cursor: an object id; returns objects after it.",
            "in": "query",
            "name": "after",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Cursor: an object id; returns objects before it.",
            "in": "query",
            "name": "before",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI API version, sent by the AzureOpenAI SDK. Replaces the version configured for the app.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsList"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "List assistants",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-alias-of": "/openai_assistants/v1/assistants",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      },
      "post": {
        "description": "Creates an assistant.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_create_assistant_azure",
        "parameters": [
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI API version, sent by the AzureOpenAI SDK. Replaces the version configured for the app.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssistantsAssistantCreateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsAssistant"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Create an assistant",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-alias-of": "/openai_assistants/v1/assistants",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_assistants/openai/assistants/{assistant_id}": {
      "delete": {
        "description": "Deletes an assistant.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_delete_assistant_azure",
        "parameters": [
          {
            "description": "Assistant id (`asst_...`).",
            "in": "path",
            "name": "assistant_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI API version, sent by the AzureOpenAI SDK. Replaces the version configured for the app.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsDeleted"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Delete an assistant",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-alias-of": "/openai_assistants/v1/assistants/{assistant_id}",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      },
      "get": {
        "description": "Retrieves an assistant.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_retrieve_assistant_azure",
        "parameters": [
          {
            "description": "Assistant id (`asst_...`).",
            "in": "path",
            "name": "assistant_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI API version, sent by the AzureOpenAI SDK. Replaces the version configured for the app.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsAssistant"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Retrieve an assistant",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-alias-of": "/openai_assistants/v1/assistants/{assistant_id}",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      },
      "post": {
        "description": "Modifies an assistant.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_modify_assistant_azure",
        "parameters": [
          {
            "description": "Assistant id (`asst_...`).",
            "in": "path",
            "name": "assistant_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI API version, sent by the AzureOpenAI SDK. Replaces the version configured for the app.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssistantsAssistantModifyRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsAssistant"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Modify an assistant",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-alias-of": "/openai_assistants/v1/assistants/{assistant_id}",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_assistants/openai/threads": {
      "post": {
        "description": "Creates a thread, optionally with initial messages. Message contents are scanned by guardrails before forwarding.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_create_thread_azure",
        "parameters": [
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI API version, sent by the AzureOpenAI SDK. Replaces the version configured for the app.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssistantsThreadCreateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsThread"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Create a thread",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-alias-of": "/openai_assistants/v1/threads",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_assistants/openai/threads/runs": {
      "post": {
        "description": "Creates a thread and starts a run on it in one request. Message contents are scanned by guardrails before forwarding. With `stream: true` the response is a server-sent event stream. The streamed model output is scanned when the stream ends; the stored messages are scanned when read.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_create_thread_and_run_azure",
        "parameters": [
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI API version, sent by the AzureOpenAI SDK. Replaces the version configured for the app.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssistantsThreadAndRunCreateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsRun"
                }
              },
              "text/event-stream": {
                "schema": {
                  "description": "Server-sent events: `thread.run.*`, `thread.run.step.*`, `thread.message.*` (including `thread.message.delta`), `error`, then `done` with data `[DONE]`.",
                  "type": "string"
                }
              }
            },
            "description": "Success; a server-sent event stream when the request asks to stream.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Create a thread and run it",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-alias-of": "/openai_assistants/v1/threads/runs",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_assistants/openai/threads/{thread_id}": {
      "delete": {
        "description": "Deletes a thread.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_delete_thread_azure",
        "parameters": [
          {
            "description": "Thread id (`thread_...`).",
            "in": "path",
            "name": "thread_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI API version, sent by the AzureOpenAI SDK. Replaces the version configured for the app.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsDeleted"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Delete a thread",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-alias-of": "/openai_assistants/v1/threads/{thread_id}",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      },
      "get": {
        "description": "Retrieves a thread.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_retrieve_thread_azure",
        "parameters": [
          {
            "description": "Thread id (`thread_...`).",
            "in": "path",
            "name": "thread_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI API version, sent by the AzureOpenAI SDK. Replaces the version configured for the app.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsThread"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Retrieve a thread",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-alias-of": "/openai_assistants/v1/threads/{thread_id}",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      },
      "post": {
        "description": "Modifies a thread's metadata or tool resources.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_modify_thread_azure",
        "parameters": [
          {
            "description": "Thread id (`thread_...`).",
            "in": "path",
            "name": "thread_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI API version, sent by the AzureOpenAI SDK. Replaces the version configured for the app.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssistantsThreadModifyRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsThread"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Modify a thread",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-alias-of": "/openai_assistants/v1/threads/{thread_id}",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_assistants/openai/threads/{thread_id}/messages": {
      "get": {
        "description": "Lists a thread's messages. Message contents are scanned by guardrails before they are returned.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_list_messages_azure",
        "parameters": [
          {
            "description": "Thread id (`thread_...`).",
            "in": "path",
            "name": "thread_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Number of objects to return, 1 to 100 (default 20).",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "maximum": 100,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Sort order by `created_at`.",
            "in": "query",
            "name": "order",
            "required": false,
            "schema": {
              "enum": [
                "asc",
                "desc"
              ],
              "type": "string"
            }
          },
          {
            "description": "Cursor: an object id; returns objects after it.",
            "in": "query",
            "name": "after",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Cursor: an object id; returns objects before it.",
            "in": "query",
            "name": "before",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Only messages created by this run.",
            "in": "query",
            "name": "run_id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI API version, sent by the AzureOpenAI SDK. Replaces the version configured for the app.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsList"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "List messages",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-alias-of": "/openai_assistants/v1/threads/{thread_id}/messages",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      },
      "post": {
        "description": "Adds a message to a thread. The content is scanned by guardrails before forwarding.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_create_message_azure",
        "parameters": [
          {
            "description": "Thread id (`thread_...`).",
            "in": "path",
            "name": "thread_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI API version, sent by the AzureOpenAI SDK. Replaces the version configured for the app.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssistantsMessageCreateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsMessage"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Create a message",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-alias-of": "/openai_assistants/v1/threads/{thread_id}/messages",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_assistants/openai/threads/{thread_id}/messages/{message_id}": {
      "delete": {
        "description": "Deletes a message.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_delete_message_azure",
        "parameters": [
          {
            "description": "Thread id (`thread_...`).",
            "in": "path",
            "name": "thread_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Message id (`msg_...`).",
            "in": "path",
            "name": "message_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI API version, sent by the AzureOpenAI SDK. Replaces the version configured for the app.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsDeleted"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Delete a message",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-alias-of": "/openai_assistants/v1/threads/{thread_id}/messages/{message_id}",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      },
      "get": {
        "description": "Retrieves a message. Its content is scanned by guardrails before it is returned.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_retrieve_message_azure",
        "parameters": [
          {
            "description": "Thread id (`thread_...`).",
            "in": "path",
            "name": "thread_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Message id (`msg_...`).",
            "in": "path",
            "name": "message_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI API version, sent by the AzureOpenAI SDK. Replaces the version configured for the app.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsMessage"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Retrieve a message",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-alias-of": "/openai_assistants/v1/threads/{thread_id}/messages/{message_id}",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      },
      "post": {
        "description": "Modifies a message's metadata.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_modify_message_azure",
        "parameters": [
          {
            "description": "Thread id (`thread_...`).",
            "in": "path",
            "name": "thread_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Message id (`msg_...`).",
            "in": "path",
            "name": "message_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI API version, sent by the AzureOpenAI SDK. Replaces the version configured for the app.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssistantsMetadataRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsMessage"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Modify a message",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-alias-of": "/openai_assistants/v1/threads/{thread_id}/messages/{message_id}",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_assistants/openai/threads/{thread_id}/runs": {
      "get": {
        "description": "Lists a thread's runs. Tool-call arguments of runs awaiting tool outputs are scanned by guardrails before they are returned.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_list_runs_azure",
        "parameters": [
          {
            "description": "Thread id (`thread_...`).",
            "in": "path",
            "name": "thread_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Number of objects to return, 1 to 100 (default 20).",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "maximum": 100,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Sort order by `created_at`.",
            "in": "query",
            "name": "order",
            "required": false,
            "schema": {
              "enum": [
                "asc",
                "desc"
              ],
              "type": "string"
            }
          },
          {
            "description": "Cursor: an object id; returns objects after it.",
            "in": "query",
            "name": "after",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Cursor: an object id; returns objects before it.",
            "in": "query",
            "name": "before",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI API version, sent by the AzureOpenAI SDK. Replaces the version configured for the app.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsList"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "List runs",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-alias-of": "/openai_assistants/v1/threads/{thread_id}/runs",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      },
      "post": {
        "description": "Starts a run of an assistant on a thread. `additional_messages` contents are scanned by guardrails before forwarding. With `stream: true` the response is a server-sent event stream. The streamed model output is scanned when the stream ends; the stored messages are scanned when read.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_create_run_azure",
        "parameters": [
          {
            "description": "Thread id (`thread_...`).",
            "in": "path",
            "name": "thread_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Additional fields to include, e.g. `step_details.tool_calls[*].file_search.results[*].content`.",
            "in": "query",
            "name": "include[]",
            "required": false,
            "schema": {
              "items": {
                "type": "string"
              },
              "type": "array"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI API version, sent by the AzureOpenAI SDK. Replaces the version configured for the app.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssistantsRunCreateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsRun"
                }
              },
              "text/event-stream": {
                "schema": {
                  "description": "Server-sent events: `thread.run.*`, `thread.run.step.*`, `thread.message.*` (including `thread.message.delta`), `error`, then `done` with data `[DONE]`.",
                  "type": "string"
                }
              }
            },
            "description": "Success; a server-sent event stream when the request asks to stream.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Create a run",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-alias-of": "/openai_assistants/v1/threads/{thread_id}/runs",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_assistants/openai/threads/{thread_id}/runs/{run_id}": {
      "get": {
        "description": "Retrieves a run. Tool-call arguments of a run awaiting tool outputs are scanned by guardrails before they are returned.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_retrieve_run_azure",
        "parameters": [
          {
            "description": "Thread id (`thread_...`).",
            "in": "path",
            "name": "thread_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Run id (`run_...`).",
            "in": "path",
            "name": "run_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI API version, sent by the AzureOpenAI SDK. Replaces the version configured for the app.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsRun"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Retrieve a run",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-alias-of": "/openai_assistants/v1/threads/{thread_id}/runs/{run_id}",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      },
      "post": {
        "description": "Modifies a run's metadata.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_modify_run_azure",
        "parameters": [
          {
            "description": "Thread id (`thread_...`).",
            "in": "path",
            "name": "thread_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Run id (`run_...`).",
            "in": "path",
            "name": "run_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI API version, sent by the AzureOpenAI SDK. Replaces the version configured for the app.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssistantsMetadataRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsRun"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Modify a run",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-alias-of": "/openai_assistants/v1/threads/{thread_id}/runs/{run_id}",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_assistants/openai/threads/{thread_id}/runs/{run_id}/cancel": {
      "post": {
        "description": "Cancels an in-progress run. No request body.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_cancel_run_azure",
        "parameters": [
          {
            "description": "Thread id (`thread_...`).",
            "in": "path",
            "name": "thread_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Run id (`run_...`).",
            "in": "path",
            "name": "run_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI API version, sent by the AzureOpenAI SDK. Replaces the version configured for the app.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsRun"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Cancel a run",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-alias-of": "/openai_assistants/v1/threads/{thread_id}/runs/{run_id}/cancel",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_assistants/openai/threads/{thread_id}/runs/{run_id}/steps": {
      "get": {
        "description": "Lists a run's steps. Tool-call inputs and outputs are scanned by guardrails before they are returned.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_list_run_steps_azure",
        "parameters": [
          {
            "description": "Thread id (`thread_...`).",
            "in": "path",
            "name": "thread_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Run id (`run_...`).",
            "in": "path",
            "name": "run_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Number of objects to return, 1 to 100 (default 20).",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "maximum": 100,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Sort order by `created_at`.",
            "in": "query",
            "name": "order",
            "required": false,
            "schema": {
              "enum": [
                "asc",
                "desc"
              ],
              "type": "string"
            }
          },
          {
            "description": "Cursor: an object id; returns objects after it.",
            "in": "query",
            "name": "after",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Cursor: an object id; returns objects before it.",
            "in": "query",
            "name": "before",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Additional fields to include, e.g. `step_details.tool_calls[*].file_search.results[*].content`.",
            "in": "query",
            "name": "include[]",
            "required": false,
            "schema": {
              "items": {
                "type": "string"
              },
              "type": "array"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI API version, sent by the AzureOpenAI SDK. Replaces the version configured for the app.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsList"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "List run steps",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-alias-of": "/openai_assistants/v1/threads/{thread_id}/runs/{run_id}/steps",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_assistants/openai/threads/{thread_id}/runs/{run_id}/steps/{step_id}": {
      "get": {
        "description": "Retrieves a run step. Tool-call inputs and outputs are scanned by guardrails before they are returned.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_retrieve_run_step_azure",
        "parameters": [
          {
            "description": "Thread id (`thread_...`).",
            "in": "path",
            "name": "thread_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Run id (`run_...`).",
            "in": "path",
            "name": "run_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Run step id (`step_...`).",
            "in": "path",
            "name": "step_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Additional fields to include, e.g. `step_details.tool_calls[*].file_search.results[*].content`.",
            "in": "query",
            "name": "include[]",
            "required": false,
            "schema": {
              "items": {
                "type": "string"
              },
              "type": "array"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI API version, sent by the AzureOpenAI SDK. Replaces the version configured for the app.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsRunStep"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Retrieve a run step",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-alias-of": "/openai_assistants/v1/threads/{thread_id}/runs/{run_id}/steps/{step_id}",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_assistants/openai/threads/{thread_id}/runs/{run_id}/submit_tool_outputs": {
      "post": {
        "description": "Submits function tool outputs to a run awaiting them. The outputs are scanned by guardrails before forwarding. With `stream: true` the response is a server-sent event stream. The streamed model output is scanned when the stream ends; the stored messages are scanned when read.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_submit_tool_outputs_azure",
        "parameters": [
          {
            "description": "Thread id (`thread_...`).",
            "in": "path",
            "name": "thread_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Run id (`run_...`).",
            "in": "path",
            "name": "run_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI API version, sent by the AzureOpenAI SDK. Replaces the version configured for the app.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssistantsSubmitToolOutputsRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsRun"
                }
              },
              "text/event-stream": {
                "schema": {
                  "description": "Server-sent events: `thread.run.*`, `thread.run.step.*`, `thread.message.*` (including `thread.message.delta`), `error`, then `done` with data `[DONE]`.",
                  "type": "string"
                }
              }
            },
            "description": "Success; a server-sent event stream when the request asks to stream.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Submit tool outputs",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-alias-of": "/openai_assistants/v1/threads/{thread_id}/runs/{run_id}/submit_tool_outputs",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_assistants/v1/assistants": {
      "get": {
        "description": "Lists assistants.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_list_assistants",
        "parameters": [
          {
            "description": "Number of objects to return, 1 to 100 (default 20).",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "maximum": 100,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Sort order by `created_at`.",
            "in": "query",
            "name": "order",
            "required": false,
            "schema": {
              "enum": [
                "asc",
                "desc"
              ],
              "type": "string"
            }
          },
          {
            "description": "Cursor: an object id; returns objects after it.",
            "in": "query",
            "name": "after",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Cursor: an object id; returns objects before it.",
            "in": "query",
            "name": "before",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsList"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "List assistants",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      },
      "post": {
        "description": "Creates an assistant.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_create_assistant",
        "parameters": [
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssistantsAssistantCreateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsAssistant"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Create an assistant",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_assistants/v1/assistants/{assistant_id}": {
      "delete": {
        "description": "Deletes an assistant.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_delete_assistant",
        "parameters": [
          {
            "description": "Assistant id (`asst_...`).",
            "in": "path",
            "name": "assistant_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsDeleted"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Delete an assistant",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      },
      "get": {
        "description": "Retrieves an assistant.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_retrieve_assistant",
        "parameters": [
          {
            "description": "Assistant id (`asst_...`).",
            "in": "path",
            "name": "assistant_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsAssistant"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Retrieve an assistant",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      },
      "post": {
        "description": "Modifies an assistant.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_modify_assistant",
        "parameters": [
          {
            "description": "Assistant id (`asst_...`).",
            "in": "path",
            "name": "assistant_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssistantsAssistantModifyRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsAssistant"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Modify an assistant",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_assistants/v1/openai/assistants": {
      "get": {
        "description": "Lists assistants.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_list_assistants_azure_v1",
        "parameters": [
          {
            "description": "Number of objects to return, 1 to 100 (default 20).",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "maximum": 100,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Sort order by `created_at`.",
            "in": "query",
            "name": "order",
            "required": false,
            "schema": {
              "enum": [
                "asc",
                "desc"
              ],
              "type": "string"
            }
          },
          {
            "description": "Cursor: an object id; returns objects after it.",
            "in": "query",
            "name": "after",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Cursor: an object id; returns objects before it.",
            "in": "query",
            "name": "before",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI API version, sent by the AzureOpenAI SDK. Replaces the version configured for the app.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsList"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "List assistants",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-alias-of": "/openai_assistants/v1/assistants",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      },
      "post": {
        "description": "Creates an assistant.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_create_assistant_azure_v1",
        "parameters": [
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI API version, sent by the AzureOpenAI SDK. Replaces the version configured for the app.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssistantsAssistantCreateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsAssistant"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Create an assistant",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-alias-of": "/openai_assistants/v1/assistants",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_assistants/v1/openai/assistants/{assistant_id}": {
      "delete": {
        "description": "Deletes an assistant.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_delete_assistant_azure_v1",
        "parameters": [
          {
            "description": "Assistant id (`asst_...`).",
            "in": "path",
            "name": "assistant_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI API version, sent by the AzureOpenAI SDK. Replaces the version configured for the app.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsDeleted"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Delete an assistant",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-alias-of": "/openai_assistants/v1/assistants/{assistant_id}",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      },
      "get": {
        "description": "Retrieves an assistant.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_retrieve_assistant_azure_v1",
        "parameters": [
          {
            "description": "Assistant id (`asst_...`).",
            "in": "path",
            "name": "assistant_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI API version, sent by the AzureOpenAI SDK. Replaces the version configured for the app.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsAssistant"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Retrieve an assistant",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-alias-of": "/openai_assistants/v1/assistants/{assistant_id}",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      },
      "post": {
        "description": "Modifies an assistant.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_modify_assistant_azure_v1",
        "parameters": [
          {
            "description": "Assistant id (`asst_...`).",
            "in": "path",
            "name": "assistant_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI API version, sent by the AzureOpenAI SDK. Replaces the version configured for the app.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssistantsAssistantModifyRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsAssistant"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Modify an assistant",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-alias-of": "/openai_assistants/v1/assistants/{assistant_id}",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_assistants/v1/openai/threads": {
      "post": {
        "description": "Creates a thread, optionally with initial messages. Message contents are scanned by guardrails before forwarding.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_create_thread_azure_v1",
        "parameters": [
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI API version, sent by the AzureOpenAI SDK. Replaces the version configured for the app.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssistantsThreadCreateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsThread"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Create a thread",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-alias-of": "/openai_assistants/v1/threads",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_assistants/v1/openai/threads/runs": {
      "post": {
        "description": "Creates a thread and starts a run on it in one request. Message contents are scanned by guardrails before forwarding. With `stream: true` the response is a server-sent event stream. The streamed model output is scanned when the stream ends; the stored messages are scanned when read.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_create_thread_and_run_azure_v1",
        "parameters": [
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI API version, sent by the AzureOpenAI SDK. Replaces the version configured for the app.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssistantsThreadAndRunCreateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsRun"
                }
              },
              "text/event-stream": {
                "schema": {
                  "description": "Server-sent events: `thread.run.*`, `thread.run.step.*`, `thread.message.*` (including `thread.message.delta`), `error`, then `done` with data `[DONE]`.",
                  "type": "string"
                }
              }
            },
            "description": "Success; a server-sent event stream when the request asks to stream.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Create a thread and run it",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-alias-of": "/openai_assistants/v1/threads/runs",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_assistants/v1/openai/threads/{thread_id}": {
      "delete": {
        "description": "Deletes a thread.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_delete_thread_azure_v1",
        "parameters": [
          {
            "description": "Thread id (`thread_...`).",
            "in": "path",
            "name": "thread_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI API version, sent by the AzureOpenAI SDK. Replaces the version configured for the app.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsDeleted"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Delete a thread",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-alias-of": "/openai_assistants/v1/threads/{thread_id}",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      },
      "get": {
        "description": "Retrieves a thread.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_retrieve_thread_azure_v1",
        "parameters": [
          {
            "description": "Thread id (`thread_...`).",
            "in": "path",
            "name": "thread_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI API version, sent by the AzureOpenAI SDK. Replaces the version configured for the app.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsThread"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Retrieve a thread",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-alias-of": "/openai_assistants/v1/threads/{thread_id}",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      },
      "post": {
        "description": "Modifies a thread's metadata or tool resources.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_modify_thread_azure_v1",
        "parameters": [
          {
            "description": "Thread id (`thread_...`).",
            "in": "path",
            "name": "thread_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI API version, sent by the AzureOpenAI SDK. Replaces the version configured for the app.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssistantsThreadModifyRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsThread"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Modify a thread",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-alias-of": "/openai_assistants/v1/threads/{thread_id}",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_assistants/v1/openai/threads/{thread_id}/messages": {
      "get": {
        "description": "Lists a thread's messages. Message contents are scanned by guardrails before they are returned.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_list_messages_azure_v1",
        "parameters": [
          {
            "description": "Thread id (`thread_...`).",
            "in": "path",
            "name": "thread_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Number of objects to return, 1 to 100 (default 20).",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "maximum": 100,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Sort order by `created_at`.",
            "in": "query",
            "name": "order",
            "required": false,
            "schema": {
              "enum": [
                "asc",
                "desc"
              ],
              "type": "string"
            }
          },
          {
            "description": "Cursor: an object id; returns objects after it.",
            "in": "query",
            "name": "after",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Cursor: an object id; returns objects before it.",
            "in": "query",
            "name": "before",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Only messages created by this run.",
            "in": "query",
            "name": "run_id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI API version, sent by the AzureOpenAI SDK. Replaces the version configured for the app.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsList"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "List messages",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-alias-of": "/openai_assistants/v1/threads/{thread_id}/messages",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      },
      "post": {
        "description": "Adds a message to a thread. The content is scanned by guardrails before forwarding.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_create_message_azure_v1",
        "parameters": [
          {
            "description": "Thread id (`thread_...`).",
            "in": "path",
            "name": "thread_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI API version, sent by the AzureOpenAI SDK. Replaces the version configured for the app.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssistantsMessageCreateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsMessage"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Create a message",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-alias-of": "/openai_assistants/v1/threads/{thread_id}/messages",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_assistants/v1/openai/threads/{thread_id}/messages/{message_id}": {
      "delete": {
        "description": "Deletes a message.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_delete_message_azure_v1",
        "parameters": [
          {
            "description": "Thread id (`thread_...`).",
            "in": "path",
            "name": "thread_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Message id (`msg_...`).",
            "in": "path",
            "name": "message_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI API version, sent by the AzureOpenAI SDK. Replaces the version configured for the app.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsDeleted"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Delete a message",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-alias-of": "/openai_assistants/v1/threads/{thread_id}/messages/{message_id}",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      },
      "get": {
        "description": "Retrieves a message. Its content is scanned by guardrails before it is returned.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_retrieve_message_azure_v1",
        "parameters": [
          {
            "description": "Thread id (`thread_...`).",
            "in": "path",
            "name": "thread_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Message id (`msg_...`).",
            "in": "path",
            "name": "message_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI API version, sent by the AzureOpenAI SDK. Replaces the version configured for the app.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsMessage"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Retrieve a message",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-alias-of": "/openai_assistants/v1/threads/{thread_id}/messages/{message_id}",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      },
      "post": {
        "description": "Modifies a message's metadata.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_modify_message_azure_v1",
        "parameters": [
          {
            "description": "Thread id (`thread_...`).",
            "in": "path",
            "name": "thread_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Message id (`msg_...`).",
            "in": "path",
            "name": "message_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI API version, sent by the AzureOpenAI SDK. Replaces the version configured for the app.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssistantsMetadataRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsMessage"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Modify a message",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-alias-of": "/openai_assistants/v1/threads/{thread_id}/messages/{message_id}",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_assistants/v1/openai/threads/{thread_id}/runs": {
      "get": {
        "description": "Lists a thread's runs. Tool-call arguments of runs awaiting tool outputs are scanned by guardrails before they are returned.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_list_runs_azure_v1",
        "parameters": [
          {
            "description": "Thread id (`thread_...`).",
            "in": "path",
            "name": "thread_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Number of objects to return, 1 to 100 (default 20).",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "maximum": 100,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Sort order by `created_at`.",
            "in": "query",
            "name": "order",
            "required": false,
            "schema": {
              "enum": [
                "asc",
                "desc"
              ],
              "type": "string"
            }
          },
          {
            "description": "Cursor: an object id; returns objects after it.",
            "in": "query",
            "name": "after",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Cursor: an object id; returns objects before it.",
            "in": "query",
            "name": "before",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI API version, sent by the AzureOpenAI SDK. Replaces the version configured for the app.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsList"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "List runs",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-alias-of": "/openai_assistants/v1/threads/{thread_id}/runs",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      },
      "post": {
        "description": "Starts a run of an assistant on a thread. `additional_messages` contents are scanned by guardrails before forwarding. With `stream: true` the response is a server-sent event stream. The streamed model output is scanned when the stream ends; the stored messages are scanned when read.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_create_run_azure_v1",
        "parameters": [
          {
            "description": "Thread id (`thread_...`).",
            "in": "path",
            "name": "thread_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Additional fields to include, e.g. `step_details.tool_calls[*].file_search.results[*].content`.",
            "in": "query",
            "name": "include[]",
            "required": false,
            "schema": {
              "items": {
                "type": "string"
              },
              "type": "array"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI API version, sent by the AzureOpenAI SDK. Replaces the version configured for the app.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssistantsRunCreateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsRun"
                }
              },
              "text/event-stream": {
                "schema": {
                  "description": "Server-sent events: `thread.run.*`, `thread.run.step.*`, `thread.message.*` (including `thread.message.delta`), `error`, then `done` with data `[DONE]`.",
                  "type": "string"
                }
              }
            },
            "description": "Success; a server-sent event stream when the request asks to stream.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Create a run",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-alias-of": "/openai_assistants/v1/threads/{thread_id}/runs",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_assistants/v1/openai/threads/{thread_id}/runs/{run_id}": {
      "get": {
        "description": "Retrieves a run. Tool-call arguments of a run awaiting tool outputs are scanned by guardrails before they are returned.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_retrieve_run_azure_v1",
        "parameters": [
          {
            "description": "Thread id (`thread_...`).",
            "in": "path",
            "name": "thread_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Run id (`run_...`).",
            "in": "path",
            "name": "run_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI API version, sent by the AzureOpenAI SDK. Replaces the version configured for the app.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsRun"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Retrieve a run",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-alias-of": "/openai_assistants/v1/threads/{thread_id}/runs/{run_id}",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      },
      "post": {
        "description": "Modifies a run's metadata.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_modify_run_azure_v1",
        "parameters": [
          {
            "description": "Thread id (`thread_...`).",
            "in": "path",
            "name": "thread_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Run id (`run_...`).",
            "in": "path",
            "name": "run_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI API version, sent by the AzureOpenAI SDK. Replaces the version configured for the app.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssistantsMetadataRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsRun"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Modify a run",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-alias-of": "/openai_assistants/v1/threads/{thread_id}/runs/{run_id}",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_assistants/v1/openai/threads/{thread_id}/runs/{run_id}/cancel": {
      "post": {
        "description": "Cancels an in-progress run. No request body.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_cancel_run_azure_v1",
        "parameters": [
          {
            "description": "Thread id (`thread_...`).",
            "in": "path",
            "name": "thread_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Run id (`run_...`).",
            "in": "path",
            "name": "run_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI API version, sent by the AzureOpenAI SDK. Replaces the version configured for the app.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsRun"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Cancel a run",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-alias-of": "/openai_assistants/v1/threads/{thread_id}/runs/{run_id}/cancel",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_assistants/v1/openai/threads/{thread_id}/runs/{run_id}/steps": {
      "get": {
        "description": "Lists a run's steps. Tool-call inputs and outputs are scanned by guardrails before they are returned.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_list_run_steps_azure_v1",
        "parameters": [
          {
            "description": "Thread id (`thread_...`).",
            "in": "path",
            "name": "thread_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Run id (`run_...`).",
            "in": "path",
            "name": "run_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Number of objects to return, 1 to 100 (default 20).",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "maximum": 100,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Sort order by `created_at`.",
            "in": "query",
            "name": "order",
            "required": false,
            "schema": {
              "enum": [
                "asc",
                "desc"
              ],
              "type": "string"
            }
          },
          {
            "description": "Cursor: an object id; returns objects after it.",
            "in": "query",
            "name": "after",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Cursor: an object id; returns objects before it.",
            "in": "query",
            "name": "before",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Additional fields to include, e.g. `step_details.tool_calls[*].file_search.results[*].content`.",
            "in": "query",
            "name": "include[]",
            "required": false,
            "schema": {
              "items": {
                "type": "string"
              },
              "type": "array"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI API version, sent by the AzureOpenAI SDK. Replaces the version configured for the app.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsList"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "List run steps",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-alias-of": "/openai_assistants/v1/threads/{thread_id}/runs/{run_id}/steps",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_assistants/v1/openai/threads/{thread_id}/runs/{run_id}/steps/{step_id}": {
      "get": {
        "description": "Retrieves a run step. Tool-call inputs and outputs are scanned by guardrails before they are returned.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_retrieve_run_step_azure_v1",
        "parameters": [
          {
            "description": "Thread id (`thread_...`).",
            "in": "path",
            "name": "thread_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Run id (`run_...`).",
            "in": "path",
            "name": "run_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Run step id (`step_...`).",
            "in": "path",
            "name": "step_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Additional fields to include, e.g. `step_details.tool_calls[*].file_search.results[*].content`.",
            "in": "query",
            "name": "include[]",
            "required": false,
            "schema": {
              "items": {
                "type": "string"
              },
              "type": "array"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI API version, sent by the AzureOpenAI SDK. Replaces the version configured for the app.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsRunStep"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Retrieve a run step",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-alias-of": "/openai_assistants/v1/threads/{thread_id}/runs/{run_id}/steps/{step_id}",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_assistants/v1/openai/threads/{thread_id}/runs/{run_id}/submit_tool_outputs": {
      "post": {
        "description": "Submits function tool outputs to a run awaiting them. The outputs are scanned by guardrails before forwarding. With `stream: true` the response is a server-sent event stream. The streamed model output is scanned when the stream ends; the stored messages are scanned when read.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_submit_tool_outputs_azure_v1",
        "parameters": [
          {
            "description": "Thread id (`thread_...`).",
            "in": "path",
            "name": "thread_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Run id (`run_...`).",
            "in": "path",
            "name": "run_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI API version, sent by the AzureOpenAI SDK. Replaces the version configured for the app.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssistantsSubmitToolOutputsRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsRun"
                }
              },
              "text/event-stream": {
                "schema": {
                  "description": "Server-sent events: `thread.run.*`, `thread.run.step.*`, `thread.message.*` (including `thread.message.delta`), `error`, then `done` with data `[DONE]`.",
                  "type": "string"
                }
              }
            },
            "description": "Success; a server-sent event stream when the request asks to stream.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Submit tool outputs",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-alias-of": "/openai_assistants/v1/threads/{thread_id}/runs/{run_id}/submit_tool_outputs",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_assistants/v1/threads": {
      "post": {
        "description": "Creates a thread, optionally with initial messages. Message contents are scanned by guardrails before forwarding.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_create_thread",
        "parameters": [
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssistantsThreadCreateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsThread"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Create a thread",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_assistants/v1/threads/runs": {
      "post": {
        "description": "Creates a thread and starts a run on it in one request. Message contents are scanned by guardrails before forwarding. With `stream: true` the response is a server-sent event stream. The streamed model output is scanned when the stream ends; the stored messages are scanned when read.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_create_thread_and_run",
        "parameters": [
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssistantsThreadAndRunCreateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsRun"
                }
              },
              "text/event-stream": {
                "schema": {
                  "description": "Server-sent events: `thread.run.*`, `thread.run.step.*`, `thread.message.*` (including `thread.message.delta`), `error`, then `done` with data `[DONE]`.",
                  "type": "string"
                }
              }
            },
            "description": "Success; a server-sent event stream when the request asks to stream.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Create a thread and run it",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_assistants/v1/threads/{thread_id}": {
      "delete": {
        "description": "Deletes a thread.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_delete_thread",
        "parameters": [
          {
            "description": "Thread id (`thread_...`).",
            "in": "path",
            "name": "thread_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsDeleted"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Delete a thread",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      },
      "get": {
        "description": "Retrieves a thread.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_retrieve_thread",
        "parameters": [
          {
            "description": "Thread id (`thread_...`).",
            "in": "path",
            "name": "thread_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsThread"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Retrieve a thread",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      },
      "post": {
        "description": "Modifies a thread's metadata or tool resources.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_modify_thread",
        "parameters": [
          {
            "description": "Thread id (`thread_...`).",
            "in": "path",
            "name": "thread_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssistantsThreadModifyRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsThread"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Modify a thread",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_assistants/v1/threads/{thread_id}/messages": {
      "get": {
        "description": "Lists a thread's messages. Message contents are scanned by guardrails before they are returned.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_list_messages",
        "parameters": [
          {
            "description": "Thread id (`thread_...`).",
            "in": "path",
            "name": "thread_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Number of objects to return, 1 to 100 (default 20).",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "maximum": 100,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Sort order by `created_at`.",
            "in": "query",
            "name": "order",
            "required": false,
            "schema": {
              "enum": [
                "asc",
                "desc"
              ],
              "type": "string"
            }
          },
          {
            "description": "Cursor: an object id; returns objects after it.",
            "in": "query",
            "name": "after",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Cursor: an object id; returns objects before it.",
            "in": "query",
            "name": "before",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Only messages created by this run.",
            "in": "query",
            "name": "run_id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsList"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "List messages",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      },
      "post": {
        "description": "Adds a message to a thread. The content is scanned by guardrails before forwarding.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_create_message",
        "parameters": [
          {
            "description": "Thread id (`thread_...`).",
            "in": "path",
            "name": "thread_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssistantsMessageCreateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsMessage"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Create a message",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_assistants/v1/threads/{thread_id}/messages/{message_id}": {
      "delete": {
        "description": "Deletes a message.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_delete_message",
        "parameters": [
          {
            "description": "Thread id (`thread_...`).",
            "in": "path",
            "name": "thread_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Message id (`msg_...`).",
            "in": "path",
            "name": "message_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsDeleted"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Delete a message",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      },
      "get": {
        "description": "Retrieves a message. Its content is scanned by guardrails before it is returned.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_retrieve_message",
        "parameters": [
          {
            "description": "Thread id (`thread_...`).",
            "in": "path",
            "name": "thread_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Message id (`msg_...`).",
            "in": "path",
            "name": "message_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsMessage"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Retrieve a message",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      },
      "post": {
        "description": "Modifies a message's metadata.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_modify_message",
        "parameters": [
          {
            "description": "Thread id (`thread_...`).",
            "in": "path",
            "name": "thread_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Message id (`msg_...`).",
            "in": "path",
            "name": "message_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssistantsMetadataRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsMessage"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Modify a message",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_assistants/v1/threads/{thread_id}/runs": {
      "get": {
        "description": "Lists a thread's runs. Tool-call arguments of runs awaiting tool outputs are scanned by guardrails before they are returned.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_list_runs",
        "parameters": [
          {
            "description": "Thread id (`thread_...`).",
            "in": "path",
            "name": "thread_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Number of objects to return, 1 to 100 (default 20).",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "maximum": 100,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Sort order by `created_at`.",
            "in": "query",
            "name": "order",
            "required": false,
            "schema": {
              "enum": [
                "asc",
                "desc"
              ],
              "type": "string"
            }
          },
          {
            "description": "Cursor: an object id; returns objects after it.",
            "in": "query",
            "name": "after",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Cursor: an object id; returns objects before it.",
            "in": "query",
            "name": "before",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsList"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "List runs",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      },
      "post": {
        "description": "Starts a run of an assistant on a thread. `additional_messages` contents are scanned by guardrails before forwarding. With `stream: true` the response is a server-sent event stream. The streamed model output is scanned when the stream ends; the stored messages are scanned when read.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_create_run",
        "parameters": [
          {
            "description": "Thread id (`thread_...`).",
            "in": "path",
            "name": "thread_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Additional fields to include, e.g. `step_details.tool_calls[*].file_search.results[*].content`.",
            "in": "query",
            "name": "include[]",
            "required": false,
            "schema": {
              "items": {
                "type": "string"
              },
              "type": "array"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssistantsRunCreateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsRun"
                }
              },
              "text/event-stream": {
                "schema": {
                  "description": "Server-sent events: `thread.run.*`, `thread.run.step.*`, `thread.message.*` (including `thread.message.delta`), `error`, then `done` with data `[DONE]`.",
                  "type": "string"
                }
              }
            },
            "description": "Success; a server-sent event stream when the request asks to stream.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Create a run",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_assistants/v1/threads/{thread_id}/runs/{run_id}": {
      "get": {
        "description": "Retrieves a run. Tool-call arguments of a run awaiting tool outputs are scanned by guardrails before they are returned.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_retrieve_run",
        "parameters": [
          {
            "description": "Thread id (`thread_...`).",
            "in": "path",
            "name": "thread_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Run id (`run_...`).",
            "in": "path",
            "name": "run_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsRun"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Retrieve a run",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      },
      "post": {
        "description": "Modifies a run's metadata.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_modify_run",
        "parameters": [
          {
            "description": "Thread id (`thread_...`).",
            "in": "path",
            "name": "thread_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Run id (`run_...`).",
            "in": "path",
            "name": "run_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssistantsMetadataRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsRun"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Modify a run",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_assistants/v1/threads/{thread_id}/runs/{run_id}/cancel": {
      "post": {
        "description": "Cancels an in-progress run. No request body.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_cancel_run",
        "parameters": [
          {
            "description": "Thread id (`thread_...`).",
            "in": "path",
            "name": "thread_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Run id (`run_...`).",
            "in": "path",
            "name": "run_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsRun"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Cancel a run",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_assistants/v1/threads/{thread_id}/runs/{run_id}/steps": {
      "get": {
        "description": "Lists a run's steps. Tool-call inputs and outputs are scanned by guardrails before they are returned.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_list_run_steps",
        "parameters": [
          {
            "description": "Thread id (`thread_...`).",
            "in": "path",
            "name": "thread_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Run id (`run_...`).",
            "in": "path",
            "name": "run_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Number of objects to return, 1 to 100 (default 20).",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "maximum": 100,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Sort order by `created_at`.",
            "in": "query",
            "name": "order",
            "required": false,
            "schema": {
              "enum": [
                "asc",
                "desc"
              ],
              "type": "string"
            }
          },
          {
            "description": "Cursor: an object id; returns objects after it.",
            "in": "query",
            "name": "after",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Cursor: an object id; returns objects before it.",
            "in": "query",
            "name": "before",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Additional fields to include, e.g. `step_details.tool_calls[*].file_search.results[*].content`.",
            "in": "query",
            "name": "include[]",
            "required": false,
            "schema": {
              "items": {
                "type": "string"
              },
              "type": "array"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsList"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "List run steps",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_assistants/v1/threads/{thread_id}/runs/{run_id}/steps/{step_id}": {
      "get": {
        "description": "Retrieves a run step. Tool-call inputs and outputs are scanned by guardrails before they are returned.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_retrieve_run_step",
        "parameters": [
          {
            "description": "Thread id (`thread_...`).",
            "in": "path",
            "name": "thread_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Run id (`run_...`).",
            "in": "path",
            "name": "run_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Run step id (`step_...`).",
            "in": "path",
            "name": "step_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Additional fields to include, e.g. `step_details.tool_calls[*].file_search.results[*].content`.",
            "in": "query",
            "name": "include[]",
            "required": false,
            "schema": {
              "items": {
                "type": "string"
              },
              "type": "array"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsRunStep"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Retrieve a run step",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_assistants/v1/threads/{thread_id}/runs/{run_id}/submit_tool_outputs": {
      "post": {
        "description": "Submits function tool outputs to a run awaiting them. The outputs are scanned by guardrails before forwarding. With `stream: true` the response is a server-sent event stream. The streamed model output is scanned when the stream ends; the stored messages are scanned when read.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, model access rules, limits, quotas and budgets.",
        "operationId": "Assistants_submit_tool_outputs",
        "parameters": [
          {
            "description": "Thread id (`thread_...`).",
            "in": "path",
            "name": "thread_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Run id (`run_...`).",
            "in": "path",
            "name": "run_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Assistants API version. The OpenAI SDK sends `assistants=v2`; when absent the gateway sends `assistants=v2`, and a client value replaces it.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "example": "assistants=v2",
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssistantsSubmitToolOutputsRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssistantsRun"
                }
              },
              "text/event-stream": {
                "schema": {
                  "description": "Server-sent events: `thread.run.*`, `thread.run.step.*`, `thread.message.*` (including `thread.message.delta`), `error`, then `done` with data `[DONE]`.",
                  "type": "string"
                }
              }
            },
            "description": "Success; a server-sent event stream when the request asks to stream.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Submit tool outputs",
        "tags": [
          "OpenAI Assistants"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_compatible/audio/speech": {
      "post": {
        "description": "Text to speech. Returns audio bytes in `response_format`, or a server-sent event stream when `stream_format` is `sse`. Body fields and query parameters are forwarded to the provider as sent.\n\n**Gateway features on this route:** request guardrails, model access rules, limits, quotas and budgets.",
        "operationId": "OpenAI_create_speech_unversioned",
        "parameters": [
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OpenAISpeechRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "audio/aac": {
                "schema": {
                  "format": "binary",
                  "type": "string"
                }
              },
              "audio/flac": {
                "schema": {
                  "format": "binary",
                  "type": "string"
                }
              },
              "audio/mpeg": {
                "schema": {
                  "format": "binary",
                  "type": "string"
                }
              },
              "audio/opus": {
                "schema": {
                  "format": "binary",
                  "type": "string"
                }
              },
              "audio/pcm": {
                "schema": {
                  "format": "binary",
                  "type": "string"
                }
              },
              "audio/wav": {
                "schema": {
                  "format": "binary",
                  "type": "string"
                }
              },
              "text/event-stream": {
                "schema": {
                  "description": "Server-sent events.",
                  "type": "string"
                }
              }
            },
            "description": "Audio in the requested `response_format` (default `mp3`); a server-sent event stream of audio chunks when `stream_format` is `sse`.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Generate speech",
        "tags": [
          "OpenAI Audio"
        ],
        "x-quilr-alias-of": "/openai_compatible/v1/audio/speech",
        "x-quilr-gateway-features": [
          "request_dlp",
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_compatible/audio/transcriptions": {
      "post": {
        "description": "Speech to text from a multipart upload. Every form field is forwarded. `stream=true` returns a server-sent event stream when no response guardrail needs the full transcript.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), model access rules, limits, quotas and budgets.",
        "operationId": "OpenAI_create_transcription_unversioned",
        "parameters": [
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/OpenAITranscriptionRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenAITranscription"
                }
              },
              "text/event-stream": {
                "schema": {
                  "description": "Server-sent events.",
                  "type": "string"
                }
              },
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "description": "Transcript. `text`, `srt` and `vtt` response formats return plain text; a server-sent event stream when `stream` is `true`.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Transcribe audio",
        "tags": [
          "OpenAI Audio"
        ],
        "x-quilr-alias-of": "/openai_compatible/v1/audio/transcriptions",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_compatible/audio/translations": {
      "post": {
        "description": "Speech to English text from a multipart upload. Every form field is forwarded.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), model access rules, limits, quotas and budgets.",
        "operationId": "OpenAI_create_translation_unversioned",
        "parameters": [
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/OpenAITranslationRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenAITranscription"
                }
              },
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "description": "Transcript. `text`, `srt` and `vtt` response formats return plain text.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Translate audio to English",
        "tags": [
          "OpenAI Audio"
        ],
        "x-quilr-alias-of": "/openai_compatible/v1/audio/translations",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_compatible/batches": {
      "get": {
        "description": "Lists the provider's batch jobs. Query parameters are forwarded to the provider.\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "OpenAI_list_batches_unversioned",
        "parameters": [
          {
            "description": "Maximum number of items to return; forwarded to the provider.",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Cursor: the id of the last item of the previous page.",
            "in": "query",
            "name": "after",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one. Takes precedence over the header.",
            "in": "query",
            "name": "provider_label",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenAIBatchList"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "List batches",
        "tags": [
          "OpenAI Batches"
        ],
        "x-quilr-alias-of": "/openai_compatible/v1/batches",
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      },
      "post": {
        "description": "Starts a batch job from an uploaded input file (OpenAI, Azure OpenAI, Mistral or xAI). Responses use the OpenAI batch shape.\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "OpenAI_create_batch_unversioned",
        "parameters": [
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OpenAIBatchRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenAIBatch"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Create a batch",
        "tags": [
          "OpenAI Batches"
        ],
        "x-quilr-alias-of": "/openai_compatible/v1/batches",
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_compatible/batches/{batch_id}": {
      "get": {
        "description": "Returns a batch job's status.\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "OpenAI_retrieve_batch_unversioned",
        "parameters": [
          {
            "description": "Batch id returned by the provider.",
            "in": "path",
            "name": "batch_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one. Takes precedence over the header.",
            "in": "query",
            "name": "provider_label",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenAIBatch"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Retrieve a batch",
        "tags": [
          "OpenAI Batches"
        ],
        "x-quilr-alias-of": "/openai_compatible/v1/batches/{batch_id}",
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_compatible/batches/{batch_id}/cancel": {
      "post": {
        "description": "Cancels a running batch job. No request body.\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "OpenAI_cancel_batch_unversioned",
        "parameters": [
          {
            "description": "Batch id returned by the provider.",
            "in": "path",
            "name": "batch_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one. Takes precedence over the header.",
            "in": "query",
            "name": "provider_label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenAIBatch"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Cancel a batch",
        "tags": [
          "OpenAI Batches"
        ],
        "x-quilr-alias-of": "/openai_compatible/v1/batches/{batch_id}/cancel",
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_compatible/batches/{batch_id}/results": {
      "get": {
        "description": "Returns a batch's per-request results. xAI providers only (xAI returns results through its API instead of an output file).\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "OpenAI_get_batch_results_unversioned",
        "parameters": [
          {
            "description": "Batch id returned by the provider.",
            "in": "path",
            "name": "batch_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one. Takes precedence over the header.",
            "in": "query",
            "name": "provider_label",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenAIBatchResults"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Get batch results",
        "tags": [
          "OpenAI Batches"
        ],
        "x-quilr-alias-of": "/openai_compatible/v1/batches/{batch_id}/results",
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_compatible/chat/completions": {
      "post": {
        "description": "OpenAI Chat Completions. Guardrails scan the request and the response; routing, failover, limits and quotas apply. Returns a server-sent event stream when `stream` is `true`.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, hallucination check (non-streaming), attachment scanning, model access rules, routing groups, content routing, failover, limits, quotas and budgets, token saving, Prompt Store, universal system prompt, response cache.",
        "operationId": "OpenAI_create_chat_completion_unversioned",
        "parameters": [
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "JSON object of Prompt Store variable values keyed by prompt reference, e.g. `{\"<prompt reference>\": {\"tone\": \"formal\"}}`. Fills `{{variable}}` placeholders of stored prompts.",
            "in": "header",
            "name": "X-Prompt-Variables",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "example": {
                "messages": [
                  {
                    "content": "Hello",
                    "role": "user"
                  }
                ],
                "model": "gpt-4o-mini"
              },
              "schema": {
                "$ref": "#/components/schemas/OpenAIChatCompletionRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenAIChatCompletion"
                }
              },
              "text/event-stream": {
                "schema": {
                  "$ref": "#/components/schemas/OpenAIChatCompletionChunk"
                }
              }
            },
            "description": "Success; a server-sent event stream when the request asks to stream.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "409": {
            "$ref": "#/components/responses/OpenAIError409"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "415": {
            "$ref": "#/components/responses/OpenAIError415"
          },
          "422": {
            "$ref": "#/components/responses/OpenAIError422"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Create a chat completion",
        "tags": [
          "OpenAI Chat and Completions"
        ],
        "x-quilr-alias-of": "/openai_compatible/v1/chat/completions",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "hallucination",
          "attachments",
          "model_access",
          "group_routing",
          "context_routing",
          "failover",
          "limits",
          "token_saving",
          "prompt_store",
          "universal_system_prompt",
          "response_cache"
        ]
      }
    },
    "/openai_compatible/completions": {
      "post": {
        "description": "Legacy text completions, including fill in the middle with `suffix` on providers that support it. Returns a server-sent event stream when `stream` is `true`.\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "OpenAI_create_completion_unversioned",
        "parameters": [
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OpenAICompletionRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenAICompletion"
                }
              },
              "text/event-stream": {
                "schema": {
                  "description": "Server-sent events.",
                  "type": "string"
                }
              }
            },
            "description": "Success; a server-sent event stream when the request asks to stream.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Create a text completion",
        "tags": [
          "OpenAI Chat and Completions"
        ],
        "x-quilr-alias-of": "/openai_compatible/v1/completions",
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_compatible/embeddings": {
      "post": {
        "description": "Embeds text with the app's embedding model. The input is scanned by the app's request guardrails.\n\n**Gateway features on this route:** request guardrails, model access rules, failover, limits, quotas and budgets, response cache.",
        "operationId": "OpenAI_create_embeddings_unversioned",
        "parameters": [
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OpenAIEmbeddingRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenAIEmbeddingList"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "409": {
            "$ref": "#/components/responses/OpenAIError409"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Create embeddings",
        "tags": [
          "OpenAI Embeddings"
        ],
        "x-quilr-alias-of": "/openai_compatible/v1/embeddings",
        "x-quilr-gateway-features": [
          "request_dlp",
          "model_access",
          "failover",
          "limits",
          "response_cache"
        ]
      }
    },
    "/openai_compatible/files": {
      "get": {
        "description": "Lists the provider's files. Query parameters are forwarded to the provider.\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "OpenAI_list_files_unversioned",
        "parameters": [
          {
            "description": "Only files with this purpose.",
            "in": "query",
            "name": "purpose",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Maximum number of items to return; forwarded to the provider.",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Cursor: the id of the last item of the previous page.",
            "in": "query",
            "name": "after",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sort order by creation time.",
            "in": "query",
            "name": "order",
            "required": false,
            "schema": {
              "enum": [
                "asc",
                "desc"
              ],
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one. Takes precedence over the header.",
            "in": "query",
            "name": "provider_label",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenAIFileList"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "List files",
        "tags": [
          "OpenAI Files"
        ],
        "x-quilr-alias-of": "/openai_compatible/v1/files",
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      },
      "post": {
        "description": "Uploads a file to the app's file provider (OpenAI, Azure OpenAI, Mistral or xAI).\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "OpenAI_upload_file_unversioned",
        "parameters": [
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/OpenAIFileUploadRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenAIFile"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Upload a file",
        "tags": [
          "OpenAI Files"
        ],
        "x-quilr-alias-of": "/openai_compatible/v1/files",
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_compatible/files/{file_id}": {
      "delete": {
        "description": "Deletes a file at the provider.\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "OpenAI_delete_file_unversioned",
        "parameters": [
          {
            "description": "File id returned by the provider.",
            "in": "path",
            "name": "file_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one. Takes precedence over the header.",
            "in": "query",
            "name": "provider_label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenAIDeleted"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Delete a file",
        "tags": [
          "OpenAI Files"
        ],
        "x-quilr-alias-of": "/openai_compatible/v1/files/{file_id}",
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      },
      "get": {
        "description": "Returns a file's metadata.\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "OpenAI_retrieve_file_unversioned",
        "parameters": [
          {
            "description": "File id returned by the provider.",
            "in": "path",
            "name": "file_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one. Takes precedence over the header.",
            "in": "query",
            "name": "provider_label",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenAIFile"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Retrieve a file",
        "tags": [
          "OpenAI Files"
        ],
        "x-quilr-alias-of": "/openai_compatible/v1/files/{file_id}",
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_compatible/files/{file_id}/content": {
      "get": {
        "description": "Streams the file's bytes from the provider unchanged, with the provider's content type.\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "OpenAI_download_file_content_unversioned",
        "parameters": [
          {
            "description": "File id returned by the provider.",
            "in": "path",
            "name": "file_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one. Takes precedence over the header.",
            "in": "query",
            "name": "provider_label",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/jsonl": {
                "schema": {
                  "format": "binary",
                  "type": "string"
                }
              },
              "application/octet-stream": {
                "schema": {
                  "format": "binary",
                  "type": "string"
                }
              }
            },
            "description": "File content as stored by the provider.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Download file content",
        "tags": [
          "OpenAI Files"
        ],
        "x-quilr-alias-of": "/openai_compatible/v1/files/{file_id}/content",
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_compatible/images/edits": {
      "post": {
        "description": "Edits images from a prompt. Send multipart form data with image files, or JSON with image references; which one a provider accepts depends on the provider (Azure OpenAI takes multipart only, xAI JSON only).\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "OpenAI_create_image_edit_unversioned",
        "parameters": [
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OpenAIImageEditJsonRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/OpenAIImageEditRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenAIImagesResponse"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Edit images",
        "tags": [
          "OpenAI Images"
        ],
        "x-quilr-alias-of": "/openai_compatible/v1/images/edits",
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_compatible/images/generations": {
      "post": {
        "description": "Creates images from a prompt.\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "OpenAI_create_image_unversioned",
        "parameters": [
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OpenAIImageGenerationRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenAIImagesResponse"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Generate images",
        "tags": [
          "OpenAI Images"
        ],
        "x-quilr-alias-of": "/openai_compatible/v1/images/generations",
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_compatible/images/variations": {
      "post": {
        "description": "Creates variations of an uploaded image. OpenAI providers only.\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "OpenAI_create_image_variation_unversioned",
        "parameters": [
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/OpenAIImageVariationRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenAIImagesResponse"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Create image variations",
        "tags": [
          "OpenAI Images"
        ],
        "x-quilr-alias-of": "/openai_compatible/v1/images/variations",
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_compatible/models": {
      "get": {
        "description": "Models configured for the app that the caller may use. Makes no upstream call.",
        "operationId": "OpenAI_list_models_unversioned",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenAIModelList"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "List models",
        "tags": [
          "OpenAI Models"
        ],
        "x-quilr-alias-of": "/openai_compatible/v1/models"
      }
    },
    "/openai_compatible/models/{model_id}": {
      "get": {
        "description": "One model from the app's configured models. 404 when the model is not enabled for the caller.",
        "operationId": "OpenAI_retrieve_model_unversioned",
        "parameters": [
          {
            "description": "Model id.",
            "in": "path",
            "name": "model_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenAIModel"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Retrieve a model",
        "tags": [
          "OpenAI Models"
        ],
        "x-quilr-alias-of": "/openai_compatible/v1/models/{model_id}"
      }
    },
    "/openai_compatible/moderations": {
      "post": {
        "description": "Moderation in the OpenAI shape; Mistral moderation results are converted to it.\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "OpenAI_create_moderation_unversioned",
        "parameters": [
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OpenAIModerationRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenAIModeration"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Classify content",
        "tags": [
          "OpenAI Moderations and OCR"
        ],
        "x-quilr-alias-of": "/openai_compatible/v1/moderations",
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_compatible/ocr": {
      "post": {
        "description": "Document OCR in Mistral's request and response shape. Mistral providers only.\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "OpenAI_create_ocr_unversioned",
        "parameters": [
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OpenAIOcrRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenAIOcrResponse"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Extract text from a document",
        "tags": [
          "OpenAI Moderations and OCR"
        ],
        "x-quilr-alias-of": "/openai_compatible/v1/ocr",
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_compatible/openai/deployments/{deployment}/audio/speech": {
      "post": {
        "description": "Text to speech for the body's `model`. Returns audio bytes in `response_format`; with `stream_format: sse`, server-sent audio events as they arrive.\n\n**Gateway features on this route:** request guardrails, model access rules, limits, quotas and budgets.",
        "operationId": "AzureOpenAI_create_speech_compat",
        "parameters": [
          {
            "description": "Azure deployment name, as the SDK builds it. Used as the model only where the operation says so.",
            "in": "path",
            "name": "deployment",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sent by Azure OpenAI SDKs. Optional; client query parameters are forwarded upstream, where `api-version` replaces the configured version for an Azure OpenAI upstream and is dropped for upstreams that reject it.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AzureOpenAISpeechRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "audio/aac": {
                "schema": {
                  "format": "binary",
                  "type": "string"
                }
              },
              "audio/flac": {
                "schema": {
                  "format": "binary",
                  "type": "string"
                }
              },
              "audio/mpeg": {
                "schema": {
                  "format": "binary",
                  "type": "string"
                }
              },
              "audio/opus": {
                "schema": {
                  "format": "binary",
                  "type": "string"
                }
              },
              "audio/pcm": {
                "schema": {
                  "format": "binary",
                  "type": "string"
                }
              },
              "audio/wav": {
                "schema": {
                  "format": "binary",
                  "type": "string"
                }
              },
              "text/event-stream": {
                "schema": {
                  "description": "Audio events when `stream_format` is `sse`.",
                  "type": "string"
                }
              }
            },
            "description": "Audio in the requested format.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "409": {
            "$ref": "#/components/responses/OpenAIError409"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Generate speech",
        "tags": [
          "Azure OpenAI"
        ],
        "x-quilr-alias-of": "/openai/deployments/{deployment}/audio/speech",
        "x-quilr-gateway-features": [
          "request_dlp",
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_compatible/openai/deployments/{deployment}/audio/transcriptions": {
      "post": {
        "description": "Speech to text for the form's `model`. With `stream=true` the transcript is streamed as server-sent events, unless the app scans the transcript before delivery, in which case it is returned when complete.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), model access rules, limits, quotas and budgets.",
        "operationId": "AzureOpenAI_create_transcription_compat",
        "parameters": [
          {
            "description": "Azure deployment name, as the SDK builds it. Used as the model only where the operation says so.",
            "in": "path",
            "name": "deployment",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sent by Azure OpenAI SDKs. Optional; client query parameters are forwarded upstream, where `api-version` replaces the configured version for an Azure OpenAI upstream and is dropped for upstreams that reject it.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/AzureOpenAITranscriptionRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AzureOpenAITranscription"
                }
              },
              "text/event-stream": {
                "schema": {
                  "description": "Server-sent events.",
                  "type": "string"
                }
              },
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "description": "Success; plain text for `text`, `srt` and `vtt` formats, server-sent events when streaming.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "409": {
            "$ref": "#/components/responses/OpenAIError409"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Transcribe audio",
        "tags": [
          "Azure OpenAI"
        ],
        "x-quilr-alias-of": "/openai/deployments/{deployment}/audio/transcriptions",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_compatible/openai/deployments/{deployment}/audio/translations": {
      "post": {
        "description": "Speech to English text for the form's `model`.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), model access rules, limits, quotas and budgets.",
        "operationId": "AzureOpenAI_create_translation_compat",
        "parameters": [
          {
            "description": "Azure deployment name, as the SDK builds it. Used as the model only where the operation says so.",
            "in": "path",
            "name": "deployment",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sent by Azure OpenAI SDKs. Optional; client query parameters are forwarded upstream, where `api-version` replaces the configured version for an Azure OpenAI upstream and is dropped for upstreams that reject it.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/AzureOpenAITranscriptionRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AzureOpenAITranscription"
                }
              },
              "text/event-stream": {
                "schema": {
                  "description": "Server-sent events.",
                  "type": "string"
                }
              },
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "description": "Success; plain text for `text`, `srt` and `vtt` formats, server-sent events when streaming.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "409": {
            "$ref": "#/components/responses/OpenAIError409"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Translate audio to English",
        "tags": [
          "Azure OpenAI"
        ],
        "x-quilr-alias-of": "/openai/deployments/{deployment}/audio/translations",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_compatible/openai/deployments/{deployment}/chat/completions": {
      "post": {
        "description": "Chat completions for a deployment. The deployment name is the model when the body has no `model`. With `stream: true` the answer is a server-sent event stream of chunks ending with `data: [DONE]`. Guardrails can redact, or block (400 with a guardrail code; policy and access denials are 403).\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, hallucination check (non-streaming), attachment scanning, model access rules, routing groups, content routing, failover, limits, quotas and budgets, token saving, Prompt Store, universal system prompt, response cache.",
        "operationId": "AzureOpenAI_create_chat_completion_compat",
        "parameters": [
          {
            "description": "Azure deployment name, as the SDK builds it. Used as the model only where the operation says so.",
            "in": "path",
            "name": "deployment",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sent by Azure OpenAI SDKs. Optional; client query parameters are forwarded upstream, where `api-version` replaces the configured version for an Azure OpenAI upstream and is dropped for upstreams that reject it.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "JSON object of Prompt Store variable values keyed by prompt reference, e.g. `{\"<prompt reference>\": {\"tone\": \"formal\"}}`. Fills `{{variable}}` placeholders of stored prompts.",
            "in": "header",
            "name": "X-Prompt-Variables",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AzureOpenAIChatCompletionRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AzureOpenAIChatCompletion"
                }
              },
              "text/event-stream": {
                "schema": {
                  "$ref": "#/components/schemas/AzureOpenAIChatCompletionChunk"
                }
              }
            },
            "description": "Success; a server-sent event stream when the request asks to stream.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "409": {
            "$ref": "#/components/responses/OpenAIError409"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "415": {
            "$ref": "#/components/responses/OpenAIError415"
          },
          "422": {
            "$ref": "#/components/responses/OpenAIError422"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Create a chat completion",
        "tags": [
          "Azure OpenAI"
        ],
        "x-quilr-alias-of": "/openai/deployments/{deployment}/chat/completions",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "hallucination",
          "attachments",
          "model_access",
          "group_routing",
          "context_routing",
          "failover",
          "limits",
          "token_saving",
          "prompt_store",
          "universal_system_prompt",
          "response_cache"
        ]
      }
    },
    "/openai_compatible/openai/deployments/{deployment}/embeddings": {
      "post": {
        "description": "Embeddings for the body's `model` (the Azure SDK sends the deployment name there).\n\n**Gateway features on this route:** request guardrails, model access rules, failover, limits, quotas and budgets, response cache.",
        "operationId": "AzureOpenAI_create_embeddings_compat",
        "parameters": [
          {
            "description": "Azure deployment name, as the SDK builds it. Used as the model only where the operation says so.",
            "in": "path",
            "name": "deployment",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sent by Azure OpenAI SDKs. Optional; client query parameters are forwarded upstream, where `api-version` replaces the configured version for an Azure OpenAI upstream and is dropped for upstreams that reject it.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AzureOpenAIEmbeddingRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AzureOpenAIEmbeddingList"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "409": {
            "$ref": "#/components/responses/OpenAIError409"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Create embeddings",
        "tags": [
          "Azure OpenAI"
        ],
        "x-quilr-alias-of": "/openai/deployments/{deployment}/embeddings",
        "x-quilr-gateway-features": [
          "request_dlp",
          "model_access",
          "failover",
          "limits",
          "response_cache"
        ]
      }
    },
    "/openai_compatible/openai/models": {
      "get": {
        "description": "Models configured for the app and visible to the caller, as the Azure OpenAI SDK's `models.list()` requests them (not deployment-scoped). Makes no upstream call.",
        "operationId": "AzureOpenAI_list_models",
        "parameters": [
          {
            "description": "Sent by Azure OpenAI SDKs. Optional; client query parameters are forwarded upstream, where `api-version` replaces the configured version for an Azure OpenAI upstream and is dropped for upstreams that reject it.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AzureOpenAIModelList"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "List models",
        "tags": [
          "Azure OpenAI"
        ]
      }
    },
    "/openai_compatible/v1/audio/speech": {
      "post": {
        "description": "Text to speech. Returns audio bytes in `response_format`, or a server-sent event stream when `stream_format` is `sse`. Body fields and query parameters are forwarded to the provider as sent.\n\n**Gateway features on this route:** request guardrails, model access rules, limits, quotas and budgets.",
        "operationId": "OpenAI_create_speech",
        "parameters": [
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OpenAISpeechRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "audio/aac": {
                "schema": {
                  "format": "binary",
                  "type": "string"
                }
              },
              "audio/flac": {
                "schema": {
                  "format": "binary",
                  "type": "string"
                }
              },
              "audio/mpeg": {
                "schema": {
                  "format": "binary",
                  "type": "string"
                }
              },
              "audio/opus": {
                "schema": {
                  "format": "binary",
                  "type": "string"
                }
              },
              "audio/pcm": {
                "schema": {
                  "format": "binary",
                  "type": "string"
                }
              },
              "audio/wav": {
                "schema": {
                  "format": "binary",
                  "type": "string"
                }
              },
              "text/event-stream": {
                "schema": {
                  "description": "Server-sent events.",
                  "type": "string"
                }
              }
            },
            "description": "Audio in the requested `response_format` (default `mp3`); a server-sent event stream of audio chunks when `stream_format` is `sse`.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Generate speech",
        "tags": [
          "OpenAI Audio"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_compatible/v1/audio/transcriptions": {
      "post": {
        "description": "Speech to text from a multipart upload. Every form field is forwarded. `stream=true` returns a server-sent event stream when no response guardrail needs the full transcript.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), model access rules, limits, quotas and budgets.",
        "operationId": "OpenAI_create_transcription",
        "parameters": [
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/OpenAITranscriptionRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenAITranscription"
                }
              },
              "text/event-stream": {
                "schema": {
                  "description": "Server-sent events.",
                  "type": "string"
                }
              },
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "description": "Transcript. `text`, `srt` and `vtt` response formats return plain text; a server-sent event stream when `stream` is `true`.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Transcribe audio",
        "tags": [
          "OpenAI Audio"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_compatible/v1/audio/translations": {
      "post": {
        "description": "Speech to English text from a multipart upload. Every form field is forwarded.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), model access rules, limits, quotas and budgets.",
        "operationId": "OpenAI_create_translation",
        "parameters": [
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/OpenAITranslationRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenAITranscription"
                }
              },
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "description": "Transcript. `text`, `srt` and `vtt` response formats return plain text.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Translate audio to English",
        "tags": [
          "OpenAI Audio"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_compatible/v1/batches": {
      "get": {
        "description": "Lists the provider's batch jobs. Query parameters are forwarded to the provider.\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "OpenAI_list_batches",
        "parameters": [
          {
            "description": "Maximum number of items to return; forwarded to the provider.",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Cursor: the id of the last item of the previous page.",
            "in": "query",
            "name": "after",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one. Takes precedence over the header.",
            "in": "query",
            "name": "provider_label",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenAIBatchList"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "List batches",
        "tags": [
          "OpenAI Batches"
        ],
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      },
      "post": {
        "description": "Starts a batch job from an uploaded input file (OpenAI, Azure OpenAI, Mistral or xAI). Responses use the OpenAI batch shape.\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "OpenAI_create_batch",
        "parameters": [
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OpenAIBatchRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenAIBatch"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Create a batch",
        "tags": [
          "OpenAI Batches"
        ],
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_compatible/v1/batches/{batch_id}": {
      "get": {
        "description": "Returns a batch job's status.\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "OpenAI_retrieve_batch",
        "parameters": [
          {
            "description": "Batch id returned by the provider.",
            "in": "path",
            "name": "batch_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one. Takes precedence over the header.",
            "in": "query",
            "name": "provider_label",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenAIBatch"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Retrieve a batch",
        "tags": [
          "OpenAI Batches"
        ],
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_compatible/v1/batches/{batch_id}/cancel": {
      "post": {
        "description": "Cancels a running batch job. No request body.\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "OpenAI_cancel_batch",
        "parameters": [
          {
            "description": "Batch id returned by the provider.",
            "in": "path",
            "name": "batch_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one. Takes precedence over the header.",
            "in": "query",
            "name": "provider_label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenAIBatch"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Cancel a batch",
        "tags": [
          "OpenAI Batches"
        ],
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_compatible/v1/batches/{batch_id}/results": {
      "get": {
        "description": "Returns a batch's per-request results. xAI providers only (xAI returns results through its API instead of an output file).\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "OpenAI_get_batch_results",
        "parameters": [
          {
            "description": "Batch id returned by the provider.",
            "in": "path",
            "name": "batch_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one. Takes precedence over the header.",
            "in": "query",
            "name": "provider_label",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenAIBatchResults"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Get batch results",
        "tags": [
          "OpenAI Batches"
        ],
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_compatible/v1/chat/completions": {
      "post": {
        "description": "OpenAI Chat Completions. Guardrails scan the request and the response; routing, failover, limits and quotas apply. Returns a server-sent event stream when `stream` is `true`.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, hallucination check (non-streaming), attachment scanning, model access rules, routing groups, content routing, failover, limits, quotas and budgets, token saving, Prompt Store, universal system prompt, response cache.",
        "operationId": "OpenAI_create_chat_completion",
        "parameters": [
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "JSON object of Prompt Store variable values keyed by prompt reference, e.g. `{\"<prompt reference>\": {\"tone\": \"formal\"}}`. Fills `{{variable}}` placeholders of stored prompts.",
            "in": "header",
            "name": "X-Prompt-Variables",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "example": {
                "messages": [
                  {
                    "content": "Hello",
                    "role": "user"
                  }
                ],
                "model": "gpt-4o-mini"
              },
              "schema": {
                "$ref": "#/components/schemas/OpenAIChatCompletionRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenAIChatCompletion"
                }
              },
              "text/event-stream": {
                "schema": {
                  "$ref": "#/components/schemas/OpenAIChatCompletionChunk"
                }
              }
            },
            "description": "Success; a server-sent event stream when the request asks to stream.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "409": {
            "$ref": "#/components/responses/OpenAIError409"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "415": {
            "$ref": "#/components/responses/OpenAIError415"
          },
          "422": {
            "$ref": "#/components/responses/OpenAIError422"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Create a chat completion",
        "tags": [
          "OpenAI Chat and Completions"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "hallucination",
          "attachments",
          "model_access",
          "group_routing",
          "context_routing",
          "failover",
          "limits",
          "token_saving",
          "prompt_store",
          "universal_system_prompt",
          "response_cache"
        ]
      }
    },
    "/openai_compatible/v1/completions": {
      "post": {
        "description": "Legacy text completions, including fill in the middle with `suffix` on providers that support it. Returns a server-sent event stream when `stream` is `true`.\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "OpenAI_create_completion",
        "parameters": [
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OpenAICompletionRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenAICompletion"
                }
              },
              "text/event-stream": {
                "schema": {
                  "description": "Server-sent events.",
                  "type": "string"
                }
              }
            },
            "description": "Success; a server-sent event stream when the request asks to stream.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Create a text completion",
        "tags": [
          "OpenAI Chat and Completions"
        ],
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_compatible/v1/decisions": {
      "post": {
        "description": "OpenAI Decisions format for decision models (Microsoft-Decision-1 on Azure, TypeSafe, Perplexity). Text and JSON input only; images are refused. Request bodies may be gzip or deflate encoded; zstd is refused with 415. Unknown fields inside a question are rejected, as OpenAI does.\n\n**Gateway features on this route:** request guardrails, model access rules, limits, quotas and budgets.",
        "operationId": "OpenAI_create_decisions",
        "parameters": [
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OpenAIDecisionsRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenAIDecisionsResponse"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "415": {
            "$ref": "#/components/responses/OpenAIError415"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Answer decision questions",
        "tags": [
          "OpenAI Decisions"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_compatible/v1/embeddings": {
      "post": {
        "description": "Embeds text with the app's embedding model. The input is scanned by the app's request guardrails.\n\n**Gateway features on this route:** request guardrails, model access rules, failover, limits, quotas and budgets, response cache.",
        "operationId": "OpenAI_create_embeddings",
        "parameters": [
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OpenAIEmbeddingRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenAIEmbeddingList"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "409": {
            "$ref": "#/components/responses/OpenAIError409"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Create embeddings",
        "tags": [
          "OpenAI Embeddings"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "model_access",
          "failover",
          "limits",
          "response_cache"
        ]
      }
    },
    "/openai_compatible/v1/files": {
      "get": {
        "description": "Lists the provider's files. Query parameters are forwarded to the provider.\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "OpenAI_list_files",
        "parameters": [
          {
            "description": "Only files with this purpose.",
            "in": "query",
            "name": "purpose",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Maximum number of items to return; forwarded to the provider.",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Cursor: the id of the last item of the previous page.",
            "in": "query",
            "name": "after",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sort order by creation time.",
            "in": "query",
            "name": "order",
            "required": false,
            "schema": {
              "enum": [
                "asc",
                "desc"
              ],
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one. Takes precedence over the header.",
            "in": "query",
            "name": "provider_label",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenAIFileList"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "List files",
        "tags": [
          "OpenAI Files"
        ],
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      },
      "post": {
        "description": "Uploads a file to the app's file provider (OpenAI, Azure OpenAI, Mistral or xAI).\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "OpenAI_upload_file",
        "parameters": [
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/OpenAIFileUploadRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenAIFile"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Upload a file",
        "tags": [
          "OpenAI Files"
        ],
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_compatible/v1/files/{file_id}": {
      "delete": {
        "description": "Deletes a file at the provider.\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "OpenAI_delete_file",
        "parameters": [
          {
            "description": "File id returned by the provider.",
            "in": "path",
            "name": "file_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one. Takes precedence over the header.",
            "in": "query",
            "name": "provider_label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenAIDeleted"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Delete a file",
        "tags": [
          "OpenAI Files"
        ],
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      },
      "get": {
        "description": "Returns a file's metadata.\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "OpenAI_retrieve_file",
        "parameters": [
          {
            "description": "File id returned by the provider.",
            "in": "path",
            "name": "file_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one. Takes precedence over the header.",
            "in": "query",
            "name": "provider_label",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenAIFile"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Retrieve a file",
        "tags": [
          "OpenAI Files"
        ],
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_compatible/v1/files/{file_id}/content": {
      "get": {
        "description": "Streams the file's bytes from the provider unchanged, with the provider's content type.\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "OpenAI_download_file_content",
        "parameters": [
          {
            "description": "File id returned by the provider.",
            "in": "path",
            "name": "file_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one. Takes precedence over the header.",
            "in": "query",
            "name": "provider_label",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/jsonl": {
                "schema": {
                  "format": "binary",
                  "type": "string"
                }
              },
              "application/octet-stream": {
                "schema": {
                  "format": "binary",
                  "type": "string"
                }
              }
            },
            "description": "File content as stored by the provider.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Download file content",
        "tags": [
          "OpenAI Files"
        ],
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_compatible/v1/images/edits": {
      "post": {
        "description": "Edits images from a prompt. Send multipart form data with image files, or JSON with image references; which one a provider accepts depends on the provider (Azure OpenAI takes multipart only, xAI JSON only).\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "OpenAI_create_image_edit",
        "parameters": [
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OpenAIImageEditJsonRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/OpenAIImageEditRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenAIImagesResponse"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Edit images",
        "tags": [
          "OpenAI Images"
        ],
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_compatible/v1/images/generations": {
      "post": {
        "description": "Creates images from a prompt.\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "OpenAI_create_image",
        "parameters": [
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OpenAIImageGenerationRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenAIImagesResponse"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Generate images",
        "tags": [
          "OpenAI Images"
        ],
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_compatible/v1/images/variations": {
      "post": {
        "description": "Creates variations of an uploaded image. OpenAI providers only.\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "OpenAI_create_image_variation",
        "parameters": [
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/OpenAIImageVariationRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenAIImagesResponse"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Create image variations",
        "tags": [
          "OpenAI Images"
        ],
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_compatible/v1/models": {
      "get": {
        "description": "Models configured for the app that the caller may use. Makes no upstream call.",
        "operationId": "OpenAI_list_models",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenAIModelList"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "List models",
        "tags": [
          "OpenAI Models"
        ]
      }
    },
    "/openai_compatible/v1/models/{model_id}": {
      "get": {
        "description": "One model from the app's configured models. 404 when the model is not enabled for the caller.",
        "operationId": "OpenAI_retrieve_model",
        "parameters": [
          {
            "description": "Model id.",
            "in": "path",
            "name": "model_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenAIModel"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Retrieve a model",
        "tags": [
          "OpenAI Models"
        ]
      }
    },
    "/openai_compatible/v1/moderations": {
      "post": {
        "description": "Moderation in the OpenAI shape; Mistral moderation results are converted to it.\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "OpenAI_create_moderation",
        "parameters": [
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OpenAIModerationRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenAIModeration"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Classify content",
        "tags": [
          "OpenAI Moderations and OCR"
        ],
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_compatible/v1/ocr": {
      "post": {
        "description": "Document OCR in Mistral's request and response shape. Mistral providers only.\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "OpenAI_create_ocr",
        "parameters": [
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OpenAIOcrRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenAIOcrResponse"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Extract text from a document",
        "tags": [
          "OpenAI Moderations and OCR"
        ],
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_compatible/v1/openai/deployments/{deployment}/audio/speech": {
      "post": {
        "description": "Text to speech for the body's `model`. Returns audio bytes in `response_format`; with `stream_format: sse`, server-sent audio events as they arrive.\n\n**Gateway features on this route:** request guardrails, model access rules, limits, quotas and budgets.",
        "operationId": "AzureOpenAI_create_speech_compat_v1",
        "parameters": [
          {
            "description": "Azure deployment name, as the SDK builds it. Used as the model only where the operation says so.",
            "in": "path",
            "name": "deployment",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sent by Azure OpenAI SDKs. Optional; client query parameters are forwarded upstream, where `api-version` replaces the configured version for an Azure OpenAI upstream and is dropped for upstreams that reject it.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AzureOpenAISpeechRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "audio/aac": {
                "schema": {
                  "format": "binary",
                  "type": "string"
                }
              },
              "audio/flac": {
                "schema": {
                  "format": "binary",
                  "type": "string"
                }
              },
              "audio/mpeg": {
                "schema": {
                  "format": "binary",
                  "type": "string"
                }
              },
              "audio/opus": {
                "schema": {
                  "format": "binary",
                  "type": "string"
                }
              },
              "audio/pcm": {
                "schema": {
                  "format": "binary",
                  "type": "string"
                }
              },
              "audio/wav": {
                "schema": {
                  "format": "binary",
                  "type": "string"
                }
              },
              "text/event-stream": {
                "schema": {
                  "description": "Audio events when `stream_format` is `sse`.",
                  "type": "string"
                }
              }
            },
            "description": "Audio in the requested format.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "409": {
            "$ref": "#/components/responses/OpenAIError409"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Generate speech",
        "tags": [
          "Azure OpenAI"
        ],
        "x-quilr-alias-of": "/openai/deployments/{deployment}/audio/speech",
        "x-quilr-gateway-features": [
          "request_dlp",
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_compatible/v1/openai/deployments/{deployment}/audio/transcriptions": {
      "post": {
        "description": "Speech to text for the form's `model`. With `stream=true` the transcript is streamed as server-sent events, unless the app scans the transcript before delivery, in which case it is returned when complete.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), model access rules, limits, quotas and budgets.",
        "operationId": "AzureOpenAI_create_transcription_compat_v1",
        "parameters": [
          {
            "description": "Azure deployment name, as the SDK builds it. Used as the model only where the operation says so.",
            "in": "path",
            "name": "deployment",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sent by Azure OpenAI SDKs. Optional; client query parameters are forwarded upstream, where `api-version` replaces the configured version for an Azure OpenAI upstream and is dropped for upstreams that reject it.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/AzureOpenAITranscriptionRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AzureOpenAITranscription"
                }
              },
              "text/event-stream": {
                "schema": {
                  "description": "Server-sent events.",
                  "type": "string"
                }
              },
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "description": "Success; plain text for `text`, `srt` and `vtt` formats, server-sent events when streaming.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "409": {
            "$ref": "#/components/responses/OpenAIError409"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Transcribe audio",
        "tags": [
          "Azure OpenAI"
        ],
        "x-quilr-alias-of": "/openai/deployments/{deployment}/audio/transcriptions",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_compatible/v1/openai/deployments/{deployment}/audio/translations": {
      "post": {
        "description": "Speech to English text for the form's `model`.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), model access rules, limits, quotas and budgets.",
        "operationId": "AzureOpenAI_create_translation_compat_v1",
        "parameters": [
          {
            "description": "Azure deployment name, as the SDK builds it. Used as the model only where the operation says so.",
            "in": "path",
            "name": "deployment",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sent by Azure OpenAI SDKs. Optional; client query parameters are forwarded upstream, where `api-version` replaces the configured version for an Azure OpenAI upstream and is dropped for upstreams that reject it.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/AzureOpenAITranscriptionRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AzureOpenAITranscription"
                }
              },
              "text/event-stream": {
                "schema": {
                  "description": "Server-sent events.",
                  "type": "string"
                }
              },
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "description": "Success; plain text for `text`, `srt` and `vtt` formats, server-sent events when streaming.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "409": {
            "$ref": "#/components/responses/OpenAIError409"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Translate audio to English",
        "tags": [
          "Azure OpenAI"
        ],
        "x-quilr-alias-of": "/openai/deployments/{deployment}/audio/translations",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_compatible/v1/openai/deployments/{deployment}/chat/completions": {
      "post": {
        "description": "Chat completions for a deployment. The deployment name is the model when the body has no `model`. With `stream: true` the answer is a server-sent event stream of chunks ending with `data: [DONE]`. Guardrails can redact, or block (400 with a guardrail code; policy and access denials are 403).\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, hallucination check (non-streaming), attachment scanning, model access rules, routing groups, content routing, failover, limits, quotas and budgets, token saving, Prompt Store, universal system prompt, response cache.",
        "operationId": "AzureOpenAI_create_chat_completion_compat_v1",
        "parameters": [
          {
            "description": "Azure deployment name, as the SDK builds it. Used as the model only where the operation says so.",
            "in": "path",
            "name": "deployment",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sent by Azure OpenAI SDKs. Optional; client query parameters are forwarded upstream, where `api-version` replaces the configured version for an Azure OpenAI upstream and is dropped for upstreams that reject it.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "JSON object of Prompt Store variable values keyed by prompt reference, e.g. `{\"<prompt reference>\": {\"tone\": \"formal\"}}`. Fills `{{variable}}` placeholders of stored prompts.",
            "in": "header",
            "name": "X-Prompt-Variables",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AzureOpenAIChatCompletionRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AzureOpenAIChatCompletion"
                }
              },
              "text/event-stream": {
                "schema": {
                  "$ref": "#/components/schemas/AzureOpenAIChatCompletionChunk"
                }
              }
            },
            "description": "Success; a server-sent event stream when the request asks to stream.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "409": {
            "$ref": "#/components/responses/OpenAIError409"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "415": {
            "$ref": "#/components/responses/OpenAIError415"
          },
          "422": {
            "$ref": "#/components/responses/OpenAIError422"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Create a chat completion",
        "tags": [
          "Azure OpenAI"
        ],
        "x-quilr-alias-of": "/openai/deployments/{deployment}/chat/completions",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "hallucination",
          "attachments",
          "model_access",
          "group_routing",
          "context_routing",
          "failover",
          "limits",
          "token_saving",
          "prompt_store",
          "universal_system_prompt",
          "response_cache"
        ]
      }
    },
    "/openai_compatible/v1/openai/deployments/{deployment}/embeddings": {
      "post": {
        "description": "Embeddings for the body's `model` (the Azure SDK sends the deployment name there).\n\n**Gateway features on this route:** request guardrails, model access rules, failover, limits, quotas and budgets, response cache.",
        "operationId": "AzureOpenAI_create_embeddings_compat_v1",
        "parameters": [
          {
            "description": "Azure deployment name, as the SDK builds it. Used as the model only where the operation says so.",
            "in": "path",
            "name": "deployment",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sent by Azure OpenAI SDKs. Optional; client query parameters are forwarded upstream, where `api-version` replaces the configured version for an Azure OpenAI upstream and is dropped for upstreams that reject it.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AzureOpenAIEmbeddingRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AzureOpenAIEmbeddingList"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "409": {
            "$ref": "#/components/responses/OpenAIError409"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Create embeddings",
        "tags": [
          "Azure OpenAI"
        ],
        "x-quilr-alias-of": "/openai/deployments/{deployment}/embeddings",
        "x-quilr-gateway-features": [
          "request_dlp",
          "model_access",
          "failover",
          "limits",
          "response_cache"
        ]
      }
    },
    "/openai_compatible/v1/openai/models": {
      "get": {
        "description": "Models configured for the app and visible to the caller, as the Azure OpenAI SDK's `models.list()` requests them (not deployment-scoped). Makes no upstream call.",
        "operationId": "AzureOpenAI_list_models_v1",
        "parameters": [
          {
            "description": "Sent by Azure OpenAI SDKs. Optional; client query parameters are forwarded upstream, where `api-version` replaces the configured version for an Azure OpenAI upstream and is dropped for upstreams that reject it.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AzureOpenAIModelList"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "List models",
        "tags": [
          "Azure OpenAI"
        ],
        "x-quilr-alias-of": "/openai_compatible/openai/models"
      }
    },
    "/openai_compatible/v1/quilr/usage": {
      "get": {
        "description": "The caller's own quota buckets for this app: limit, used, remaining and reset time. Quotas grouped per person are shown only to a verified identity (a verified JWT or a self-service key).",
        "operationId": "OpenAI_get_quota_usage",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenAIQuotaUsage"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Get my quota usage",
        "tags": [
          "OpenAI Quota Usage"
        ]
      }
    },
    "/openai_compatible/v1/videos": {
      "get": {
        "description": "Lists video jobs. OpenAI providers only. Query parameters are forwarded to the provider.\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "OpenAI_list_videos",
        "parameters": [
          {
            "description": "Maximum number of items to return; forwarded to the provider.",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Cursor: the id of the last item of the previous page.",
            "in": "query",
            "name": "after",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sort order by creation time.",
            "in": "query",
            "name": "order",
            "required": false,
            "schema": {
              "enum": [
                "asc",
                "desc"
              ],
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one. Takes precedence over the header.",
            "in": "query",
            "name": "provider_label",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenAIVideoList"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "List videos",
        "tags": [
          "OpenAI Videos"
        ],
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      },
      "post": {
        "description": "Starts a video generation job (OpenAI or xAI). Send JSON, or multipart form data with a reference image (OpenAI only).\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "OpenAI_create_video",
        "parameters": [
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OpenAIVideoRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/OpenAIVideoMultipartRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenAIVideo"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Create a video",
        "tags": [
          "OpenAI Videos"
        ],
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_compatible/v1/videos/edits": {
      "post": {
        "description": "Starts a video edit job. xAI providers only.\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "OpenAI_create_video_edit",
        "parameters": [
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OpenAIVideoEditRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenAIVideo"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Edit a video",
        "tags": [
          "OpenAI Videos"
        ],
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_compatible/v1/videos/{video_id}": {
      "delete": {
        "description": "Deletes a video. OpenAI providers only.\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "OpenAI_delete_video",
        "parameters": [
          {
            "description": "Video id returned by the provider.",
            "in": "path",
            "name": "video_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one. Takes precedence over the header.",
            "in": "query",
            "name": "provider_label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenAIDeleted"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Delete a video",
        "tags": [
          "OpenAI Videos"
        ],
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      },
      "get": {
        "description": "Returns a video job's status (OpenAI or xAI).\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "OpenAI_retrieve_video",
        "parameters": [
          {
            "description": "Video id returned by the provider.",
            "in": "path",
            "name": "video_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one. Takes precedence over the header.",
            "in": "query",
            "name": "provider_label",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenAIVideo"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Retrieve a video job",
        "tags": [
          "OpenAI Videos"
        ],
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_compatible/v1/videos/{video_id}/content": {
      "get": {
        "description": "Streams the generated video (or a thumbnail or spritesheet) from the provider unchanged. OpenAI providers only.\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "OpenAI_download_video_content",
        "parameters": [
          {
            "description": "Video id returned by the provider.",
            "in": "path",
            "name": "video_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Which asset to download; forwarded to the provider.",
            "in": "query",
            "name": "variant",
            "required": false,
            "schema": {
              "enum": [
                "video",
                "thumbnail",
                "spritesheet"
              ],
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one. Takes precedence over the header.",
            "in": "query",
            "name": "provider_label",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/octet-stream": {
                "schema": {
                  "format": "binary",
                  "type": "string"
                }
              },
              "image/jpeg": {
                "schema": {
                  "format": "binary",
                  "type": "string"
                }
              },
              "image/webp": {
                "schema": {
                  "format": "binary",
                  "type": "string"
                }
              },
              "video/mp4": {
                "schema": {
                  "format": "binary",
                  "type": "string"
                }
              }
            },
            "description": "Video or image bytes.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Download video content",
        "tags": [
          "OpenAI Videos"
        ],
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_compatible/videos": {
      "get": {
        "description": "Lists video jobs. OpenAI providers only. Query parameters are forwarded to the provider.\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "OpenAI_list_videos_unversioned",
        "parameters": [
          {
            "description": "Maximum number of items to return; forwarded to the provider.",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Cursor: the id of the last item of the previous page.",
            "in": "query",
            "name": "after",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sort order by creation time.",
            "in": "query",
            "name": "order",
            "required": false,
            "schema": {
              "enum": [
                "asc",
                "desc"
              ],
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one. Takes precedence over the header.",
            "in": "query",
            "name": "provider_label",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenAIVideoList"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "List videos",
        "tags": [
          "OpenAI Videos"
        ],
        "x-quilr-alias-of": "/openai_compatible/v1/videos",
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      },
      "post": {
        "description": "Starts a video generation job (OpenAI or xAI). Send JSON, or multipart form data with a reference image (OpenAI only).\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "OpenAI_create_video_unversioned",
        "parameters": [
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OpenAIVideoRequest"
              }
            },
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/OpenAIVideoMultipartRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenAIVideo"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Create a video",
        "tags": [
          "OpenAI Videos"
        ],
        "x-quilr-alias-of": "/openai_compatible/v1/videos",
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_compatible/videos/edits": {
      "post": {
        "description": "Starts a video edit job. xAI providers only.\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "OpenAI_create_video_edit_unversioned",
        "parameters": [
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OpenAIVideoEditRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenAIVideo"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Edit a video",
        "tags": [
          "OpenAI Videos"
        ],
        "x-quilr-alias-of": "/openai_compatible/v1/videos/edits",
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_compatible/videos/{video_id}": {
      "delete": {
        "description": "Deletes a video. OpenAI providers only.\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "OpenAI_delete_video_unversioned",
        "parameters": [
          {
            "description": "Video id returned by the provider.",
            "in": "path",
            "name": "video_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one. Takes precedence over the header.",
            "in": "query",
            "name": "provider_label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenAIDeleted"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Delete a video",
        "tags": [
          "OpenAI Videos"
        ],
        "x-quilr-alias-of": "/openai_compatible/v1/videos/{video_id}",
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      },
      "get": {
        "description": "Returns a video job's status (OpenAI or xAI).\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "OpenAI_retrieve_video_unversioned",
        "parameters": [
          {
            "description": "Video id returned by the provider.",
            "in": "path",
            "name": "video_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one. Takes precedence over the header.",
            "in": "query",
            "name": "provider_label",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenAIVideo"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Retrieve a video job",
        "tags": [
          "OpenAI Videos"
        ],
        "x-quilr-alias-of": "/openai_compatible/v1/videos/{video_id}",
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_compatible/videos/{video_id}/content": {
      "get": {
        "description": "Streams the generated video (or a thumbnail or spritesheet) from the provider unchanged. OpenAI providers only.\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "OpenAI_download_video_content_unversioned",
        "parameters": [
          {
            "description": "Video id returned by the provider.",
            "in": "path",
            "name": "video_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Which asset to download; forwarded to the provider.",
            "in": "query",
            "name": "variant",
            "required": false,
            "schema": {
              "enum": [
                "video",
                "thumbnail",
                "spritesheet"
              ],
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one. Takes precedence over the header.",
            "in": "query",
            "name": "provider_label",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/octet-stream": {
                "schema": {
                  "format": "binary",
                  "type": "string"
                }
              },
              "image/jpeg": {
                "schema": {
                  "format": "binary",
                  "type": "string"
                }
              },
              "image/webp": {
                "schema": {
                  "format": "binary",
                  "type": "string"
                }
              },
              "video/mp4": {
                "schema": {
                  "format": "binary",
                  "type": "string"
                }
              }
            },
            "description": "Video or image bytes.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Download video content",
        "tags": [
          "OpenAI Videos"
        ],
        "x-quilr-alias-of": "/openai_compatible/v1/videos/{video_id}/content",
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      }
    },
    "/openai_realtime/openai/realtime": {
      "get": {
        "description": "Upgrades to a WebSocket and relays Realtime client and server events between the caller and the upstream session. `model` (or the Azure preview `deployment`) selects the model among those configured for the app; a transcription session (`intent=transcription`) may omit it and set its model in the session configuration. Other query parameters are forwarded upstream.\n\n**Credentials.** A credential header is read first: `Authorization: Bearer`, `api-key`, `x-api-key`, then the API-gateway key headers. Only when the handshake carries none of them, the gateway also accepts the key in the `api-key`, `api_key` or `authorization` query parameter, or in a `Sec-WebSocket-Protocol` entry `openai-insecure-api-key.<key>` (browser clients). Credentials are never forwarded upstream. Prefer a header: query-string credentials can appear in proxy access logs.\n\n**Subprotocols.** `openai-beta.realtime-v1` and `realtime` are accepted when offered.\n\n**Gateway features on this route:** model access rules, routing groups, limits, quotas and budgets. Guardrails do not scan this route.",
        "operationId": "Realtime_connect_openai",
        "parameters": [
          {
            "description": "Realtime model id or alias configured for the app. Required unless `deployment` is sent or `intent=transcription`.",
            "in": "query",
            "name": "model",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI preview form of `model`; used when `model` is absent.",
            "in": "query",
            "name": "deployment",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "`transcription` opens a transcription session.",
            "in": "query",
            "name": "intent",
            "required": false,
            "schema": {
              "enum": [
                "transcription"
              ],
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI SDKs send it; for an Azure OpenAI upstream a client value replaces the configured version.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Offered subprotocols, for example `realtime, openai-insecure-api-key.<key>`.",
            "in": "header",
            "name": "Sec-WebSocket-Protocol",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Forwarded upstream, except the retired `realtime=v1` value, which is dropped.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "101": {
            "description": "Switching Protocols: the WebSocket session is open. Messages are Realtime events as JSON text frames."
          },
          "400": {
            "description": "Missing `model`, or a model or option the upstream cannot serve. Reported after the upgrade: the gateway accepts the WebSocket, sends one Realtime `error` event (`error.type`, `error.code`, `error.message`) and closes with code 1008 and reason `<status>:<code>`."
          },
          "401": {
            "description": "Missing or invalid Quilr credential. Reported after the upgrade: the gateway accepts the WebSocket, sends one Realtime `error` event (`error.type`, `error.code`, `error.message`) and closes with code 1008 and reason `<status>:<code>`."
          },
          "403": {
            "description": "The model is not allowed for this credential, or a policy blocks the session. Reported after the upgrade: the gateway accepts the WebSocket, sends one Realtime `error` event (`error.type`, `error.code`, `error.message`) and closes with code 1008 and reason `<status>:<code>`."
          },
          "429": {
            "description": "Rate limit, concurrency limit or quota exceeded. Reported after the upgrade: the gateway accepts the WebSocket, sends one Realtime `error` event (`error.type`, `error.code`, `error.message`) and closes with code 1008 and reason `<status>:<code>`."
          },
          "500": {
            "description": "Gateway error, or the app's realtime upstream is misconfigured. Reported after the upgrade: the gateway accepts the WebSocket, sends one Realtime `error` event (`error.type`, `error.code`, `error.message`) and closes with code 1008 and reason `<status>:<code>`."
          },
          "502": {
            "description": "The upstream realtime session could not be opened. Reported after the upgrade: the gateway accepts the WebSocket, sends one Realtime `error` event (`error.type`, `error.code`, `error.message`) and closes with code 1008 and reason `<status>:<code>`."
          },
          "504": {
            "description": "The upstream realtime handshake timed out. Reported after the upgrade: the gateway accepts the WebSocket, sends one Realtime `error` event (`error.type`, `error.code`, `error.message`) and closes with code 1008 and reason `<status>:<code>`."
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Open a Realtime session (WebSocket)",
        "tags": [
          "OpenAI Realtime"
        ],
        "x-quilr-alias-of": "/openai_realtime/v1/realtime",
        "x-quilr-gateway-features": [
          "model_access",
          "group_routing",
          "limits"
        ],
        "x-quilr-websocket": true
      }
    },
    "/openai_realtime/openai/v1/realtime": {
      "get": {
        "description": "Upgrades to a WebSocket and relays Realtime client and server events between the caller and the upstream session. `model` (or the Azure preview `deployment`) selects the model among those configured for the app; a transcription session (`intent=transcription`) may omit it and set its model in the session configuration. Other query parameters are forwarded upstream.\n\n**Credentials.** A credential header is read first: `Authorization: Bearer`, `api-key`, `x-api-key`, then the API-gateway key headers. Only when the handshake carries none of them, the gateway also accepts the key in the `api-key`, `api_key` or `authorization` query parameter, or in a `Sec-WebSocket-Protocol` entry `openai-insecure-api-key.<key>` (browser clients). Credentials are never forwarded upstream. Prefer a header: query-string credentials can appear in proxy access logs.\n\n**Subprotocols.** `openai-beta.realtime-v1` and `realtime` are accepted when offered.\n\n**Gateway features on this route:** model access rules, routing groups, limits, quotas and budgets. Guardrails do not scan this route.",
        "operationId": "Realtime_connect_openai_v1",
        "parameters": [
          {
            "description": "Realtime model id or alias configured for the app. Required unless `deployment` is sent or `intent=transcription`.",
            "in": "query",
            "name": "model",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI preview form of `model`; used when `model` is absent.",
            "in": "query",
            "name": "deployment",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "`transcription` opens a transcription session.",
            "in": "query",
            "name": "intent",
            "required": false,
            "schema": {
              "enum": [
                "transcription"
              ],
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI SDKs send it; for an Azure OpenAI upstream a client value replaces the configured version.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Offered subprotocols, for example `realtime, openai-insecure-api-key.<key>`.",
            "in": "header",
            "name": "Sec-WebSocket-Protocol",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Forwarded upstream, except the retired `realtime=v1` value, which is dropped.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "101": {
            "description": "Switching Protocols: the WebSocket session is open. Messages are Realtime events as JSON text frames."
          },
          "400": {
            "description": "Missing `model`, or a model or option the upstream cannot serve. Reported after the upgrade: the gateway accepts the WebSocket, sends one Realtime `error` event (`error.type`, `error.code`, `error.message`) and closes with code 1008 and reason `<status>:<code>`."
          },
          "401": {
            "description": "Missing or invalid Quilr credential. Reported after the upgrade: the gateway accepts the WebSocket, sends one Realtime `error` event (`error.type`, `error.code`, `error.message`) and closes with code 1008 and reason `<status>:<code>`."
          },
          "403": {
            "description": "The model is not allowed for this credential, or a policy blocks the session. Reported after the upgrade: the gateway accepts the WebSocket, sends one Realtime `error` event (`error.type`, `error.code`, `error.message`) and closes with code 1008 and reason `<status>:<code>`."
          },
          "429": {
            "description": "Rate limit, concurrency limit or quota exceeded. Reported after the upgrade: the gateway accepts the WebSocket, sends one Realtime `error` event (`error.type`, `error.code`, `error.message`) and closes with code 1008 and reason `<status>:<code>`."
          },
          "500": {
            "description": "Gateway error, or the app's realtime upstream is misconfigured. Reported after the upgrade: the gateway accepts the WebSocket, sends one Realtime `error` event (`error.type`, `error.code`, `error.message`) and closes with code 1008 and reason `<status>:<code>`."
          },
          "502": {
            "description": "The upstream realtime session could not be opened. Reported after the upgrade: the gateway accepts the WebSocket, sends one Realtime `error` event (`error.type`, `error.code`, `error.message`) and closes with code 1008 and reason `<status>:<code>`."
          },
          "504": {
            "description": "The upstream realtime handshake timed out. Reported after the upgrade: the gateway accepts the WebSocket, sends one Realtime `error` event (`error.type`, `error.code`, `error.message`) and closes with code 1008 and reason `<status>:<code>`."
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Open a Realtime session (WebSocket)",
        "tags": [
          "OpenAI Realtime"
        ],
        "x-quilr-alias-of": "/openai_realtime/v1/realtime",
        "x-quilr-gateway-features": [
          "model_access",
          "group_routing",
          "limits"
        ],
        "x-quilr-websocket": true
      }
    },
    "/openai_realtime/v1/openai/realtime": {
      "get": {
        "description": "Upgrades to a WebSocket and relays Realtime client and server events between the caller and the upstream session. `model` (or the Azure preview `deployment`) selects the model among those configured for the app; a transcription session (`intent=transcription`) may omit it and set its model in the session configuration. Other query parameters are forwarded upstream.\n\n**Credentials.** A credential header is read first: `Authorization: Bearer`, `api-key`, `x-api-key`, then the API-gateway key headers. Only when the handshake carries none of them, the gateway also accepts the key in the `api-key`, `api_key` or `authorization` query parameter, or in a `Sec-WebSocket-Protocol` entry `openai-insecure-api-key.<key>` (browser clients). Credentials are never forwarded upstream. Prefer a header: query-string credentials can appear in proxy access logs.\n\n**Subprotocols.** `openai-beta.realtime-v1` and `realtime` are accepted when offered.\n\n**Gateway features on this route:** model access rules, routing groups, limits, quotas and budgets. Guardrails do not scan this route.",
        "operationId": "Realtime_connect_v1_openai",
        "parameters": [
          {
            "description": "Realtime model id or alias configured for the app. Required unless `deployment` is sent or `intent=transcription`.",
            "in": "query",
            "name": "model",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI preview form of `model`; used when `model` is absent.",
            "in": "query",
            "name": "deployment",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "`transcription` opens a transcription session.",
            "in": "query",
            "name": "intent",
            "required": false,
            "schema": {
              "enum": [
                "transcription"
              ],
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI SDKs send it; for an Azure OpenAI upstream a client value replaces the configured version.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Offered subprotocols, for example `realtime, openai-insecure-api-key.<key>`.",
            "in": "header",
            "name": "Sec-WebSocket-Protocol",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Forwarded upstream, except the retired `realtime=v1` value, which is dropped.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "101": {
            "description": "Switching Protocols: the WebSocket session is open. Messages are Realtime events as JSON text frames."
          },
          "400": {
            "description": "Missing `model`, or a model or option the upstream cannot serve. Reported after the upgrade: the gateway accepts the WebSocket, sends one Realtime `error` event (`error.type`, `error.code`, `error.message`) and closes with code 1008 and reason `<status>:<code>`."
          },
          "401": {
            "description": "Missing or invalid Quilr credential. Reported after the upgrade: the gateway accepts the WebSocket, sends one Realtime `error` event (`error.type`, `error.code`, `error.message`) and closes with code 1008 and reason `<status>:<code>`."
          },
          "403": {
            "description": "The model is not allowed for this credential, or a policy blocks the session. Reported after the upgrade: the gateway accepts the WebSocket, sends one Realtime `error` event (`error.type`, `error.code`, `error.message`) and closes with code 1008 and reason `<status>:<code>`."
          },
          "429": {
            "description": "Rate limit, concurrency limit or quota exceeded. Reported after the upgrade: the gateway accepts the WebSocket, sends one Realtime `error` event (`error.type`, `error.code`, `error.message`) and closes with code 1008 and reason `<status>:<code>`."
          },
          "500": {
            "description": "Gateway error, or the app's realtime upstream is misconfigured. Reported after the upgrade: the gateway accepts the WebSocket, sends one Realtime `error` event (`error.type`, `error.code`, `error.message`) and closes with code 1008 and reason `<status>:<code>`."
          },
          "502": {
            "description": "The upstream realtime session could not be opened. Reported after the upgrade: the gateway accepts the WebSocket, sends one Realtime `error` event (`error.type`, `error.code`, `error.message`) and closes with code 1008 and reason `<status>:<code>`."
          },
          "504": {
            "description": "The upstream realtime handshake timed out. Reported after the upgrade: the gateway accepts the WebSocket, sends one Realtime `error` event (`error.type`, `error.code`, `error.message`) and closes with code 1008 and reason `<status>:<code>`."
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Open a Realtime session (WebSocket)",
        "tags": [
          "OpenAI Realtime"
        ],
        "x-quilr-alias-of": "/openai_realtime/v1/realtime",
        "x-quilr-gateway-features": [
          "model_access",
          "group_routing",
          "limits"
        ],
        "x-quilr-websocket": true
      }
    },
    "/openai_realtime/v1/realtime": {
      "get": {
        "description": "Upgrades to a WebSocket and relays Realtime client and server events between the caller and the upstream session. `model` (or the Azure preview `deployment`) selects the model among those configured for the app; a transcription session (`intent=transcription`) may omit it and set its model in the session configuration. Other query parameters are forwarded upstream.\n\n**Credentials.** A credential header is read first: `Authorization: Bearer`, `api-key`, `x-api-key`, then the API-gateway key headers. Only when the handshake carries none of them, the gateway also accepts the key in the `api-key`, `api_key` or `authorization` query parameter, or in a `Sec-WebSocket-Protocol` entry `openai-insecure-api-key.<key>` (browser clients). Credentials are never forwarded upstream. Prefer a header: query-string credentials can appear in proxy access logs.\n\n**Subprotocols.** `openai-beta.realtime-v1` and `realtime` are accepted when offered.\n\n**Gateway features on this route:** model access rules, routing groups, limits, quotas and budgets. Guardrails do not scan this route.",
        "operationId": "Realtime_connect",
        "parameters": [
          {
            "description": "Realtime model id or alias configured for the app. Required unless `deployment` is sent or `intent=transcription`.",
            "in": "query",
            "name": "model",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI preview form of `model`; used when `model` is absent.",
            "in": "query",
            "name": "deployment",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "`transcription` opens a transcription session.",
            "in": "query",
            "name": "intent",
            "required": false,
            "schema": {
              "enum": [
                "transcription"
              ],
              "type": "string"
            }
          },
          {
            "description": "Azure OpenAI SDKs send it; for an Azure OpenAI upstream a client value replaces the configured version.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Offered subprotocols, for example `realtime, openai-insecure-api-key.<key>`.",
            "in": "header",
            "name": "Sec-WebSocket-Protocol",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Forwarded upstream, except the retired `realtime=v1` value, which is dropped.",
            "in": "header",
            "name": "OpenAI-Beta",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "101": {
            "description": "Switching Protocols: the WebSocket session is open. Messages are Realtime events as JSON text frames."
          },
          "400": {
            "description": "Missing `model`, or a model or option the upstream cannot serve. Reported after the upgrade: the gateway accepts the WebSocket, sends one Realtime `error` event (`error.type`, `error.code`, `error.message`) and closes with code 1008 and reason `<status>:<code>`."
          },
          "401": {
            "description": "Missing or invalid Quilr credential. Reported after the upgrade: the gateway accepts the WebSocket, sends one Realtime `error` event (`error.type`, `error.code`, `error.message`) and closes with code 1008 and reason `<status>:<code>`."
          },
          "403": {
            "description": "The model is not allowed for this credential, or a policy blocks the session. Reported after the upgrade: the gateway accepts the WebSocket, sends one Realtime `error` event (`error.type`, `error.code`, `error.message`) and closes with code 1008 and reason `<status>:<code>`."
          },
          "429": {
            "description": "Rate limit, concurrency limit or quota exceeded. Reported after the upgrade: the gateway accepts the WebSocket, sends one Realtime `error` event (`error.type`, `error.code`, `error.message`) and closes with code 1008 and reason `<status>:<code>`."
          },
          "500": {
            "description": "Gateway error, or the app's realtime upstream is misconfigured. Reported after the upgrade: the gateway accepts the WebSocket, sends one Realtime `error` event (`error.type`, `error.code`, `error.message`) and closes with code 1008 and reason `<status>:<code>`."
          },
          "502": {
            "description": "The upstream realtime session could not be opened. Reported after the upgrade: the gateway accepts the WebSocket, sends one Realtime `error` event (`error.type`, `error.code`, `error.message`) and closes with code 1008 and reason `<status>:<code>`."
          },
          "504": {
            "description": "The upstream realtime handshake timed out. Reported after the upgrade: the gateway accepts the WebSocket, sends one Realtime `error` event (`error.type`, `error.code`, `error.message`) and closes with code 1008 and reason `<status>:<code>`."
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Open a Realtime session (WebSocket)",
        "tags": [
          "OpenAI Realtime"
        ],
        "x-quilr-gateway-features": [
          "model_access",
          "group_routing",
          "limits"
        ],
        "x-quilr-websocket": true
      }
    },
    "/openai_responses/openai/deployments/{deployment}/responses": {
      "post": {
        "description": "Creates a model response. `model` selects the model among those configured for the app (the app's routing may choose the upstream). With `stream: true` the answer is a server-sent event stream of Responses events, ending with `response.completed` (or `response.failed` / `response.incomplete`). Guardrails can redact the input or output, or block it (400 with a guardrail code; policy and access denials are 403). Requests that depend on state held by one upstream (`previous_response_id`, `conversation`, stored prompts) stay on that upstream; when that is not possible the request fails with 400 or 409. Responses served by translation to a provider without a Responses API are not stored and cannot be retrieved later. Deployment-style path built by older Azure OpenAI SDKs; for create, the deployment name is the model when the body has none, and it is otherwise ignored.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, hallucination check (non-streaming), attachment scanning, model access rules, routing groups, content routing, failover, limits, quotas and budgets, token saving, Prompt Store, universal system prompt.",
        "operationId": "AzureOpenAI_create_response_responses",
        "parameters": [
          {
            "description": "Azure deployment name, as the SDK builds it. Used as the model only where the operation says so.",
            "in": "path",
            "name": "deployment",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sent by Azure OpenAI SDKs. Optional; client query parameters are forwarded upstream, where `api-version` replaces the configured version for an Azure OpenAI upstream and is dropped for upstreams that reject it.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "JSON object of Prompt Store variable values keyed by prompt reference, e.g. `{\"<prompt reference>\": {\"tone\": \"formal\"}}`. Fills `{{variable}}` placeholders of stored prompts.",
            "in": "header",
            "name": "X-Prompt-Variables",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AzureOpenAICreateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AzureOpenAIResponse"
                }
              },
              "text/event-stream": {
                "schema": {
                  "$ref": "#/components/schemas/AzureOpenAIStreamEvent"
                }
              }
            },
            "description": "Success; a server-sent event stream when the request asks to stream.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "409": {
            "$ref": "#/components/responses/OpenAIError409"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "415": {
            "$ref": "#/components/responses/OpenAIError415"
          },
          "422": {
            "$ref": "#/components/responses/OpenAIError422"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Create a model response",
        "tags": [
          "Azure OpenAI"
        ],
        "x-quilr-alias-of": "/openai/deployments/{deployment}/responses",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "hallucination",
          "attachments",
          "model_access",
          "group_routing",
          "context_routing",
          "failover",
          "limits",
          "token_saving",
          "prompt_store",
          "universal_system_prompt"
        ]
      }
    },
    "/openai_responses/openai/deployments/{deployment}/responses/{response_id}": {
      "delete": {
        "description": "Deletes a stored response at the upstream that created it. Deployment-style path built by older Azure OpenAI SDKs; for create, the deployment name is the model when the body has none, and it is otherwise ignored.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, hallucination check (non-streaming), attachment scanning, model access rules, routing groups, content routing, failover, limits, quotas and budgets, token saving, Prompt Store, universal system prompt.",
        "operationId": "AzureOpenAI_delete_response_responses",
        "parameters": [
          {
            "description": "Azure deployment name, as the SDK builds it. Used as the model only where the operation says so.",
            "in": "path",
            "name": "deployment",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sent by Azure OpenAI SDKs. Optional; client query parameters are forwarded upstream, where `api-version` replaces the configured version for an Azure OpenAI upstream and is dropped for upstreams that reject it.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Id of a stored response (`resp_...`).",
            "in": "path",
            "name": "response_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AzureOpenAIDeletedResponse"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "409": {
            "$ref": "#/components/responses/OpenAIError409"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "415": {
            "$ref": "#/components/responses/OpenAIError415"
          },
          "422": {
            "$ref": "#/components/responses/OpenAIError422"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Delete a stored response",
        "tags": [
          "Azure OpenAI"
        ],
        "x-quilr-alias-of": "/openai/deployments/{deployment}/responses/{response_id}",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "hallucination",
          "attachments",
          "model_access",
          "group_routing",
          "context_routing",
          "failover",
          "limits",
          "token_saving",
          "prompt_store",
          "universal_system_prompt"
        ]
      },
      "get": {
        "description": "Returns a stored response from the upstream that created it. With `stream=true` the upstream's event stream is returned as `text/event-stream`. Deployment-style path built by older Azure OpenAI SDKs; for create, the deployment name is the model when the body has none, and it is otherwise ignored.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, hallucination check (non-streaming), attachment scanning, model access rules, routing groups, content routing, failover, limits, quotas and budgets, token saving, Prompt Store, universal system prompt.",
        "operationId": "AzureOpenAI_retrieve_response_responses",
        "parameters": [
          {
            "description": "Azure deployment name, as the SDK builds it. Used as the model only where the operation says so.",
            "in": "path",
            "name": "deployment",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sent by Azure OpenAI SDKs. Optional; client query parameters are forwarded upstream, where `api-version` replaces the configured version for an Azure OpenAI upstream and is dropped for upstreams that reject it.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Id of a stored response (`resp_...`).",
            "in": "path",
            "name": "response_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Additional output data to include, for example `reasoning.encrypted_content` or `message.output_text.logprobs`. Repeat for several values. Forwarded unchanged.",
            "in": "query",
            "name": "include[]",
            "required": false,
            "schema": {
              "items": {
                "type": "string"
              },
              "type": "array"
            }
          },
          {
            "description": "Replay the response as server-sent events.",
            "in": "query",
            "name": "stream",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "description": "With `stream=true`, the event sequence number to resume after.",
            "in": "query",
            "name": "starting_after",
            "required": false,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AzureOpenAIResponse"
                }
              },
              "text/event-stream": {
                "schema": {
                  "$ref": "#/components/schemas/AzureOpenAIStreamEvent"
                }
              }
            },
            "description": "Success; server-sent events with `stream=true`.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "409": {
            "$ref": "#/components/responses/OpenAIError409"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "415": {
            "$ref": "#/components/responses/OpenAIError415"
          },
          "422": {
            "$ref": "#/components/responses/OpenAIError422"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Retrieve a stored response",
        "tags": [
          "Azure OpenAI"
        ],
        "x-quilr-alias-of": "/openai/deployments/{deployment}/responses/{response_id}",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "hallucination",
          "attachments",
          "model_access",
          "group_routing",
          "context_routing",
          "failover",
          "limits",
          "token_saving",
          "prompt_store",
          "universal_system_prompt"
        ]
      }
    },
    "/openai_responses/openai/deployments/{deployment}/responses/{response_id}/cancel": {
      "post": {
        "description": "Cancels a response created with `background: true`. No request body is needed. Deployment-style path built by older Azure OpenAI SDKs; for create, the deployment name is the model when the body has none, and it is otherwise ignored.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, hallucination check (non-streaming), attachment scanning, model access rules, routing groups, content routing, failover, limits, quotas and budgets, token saving, Prompt Store, universal system prompt.",
        "operationId": "AzureOpenAI_cancel_response_responses",
        "parameters": [
          {
            "description": "Azure deployment name, as the SDK builds it. Used as the model only where the operation says so.",
            "in": "path",
            "name": "deployment",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sent by Azure OpenAI SDKs. Optional; client query parameters are forwarded upstream, where `api-version` replaces the configured version for an Azure OpenAI upstream and is dropped for upstreams that reject it.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Id of a stored response (`resp_...`).",
            "in": "path",
            "name": "response_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AzureOpenAIResponse"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "409": {
            "$ref": "#/components/responses/OpenAIError409"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "415": {
            "$ref": "#/components/responses/OpenAIError415"
          },
          "422": {
            "$ref": "#/components/responses/OpenAIError422"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Cancel a background response",
        "tags": [
          "Azure OpenAI"
        ],
        "x-quilr-alias-of": "/openai/deployments/{deployment}/responses/{response_id}/cancel",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "hallucination",
          "attachments",
          "model_access",
          "group_routing",
          "context_routing",
          "failover",
          "limits",
          "token_saving",
          "prompt_store",
          "universal_system_prompt"
        ]
      }
    },
    "/openai_responses/openai/deployments/{deployment}/responses/{response_id}/input_items": {
      "get": {
        "description": "Lists the input items of a stored response, paginated by the upstream. Deployment-style path built by older Azure OpenAI SDKs; for create, the deployment name is the model when the body has none, and it is otherwise ignored.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, hallucination check (non-streaming), attachment scanning, model access rules, routing groups, content routing, failover, limits, quotas and budgets, token saving, Prompt Store, universal system prompt.",
        "operationId": "AzureOpenAI_list_input_items_responses",
        "parameters": [
          {
            "description": "Azure deployment name, as the SDK builds it. Used as the model only where the operation says so.",
            "in": "path",
            "name": "deployment",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sent by Azure OpenAI SDKs. Optional; client query parameters are forwarded upstream, where `api-version` replaces the configured version for an Azure OpenAI upstream and is dropped for upstreams that reject it.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Id of a stored response (`resp_...`).",
            "in": "path",
            "name": "response_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Number of items to return (1 to 100).",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "maximum": 100,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Return items after this item id.",
            "in": "query",
            "name": "after",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Return items before this item id.",
            "in": "query",
            "name": "before",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sort order.",
            "in": "query",
            "name": "order",
            "required": false,
            "schema": {
              "enum": [
                "asc",
                "desc"
              ],
              "type": "string"
            }
          },
          {
            "description": "Additional output data to include, for example `reasoning.encrypted_content` or `message.output_text.logprobs`. Repeat for several values. Forwarded unchanged.",
            "in": "query",
            "name": "include[]",
            "required": false,
            "schema": {
              "items": {
                "type": "string"
              },
              "type": "array"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AzureOpenAIInputItemList"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "409": {
            "$ref": "#/components/responses/OpenAIError409"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "415": {
            "$ref": "#/components/responses/OpenAIError415"
          },
          "422": {
            "$ref": "#/components/responses/OpenAIError422"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "List a response's input items",
        "tags": [
          "Azure OpenAI"
        ],
        "x-quilr-alias-of": "/openai/deployments/{deployment}/responses/{response_id}/input_items",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "hallucination",
          "attachments",
          "model_access",
          "group_routing",
          "context_routing",
          "failover",
          "limits",
          "token_saving",
          "prompt_store",
          "universal_system_prompt"
        ]
      }
    },
    "/openai_responses/openai/responses": {
      "post": {
        "description": "Creates a model response. `model` selects the model among those configured for the app (the app's routing may choose the upstream). With `stream: true` the answer is a server-sent event stream of Responses events, ending with `response.completed` (or `response.failed` / `response.incomplete`). Guardrails can redact the input or output, or block it (400 with a guardrail code; policy and access denials are 403). Requests that depend on state held by one upstream (`previous_response_id`, `conversation`, stored prompts) stay on that upstream; when that is not possible the request fails with 400 or 409. Responses served by translation to a provider without a Responses API are not stored and cannot be retrieved later.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, hallucination check (non-streaming), attachment scanning, model access rules, routing groups, content routing, failover, limits, quotas and budgets, token saving, Prompt Store, universal system prompt.",
        "operationId": "Responses_create_response_azure",
        "parameters": [
          {
            "description": "Sent by Azure OpenAI SDKs. Optional; forwarded upstream, where it replaces the configured version for an Azure OpenAI upstream.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "JSON object of Prompt Store variable values keyed by prompt reference, e.g. `{\"<prompt reference>\": {\"tone\": \"formal\"}}`. Fills `{{variable}}` placeholders of stored prompts.",
            "in": "header",
            "name": "X-Prompt-Variables",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ResponsesCreateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResponsesResponse"
                }
              },
              "text/event-stream": {
                "schema": {
                  "$ref": "#/components/schemas/ResponsesStreamEvent"
                }
              }
            },
            "description": "Success; a server-sent event stream when the request asks to stream.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "409": {
            "$ref": "#/components/responses/OpenAIError409"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "415": {
            "$ref": "#/components/responses/OpenAIError415"
          },
          "422": {
            "$ref": "#/components/responses/OpenAIError422"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Create a model response",
        "tags": [
          "OpenAI Responses"
        ],
        "x-quilr-alias-of": "/openai_responses/v1/responses",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "hallucination",
          "attachments",
          "model_access",
          "group_routing",
          "context_routing",
          "failover",
          "limits",
          "token_saving",
          "prompt_store",
          "universal_system_prompt"
        ]
      }
    },
    "/openai_responses/openai/responses/{response_id}": {
      "delete": {
        "description": "Deletes a stored response at the upstream that created it.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, hallucination check (non-streaming), attachment scanning, model access rules, routing groups, content routing, failover, limits, quotas and budgets, token saving, Prompt Store, universal system prompt.",
        "operationId": "Responses_delete_response_azure",
        "parameters": [
          {
            "description": "Sent by Azure OpenAI SDKs. Optional; forwarded upstream, where it replaces the configured version for an Azure OpenAI upstream.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Id of a stored response (`resp_...`).",
            "in": "path",
            "name": "response_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResponsesDeletedResponse"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "409": {
            "$ref": "#/components/responses/OpenAIError409"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "415": {
            "$ref": "#/components/responses/OpenAIError415"
          },
          "422": {
            "$ref": "#/components/responses/OpenAIError422"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Delete a stored response",
        "tags": [
          "OpenAI Responses"
        ],
        "x-quilr-alias-of": "/openai_responses/v1/responses/{response_id}",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "hallucination",
          "attachments",
          "model_access",
          "group_routing",
          "context_routing",
          "failover",
          "limits",
          "token_saving",
          "prompt_store",
          "universal_system_prompt"
        ]
      },
      "get": {
        "description": "Returns a stored response from the upstream that created it. With `stream=true` the upstream's event stream is returned as `text/event-stream`.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, hallucination check (non-streaming), attachment scanning, model access rules, routing groups, content routing, failover, limits, quotas and budgets, token saving, Prompt Store, universal system prompt.",
        "operationId": "Responses_retrieve_response_azure",
        "parameters": [
          {
            "description": "Sent by Azure OpenAI SDKs. Optional; forwarded upstream, where it replaces the configured version for an Azure OpenAI upstream.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Id of a stored response (`resp_...`).",
            "in": "path",
            "name": "response_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Additional output data to include, for example `reasoning.encrypted_content` or `message.output_text.logprobs`. Repeat for several values. Forwarded unchanged.",
            "in": "query",
            "name": "include[]",
            "required": false,
            "schema": {
              "items": {
                "type": "string"
              },
              "type": "array"
            }
          },
          {
            "description": "Replay the response as server-sent events.",
            "in": "query",
            "name": "stream",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "description": "With `stream=true`, the event sequence number to resume after.",
            "in": "query",
            "name": "starting_after",
            "required": false,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResponsesResponse"
                }
              },
              "text/event-stream": {
                "schema": {
                  "$ref": "#/components/schemas/ResponsesStreamEvent"
                }
              }
            },
            "description": "Success; server-sent events with `stream=true`.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "409": {
            "$ref": "#/components/responses/OpenAIError409"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "415": {
            "$ref": "#/components/responses/OpenAIError415"
          },
          "422": {
            "$ref": "#/components/responses/OpenAIError422"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Retrieve a stored response",
        "tags": [
          "OpenAI Responses"
        ],
        "x-quilr-alias-of": "/openai_responses/v1/responses/{response_id}",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "hallucination",
          "attachments",
          "model_access",
          "group_routing",
          "context_routing",
          "failover",
          "limits",
          "token_saving",
          "prompt_store",
          "universal_system_prompt"
        ]
      }
    },
    "/openai_responses/openai/responses/{response_id}/cancel": {
      "post": {
        "description": "Cancels a response created with `background: true`. No request body is needed.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, hallucination check (non-streaming), attachment scanning, model access rules, routing groups, content routing, failover, limits, quotas and budgets, token saving, Prompt Store, universal system prompt.",
        "operationId": "Responses_cancel_response_azure",
        "parameters": [
          {
            "description": "Sent by Azure OpenAI SDKs. Optional; forwarded upstream, where it replaces the configured version for an Azure OpenAI upstream.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Id of a stored response (`resp_...`).",
            "in": "path",
            "name": "response_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResponsesResponse"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "409": {
            "$ref": "#/components/responses/OpenAIError409"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "415": {
            "$ref": "#/components/responses/OpenAIError415"
          },
          "422": {
            "$ref": "#/components/responses/OpenAIError422"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Cancel a background response",
        "tags": [
          "OpenAI Responses"
        ],
        "x-quilr-alias-of": "/openai_responses/v1/responses/{response_id}/cancel",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "hallucination",
          "attachments",
          "model_access",
          "group_routing",
          "context_routing",
          "failover",
          "limits",
          "token_saving",
          "prompt_store",
          "universal_system_prompt"
        ]
      }
    },
    "/openai_responses/openai/responses/{response_id}/input_items": {
      "get": {
        "description": "Lists the input items of a stored response, paginated by the upstream.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, hallucination check (non-streaming), attachment scanning, model access rules, routing groups, content routing, failover, limits, quotas and budgets, token saving, Prompt Store, universal system prompt.",
        "operationId": "Responses_list_input_items_azure",
        "parameters": [
          {
            "description": "Sent by Azure OpenAI SDKs. Optional; forwarded upstream, where it replaces the configured version for an Azure OpenAI upstream.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Id of a stored response (`resp_...`).",
            "in": "path",
            "name": "response_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Number of items to return (1 to 100).",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "maximum": 100,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Return items after this item id.",
            "in": "query",
            "name": "after",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Return items before this item id.",
            "in": "query",
            "name": "before",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sort order.",
            "in": "query",
            "name": "order",
            "required": false,
            "schema": {
              "enum": [
                "asc",
                "desc"
              ],
              "type": "string"
            }
          },
          {
            "description": "Additional output data to include, for example `reasoning.encrypted_content` or `message.output_text.logprobs`. Repeat for several values. Forwarded unchanged.",
            "in": "query",
            "name": "include[]",
            "required": false,
            "schema": {
              "items": {
                "type": "string"
              },
              "type": "array"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResponsesInputItemList"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "409": {
            "$ref": "#/components/responses/OpenAIError409"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "415": {
            "$ref": "#/components/responses/OpenAIError415"
          },
          "422": {
            "$ref": "#/components/responses/OpenAIError422"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "List a response's input items",
        "tags": [
          "OpenAI Responses"
        ],
        "x-quilr-alias-of": "/openai_responses/v1/responses/{response_id}/input_items",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "hallucination",
          "attachments",
          "model_access",
          "group_routing",
          "context_routing",
          "failover",
          "limits",
          "token_saving",
          "prompt_store",
          "universal_system_prompt"
        ]
      }
    },
    "/openai_responses/v1/openai/responses": {
      "post": {
        "description": "Creates a model response. `model` selects the model among those configured for the app (the app's routing may choose the upstream). With `stream: true` the answer is a server-sent event stream of Responses events, ending with `response.completed` (or `response.failed` / `response.incomplete`). Guardrails can redact the input or output, or block it (400 with a guardrail code; policy and access denials are 403). Requests that depend on state held by one upstream (`previous_response_id`, `conversation`, stored prompts) stay on that upstream; when that is not possible the request fails with 400 or 409. Responses served by translation to a provider without a Responses API are not stored and cannot be retrieved later.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, hallucination check (non-streaming), attachment scanning, model access rules, routing groups, content routing, failover, limits, quotas and budgets, token saving, Prompt Store, universal system prompt.",
        "operationId": "Responses_create_response_azure_v1",
        "parameters": [
          {
            "description": "Sent by Azure OpenAI SDKs. Optional; forwarded upstream, where it replaces the configured version for an Azure OpenAI upstream.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "JSON object of Prompt Store variable values keyed by prompt reference, e.g. `{\"<prompt reference>\": {\"tone\": \"formal\"}}`. Fills `{{variable}}` placeholders of stored prompts.",
            "in": "header",
            "name": "X-Prompt-Variables",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ResponsesCreateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResponsesResponse"
                }
              },
              "text/event-stream": {
                "schema": {
                  "$ref": "#/components/schemas/ResponsesStreamEvent"
                }
              }
            },
            "description": "Success; a server-sent event stream when the request asks to stream.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "409": {
            "$ref": "#/components/responses/OpenAIError409"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "415": {
            "$ref": "#/components/responses/OpenAIError415"
          },
          "422": {
            "$ref": "#/components/responses/OpenAIError422"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Create a model response",
        "tags": [
          "OpenAI Responses"
        ],
        "x-quilr-alias-of": "/openai_responses/v1/responses",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "hallucination",
          "attachments",
          "model_access",
          "group_routing",
          "context_routing",
          "failover",
          "limits",
          "token_saving",
          "prompt_store",
          "universal_system_prompt"
        ]
      }
    },
    "/openai_responses/v1/openai/responses/{response_id}": {
      "delete": {
        "description": "Deletes a stored response at the upstream that created it.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, hallucination check (non-streaming), attachment scanning, model access rules, routing groups, content routing, failover, limits, quotas and budgets, token saving, Prompt Store, universal system prompt.",
        "operationId": "Responses_delete_response_azure_v1",
        "parameters": [
          {
            "description": "Sent by Azure OpenAI SDKs. Optional; forwarded upstream, where it replaces the configured version for an Azure OpenAI upstream.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Id of a stored response (`resp_...`).",
            "in": "path",
            "name": "response_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResponsesDeletedResponse"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "409": {
            "$ref": "#/components/responses/OpenAIError409"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "415": {
            "$ref": "#/components/responses/OpenAIError415"
          },
          "422": {
            "$ref": "#/components/responses/OpenAIError422"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Delete a stored response",
        "tags": [
          "OpenAI Responses"
        ],
        "x-quilr-alias-of": "/openai_responses/v1/responses/{response_id}",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "hallucination",
          "attachments",
          "model_access",
          "group_routing",
          "context_routing",
          "failover",
          "limits",
          "token_saving",
          "prompt_store",
          "universal_system_prompt"
        ]
      },
      "get": {
        "description": "Returns a stored response from the upstream that created it. With `stream=true` the upstream's event stream is returned as `text/event-stream`.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, hallucination check (non-streaming), attachment scanning, model access rules, routing groups, content routing, failover, limits, quotas and budgets, token saving, Prompt Store, universal system prompt.",
        "operationId": "Responses_retrieve_response_azure_v1",
        "parameters": [
          {
            "description": "Sent by Azure OpenAI SDKs. Optional; forwarded upstream, where it replaces the configured version for an Azure OpenAI upstream.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Id of a stored response (`resp_...`).",
            "in": "path",
            "name": "response_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Additional output data to include, for example `reasoning.encrypted_content` or `message.output_text.logprobs`. Repeat for several values. Forwarded unchanged.",
            "in": "query",
            "name": "include[]",
            "required": false,
            "schema": {
              "items": {
                "type": "string"
              },
              "type": "array"
            }
          },
          {
            "description": "Replay the response as server-sent events.",
            "in": "query",
            "name": "stream",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "description": "With `stream=true`, the event sequence number to resume after.",
            "in": "query",
            "name": "starting_after",
            "required": false,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResponsesResponse"
                }
              },
              "text/event-stream": {
                "schema": {
                  "$ref": "#/components/schemas/ResponsesStreamEvent"
                }
              }
            },
            "description": "Success; server-sent events with `stream=true`.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "409": {
            "$ref": "#/components/responses/OpenAIError409"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "415": {
            "$ref": "#/components/responses/OpenAIError415"
          },
          "422": {
            "$ref": "#/components/responses/OpenAIError422"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Retrieve a stored response",
        "tags": [
          "OpenAI Responses"
        ],
        "x-quilr-alias-of": "/openai_responses/v1/responses/{response_id}",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "hallucination",
          "attachments",
          "model_access",
          "group_routing",
          "context_routing",
          "failover",
          "limits",
          "token_saving",
          "prompt_store",
          "universal_system_prompt"
        ]
      }
    },
    "/openai_responses/v1/openai/responses/{response_id}/cancel": {
      "post": {
        "description": "Cancels a response created with `background: true`. No request body is needed.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, hallucination check (non-streaming), attachment scanning, model access rules, routing groups, content routing, failover, limits, quotas and budgets, token saving, Prompt Store, universal system prompt.",
        "operationId": "Responses_cancel_response_azure_v1",
        "parameters": [
          {
            "description": "Sent by Azure OpenAI SDKs. Optional; forwarded upstream, where it replaces the configured version for an Azure OpenAI upstream.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Id of a stored response (`resp_...`).",
            "in": "path",
            "name": "response_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResponsesResponse"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "409": {
            "$ref": "#/components/responses/OpenAIError409"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "415": {
            "$ref": "#/components/responses/OpenAIError415"
          },
          "422": {
            "$ref": "#/components/responses/OpenAIError422"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Cancel a background response",
        "tags": [
          "OpenAI Responses"
        ],
        "x-quilr-alias-of": "/openai_responses/v1/responses/{response_id}/cancel",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "hallucination",
          "attachments",
          "model_access",
          "group_routing",
          "context_routing",
          "failover",
          "limits",
          "token_saving",
          "prompt_store",
          "universal_system_prompt"
        ]
      }
    },
    "/openai_responses/v1/openai/responses/{response_id}/input_items": {
      "get": {
        "description": "Lists the input items of a stored response, paginated by the upstream.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, hallucination check (non-streaming), attachment scanning, model access rules, routing groups, content routing, failover, limits, quotas and budgets, token saving, Prompt Store, universal system prompt.",
        "operationId": "Responses_list_input_items_azure_v1",
        "parameters": [
          {
            "description": "Sent by Azure OpenAI SDKs. Optional; forwarded upstream, where it replaces the configured version for an Azure OpenAI upstream.",
            "in": "query",
            "name": "api-version",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Id of a stored response (`resp_...`).",
            "in": "path",
            "name": "response_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Number of items to return (1 to 100).",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "maximum": 100,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Return items after this item id.",
            "in": "query",
            "name": "after",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Return items before this item id.",
            "in": "query",
            "name": "before",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sort order.",
            "in": "query",
            "name": "order",
            "required": false,
            "schema": {
              "enum": [
                "asc",
                "desc"
              ],
              "type": "string"
            }
          },
          {
            "description": "Additional output data to include, for example `reasoning.encrypted_content` or `message.output_text.logprobs`. Repeat for several values. Forwarded unchanged.",
            "in": "query",
            "name": "include[]",
            "required": false,
            "schema": {
              "items": {
                "type": "string"
              },
              "type": "array"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResponsesInputItemList"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "409": {
            "$ref": "#/components/responses/OpenAIError409"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "415": {
            "$ref": "#/components/responses/OpenAIError415"
          },
          "422": {
            "$ref": "#/components/responses/OpenAIError422"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "List a response's input items",
        "tags": [
          "OpenAI Responses"
        ],
        "x-quilr-alias-of": "/openai_responses/v1/responses/{response_id}/input_items",
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "hallucination",
          "attachments",
          "model_access",
          "group_routing",
          "context_routing",
          "failover",
          "limits",
          "token_saving",
          "prompt_store",
          "universal_system_prompt"
        ]
      }
    },
    "/openai_responses/v1/quilr/usage": {
      "get": {
        "description": "Returns the quota buckets that apply to the caller's Responses requests: limit, used, remaining and reset time per bucket. Quotas grouped by user are shown only to a verified identity (a Quilr-verified JWT or a self-service key). Makes no upstream call.",
        "operationId": "Responses_get_quilr_usage",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResponsesQuilrUsage"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Read the caller's quota usage",
        "tags": [
          "OpenAI Responses"
        ]
      }
    },
    "/openai_responses/v1/responses": {
      "post": {
        "description": "Creates a model response. `model` selects the model among those configured for the app (the app's routing may choose the upstream). With `stream: true` the answer is a server-sent event stream of Responses events, ending with `response.completed` (or `response.failed` / `response.incomplete`). Guardrails can redact the input or output, or block it (400 with a guardrail code; policy and access denials are 403). Requests that depend on state held by one upstream (`previous_response_id`, `conversation`, stored prompts) stay on that upstream; when that is not possible the request fails with 400 or 409. Responses served by translation to a provider without a Responses API are not stored and cannot be retrieved later.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, hallucination check (non-streaming), attachment scanning, model access rules, routing groups, content routing, failover, limits, quotas and budgets, token saving, Prompt Store, universal system prompt.",
        "operationId": "Responses_create_response",
        "parameters": [
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "JSON object of Prompt Store variable values keyed by prompt reference, e.g. `{\"<prompt reference>\": {\"tone\": \"formal\"}}`. Fills `{{variable}}` placeholders of stored prompts.",
            "in": "header",
            "name": "X-Prompt-Variables",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ResponsesCreateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResponsesResponse"
                }
              },
              "text/event-stream": {
                "schema": {
                  "$ref": "#/components/schemas/ResponsesStreamEvent"
                }
              }
            },
            "description": "Success; a server-sent event stream when the request asks to stream.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "409": {
            "$ref": "#/components/responses/OpenAIError409"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "415": {
            "$ref": "#/components/responses/OpenAIError415"
          },
          "422": {
            "$ref": "#/components/responses/OpenAIError422"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Create a model response",
        "tags": [
          "OpenAI Responses"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "hallucination",
          "attachments",
          "model_access",
          "group_routing",
          "context_routing",
          "failover",
          "limits",
          "token_saving",
          "prompt_store",
          "universal_system_prompt"
        ]
      }
    },
    "/openai_responses/v1/responses/{response_id}": {
      "delete": {
        "description": "Deletes a stored response at the upstream that created it.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, hallucination check (non-streaming), attachment scanning, model access rules, routing groups, content routing, failover, limits, quotas and budgets, token saving, Prompt Store, universal system prompt.",
        "operationId": "Responses_delete_response",
        "parameters": [
          {
            "description": "Id of a stored response (`resp_...`).",
            "in": "path",
            "name": "response_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResponsesDeletedResponse"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "409": {
            "$ref": "#/components/responses/OpenAIError409"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "415": {
            "$ref": "#/components/responses/OpenAIError415"
          },
          "422": {
            "$ref": "#/components/responses/OpenAIError422"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Delete a stored response",
        "tags": [
          "OpenAI Responses"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "hallucination",
          "attachments",
          "model_access",
          "group_routing",
          "context_routing",
          "failover",
          "limits",
          "token_saving",
          "prompt_store",
          "universal_system_prompt"
        ]
      },
      "get": {
        "description": "Returns a stored response from the upstream that created it. With `stream=true` the upstream's event stream is returned as `text/event-stream`.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, hallucination check (non-streaming), attachment scanning, model access rules, routing groups, content routing, failover, limits, quotas and budgets, token saving, Prompt Store, universal system prompt.",
        "operationId": "Responses_retrieve_response",
        "parameters": [
          {
            "description": "Id of a stored response (`resp_...`).",
            "in": "path",
            "name": "response_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Additional output data to include, for example `reasoning.encrypted_content` or `message.output_text.logprobs`. Repeat for several values. Forwarded unchanged.",
            "in": "query",
            "name": "include[]",
            "required": false,
            "schema": {
              "items": {
                "type": "string"
              },
              "type": "array"
            }
          },
          {
            "description": "Replay the response as server-sent events.",
            "in": "query",
            "name": "stream",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "description": "With `stream=true`, the event sequence number to resume after.",
            "in": "query",
            "name": "starting_after",
            "required": false,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResponsesResponse"
                }
              },
              "text/event-stream": {
                "schema": {
                  "$ref": "#/components/schemas/ResponsesStreamEvent"
                }
              }
            },
            "description": "Success; server-sent events with `stream=true`.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "409": {
            "$ref": "#/components/responses/OpenAIError409"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "415": {
            "$ref": "#/components/responses/OpenAIError415"
          },
          "422": {
            "$ref": "#/components/responses/OpenAIError422"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Retrieve a stored response",
        "tags": [
          "OpenAI Responses"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "hallucination",
          "attachments",
          "model_access",
          "group_routing",
          "context_routing",
          "failover",
          "limits",
          "token_saving",
          "prompt_store",
          "universal_system_prompt"
        ]
      }
    },
    "/openai_responses/v1/responses/{response_id}/cancel": {
      "post": {
        "description": "Cancels a response created with `background: true`. No request body is needed.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, hallucination check (non-streaming), attachment scanning, model access rules, routing groups, content routing, failover, limits, quotas and budgets, token saving, Prompt Store, universal system prompt.",
        "operationId": "Responses_cancel_response",
        "parameters": [
          {
            "description": "Id of a stored response (`resp_...`).",
            "in": "path",
            "name": "response_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResponsesResponse"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "409": {
            "$ref": "#/components/responses/OpenAIError409"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "415": {
            "$ref": "#/components/responses/OpenAIError415"
          },
          "422": {
            "$ref": "#/components/responses/OpenAIError422"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Cancel a background response",
        "tags": [
          "OpenAI Responses"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "hallucination",
          "attachments",
          "model_access",
          "group_routing",
          "context_routing",
          "failover",
          "limits",
          "token_saving",
          "prompt_store",
          "universal_system_prompt"
        ]
      }
    },
    "/openai_responses/v1/responses/{response_id}/input_items": {
      "get": {
        "description": "Lists the input items of a stored response, paginated by the upstream.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, hallucination check (non-streaming), attachment scanning, model access rules, routing groups, content routing, failover, limits, quotas and budgets, token saving, Prompt Store, universal system prompt.",
        "operationId": "Responses_list_input_items",
        "parameters": [
          {
            "description": "Id of a stored response (`resp_...`).",
            "in": "path",
            "name": "response_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Number of items to return (1 to 100).",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "maximum": 100,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Return items after this item id.",
            "in": "query",
            "name": "after",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Return items before this item id.",
            "in": "query",
            "name": "before",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sort order.",
            "in": "query",
            "name": "order",
            "required": false,
            "schema": {
              "enum": [
                "asc",
                "desc"
              ],
              "type": "string"
            }
          },
          {
            "description": "Additional output data to include, for example `reasoning.encrypted_content` or `message.output_text.logprobs`. Repeat for several values. Forwarded unchanged.",
            "in": "query",
            "name": "include[]",
            "required": false,
            "schema": {
              "items": {
                "type": "string"
              },
              "type": "array"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResponsesInputItemList"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "409": {
            "$ref": "#/components/responses/OpenAIError409"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "415": {
            "$ref": "#/components/responses/OpenAIError415"
          },
          "422": {
            "$ref": "#/components/responses/OpenAIError422"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "List a response's input items",
        "tags": [
          "OpenAI Responses"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "hallucination",
          "attachments",
          "model_access",
          "group_routing",
          "context_routing",
          "failover",
          "limits",
          "token_saving",
          "prompt_store",
          "universal_system_prompt"
        ]
      }
    },
    "/perplexity/v1/decisions": {
      "post": {
        "description": "Answers typed questions about `state` with probabilities, using Perplexity's pplx-decider models. Text and JSON input only. Request bodies may be gzip or deflate encoded; zstd is refused with 415.\n\n**Gateway features on this route:** request guardrails, model access rules, limits, quotas and budgets.",
        "operationId": "Perplexity_create_decision",
        "parameters": [
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PerplexityDecisionsRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PerplexityDecisionsResponse"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "415": {
            "$ref": "#/components/responses/OpenAIError415"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Answer decision questions",
        "tags": [
          "Perplexity Decisions"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "model_access",
          "limits"
        ]
      }
    },
    "/perplexity/v1/embeddings": {
      "post": {
        "description": "Embeds text with the app's Perplexity embedding model and returns Perplexity's own unnormalized int8 or binary vectors. Served for Perplexity providers only; any other provider is refused with 400 `provider_not_supported_on_route`. The input is scanned by the app's request guardrails.\n\n**Gateway features on this route:** request guardrails, model access rules, failover, limits, quotas and budgets, response cache.",
        "operationId": "Perplexity_create_embeddings",
        "parameters": [
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PerplexityEmbeddingRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PerplexityEmbeddingList"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Create embeddings",
        "tags": [
          "Perplexity Embeddings"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "model_access",
          "failover",
          "limits",
          "response_cache"
        ]
      }
    },
    "/rerank/rerank": {
      "post": {
        "description": "Orders `documents` by relevance to `query`. `/rerank/rerank` and `/rerank/v2/rerank` accept the same body and return the same response. Provider errors are returned as the provider sent them.\n\n**Gateway features on this route:** request guardrails, model access rules, limits, quotas and budgets.",
        "operationId": "Rerank_rerank_unversioned",
        "parameters": [
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "example": {
                "documents": [
                  "Paris is the capital of France.",
                  "Berlin is in Germany."
                ],
                "model": "rerank-v3.5",
                "query": "What is the capital of France?",
                "top_n": 1
              },
              "schema": {
                "$ref": "#/components/schemas/RerankRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RerankResponse"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Rerank documents",
        "tags": [
          "Rerank"
        ],
        "x-quilr-alias-of": "/rerank/v1/rerank",
        "x-quilr-gateway-features": [
          "request_dlp",
          "model_access",
          "limits"
        ]
      }
    },
    "/rerank/v1/rerank": {
      "post": {
        "description": "Orders `documents` by relevance to `query`. `/rerank/rerank` and `/rerank/v2/rerank` accept the same body and return the same response. Provider errors are returned as the provider sent them.\n\n**Gateway features on this route:** request guardrails, model access rules, limits, quotas and budgets.",
        "operationId": "Rerank_rerank",
        "parameters": [
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "example": {
                "documents": [
                  "Paris is the capital of France.",
                  "Berlin is in Germany."
                ],
                "model": "rerank-v3.5",
                "query": "What is the capital of France?",
                "top_n": 1
              },
              "schema": {
                "$ref": "#/components/schemas/RerankRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RerankResponse"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Rerank documents",
        "tags": [
          "Rerank"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "model_access",
          "limits"
        ]
      }
    },
    "/rerank/v2/rerank": {
      "post": {
        "description": "Orders `documents` by relevance to `query`. `/rerank/rerank` and `/rerank/v2/rerank` accept the same body and return the same response. Provider errors are returned as the provider sent them.\n\n**Gateway features on this route:** request guardrails, model access rules, limits, quotas and budgets.",
        "operationId": "Rerank_rerank_v2",
        "parameters": [
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "example": {
                "documents": [
                  "Paris is the capital of France.",
                  "Berlin is in Germany."
                ],
                "model": "rerank-v3.5",
                "query": "What is the capital of France?",
                "top_n": 1
              },
              "schema": {
                "$ref": "#/components/schemas/RerankRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RerankResponse"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Rerank documents",
        "tags": [
          "Rerank"
        ],
        "x-quilr-alias-of": "/rerank/v1/rerank",
        "x-quilr-gateway-features": [
          "request_dlp",
          "model_access",
          "limits"
        ]
      }
    },
    "/sarvam/speech-to-text": {
      "post": {
        "description": "Transcribes an uploaded audio file (`multipart/form-data`). Every form field is forwarded to Sarvam; the transcript is scanned by guardrails before it is returned.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), model access rules, limits, quotas and budgets.",
        "operationId": "Sarvam_speech_to_text",
        "parameters": [
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/SarvamSpeechToTextRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SarvamSpeechToTextResponse"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "QuilrSarvamKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Transcribe speech",
        "tags": [
          "Sarvam"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "model_access",
          "limits"
        ]
      }
    },
    "/sarvam/speech-to-text-translate": {
      "post": {
        "description": "Transcribes an uploaded audio file (`multipart/form-data`) and translates it to English. The transcript is scanned by guardrails before it is returned.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), model access rules, limits, quotas and budgets.",
        "operationId": "Sarvam_speech_to_text_translate",
        "parameters": [
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "$ref": "#/components/schemas/SarvamSpeechToTextTranslateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SarvamSpeechToTextResponse"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "QuilrSarvamKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Transcribe and translate speech",
        "tags": [
          "Sarvam"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "model_access",
          "limits"
        ]
      }
    },
    "/sarvam/text-lid": {
      "post": {
        "description": "Returns the language and script of `input`. The input is scanned by guardrails before forwarding.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), model access rules, limits, quotas and budgets.",
        "operationId": "Sarvam_identify_language",
        "parameters": [
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SarvamTextLidRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SarvamTextLidResponse"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "QuilrSarvamKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Identify the language of text",
        "tags": [
          "Sarvam"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "model_access",
          "limits"
        ]
      }
    },
    "/sarvam/text-to-speech": {
      "post": {
        "description": "Converts `text` to speech and returns Sarvam's JSON with base64 audio. The text is scanned by guardrails before forwarding.\n\n**Gateway features on this route:** request guardrails, model access rules, limits, quotas and budgets.",
        "operationId": "Sarvam_text_to_speech",
        "parameters": [
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SarvamTextToSpeechRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SarvamTextToSpeechResponse"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "QuilrSarvamKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Synthesize speech",
        "tags": [
          "Sarvam"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "model_access",
          "limits"
        ]
      }
    },
    "/sarvam/translate": {
      "post": {
        "description": "Translates `input` between languages. The input and the translation are scanned by guardrails.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), model access rules, limits, quotas and budgets.",
        "operationId": "Sarvam_translate",
        "parameters": [
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SarvamTranslateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SarvamTranslateResponse"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "QuilrSarvamKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Translate text",
        "tags": [
          "Sarvam"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "model_access",
          "limits"
        ]
      }
    },
    "/sarvam/transliterate": {
      "post": {
        "description": "Converts `input` to another script. The input and the result are scanned by guardrails.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), model access rules, limits, quotas and budgets.",
        "operationId": "Sarvam_transliterate",
        "parameters": [
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SarvamTransliterateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SarvamTransliterateResponse"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "QuilrSarvamKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Transliterate text",
        "tags": [
          "Sarvam"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "model_access",
          "limits"
        ]
      }
    },
    "/typesafe/v1/models": {
      "get": {
        "description": "Decision models configured for the app and allowed for the caller. Makes no upstream call.",
        "operationId": "TypeSafe_list_models",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TypeSafeModelList"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "List decision models",
        "tags": [
          "TypeSafe System One"
        ]
      }
    },
    "/typesafe/v1/systemone": {
      "post": {
        "description": "Answers typed questions about `state` with probabilities. Text and JSON input only. Request bodies may be gzip or deflate encoded; zstd is refused with 415.\n\n**Gateway features on this route:** request guardrails, model access rules, limits, quotas and budgets.",
        "operationId": "TypeSafe_create_systemone_decision",
        "parameters": [
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TypeSafeSystemOneRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TypeSafeSystemOneResponse"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "415": {
            "$ref": "#/components/responses/OpenAIError415"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Answer System One decision questions",
        "tags": [
          "TypeSafe System One"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "model_access",
          "limits"
        ]
      }
    },
    "/v1/quilr/usage": {
      "get": {
        "description": "The caller's own quota buckets for this app: limit, used, remaining and reset time. Quotas grouped per person are shown only to a verified identity (a verified JWT or a self-service key).",
        "operationId": "OpenAI_get_quota_usage_root",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OpenAIQuotaUsage"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Get my quota usage",
        "tags": [
          "OpenAI Quota Usage"
        ],
        "x-quilr-alias-of": "/openai_compatible/v1/quilr/usage"
      }
    },
    "/vertex_ai/{api_version}/models/{model}:batchEmbedContents": {
      "post": {
        "description": "Gemini API `batchEmbedContents`, forwarded to the provider.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, hallucination check (non-streaming), attachment scanning, model access rules, routing groups, content routing, failover, limits, quotas and budgets, token saving, Prompt Store, universal system prompt.",
        "operationId": "Gemini_api_batch_embed_contents",
        "parameters": [
          {
            "description": "API version, forwarded to the provider: `v1`, `v1beta1` (Vertex AI) or `v1beta` (Gemini API).",
            "in": "path",
            "name": "api_version",
            "required": true,
            "schema": {
              "example": "v1",
              "pattern": "^v[0-9]+[A-Za-z0-9]*$",
              "type": "string"
            }
          },
          {
            "description": "Model id or a model alias configured for the app, e.g. `gemini-2.5-flash`.",
            "in": "path",
            "name": "model",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GeminiBatchEmbedContentsRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GeminiBatchEmbedContentsResponse"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/GoogleError400"
          },
          "401": {
            "$ref": "#/components/responses/GoogleError401"
          },
          "403": {
            "$ref": "#/components/responses/GoogleError403"
          },
          "404": {
            "$ref": "#/components/responses/GoogleError404"
          },
          "413": {
            "$ref": "#/components/responses/GoogleError413"
          },
          "415": {
            "$ref": "#/components/responses/GoogleError415"
          },
          "422": {
            "$ref": "#/components/responses/GoogleError422"
          },
          "429": {
            "$ref": "#/components/responses/GoogleError429"
          },
          "500": {
            "$ref": "#/components/responses/GoogleError500"
          },
          "502": {
            "$ref": "#/components/responses/GoogleError502"
          },
          "503": {
            "$ref": "#/components/responses/GoogleError503"
          },
          "504": {
            "$ref": "#/components/responses/GoogleError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "QuilrGoogApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Batch embed contents (Gemini API path)",
        "tags": [
          "Google Gemini and Vertex AI"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "hallucination",
          "attachments",
          "model_access",
          "group_routing",
          "context_routing",
          "failover",
          "limits",
          "token_saving",
          "prompt_store",
          "universal_system_prompt"
        ]
      }
    },
    "/vertex_ai/{api_version}/models/{model}:countTokens": {
      "post": {
        "description": "Gemini API `countTokens`, forwarded to the provider. Makes no generation call.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, hallucination check (non-streaming), attachment scanning, model access rules, routing groups, content routing, failover, limits, quotas and budgets, token saving, Prompt Store, universal system prompt.",
        "operationId": "Gemini_api_count_tokens",
        "parameters": [
          {
            "description": "API version, forwarded to the provider: `v1`, `v1beta1` (Vertex AI) or `v1beta` (Gemini API).",
            "in": "path",
            "name": "api_version",
            "required": true,
            "schema": {
              "example": "v1",
              "pattern": "^v[0-9]+[A-Za-z0-9]*$",
              "type": "string"
            }
          },
          {
            "description": "Model id or a model alias configured for the app, e.g. `gemini-2.5-flash`.",
            "in": "path",
            "name": "model",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GeminiCountTokensRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GeminiCountTokensResponse"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/GoogleError400"
          },
          "401": {
            "$ref": "#/components/responses/GoogleError401"
          },
          "403": {
            "$ref": "#/components/responses/GoogleError403"
          },
          "404": {
            "$ref": "#/components/responses/GoogleError404"
          },
          "413": {
            "$ref": "#/components/responses/GoogleError413"
          },
          "415": {
            "$ref": "#/components/responses/GoogleError415"
          },
          "422": {
            "$ref": "#/components/responses/GoogleError422"
          },
          "429": {
            "$ref": "#/components/responses/GoogleError429"
          },
          "500": {
            "$ref": "#/components/responses/GoogleError500"
          },
          "502": {
            "$ref": "#/components/responses/GoogleError502"
          },
          "503": {
            "$ref": "#/components/responses/GoogleError503"
          },
          "504": {
            "$ref": "#/components/responses/GoogleError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "QuilrGoogApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Count tokens (Gemini API path)",
        "tags": [
          "Google Gemini and Vertex AI"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "hallucination",
          "attachments",
          "model_access",
          "group_routing",
          "context_routing",
          "failover",
          "limits",
          "token_saving",
          "prompt_store",
          "universal_system_prompt"
        ]
      }
    },
    "/vertex_ai/{api_version}/models/{model}:embedContent": {
      "post": {
        "description": "Gemini API `embedContent`, forwarded to the provider.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, hallucination check (non-streaming), attachment scanning, model access rules, routing groups, content routing, failover, limits, quotas and budgets, token saving, Prompt Store, universal system prompt.",
        "operationId": "Gemini_api_embed_content",
        "parameters": [
          {
            "description": "API version, forwarded to the provider: `v1`, `v1beta1` (Vertex AI) or `v1beta` (Gemini API).",
            "in": "path",
            "name": "api_version",
            "required": true,
            "schema": {
              "example": "v1",
              "pattern": "^v[0-9]+[A-Za-z0-9]*$",
              "type": "string"
            }
          },
          {
            "description": "Model id or a model alias configured for the app, e.g. `gemini-2.5-flash`.",
            "in": "path",
            "name": "model",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GeminiEmbedContentRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GeminiEmbedContentResponse"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/GoogleError400"
          },
          "401": {
            "$ref": "#/components/responses/GoogleError401"
          },
          "403": {
            "$ref": "#/components/responses/GoogleError403"
          },
          "404": {
            "$ref": "#/components/responses/GoogleError404"
          },
          "413": {
            "$ref": "#/components/responses/GoogleError413"
          },
          "415": {
            "$ref": "#/components/responses/GoogleError415"
          },
          "422": {
            "$ref": "#/components/responses/GoogleError422"
          },
          "429": {
            "$ref": "#/components/responses/GoogleError429"
          },
          "500": {
            "$ref": "#/components/responses/GoogleError500"
          },
          "502": {
            "$ref": "#/components/responses/GoogleError502"
          },
          "503": {
            "$ref": "#/components/responses/GoogleError503"
          },
          "504": {
            "$ref": "#/components/responses/GoogleError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "QuilrGoogApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Embed content (Gemini API path)",
        "tags": [
          "Google Gemini and Vertex AI"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "hallucination",
          "attachments",
          "model_access",
          "group_routing",
          "context_routing",
          "failover",
          "limits",
          "token_saving",
          "prompt_store",
          "universal_system_prompt"
        ]
      }
    },
    "/vertex_ai/{api_version}/models/{model}:generateContent": {
      "post": {
        "description": "Gemini API `generateContent`. Runs the app's guardrails, routing and failover, then calls the provider serving the model. Query parameters other than credentials are forwarded.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, hallucination check (non-streaming), attachment scanning, model access rules, routing groups, content routing, failover, limits, quotas and budgets, token saving, Prompt Store, universal system prompt.",
        "operationId": "Gemini_api_generate_content",
        "parameters": [
          {
            "description": "API version, forwarded to the provider: `v1`, `v1beta1` (Vertex AI) or `v1beta` (Gemini API).",
            "in": "path",
            "name": "api_version",
            "required": true,
            "schema": {
              "example": "v1",
              "pattern": "^v[0-9]+[A-Za-z0-9]*$",
              "type": "string"
            }
          },
          {
            "description": "Model id or a model alias configured for the app, e.g. `gemini-2.5-flash`.",
            "in": "path",
            "name": "model",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "JSON object of Prompt Store variable values keyed by prompt reference, e.g. `{\"<prompt reference>\": {\"tone\": \"formal\"}}`. Fills `{{variable}}` placeholders of stored prompts.",
            "in": "header",
            "name": "X-Prompt-Variables",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "example": {
                "contents": [
                  {
                    "parts": [
                      {
                        "text": "Hello"
                      }
                    ],
                    "role": "user"
                  }
                ]
              },
              "schema": {
                "$ref": "#/components/schemas/GeminiGenerateContentRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GeminiGenerateContentResponse"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/GoogleError400"
          },
          "401": {
            "$ref": "#/components/responses/GoogleError401"
          },
          "403": {
            "$ref": "#/components/responses/GoogleError403"
          },
          "404": {
            "$ref": "#/components/responses/GoogleError404"
          },
          "413": {
            "$ref": "#/components/responses/GoogleError413"
          },
          "415": {
            "$ref": "#/components/responses/GoogleError415"
          },
          "422": {
            "$ref": "#/components/responses/GoogleError422"
          },
          "429": {
            "$ref": "#/components/responses/GoogleError429"
          },
          "500": {
            "$ref": "#/components/responses/GoogleError500"
          },
          "502": {
            "$ref": "#/components/responses/GoogleError502"
          },
          "503": {
            "$ref": "#/components/responses/GoogleError503"
          },
          "504": {
            "$ref": "#/components/responses/GoogleError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "QuilrGoogApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Generate content (Gemini API path)",
        "tags": [
          "Google Gemini and Vertex AI"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "hallucination",
          "attachments",
          "model_access",
          "group_routing",
          "context_routing",
          "failover",
          "limits",
          "token_saving",
          "prompt_store",
          "universal_system_prompt"
        ]
      }
    },
    "/vertex_ai/{api_version}/models/{model}:streamGenerateContent": {
      "post": {
        "description": "Gemini API `streamGenerateContent`. Runs the app's guardrails, routing and failover, then calls the provider serving the model. Query parameters other than credentials are forwarded. Send `alt=sse` for server-sent events.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, hallucination check (non-streaming), attachment scanning, model access rules, routing groups, content routing, failover, limits, quotas and budgets, token saving, Prompt Store, universal system prompt.",
        "operationId": "Gemini_api_stream_generate_content",
        "parameters": [
          {
            "description": "API version, forwarded to the provider: `v1`, `v1beta1` (Vertex AI) or `v1beta` (Gemini API).",
            "in": "path",
            "name": "api_version",
            "required": true,
            "schema": {
              "example": "v1",
              "pattern": "^v[0-9]+[A-Za-z0-9]*$",
              "type": "string"
            }
          },
          {
            "description": "Model id or a model alias configured for the app, e.g. `gemini-2.5-flash`.",
            "in": "path",
            "name": "model",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "`sse` for a server-sent event stream; otherwise the stream is one JSON array.",
            "in": "query",
            "name": "alt",
            "required": false,
            "schema": {
              "enum": [
                "sse",
                "json"
              ],
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "JSON object of Prompt Store variable values keyed by prompt reference, e.g. `{\"<prompt reference>\": {\"tone\": \"formal\"}}`. Fills `{{variable}}` placeholders of stored prompts.",
            "in": "header",
            "name": "X-Prompt-Variables",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GeminiGenerateContentRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GeminiStreamResponse"
                }
              },
              "text/event-stream": {
                "schema": {
                  "$ref": "#/components/schemas/GeminiStreamEvent"
                }
              }
            },
            "description": "Server-sent events with `alt=sse`, else one JSON array.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/GoogleError400"
          },
          "401": {
            "$ref": "#/components/responses/GoogleError401"
          },
          "403": {
            "$ref": "#/components/responses/GoogleError403"
          },
          "404": {
            "$ref": "#/components/responses/GoogleError404"
          },
          "413": {
            "$ref": "#/components/responses/GoogleError413"
          },
          "415": {
            "$ref": "#/components/responses/GoogleError415"
          },
          "422": {
            "$ref": "#/components/responses/GoogleError422"
          },
          "429": {
            "$ref": "#/components/responses/GoogleError429"
          },
          "500": {
            "$ref": "#/components/responses/GoogleError500"
          },
          "502": {
            "$ref": "#/components/responses/GoogleError502"
          },
          "503": {
            "$ref": "#/components/responses/GoogleError503"
          },
          "504": {
            "$ref": "#/components/responses/GoogleError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "QuilrGoogApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Stream generated content (Gemini API path)",
        "tags": [
          "Google Gemini and Vertex AI"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "hallucination",
          "attachments",
          "model_access",
          "group_routing",
          "context_routing",
          "failover",
          "limits",
          "token_saving",
          "prompt_store",
          "universal_system_prompt"
        ]
      }
    },
    "/vertex_ai/{api_version}/projects/{project}/locations/{location}/endpoints/openapi/chat/completions": {
      "post": {
        "description": "Vertex AI's OpenAI-compatible chat completions endpoint. The body is an OpenAI chat completions request whose `model` (for example `google/gemini-2.5-flash`) is checked against the app's models. Forwarded to the provider; with `stream: true` the provider's event stream is returned unchanged.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, hallucination check (non-streaming), attachment scanning, model access rules, routing groups, content routing, failover, limits, quotas and budgets, token saving, Prompt Store, universal system prompt.",
        "operationId": "Gemini_vertex_openapi_chat_completions",
        "parameters": [
          {
            "description": "API version, forwarded to the provider: `v1`, `v1beta1` (Vertex AI) or `v1beta` (Gemini API).",
            "in": "path",
            "name": "api_version",
            "required": true,
            "schema": {
              "example": "v1",
              "pattern": "^v[0-9]+[A-Za-z0-9]*$",
              "type": "string"
            }
          },
          {
            "description": "Google Cloud project. Accepted for SDK compatibility; the app's configured project is used.",
            "in": "path",
            "name": "project",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Region. Accepted for SDK compatibility; the app's configured location is used.",
            "in": "path",
            "name": "location",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "JSON object of Prompt Store variable values keyed by prompt reference, e.g. `{\"<prompt reference>\": {\"tone\": \"formal\"}}`. Fills `{{variable}}` placeholders of stored prompts.",
            "in": "header",
            "name": "X-Prompt-Variables",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "additionalProperties": true,
                "properties": {
                  "messages": {
                    "items": {
                      "type": "object"
                    },
                    "type": "array"
                  },
                  "model": {
                    "type": "string"
                  },
                  "stream": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "model",
                  "messages"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GeminiProviderResponse"
                }
              },
              "text/event-stream": {
                "schema": {
                  "description": "Server-sent events.",
                  "type": "string"
                }
              }
            },
            "description": "OpenAI-style chat completion, or an event stream when streaming.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/GoogleError400"
          },
          "401": {
            "$ref": "#/components/responses/GoogleError401"
          },
          "403": {
            "$ref": "#/components/responses/GoogleError403"
          },
          "404": {
            "$ref": "#/components/responses/GoogleError404"
          },
          "413": {
            "$ref": "#/components/responses/GoogleError413"
          },
          "415": {
            "$ref": "#/components/responses/GoogleError415"
          },
          "422": {
            "$ref": "#/components/responses/GoogleError422"
          },
          "429": {
            "$ref": "#/components/responses/GoogleError429"
          },
          "500": {
            "$ref": "#/components/responses/GoogleError500"
          },
          "502": {
            "$ref": "#/components/responses/GoogleError502"
          },
          "503": {
            "$ref": "#/components/responses/GoogleError503"
          },
          "504": {
            "$ref": "#/components/responses/GoogleError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "QuilrGoogApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "OpenAI-compatible chat completions on Vertex AI",
        "tags": [
          "Google Gemini and Vertex AI"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "hallucination",
          "attachments",
          "model_access",
          "group_routing",
          "context_routing",
          "failover",
          "limits",
          "token_saving",
          "prompt_store",
          "universal_system_prompt"
        ]
      }
    },
    "/vertex_ai/{api_version}/projects/{project}/locations/{location}/endpoints/{endpoint}:predict": {
      "post": {
        "description": "Vertex AI endpoint `predict`. The model is the one the app maps to this endpoint. Forwarded to the provider; the response comes back unchanged.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, hallucination check (non-streaming), attachment scanning, model access rules, routing groups, content routing, failover, limits, quotas and budgets, token saving, Prompt Store, universal system prompt.",
        "operationId": "Gemini_vertex_endpoint_predict",
        "parameters": [
          {
            "description": "API version, forwarded to the provider: `v1`, `v1beta1` (Vertex AI) or `v1beta` (Gemini API).",
            "in": "path",
            "name": "api_version",
            "required": true,
            "schema": {
              "example": "v1",
              "pattern": "^v[0-9]+[A-Za-z0-9]*$",
              "type": "string"
            }
          },
          {
            "description": "Google Cloud project. Accepted for SDK compatibility; the app's configured project is used.",
            "in": "path",
            "name": "project",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Region. Accepted for SDK compatibility; the app's configured location is used.",
            "in": "path",
            "name": "location",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Vertex AI endpoint id.",
            "in": "path",
            "name": "endpoint",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GeminiProviderRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GeminiProviderResponse"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/GoogleError400"
          },
          "401": {
            "$ref": "#/components/responses/GoogleError401"
          },
          "403": {
            "$ref": "#/components/responses/GoogleError403"
          },
          "404": {
            "$ref": "#/components/responses/GoogleError404"
          },
          "413": {
            "$ref": "#/components/responses/GoogleError413"
          },
          "415": {
            "$ref": "#/components/responses/GoogleError415"
          },
          "422": {
            "$ref": "#/components/responses/GoogleError422"
          },
          "429": {
            "$ref": "#/components/responses/GoogleError429"
          },
          "500": {
            "$ref": "#/components/responses/GoogleError500"
          },
          "502": {
            "$ref": "#/components/responses/GoogleError502"
          },
          "503": {
            "$ref": "#/components/responses/GoogleError503"
          },
          "504": {
            "$ref": "#/components/responses/GoogleError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "QuilrGoogApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Predict on a Vertex AI endpoint",
        "tags": [
          "Google Gemini and Vertex AI"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "hallucination",
          "attachments",
          "model_access",
          "group_routing",
          "context_routing",
          "failover",
          "limits",
          "token_saving",
          "prompt_store",
          "universal_system_prompt"
        ]
      }
    },
    "/vertex_ai/{api_version}/projects/{project}/locations/{location}/publishers/{publisher}/models/{model}:countTokens": {
      "post": {
        "description": "Vertex AI `countTokens`, forwarded to the provider. Makes no generation call.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, hallucination check (non-streaming), attachment scanning, model access rules, routing groups, content routing, failover, limits, quotas and budgets, token saving, Prompt Store, universal system prompt.",
        "operationId": "Gemini_vertex_count_tokens",
        "parameters": [
          {
            "description": "API version, forwarded to the provider: `v1`, `v1beta1` (Vertex AI) or `v1beta` (Gemini API).",
            "in": "path",
            "name": "api_version",
            "required": true,
            "schema": {
              "example": "v1",
              "pattern": "^v[0-9]+[A-Za-z0-9]*$",
              "type": "string"
            }
          },
          {
            "description": "Google Cloud project. Accepted for SDK compatibility; the app's configured project is used.",
            "in": "path",
            "name": "project",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Region. Accepted for SDK compatibility; the app's configured location is used.",
            "in": "path",
            "name": "location",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Model publisher: `google` for Gemini, or a partner publisher such as `anthropic` or `mistralai`.",
            "in": "path",
            "name": "publisher",
            "required": true,
            "schema": {
              "example": "google",
              "type": "string"
            }
          },
          {
            "description": "Model id or a model alias configured for the app, e.g. `gemini-2.5-flash`.",
            "in": "path",
            "name": "model",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GeminiCountTokensRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GeminiCountTokensResponse"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/GoogleError400"
          },
          "401": {
            "$ref": "#/components/responses/GoogleError401"
          },
          "403": {
            "$ref": "#/components/responses/GoogleError403"
          },
          "404": {
            "$ref": "#/components/responses/GoogleError404"
          },
          "413": {
            "$ref": "#/components/responses/GoogleError413"
          },
          "415": {
            "$ref": "#/components/responses/GoogleError415"
          },
          "422": {
            "$ref": "#/components/responses/GoogleError422"
          },
          "429": {
            "$ref": "#/components/responses/GoogleError429"
          },
          "500": {
            "$ref": "#/components/responses/GoogleError500"
          },
          "502": {
            "$ref": "#/components/responses/GoogleError502"
          },
          "503": {
            "$ref": "#/components/responses/GoogleError503"
          },
          "504": {
            "$ref": "#/components/responses/GoogleError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "QuilrGoogApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Count tokens (Vertex AI path)",
        "tags": [
          "Google Gemini and Vertex AI"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "hallucination",
          "attachments",
          "model_access",
          "group_routing",
          "context_routing",
          "failover",
          "limits",
          "token_saving",
          "prompt_store",
          "universal_system_prompt"
        ]
      }
    },
    "/vertex_ai/{api_version}/projects/{project}/locations/{location}/publishers/{publisher}/models/{model}:embedContent": {
      "post": {
        "description": "Vertex AI `embedContent`, forwarded to the provider.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, hallucination check (non-streaming), attachment scanning, model access rules, routing groups, content routing, failover, limits, quotas and budgets, token saving, Prompt Store, universal system prompt.",
        "operationId": "Gemini_vertex_embed_content",
        "parameters": [
          {
            "description": "API version, forwarded to the provider: `v1`, `v1beta1` (Vertex AI) or `v1beta` (Gemini API).",
            "in": "path",
            "name": "api_version",
            "required": true,
            "schema": {
              "example": "v1",
              "pattern": "^v[0-9]+[A-Za-z0-9]*$",
              "type": "string"
            }
          },
          {
            "description": "Google Cloud project. Accepted for SDK compatibility; the app's configured project is used.",
            "in": "path",
            "name": "project",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Region. Accepted for SDK compatibility; the app's configured location is used.",
            "in": "path",
            "name": "location",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Model publisher: `google` for Gemini, or a partner publisher such as `anthropic` or `mistralai`.",
            "in": "path",
            "name": "publisher",
            "required": true,
            "schema": {
              "example": "google",
              "type": "string"
            }
          },
          {
            "description": "Model id or a model alias configured for the app, e.g. `gemini-2.5-flash`.",
            "in": "path",
            "name": "model",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GeminiEmbedContentRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GeminiEmbedContentResponse"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/GoogleError400"
          },
          "401": {
            "$ref": "#/components/responses/GoogleError401"
          },
          "403": {
            "$ref": "#/components/responses/GoogleError403"
          },
          "404": {
            "$ref": "#/components/responses/GoogleError404"
          },
          "413": {
            "$ref": "#/components/responses/GoogleError413"
          },
          "415": {
            "$ref": "#/components/responses/GoogleError415"
          },
          "422": {
            "$ref": "#/components/responses/GoogleError422"
          },
          "429": {
            "$ref": "#/components/responses/GoogleError429"
          },
          "500": {
            "$ref": "#/components/responses/GoogleError500"
          },
          "502": {
            "$ref": "#/components/responses/GoogleError502"
          },
          "503": {
            "$ref": "#/components/responses/GoogleError503"
          },
          "504": {
            "$ref": "#/components/responses/GoogleError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "QuilrGoogApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Embed content (Vertex AI path)",
        "tags": [
          "Google Gemini and Vertex AI"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "hallucination",
          "attachments",
          "model_access",
          "group_routing",
          "context_routing",
          "failover",
          "limits",
          "token_saving",
          "prompt_store",
          "universal_system_prompt"
        ]
      }
    },
    "/vertex_ai/{api_version}/projects/{project}/locations/{location}/publishers/{publisher}/models/{model}:generateContent": {
      "post": {
        "description": "Vertex AI `generateContent`. Runs the app's guardrails, routing and failover, then calls the provider serving the model. Query parameters other than credentials are forwarded.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, hallucination check (non-streaming), attachment scanning, model access rules, routing groups, content routing, failover, limits, quotas and budgets, token saving, Prompt Store, universal system prompt.",
        "operationId": "Gemini_vertex_generate_content",
        "parameters": [
          {
            "description": "API version, forwarded to the provider: `v1`, `v1beta1` (Vertex AI) or `v1beta` (Gemini API).",
            "in": "path",
            "name": "api_version",
            "required": true,
            "schema": {
              "example": "v1",
              "pattern": "^v[0-9]+[A-Za-z0-9]*$",
              "type": "string"
            }
          },
          {
            "description": "Google Cloud project. Accepted for SDK compatibility; the app's configured project is used.",
            "in": "path",
            "name": "project",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Region. Accepted for SDK compatibility; the app's configured location is used.",
            "in": "path",
            "name": "location",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Model publisher: `google` for Gemini, or a partner publisher such as `anthropic` or `mistralai`.",
            "in": "path",
            "name": "publisher",
            "required": true,
            "schema": {
              "example": "google",
              "type": "string"
            }
          },
          {
            "description": "Model id or a model alias configured for the app, e.g. `gemini-2.5-flash`.",
            "in": "path",
            "name": "model",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "JSON object of Prompt Store variable values keyed by prompt reference, e.g. `{\"<prompt reference>\": {\"tone\": \"formal\"}}`. Fills `{{variable}}` placeholders of stored prompts.",
            "in": "header",
            "name": "X-Prompt-Variables",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "example": {
                "contents": [
                  {
                    "parts": [
                      {
                        "text": "Hello"
                      }
                    ],
                    "role": "user"
                  }
                ]
              },
              "schema": {
                "$ref": "#/components/schemas/GeminiGenerateContentRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GeminiGenerateContentResponse"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/GoogleError400"
          },
          "401": {
            "$ref": "#/components/responses/GoogleError401"
          },
          "403": {
            "$ref": "#/components/responses/GoogleError403"
          },
          "404": {
            "$ref": "#/components/responses/GoogleError404"
          },
          "413": {
            "$ref": "#/components/responses/GoogleError413"
          },
          "415": {
            "$ref": "#/components/responses/GoogleError415"
          },
          "422": {
            "$ref": "#/components/responses/GoogleError422"
          },
          "429": {
            "$ref": "#/components/responses/GoogleError429"
          },
          "500": {
            "$ref": "#/components/responses/GoogleError500"
          },
          "502": {
            "$ref": "#/components/responses/GoogleError502"
          },
          "503": {
            "$ref": "#/components/responses/GoogleError503"
          },
          "504": {
            "$ref": "#/components/responses/GoogleError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "QuilrGoogApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Generate content (Vertex AI path)",
        "tags": [
          "Google Gemini and Vertex AI"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "hallucination",
          "attachments",
          "model_access",
          "group_routing",
          "context_routing",
          "failover",
          "limits",
          "token_saving",
          "prompt_store",
          "universal_system_prompt"
        ]
      }
    },
    "/vertex_ai/{api_version}/projects/{project}/locations/{location}/publishers/{publisher}/models/{model}:predict": {
      "post": {
        "description": "Vertex AI `predict` (for example text embedding and image models). Forwarded to the provider with the app's access rules and limits.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, hallucination check (non-streaming), attachment scanning, model access rules, routing groups, content routing, failover, limits, quotas and budgets, token saving, Prompt Store, universal system prompt.",
        "operationId": "Gemini_vertex_predict",
        "parameters": [
          {
            "description": "API version, forwarded to the provider: `v1`, `v1beta1` (Vertex AI) or `v1beta` (Gemini API).",
            "in": "path",
            "name": "api_version",
            "required": true,
            "schema": {
              "example": "v1",
              "pattern": "^v[0-9]+[A-Za-z0-9]*$",
              "type": "string"
            }
          },
          {
            "description": "Google Cloud project. Accepted for SDK compatibility; the app's configured project is used.",
            "in": "path",
            "name": "project",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Region. Accepted for SDK compatibility; the app's configured location is used.",
            "in": "path",
            "name": "location",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Model publisher: `google` for Gemini, or a partner publisher such as `anthropic` or `mistralai`.",
            "in": "path",
            "name": "publisher",
            "required": true,
            "schema": {
              "example": "google",
              "type": "string"
            }
          },
          {
            "description": "Model id or a model alias configured for the app, e.g. `gemini-2.5-flash`.",
            "in": "path",
            "name": "model",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GeminiProviderRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GeminiProviderResponse"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/GoogleError400"
          },
          "401": {
            "$ref": "#/components/responses/GoogleError401"
          },
          "403": {
            "$ref": "#/components/responses/GoogleError403"
          },
          "404": {
            "$ref": "#/components/responses/GoogleError404"
          },
          "413": {
            "$ref": "#/components/responses/GoogleError413"
          },
          "415": {
            "$ref": "#/components/responses/GoogleError415"
          },
          "422": {
            "$ref": "#/components/responses/GoogleError422"
          },
          "429": {
            "$ref": "#/components/responses/GoogleError429"
          },
          "500": {
            "$ref": "#/components/responses/GoogleError500"
          },
          "502": {
            "$ref": "#/components/responses/GoogleError502"
          },
          "503": {
            "$ref": "#/components/responses/GoogleError503"
          },
          "504": {
            "$ref": "#/components/responses/GoogleError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "QuilrGoogApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Predict (publisher model)",
        "tags": [
          "Google Gemini and Vertex AI"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "hallucination",
          "attachments",
          "model_access",
          "group_routing",
          "context_routing",
          "failover",
          "limits",
          "token_saving",
          "prompt_store",
          "universal_system_prompt"
        ]
      }
    },
    "/vertex_ai/{api_version}/projects/{project}/locations/{location}/publishers/{publisher}/models/{model}:rawPredict": {
      "post": {
        "description": "Vertex AI `rawPredict` with the publisher's own body (for example Anthropic Messages for Claude on Vertex AI). Forwarded to the provider with the app's access rules and limits.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, hallucination check (non-streaming), attachment scanning, model access rules, routing groups, content routing, failover, limits, quotas and budgets, token saving, Prompt Store, universal system prompt.",
        "operationId": "Gemini_vertex_raw_predict",
        "parameters": [
          {
            "description": "API version, forwarded to the provider: `v1`, `v1beta1` (Vertex AI) or `v1beta` (Gemini API).",
            "in": "path",
            "name": "api_version",
            "required": true,
            "schema": {
              "example": "v1",
              "pattern": "^v[0-9]+[A-Za-z0-9]*$",
              "type": "string"
            }
          },
          {
            "description": "Google Cloud project. Accepted for SDK compatibility; the app's configured project is used.",
            "in": "path",
            "name": "project",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Region. Accepted for SDK compatibility; the app's configured location is used.",
            "in": "path",
            "name": "location",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Model publisher: `google` for Gemini, or a partner publisher such as `anthropic` or `mistralai`.",
            "in": "path",
            "name": "publisher",
            "required": true,
            "schema": {
              "example": "google",
              "type": "string"
            }
          },
          {
            "description": "Model id or a model alias configured for the app, e.g. `gemini-2.5-flash`.",
            "in": "path",
            "name": "model",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GeminiProviderRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GeminiProviderResponse"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/GoogleError400"
          },
          "401": {
            "$ref": "#/components/responses/GoogleError401"
          },
          "403": {
            "$ref": "#/components/responses/GoogleError403"
          },
          "404": {
            "$ref": "#/components/responses/GoogleError404"
          },
          "413": {
            "$ref": "#/components/responses/GoogleError413"
          },
          "415": {
            "$ref": "#/components/responses/GoogleError415"
          },
          "422": {
            "$ref": "#/components/responses/GoogleError422"
          },
          "429": {
            "$ref": "#/components/responses/GoogleError429"
          },
          "500": {
            "$ref": "#/components/responses/GoogleError500"
          },
          "502": {
            "$ref": "#/components/responses/GoogleError502"
          },
          "503": {
            "$ref": "#/components/responses/GoogleError503"
          },
          "504": {
            "$ref": "#/components/responses/GoogleError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "QuilrGoogApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Raw predict (publisher model)",
        "tags": [
          "Google Gemini and Vertex AI"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "hallucination",
          "attachments",
          "model_access",
          "group_routing",
          "context_routing",
          "failover",
          "limits",
          "token_saving",
          "prompt_store",
          "universal_system_prompt"
        ]
      }
    },
    "/vertex_ai/{api_version}/projects/{project}/locations/{location}/publishers/{publisher}/models/{model}:streamGenerateContent": {
      "post": {
        "description": "Vertex AI `streamGenerateContent`. Runs the app's guardrails, routing and failover, then calls the provider serving the model. Query parameters other than credentials are forwarded. Send `alt=sse` for server-sent events.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, hallucination check (non-streaming), attachment scanning, model access rules, routing groups, content routing, failover, limits, quotas and budgets, token saving, Prompt Store, universal system prompt.",
        "operationId": "Gemini_vertex_stream_generate_content",
        "parameters": [
          {
            "description": "API version, forwarded to the provider: `v1`, `v1beta1` (Vertex AI) or `v1beta` (Gemini API).",
            "in": "path",
            "name": "api_version",
            "required": true,
            "schema": {
              "example": "v1",
              "pattern": "^v[0-9]+[A-Za-z0-9]*$",
              "type": "string"
            }
          },
          {
            "description": "Google Cloud project. Accepted for SDK compatibility; the app's configured project is used.",
            "in": "path",
            "name": "project",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Region. Accepted for SDK compatibility; the app's configured location is used.",
            "in": "path",
            "name": "location",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Model publisher: `google` for Gemini, or a partner publisher such as `anthropic` or `mistralai`.",
            "in": "path",
            "name": "publisher",
            "required": true,
            "schema": {
              "example": "google",
              "type": "string"
            }
          },
          {
            "description": "Model id or a model alias configured for the app, e.g. `gemini-2.5-flash`.",
            "in": "path",
            "name": "model",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "`sse` for a server-sent event stream; otherwise the stream is one JSON array.",
            "in": "query",
            "name": "alt",
            "required": false,
            "schema": {
              "enum": [
                "sse",
                "json"
              ],
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "JSON object of Prompt Store variable values keyed by prompt reference, e.g. `{\"<prompt reference>\": {\"tone\": \"formal\"}}`. Fills `{{variable}}` placeholders of stored prompts.",
            "in": "header",
            "name": "X-Prompt-Variables",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GeminiGenerateContentRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GeminiStreamResponse"
                }
              },
              "text/event-stream": {
                "schema": {
                  "$ref": "#/components/schemas/GeminiStreamEvent"
                }
              }
            },
            "description": "Server-sent events with `alt=sse`, else one JSON array.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/GoogleError400"
          },
          "401": {
            "$ref": "#/components/responses/GoogleError401"
          },
          "403": {
            "$ref": "#/components/responses/GoogleError403"
          },
          "404": {
            "$ref": "#/components/responses/GoogleError404"
          },
          "413": {
            "$ref": "#/components/responses/GoogleError413"
          },
          "415": {
            "$ref": "#/components/responses/GoogleError415"
          },
          "422": {
            "$ref": "#/components/responses/GoogleError422"
          },
          "429": {
            "$ref": "#/components/responses/GoogleError429"
          },
          "500": {
            "$ref": "#/components/responses/GoogleError500"
          },
          "502": {
            "$ref": "#/components/responses/GoogleError502"
          },
          "503": {
            "$ref": "#/components/responses/GoogleError503"
          },
          "504": {
            "$ref": "#/components/responses/GoogleError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "QuilrGoogApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Stream generated content (Vertex AI path)",
        "tags": [
          "Google Gemini and Vertex AI"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "hallucination",
          "attachments",
          "model_access",
          "group_routing",
          "context_routing",
          "failover",
          "limits",
          "token_saving",
          "prompt_store",
          "universal_system_prompt"
        ]
      }
    },
    "/vertex_ai/{api_version}/projects/{project}/locations/{location}/publishers/{publisher}/models/{model}:streamRawPredict": {
      "post": {
        "description": "Vertex AI `streamRawPredict` with the publisher's own body; the provider's stream is returned unchanged. Forwarded to the provider with the app's access rules and limits.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, hallucination check (non-streaming), attachment scanning, model access rules, routing groups, content routing, failover, limits, quotas and budgets, token saving, Prompt Store, universal system prompt.",
        "operationId": "Gemini_vertex_stream_raw_predict",
        "parameters": [
          {
            "description": "API version, forwarded to the provider: `v1`, `v1beta1` (Vertex AI) or `v1beta` (Gemini API).",
            "in": "path",
            "name": "api_version",
            "required": true,
            "schema": {
              "example": "v1",
              "pattern": "^v[0-9]+[A-Za-z0-9]*$",
              "type": "string"
            }
          },
          {
            "description": "Google Cloud project. Accepted for SDK compatibility; the app's configured project is used.",
            "in": "path",
            "name": "project",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Region. Accepted for SDK compatibility; the app's configured location is used.",
            "in": "path",
            "name": "location",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Model publisher: `google` for Gemini, or a partner publisher such as `anthropic` or `mistralai`.",
            "in": "path",
            "name": "publisher",
            "required": true,
            "schema": {
              "example": "google",
              "type": "string"
            }
          },
          {
            "description": "Model id or a model alias configured for the app, e.g. `gemini-2.5-flash`.",
            "in": "path",
            "name": "model",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GeminiProviderRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GeminiProviderResponse"
                }
              },
              "text/event-stream": {
                "schema": {
                  "description": "Server-sent events.",
                  "type": "string"
                }
              }
            },
            "description": "Provider stream, returned unchanged.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/GoogleError400"
          },
          "401": {
            "$ref": "#/components/responses/GoogleError401"
          },
          "403": {
            "$ref": "#/components/responses/GoogleError403"
          },
          "404": {
            "$ref": "#/components/responses/GoogleError404"
          },
          "413": {
            "$ref": "#/components/responses/GoogleError413"
          },
          "415": {
            "$ref": "#/components/responses/GoogleError415"
          },
          "422": {
            "$ref": "#/components/responses/GoogleError422"
          },
          "429": {
            "$ref": "#/components/responses/GoogleError429"
          },
          "500": {
            "$ref": "#/components/responses/GoogleError500"
          },
          "502": {
            "$ref": "#/components/responses/GoogleError502"
          },
          "503": {
            "$ref": "#/components/responses/GoogleError503"
          },
          "504": {
            "$ref": "#/components/responses/GoogleError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "QuilrGoogApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Stream raw predict (publisher model)",
        "tags": [
          "Google Gemini and Vertex AI"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "hallucination",
          "attachments",
          "model_access",
          "group_routing",
          "context_routing",
          "failover",
          "limits",
          "token_saving",
          "prompt_store",
          "universal_system_prompt"
        ]
      }
    },
    "/vertexai/v1/generateContent": {
      "post": {
        "description": "Gemini `generateContent` with `model` in the body instead of the path. Runs the app's guardrails, routing and failover, then calls the provider serving the model. Query parameters other than credentials are forwarded. With `stream: true` the response is server-sent events of GenerateContentResponse objects.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, hallucination check (non-streaming), attachment scanning, model access rules, routing groups, content routing, failover, limits, quotas and budgets, token saving, Prompt Store, universal system prompt.",
        "operationId": "Gemini_generate_content_body_model",
        "parameters": [
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "JSON object of Prompt Store variable values keyed by prompt reference, e.g. `{\"<prompt reference>\": {\"tone\": \"formal\"}}`. Fills `{{variable}}` placeholders of stored prompts.",
            "in": "header",
            "name": "X-Prompt-Variables",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "example": {
                "contents": [
                  {
                    "parts": [
                      {
                        "text": "Hello"
                      }
                    ],
                    "role": "user"
                  }
                ],
                "model": "gemini-2.5-flash"
              },
              "schema": {
                "$ref": "#/components/schemas/GeminiGenerateContentBodyModelRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GeminiGenerateContentResponse"
                }
              },
              "text/event-stream": {
                "schema": {
                  "$ref": "#/components/schemas/GeminiStreamEvent"
                }
              }
            },
            "description": "Success; a server-sent event stream when the request asks to stream.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/GoogleError400"
          },
          "401": {
            "$ref": "#/components/responses/GoogleError401"
          },
          "403": {
            "$ref": "#/components/responses/GoogleError403"
          },
          "404": {
            "$ref": "#/components/responses/GoogleError404"
          },
          "413": {
            "$ref": "#/components/responses/GoogleError413"
          },
          "415": {
            "$ref": "#/components/responses/GoogleError415"
          },
          "422": {
            "$ref": "#/components/responses/GoogleError422"
          },
          "429": {
            "$ref": "#/components/responses/GoogleError429"
          },
          "500": {
            "$ref": "#/components/responses/GoogleError500"
          },
          "502": {
            "$ref": "#/components/responses/GoogleError502"
          },
          "503": {
            "$ref": "#/components/responses/GoogleError503"
          },
          "504": {
            "$ref": "#/components/responses/GoogleError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "QuilrGoogApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Generate content (model in the body)",
        "tags": [
          "Google Gemini and Vertex AI"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "hallucination",
          "attachments",
          "model_access",
          "group_routing",
          "context_routing",
          "failover",
          "limits",
          "token_saving",
          "prompt_store",
          "universal_system_prompt"
        ]
      }
    },
    "/xai/v1/batches": {
      "get": {
        "description": "Lists batch jobs, a page at a time.\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "XAI_list_batches",
        "parameters": [
          {
            "description": "Page size.",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Token from the previous page.",
            "in": "query",
            "name": "pagination_token",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one. Job ids belong to the provider that created them, so later calls must select the same one.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one. Job ids belong to the provider that created them, so later calls must select the same one. Takes precedence over the header.",
            "in": "query",
            "name": "provider_label",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/XAIBatchList"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "List batches",
        "tags": [
          "xAI Batches"
        ],
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      },
      "post": {
        "description": "Creates a batch job. Add requests with the add batch requests operation, or pass an uploaded `input_file_id`.\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "XAI_create_batch",
        "parameters": [
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one. Job ids belong to the provider that created them, so later calls must select the same one.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one. Job ids belong to the provider that created them, so later calls must select the same one. Takes precedence over the header.",
            "in": "query",
            "name": "provider_label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/XAIBatchCreateRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/XAIBatch"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Create a batch",
        "tags": [
          "xAI Batches"
        ],
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      }
    },
    "/xai/v1/batches/{batch_id}": {
      "get": {
        "description": "Returns a batch job and its request counters.\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "XAI_get_batch",
        "parameters": [
          {
            "description": "xAI batch id.",
            "in": "path",
            "name": "batch_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one. Job ids belong to the provider that created them, so later calls must select the same one.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one. Job ids belong to the provider that created them, so later calls must select the same one. Takes precedence over the header.",
            "in": "query",
            "name": "provider_label",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/XAIBatch"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Get a batch",
        "tags": [
          "xAI Batches"
        ],
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      }
    },
    "/xai/v1/batches/{batch_id}/requests": {
      "get": {
        "description": "Returns a page of a batch's requests and their states.\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "XAI_list_batch_requests",
        "parameters": [
          {
            "description": "xAI batch id.",
            "in": "path",
            "name": "batch_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Page size.",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Token from the previous page.",
            "in": "query",
            "name": "pagination_token",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one. Job ids belong to the provider that created them, so later calls must select the same one.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one. Job ids belong to the provider that created them, so later calls must select the same one. Takes precedence over the header.",
            "in": "query",
            "name": "provider_label",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/XAIBatchPage"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "List batch requests",
        "tags": [
          "xAI Batches"
        ],
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      },
      "post": {
        "description": "Adds requests to a batch job.\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "XAI_add_batch_requests",
        "parameters": [
          {
            "description": "xAI batch id.",
            "in": "path",
            "name": "batch_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one. Job ids belong to the provider that created them, so later calls must select the same one.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one. Job ids belong to the provider that created them, so later calls must select the same one. Takes precedence over the header.",
            "in": "query",
            "name": "provider_label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/XAIBatchRequestsAddRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/XAIBatchPage"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Add batch requests",
        "tags": [
          "xAI Batches"
        ],
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      }
    },
    "/xai/v1/batches/{batch_id}/results": {
      "get": {
        "description": "Returns a page of a batch's completed results.\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "XAI_list_batch_results",
        "parameters": [
          {
            "description": "xAI batch id.",
            "in": "path",
            "name": "batch_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Page size.",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Token from the previous page.",
            "in": "query",
            "name": "pagination_token",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one. Job ids belong to the provider that created them, so later calls must select the same one.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one. Job ids belong to the provider that created them, so later calls must select the same one. Takes precedence over the header.",
            "in": "query",
            "name": "provider_label",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/XAIBatchPage"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "List batch results",
        "tags": [
          "xAI Batches"
        ],
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      }
    },
    "/xai/v1/batches/{batch_id}:cancel": {
      "post": {
        "description": "Cancels a batch job's pending requests. The path ends in the literal `:cancel`. No request body.\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "XAI_cancel_batch",
        "parameters": [
          {
            "description": "xAI batch id.",
            "in": "path",
            "name": "batch_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one. Job ids belong to the provider that created them, so later calls must select the same one.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one. Job ids belong to the provider that created them, so later calls must select the same one. Takes precedence over the header.",
            "in": "query",
            "name": "provider_label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/XAIBatch"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Cancel a batch",
        "tags": [
          "xAI Batches"
        ],
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      }
    },
    "/xai/v1/images/edits": {
      "post": {
        "description": "Edits one or more images from a prompt. JSON bodies only, with images given by URL or `data:` URI.\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "XAI_edit_image",
        "parameters": [
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/XAIImageEditRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/XAIImageResponse"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Edit images",
        "tags": [
          "xAI Images and Videos"
        ],
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      }
    },
    "/xai/v1/images/generations": {
      "post": {
        "description": "Generates images from a prompt.\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "XAI_create_image",
        "parameters": [
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/XAIImageGenerationRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/XAIImageResponse"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Generate images",
        "tags": [
          "xAI Images and Videos"
        ],
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      }
    },
    "/xai/v1/responses": {
      "post": {
        "description": "Creates a model response with xAI's Responses API, including xAI server-side tools. Input is scanned by guardrails before forwarding. With `stream: true` the response is a server-sent event stream of Responses events.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, hallucination check (non-streaming), attachment scanning, model access rules, routing groups, content routing, failover, limits, quotas and budgets, token saving, Prompt Store, universal system prompt.",
        "operationId": "XAI_create_response",
        "parameters": [
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/XAIResponseRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/XAIResponse"
                }
              },
              "text/event-stream": {
                "schema": {
                  "description": "Server-sent events.",
                  "type": "string"
                }
              }
            },
            "description": "Success; a server-sent event stream when the request asks to stream.",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "409": {
            "$ref": "#/components/responses/OpenAIError409"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "415": {
            "$ref": "#/components/responses/OpenAIError415"
          },
          "422": {
            "$ref": "#/components/responses/OpenAIError422"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Create a response",
        "tags": [
          "xAI Responses"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "hallucination",
          "attachments",
          "model_access",
          "group_routing",
          "context_routing",
          "failover",
          "limits",
          "token_saving",
          "prompt_store",
          "universal_system_prompt"
        ]
      }
    },
    "/xai/v1/responses/{response_id}": {
      "delete": {
        "description": "Deletes a stored response.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, hallucination check (non-streaming), attachment scanning, model access rules, routing groups, content routing, failover, limits, quotas and budgets, token saving, Prompt Store, universal system prompt.",
        "operationId": "XAI_delete_response",
        "parameters": [
          {
            "description": "Response id.",
            "in": "path",
            "name": "response_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/XAIResponseDeleted"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "415": {
            "$ref": "#/components/responses/OpenAIError415"
          },
          "422": {
            "$ref": "#/components/responses/OpenAIError422"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Delete a response",
        "tags": [
          "xAI Responses"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "hallucination",
          "attachments",
          "model_access",
          "group_routing",
          "context_routing",
          "failover",
          "limits",
          "token_saving",
          "prompt_store",
          "universal_system_prompt"
        ]
      },
      "get": {
        "description": "Retrieves a stored response.\n\n**Gateway features on this route:** request guardrails, response guardrails (non-streaming), Guardian checks, hallucination check (non-streaming), attachment scanning, model access rules, routing groups, content routing, failover, limits, quotas and budgets, token saving, Prompt Store, universal system prompt.",
        "operationId": "XAI_get_response",
        "parameters": [
          {
            "description": "Response id.",
            "in": "path",
            "name": "response_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/XAIResponse"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "415": {
            "$ref": "#/components/responses/OpenAIError415"
          },
          "422": {
            "$ref": "#/components/responses/OpenAIError422"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Get a response",
        "tags": [
          "xAI Responses"
        ],
        "x-quilr-gateway-features": [
          "request_dlp",
          "response_dlp",
          "guardian",
          "hallucination",
          "attachments",
          "model_access",
          "group_routing",
          "context_routing",
          "failover",
          "limits",
          "token_saving",
          "prompt_store",
          "universal_system_prompt"
        ]
      }
    },
    "/xai/v1/videos/edits": {
      "post": {
        "description": "Starts an asynchronous edit of a video and returns its `request_id`.\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "XAI_edit_video",
        "parameters": [
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/XAIVideoEditRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/XAIVideoJob"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Start a video edit",
        "tags": [
          "xAI Images and Videos"
        ],
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      }
    },
    "/xai/v1/videos/extensions": {
      "post": {
        "description": "Starts an asynchronous extension of a video and returns its `request_id`.\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "XAI_extend_video",
        "parameters": [
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/XAIVideoEditRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/XAIVideoJob"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Start a video extension",
        "tags": [
          "xAI Images and Videos"
        ],
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      }
    },
    "/xai/v1/videos/generations": {
      "post": {
        "description": "Starts an asynchronous video generation job and returns its `request_id`.\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "XAI_create_video",
        "parameters": [
          {
            "description": "Email of the end user behind the request, for identity-aware policy, limits and logs. Required when the app enforces identity (401 `identity_required`); the app may restrict its domain. A verified JWT or a named self-service key carries its own identity, which this header never replaces.",
            "in": "header",
            "name": "X-User-Email",
            "required": false,
            "schema": {
              "format": "email",
              "type": "string"
            }
          },
          {
            "description": "Groups related requests into one conversation for logs, routing and session pinning (also read from `conversation-id` / `conversation_id`). Required when the app enforces conversation ids (400 `conversation_id_required`).",
            "in": "header",
            "name": "X-Conversation-Id",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to one specific provider configured on the app (its label), instead of the app's routing. Also accepted as `provider_label` in the body (or the query string on job-style routes); the selector is removed before the upstream call. An explicitly selected provider is never moved by failover.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sends the request to the app's provider of this type (for example `openai` or `bedrock`) instead of the app's routing. Also accepted as `provider` in the body. `X-Provider-Label` is more specific and wins when both are sent.",
            "in": "header",
            "name": "X-Provider-Name",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/XAIVideoGenerationRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/XAIVideoJob"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "413": {
            "$ref": "#/components/responses/OpenAIError413"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "503": {
            "$ref": "#/components/responses/OpenAIError503"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Start a video generation",
        "tags": [
          "xAI Images and Videos"
        ],
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      }
    },
    "/xai/v1/videos/{video_id}": {
      "get": {
        "description": "Returns a video job's status and, when done, the video URL.\n\n**Gateway features on this route:** model access rules, limits, quotas and budgets. Guardrails do not scan this route. Provider response headers are not relayed on this route.",
        "operationId": "XAI_get_video",
        "parameters": [
          {
            "description": "xAI video request id (`request_id` from a video job).",
            "in": "path",
            "name": "video_id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one. Job ids belong to the provider that created them, so later calls must select the same one.",
            "in": "header",
            "name": "X-Provider-Label",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Selects which of the app's configured providers serves the request when the app has more than one. Job ids belong to the provider that created them, so later calls must select the same one. Takes precedence over the header.",
            "in": "query",
            "name": "provider_label",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/XAIVideo"
                }
              }
            },
            "description": "Success",
            "headers": {
              "Age": {
                "$ref": "#/components/headers/Age"
              },
              "RateLimit": {
                "$ref": "#/components/headers/RateLimit"
              },
              "RateLimit-Policy": {
                "$ref": "#/components/headers/RateLimit-Policy"
              },
              "X-Quilr-Attempts": {
                "$ref": "#/components/headers/X-Quilr-Attempts"
              },
              "X-Quilr-Budget-Overflow": {
                "$ref": "#/components/headers/X-Quilr-Budget-Overflow"
              },
              "X-Quilr-Cache": {
                "$ref": "#/components/headers/X-Quilr-Cache"
              },
              "X-Quilr-Failover": {
                "$ref": "#/components/headers/X-Quilr-Failover"
              },
              "X-Quilr-Quota-Remaining": {
                "$ref": "#/components/headers/X-Quilr-Quota-Remaining"
              },
              "X-Quilr-Quota-Reset": {
                "$ref": "#/components/headers/X-Quilr-Quota-Reset"
              },
              "X-Quilr-Quota-Scope": {
                "$ref": "#/components/headers/X-Quilr-Quota-Scope"
              },
              "X-Quilr-Quota-Warning": {
                "$ref": "#/components/headers/X-Quilr-Quota-Warning"
              },
              "X-Quilr-Request-ID": {
                "$ref": "#/components/headers/X-Quilr-Request-ID"
              },
              "X-Quilr-Route": {
                "$ref": "#/components/headers/X-Quilr-Route"
              },
              "X-Quilr-Served-Model": {
                "$ref": "#/components/headers/X-Quilr-Served-Model"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/OpenAIError400"
          },
          "401": {
            "$ref": "#/components/responses/OpenAIError401"
          },
          "403": {
            "$ref": "#/components/responses/OpenAIError403"
          },
          "404": {
            "$ref": "#/components/responses/OpenAIError404"
          },
          "429": {
            "$ref": "#/components/responses/OpenAIError429"
          },
          "500": {
            "$ref": "#/components/responses/OpenAIError500"
          },
          "502": {
            "$ref": "#/components/responses/OpenAIError502"
          },
          "504": {
            "$ref": "#/components/responses/OpenAIError504"
          }
        },
        "security": [
          {
            "QuilrBearer": []
          },
          {
            "QuilrApiKeyHeader": []
          },
          {
            "QuilrXApiKey": []
          },
          {
            "KongApiKey": []
          },
          {
            "ApimSubscriptionKey": []
          },
          {
            "ApigeeApiKey": []
          }
        ],
        "summary": "Get a video job",
        "tags": [
          "xAI Images and Videos"
        ],
        "x-quilr-gateway-features": [
          "model_access",
          "limits"
        ]
      }
    }
  },
  "servers": [
    {
      "description": "Quilr-hosted gateway. Set `region` to the region your organization uses before importing (or request the document with `region`). For a dedicated or on-premises gateway, replace the URL with your gateway's.",
      "url": "https://{region}.quilr.ai",
      "variables": {
        "region": {
          "default": "guardrails-usa-1",
          "description": "`guardrails-usa-1`: USA 1 (US Central West); `guardrails-usa-2`: USA 2 (US East); `guardrails-europe-1`: Europe; `guardrails-india-1`: India 1 (Mumbai); `guardrails-india-2`: India 2 (Mumbai); `guardrails-jp-1`: Japan (Tokyo); `guardrails`: Global",
          "enum": [
            "guardrails-usa-1",
            "guardrails-usa-2",
            "guardrails-europe-1",
            "guardrails-india-1",
            "guardrails-india-2",
            "guardrails-jp-1",
            "guardrails"
          ]
        }
      }
    }
  ],
  "tags": [
    {
      "description": "Chat completions and legacy text completions, streaming or not.",
      "name": "OpenAI Chat and Completions"
    },
    {
      "description": "Vector embeddings.",
      "name": "OpenAI Embeddings"
    },
    {
      "description": "Text to speech, transcription and translation.",
      "name": "OpenAI Audio"
    },
    {
      "description": "Image generation, edits and variations.",
      "name": "OpenAI Images"
    },
    {
      "description": "Content moderation and document OCR.",
      "name": "OpenAI Moderations and OCR"
    },
    {
      "description": "File upload and management. File ids belong to the provider that created them; later calls must reach the same provider. Off by default: answers 404 `endpoint_not_enabled` unless enabled for the gateway deployment.",
      "name": "OpenAI Files"
    },
    {
      "description": "Asynchronous batch jobs. Batch ids belong to the provider that created them. Off by default: answers 404 `endpoint_not_enabled` unless enabled for the gateway deployment.",
      "name": "OpenAI Batches"
    },
    {
      "description": "Video generation jobs and downloads. Off by default: answers 404 `endpoint_not_enabled` unless enabled for the gateway deployment.",
      "name": "OpenAI Videos"
    },
    {
      "description": "Decision models: typed questions about an input answered with probabilities.",
      "name": "OpenAI Decisions"
    },
    {
      "description": "Models configured for the app. Makes no upstream call.",
      "name": "OpenAI Models"
    },
    {
      "description": "The caller's own quota usage.",
      "name": "OpenAI Quota Usage"
    },
    {
      "description": "OpenAI Responses API: create a model response (optionally streamed), then retrieve, cancel, delete it or list its input items. Point the OpenAI SDK at `<gateway>/openai_responses/v1`. The current Azure OpenAI SDK (`azure_endpoint=<gateway>/openai_responses` or `<gateway>/openai_responses/v1`) builds the `/openai/responses` aliases. A create runs the app's guardrails, routing, failover and limits; retrieve, cancel, delete and input item listing go to the upstream that stores the response, with the client's query string forwarded unchanged.",
      "name": "OpenAI Responses"
    },
    {
      "description": "Azure OpenAI deployment-style API: chat completions, embeddings, audio and Responses under `/openai/deployments/{deployment}/...`. Point the Azure OpenAI SDK's `azure_endpoint` at the gateway (`<gateway>`, `<gateway>/openai_compatible` or `<gateway>/openai_compatible/v1`; for Responses also `<gateway>/openai_responses`). The Quilr key goes in `api-key` (or `Authorization: Bearer`). The `{deployment}` path segment is accepted so SDK URLs resolve; the model is the body's `model` field, and for chat completions and Responses the deployment name is used as the model when the body has none. The app's routing chooses the upstream, which does not have to be Azure OpenAI.",
      "name": "Azure OpenAI"
    },
    {
      "description": "OpenAI Realtime API: a WebSocket session relayed to the app's OpenAI or Azure OpenAI realtime upstream. Point the OpenAI SDK at `wss://<gateway>/openai_realtime/v1` (or the AzureOpenAI SDK's `azure_endpoint` at `<gateway>/openai_realtime`). Every path is a WebSocket upgrade (`x-quilr-websocket: true`): route it with the `ws`/`wss` protocols and no response buffering.",
      "name": "OpenAI Realtime"
    },
    {
      "description": "The OpenAI Assistants API (v2): assistants, threads, messages, runs and run steps. Point the OpenAI SDK at `<gateway>/openai_assistants/v1`, or the AzureOpenAI SDK at `<gateway>/openai_assistants` (or `<gateway>/openai_assistants/v1`). Each call is forwarded to the app's Assistants provider. Guardrails scan user content sent in threads, messages, runs and tool outputs, and scan message contents, run tool-call arguments and run step details read back. Assistant and run instructions are not scanned. Assistant, thread and run ids belong to the provider that created them, so later calls must use the same app.",
      "name": "OpenAI Assistants"
    },
    {
      "description": "Anthropic Messages API: messages, token counting and model discovery in Anthropic's own wire format. Point the Anthropic SDK or Claude Code at `<gateway>/anthropic_messages` (the SDK appends `/v1/...`). The app decides which provider serves the model (Anthropic, Azure, AWS Bedrock, or another provider the gateway translates to). Errors use the Anthropic error envelope.",
      "name": "Anthropic Messages"
    },
    {
      "description": "AWS Bedrock Runtime API (Converse, ConverseStream, InvokeModel, InvokeModelWithResponseStream) in AWS's own wire format. Configure boto3 or an AWS SDK with `endpoint_url=<gateway>` (or `<gateway>/bedrock-runtime`) and the Quilr API key as both the access key id and the secret access key, or send the Quilr key as a Bedrock API key (`Authorization: Bearer`). The region in the signature is not used for routing; the app decides the upstream.\n\nSigV4 signatures cover the Host header, the path, the query and the body hash. An API gateway in front must forward the original Host (Kong: `preserve_host: true`), must not strip or rewrite the path, and must not change the body or signed headers. Streaming operations return `application/vnd.amazon.eventstream`; disable response buffering for them.",
      "name": "AWS Bedrock Runtime"
    },
    {
      "description": "Google Gemini and Vertex AI APIs in Google's own wire format. Point the Vertex AI or google-genai SDK at `<gateway>/vertex_ai` and it appends the native resource path, for example `v1/projects/{project}/locations/{location}/publishers/google/models/{model}:generateContent`. The project and location in the path are accepted but not used: the app's configuration decides the upstream project, location and credentials. `generateContent` and `streamGenerateContent` run the app's guardrails, routing and failover; every other method is forwarded to the provider with the app's access rules, limits and best-effort guardrails, and its response comes back unchanged.\n\n**Path matching.** Every `POST` under `/vertex_ai/` is accepted when it has the shape `[{api_version}/][projects/{project}/locations/{location}/]` followed by `publishers/{publisher}/models/{model}:{method}`, `models/{model}:{method}`, `endpoints/{endpoint}:{method}` or `endpoints/{endpoint}/{sub_path}`; the version and the project and location prefix are optional. The operations below document the common methods only. In an API gateway, route `/vertex_ai/` as a prefix (Kong: one route with `paths: [\"/vertex_ai/\"]`, `strip_path: false`) rather than one route per operation, so other methods and versions keep working.\n\n**Streaming.** `streamGenerateContent` returns server-sent events with `?alt=sse` (what the SDKs send), otherwise one JSON array of responses. Errors use the Google error envelope.",
      "name": "Google Gemini and Vertex AI"
    },
    {
      "description": "Cohere-compatible document reranking. One request and response shape serves every rerank provider the app is configured with (Cohere, Bedrock rerank models, Jina, Voyage AI, or a self-hosted Cohere-shaped endpoint). Point the Cohere SDK at `<gateway>/rerank`. The query and documents are scanned by guardrails before forwarding.",
      "name": "Rerank"
    },
    {
      "description": "Mistral's own OCR and fill-in-the-middle (FIM) APIs, in Mistral's request and response format, served for the app's Mistral provider. Point the Mistral SDK at `<gateway>/mistral`. Request bodies are forwarded unchanged, so every Mistral field is available.",
      "name": "Mistral"
    },
    {
      "description": "xAI image generation and editing, and video generation, editing and extension jobs.",
      "name": "xAI Images and Videos"
    },
    {
      "description": "xAI batch jobs: create, add requests, poll and read results.",
      "name": "xAI Batches"
    },
    {
      "description": "xAI's Responses API, including xAI server-side tools.",
      "name": "xAI Responses"
    },
    {
      "description": "Sarvam's own speech-to-text, text-to-speech, translation, transliteration and language identification APIs, in Sarvam's request and response format, served for the app's Sarvam provider. Point the Sarvam SDK at `<gateway>/sarvam`; its `api-subscription-key` header carries the Quilr API key. Text and transcripts are scanned by guardrails; a blocked request answers 400.",
      "name": "Sarvam"
    },
    {
      "description": "TypeSafe System One decision models: typed questions about an input answered with probabilities. Point the TypeSafe SDK at `<gateway>/typesafe`.",
      "name": "TypeSafe System One"
    },
    {
      "description": "pplx-decider decision models in System One format.",
      "name": "Perplexity Decisions"
    },
    {
      "description": "pplx-embed models with Perplexity's int8 and binary encodings.",
      "name": "Perplexity Embeddings"
    },
    {
      "description": "Download this document.",
      "name": "Specification"
    }
  ],
  "x-quilr-error-codes": [
    {
      "code": "missing_api_key",
      "description": "No gateway API key was sent.",
      "group": "authentication",
      "source": "gateway",
      "status": 401
    },
    {
      "also_sent_by_providers": true,
      "code": "invalid_api_key",
      "description": "The gateway API key is unknown or revoked, or its app is disabled.",
      "group": "authentication",
      "source": "gateway",
      "status": 401
    },
    {
      "code": "expired_api_key",
      "description": "The self-service API key has expired.",
      "group": "authentication",
      "source": "gateway",
      "status": 401
    },
    {
      "code": "jwt_auth_failed",
      "description": "The bearer token could not be verified.",
      "group": "authentication",
      "source": "gateway",
      "status": 401
    },
    {
      "code": "self_service_identity_required",
      "description": "A self-service app accepts only its own Quilr API keys.",
      "group": "authentication",
      "source": "gateway",
      "status": 401
    },
    {
      "code": "missing_provider",
      "description": "The app has no provider configured.",
      "group": "configuration",
      "source": "gateway",
      "status": 500
    },
    {
      "code": "missing_provider_key",
      "description": "The provider has no credential configured.",
      "group": "configuration",
      "source": "gateway",
      "status": 500
    },
    {
      "code": "unsupported_provider",
      "description": "The app's provider cannot serve this API.",
      "group": "configuration",
      "source": "gateway",
      "status": 400
    },
    {
      "code": "provider_not_configured",
      "description": "The requested provider is not configured for this app.",
      "group": "configuration",
      "source": "gateway",
      "status": 400
    },
    {
      "code": "sdk_mode_required",
      "description": "This endpoint requires a Quilr SDK app key.",
      "group": "configuration",
      "source": "gateway",
      "status": 403
    },
    {
      "code": "internal_error",
      "description": "An unexpected gateway error.",
      "group": "configuration",
      "source": "gateway",
      "status": 500
    },
    {
      "code": "policy_access_denied",
      "description": "A Policy Engine rule denied the request.",
      "group": "access",
      "source": "gateway",
      "status": 403
    },
    {
      "code": "policy_model_denied",
      "description": "The model is on a rejected-models list.",
      "group": "access",
      "source": "gateway",
      "status": 403
    },
    {
      "code": "policy_model_not_allowed",
      "description": "The model is outside the allowed-models list that applies.",
      "group": "access",
      "source": "gateway",
      "status": 403
    },
    {
      "code": "model_access_denied",
      "description": "The model is not enabled for this app.",
      "group": "access",
      "source": "gateway",
      "status": 403
    },
    {
      "code": "policy_tool_access_denied",
      "description": "A Policy Engine rule denied a tool call.",
      "group": "access",
      "source": "gateway",
      "status": 403
    },
    {
      "code": "source_ip_not_allowed",
      "description": "The client IP address is not allowed.",
      "group": "access",
      "source": "gateway",
      "status": 403
    },
    {
      "code": "policy_source_ip_denied",
      "description": "A Policy Engine rule denied the client IP address.",
      "group": "access",
      "source": "gateway",
      "status": 403
    },
    {
      "code": "policy_provider_unsupported",
      "description": "The routed provider cannot serve this request.",
      "group": "access",
      "source": "gateway",
      "status": 403
    },
    {
      "code": "policy_routing_group_wrong_surface",
      "description": "The routing group cannot serve this API.",
      "group": "access",
      "source": "gateway",
      "status": 403
    },
    {
      "code": "policy_routing_group_not_defined",
      "description": "The requested routing group is not defined.",
      "group": "access",
      "source": "gateway",
      "status": 403
    },
    {
      "code": "policy_configuration_error",
      "description": "The published policy cannot be applied.",
      "group": "access",
      "source": "gateway",
      "status": 500
    },
    {
      "code": "policy_evaluation_error",
      "description": "The policy could not be evaluated.",
      "group": "access",
      "source": "gateway",
      "status": 500
    },
    {
      "code": "identity_check_failed",
      "description": "The user identity could not be verified.",
      "group": "identity",
      "source": "gateway",
      "status": 401
    },
    {
      "code": "identity_required",
      "description": "The app requires a user identity.",
      "group": "identity",
      "source": "gateway",
      "status": 401
    },
    {
      "code": "conversation_id_required",
      "description": "The app requires a conversation id.",
      "group": "identity",
      "source": "gateway",
      "status": 400
    },
    {
      "code": "system_prompt_not_from_store",
      "description": "The system prompt does not come from the Prompt Store.",
      "group": "prompt_store",
      "source": "gateway",
      "status": 400
    },
    {
      "code": "prompt_store_not_configured",
      "description": "The Prompt Store is not configured for this app.",
      "group": "prompt_store",
      "source": "gateway",
      "status": 400
    },
    {
      "code": "prompt_store_error",
      "description": "The Prompt Store prompt could not be used.",
      "group": "prompt_store",
      "source": "gateway",
      "status": 400
    },
    {
      "code": "invalid_prompt_variables",
      "description": "The Prompt Store variables are invalid.",
      "group": "prompt_store",
      "source": "gateway",
      "status": 400
    },
    {
      "code": "invalid_json",
      "description": "The request body is not valid JSON.",
      "group": "request",
      "source": "gateway",
      "status": 400
    },
    {
      "code": "missing_required_parameter",
      "description": "A required request parameter is missing.",
      "group": "request",
      "source": "gateway",
      "status": 400
    },
    {
      "code": "invalid_extra_body",
      "description": "The extra_body parameter is invalid.",
      "group": "request",
      "source": "gateway",
      "status": 400
    },
    {
      "code": "invalid_request",
      "description": "The request is invalid for the provider adapter.",
      "group": "request",
      "source": "gateway",
      "status": 400
    },
    {
      "also_sent_by_providers": true,
      "code": "model_not_found",
      "description": "The app does not offer the requested model.",
      "group": "request",
      "source": "gateway",
      "status": 404
    },
    {
      "also_sent_by_providers": true,
      "code": "rate_limit_exceeded",
      "description": "The app's request rate limit was reached.",
      "group": "limits",
      "source": "gateway",
      "status": 429
    },
    {
      "code": "concurrency_limit_exceeded",
      "description": "The app's concurrency limit was reached.",
      "group": "limits",
      "source": "gateway",
      "status": 429
    },
    {
      "code": "input_token_limit_exceeded",
      "description": "The app's input-token limit was reached.",
      "group": "limits",
      "source": "gateway",
      "status": 429
    },
    {
      "code": "output_token_limit_exceeded",
      "description": "The app's output-token limit was reached.",
      "group": "limits",
      "source": "gateway",
      "status": 429
    },
    {
      "code": "max_tokens_per_request_exceeded",
      "description": "The request asks for more tokens than one request may use.",
      "group": "limits",
      "source": "gateway",
      "status": 400
    },
    {
      "code": "max_tokens_exceeded",
      "description": "The request asks for more tokens than one request may use (Messages).",
      "group": "limits",
      "source": "gateway",
      "status": 400
    },
    {
      "code": "model_rate_limit_exceeded",
      "description": "The model's request rate limit was reached.",
      "group": "limits",
      "source": "gateway",
      "status": 429
    },
    {
      "code": "model_concurrency_limit_exceeded",
      "description": "The model's concurrency limit was reached.",
      "group": "limits",
      "source": "gateway",
      "status": 429
    },
    {
      "code": "model_input_token_limit_exceeded",
      "description": "The model's input-token limit was reached.",
      "group": "limits",
      "source": "gateway",
      "status": 429
    },
    {
      "code": "model_output_token_limit_exceeded",
      "description": "The model's output-token limit was reached.",
      "group": "limits",
      "source": "gateway",
      "status": 429
    },
    {
      "code": "model_max_tokens_per_request_exceeded",
      "description": "The request asks for more tokens than the model allows per request.",
      "group": "limits",
      "source": "gateway",
      "status": 400
    },
    {
      "code": "rate_or_token_limit_exceeded",
      "description": "A rate or token limit was reached (Bedrock).",
      "group": "limits",
      "source": "gateway",
      "status": 429
    },
    {
      "code": "limit_exceeded",
      "description": "A usage limit was reached.",
      "group": "limits",
      "source": "gateway",
      "status": 429
    },
    {
      "code": "quota_exceeded",
      "description": "A usage quota or budget is exhausted.",
      "group": "quota",
      "source": "gateway",
      "status": 429
    },
    {
      "code": "quota_price_unavailable",
      "description": "The model has no price for a spend budget.",
      "group": "quota",
      "source": "gateway",
      "status": 403
    },
    {
      "code": "quota_usage_unavailable",
      "description": "The route cannot measure a quota's usage.",
      "group": "quota",
      "source": "gateway",
      "status": 503
    },
    {
      "code": "quota_accounting_error",
      "description": "Quota usage could not be recorded.",
      "group": "quota",
      "source": "gateway",
      "status": 503
    },
    {
      "code": "sensitive_data_blocked",
      "description": "Sensitive data was detected and blocked.",
      "group": "guardrails",
      "source": "gateway",
      "status": 400
    },
    {
      "code": "adversarial_content_blocked",
      "description": "Adversarial content (prompt attack) was blocked.",
      "group": "guardrails",
      "source": "gateway",
      "status": 400
    },
    {
      "code": "custom_intent_blocked",
      "description": "A custom intent was detected and blocked.",
      "group": "guardrails",
      "source": "gateway",
      "status": 400
    },
    {
      "code": "language_blocked",
      "description": "The language of the content is blocked.",
      "group": "guardrails",
      "source": "gateway",
      "status": 400
    },
    {
      "code": "guardian_task_adherence_blocked",
      "description": "Guardian blocked a request outside the app's task.",
      "group": "guardrails",
      "source": "gateway",
      "status": 400
    },
    {
      "code": "hallucination_blocked",
      "description": "The response was blocked as a likely hallucination.",
      "group": "guardrails",
      "source": "gateway",
      "status": 400
    },
    {
      "code": "all_targets_unavailable",
      "description": "No provider target could take the request.",
      "group": "routing",
      "source": "gateway",
      "status": 503
    },
    {
      "code": "embedding_dimension_mismatch",
      "description": "A failover target returned embeddings of a different size.",
      "group": "routing",
      "source": "gateway",
      "status": 502
    },
    {
      "code": "routing_constraint_unsatisfied",
      "description": "No allowed target satisfies the request's routing constraints.",
      "group": "routing",
      "source": "gateway",
      "status": 403
    },
    {
      "code": "routing_state_bound_conflict",
      "description": "The request's provider-bound state lives on a target its routing constraints exclude.",
      "group": "routing",
      "source": "gateway",
      "status": 409
    },
    {
      "code": "routing_constraint_check_unavailable",
      "description": "A routing-constraint check could not be completed.",
      "group": "routing",
      "source": "gateway",
      "status": 503
    },
    {
      "code": "translation_unconvertible_request",
      "description": "The request cannot be converted to the provider's API.",
      "group": "translation",
      "source": "gateway",
      "status": 400
    },
    {
      "code": "translation_unsupported_state",
      "description": "The request depends on state the provider cannot use.",
      "group": "translation",
      "source": "gateway",
      "status": 400
    },
    {
      "code": "upstream_api_unsupported",
      "description": "The provider cannot serve this client API.",
      "group": "translation",
      "source": "gateway",
      "status": 400
    },
    {
      "code": "state_not_portable",
      "description": "Conversation state cannot move to this provider.",
      "group": "translation",
      "source": "gateway",
      "status": 400
    },
    {
      "code": "provider_not_conversational",
      "description": "The provider does not serve conversational requests.",
      "group": "translation",
      "source": "gateway",
      "status": 400
    },
    {
      "code": "unsupported_client_api",
      "description": "The client API is not supported.",
      "group": "translation",
      "source": "gateway",
      "status": 400
    },
    {
      "code": "translation_internal_error",
      "description": "The request could not be converted.",
      "group": "translation",
      "source": "gateway",
      "status": 500
    },
    {
      "code": "translation_response_failed",
      "description": "The provider's response could not be converted.",
      "group": "translation",
      "source": "gateway",
      "status": 502
    },
    {
      "code": "translation_target_configuration_error",
      "description": "The translated provider target is misconfigured.",
      "group": "translation",
      "source": "gateway",
      "status": 500
    },
    {
      "code": "attachment_type_not_allowed",
      "description": "An attachment's detected file type is not allowed.",
      "group": "attachments",
      "source": "gateway",
      "status": 415
    },
    {
      "code": "attachment_too_large",
      "description": "An attachment is larger than the allowed size.",
      "group": "attachments",
      "source": "gateway",
      "status": 413
    },
    {
      "code": "attachment_request_too_large",
      "description": "The request's attachments are larger in total than allowed.",
      "group": "attachments",
      "source": "gateway",
      "status": 413
    },
    {
      "code": "attachment_too_many",
      "description": "The request carries more new attachments than allowed.",
      "group": "attachments",
      "source": "gateway",
      "status": 413
    },
    {
      "code": "attachment_too_many_pages",
      "description": "A document has more pages than allowed.",
      "group": "attachments",
      "source": "gateway",
      "status": 413
    },
    {
      "code": "attachment_unscannable",
      "description": "An attachment is encrypted, unparseable or a remote reference, and the policy blocks unscannable files.",
      "group": "attachments",
      "source": "gateway",
      "status": 422
    },
    {
      "code": "attachment_blocked",
      "description": "An attachment was blocked: a DLP finding in its text (sent with the surface's DLP block status, 400) or macros / an attachment that cannot be removed (403).",
      "group": "attachments",
      "source": "gateway",
      "status": 403
    },
    {
      "code": "upstream_bad_request",
      "description": "The provider rejected the request.",
      "group": "upstream",
      "source": "provider",
      "status": 400
    },
    {
      "code": "upstream_unauthorized",
      "description": "The provider rejected the gateway's credentials.",
      "failover_class": "auth",
      "group": "upstream",
      "source": "provider",
      "status": 401
    },
    {
      "code": "upstream_forbidden",
      "description": "The provider denied access.",
      "failover_class": "auth",
      "group": "upstream",
      "source": "provider",
      "status": 403
    },
    {
      "code": "upstream_not_found",
      "description": "The provider did not find the model or resource.",
      "failover_class": "model_not_found",
      "group": "upstream",
      "source": "provider",
      "status": 404
    },
    {
      "code": "upstream_timeout",
      "description": "The provider timed out.",
      "failover_class": "timeout",
      "group": "upstream",
      "source": "provider",
      "status": 504
    },
    {
      "code": "upstream_conflict",
      "description": "The provider rejected the request as a conflict.",
      "group": "upstream",
      "source": "provider",
      "status": 409
    },
    {
      "code": "upstream_request_too_large",
      "description": "The provider rejected the request as too large.",
      "group": "upstream",
      "source": "provider",
      "status": 413
    },
    {
      "code": "upstream_rate_limited",
      "description": "The provider rate-limited the request.",
      "failover_class": "rate_limit",
      "group": "upstream",
      "source": "provider",
      "status": 429
    },
    {
      "code": "upstream_overloaded",
      "description": "The provider is overloaded.",
      "failover_class": "server_error",
      "group": "upstream",
      "source": "provider",
      "status": 529
    },
    {
      "code": "upstream_error",
      "description": "The provider returned an error.",
      "group": "upstream",
      "source": "provider",
      "status": 502
    },
    {
      "code": "upstream_unreachable",
      "description": "The provider could not be reached.",
      "failover_class": "connection",
      "group": "upstream",
      "source": "provider",
      "status": 502
    },
    {
      "code": "upstream_stream_truncated",
      "description": "The provider's stream ended early.",
      "group": "upstream",
      "source": "provider",
      "status": 502
    },
    {
      "code": "upstream_stream_malformed",
      "description": "The provider's stream could not be read.",
      "group": "upstream",
      "source": "provider",
      "status": 502
    },
    {
      "code": "upstream_stream_error",
      "description": "The provider's stream reported an error.",
      "group": "upstream",
      "source": "provider",
      "status": 502
    },
    {
      "code": "remote_connector_unreachable",
      "description": "The provider could not be reached through its remote connector.",
      "failover_class": "connection",
      "group": "upstream",
      "source": "provider",
      "status": 503
    }
  ]
}
