zuplo 7.9.17 → 7.9.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -23,8 +23,8 @@ then get a gateway URL and key in one of two ways:
23
23
 
24
24
  - **Use your personal API key (recommended).** Claude Code runs on your own
25
25
  machine, so call the project's [User App](../user-apps.mdx). Open the
26
- [**Home**](https://portal.zuplo.com/+/account/project/ai/home) tab of your AI
27
- Gateway project, copy the **Gateway URL**, and create a key under **My API
26
+ [**My Keys**](https://portal.zuplo.com/+/account/project/ai/home) tab of your
27
+ AI Gateway project, copy the **Gateway URL**, and create a key under **My API
28
28
  keys**. Your requests count against your own budget.
29
29
  - **Use an app.** For a shared or automated setup, and for the
30
30
  [Claude subscription](#use-your-claude-subscription) approach,
@@ -188,7 +188,7 @@ claude -p "Reply with the single word OK"
188
188
 
189
189
  With the subscription approach, the first command reports a `claude.ai` login,
190
190
  not an API key or auth token. With a personal key, the request appears in your
191
- usage on the **Home** tab; with an app, it appears in the app's usage in the
191
+ usage on the **My Keys** tab; with an app, it appears in the app's usage in the
192
192
  Zuplo Portal.
193
193
 
194
194
  ## Troubleshooting
@@ -196,7 +196,7 @@ Zuplo Portal.
196
196
  | Error | Fix |
197
197
  | -------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
198
198
  | `400` `model must use "providerName/model"` | The selected model has no provider prefix. Check `ANTHROPIC_MODEL` and the other `ANTHROPIC_*_MODEL` variables. If you select an exact model ID, add a `modelOverrides` entry for it. Restart after editing. |
199
- | `403` `This User App route requires a personal API key issued for this User App` | With a personal key: the key is missing, wrong, from another project, or not sent as `Authorization: Bearer`. Create a key on **Home** and use the Gateway URL from the same project. |
199
+ | `403` `This User App route requires a personal API key issued for this User App` | With a personal key: the key is missing, wrong, from another project, or not sent as `Authorization: Bearer`. Create a key on **My Keys** and use the Gateway URL from the same project. |
200
200
  | `401` `Invalid Authorization Scheme` | `authScheme` still has its `Bearer` default. Set an explicit empty value. |
201
201
  | `401` `Header configured by options.authHeader is missing` | Claude Code didn't send `zp-gateway-api-key`. Check `ANTHROPIC_CUSTOM_HEADERS`. |
202
202
  | `401` `credentialPassthrough requires a non-empty Authorization header` | Claude Code isn't signed in. Run `claude` and use `/login`. |
@@ -20,8 +20,8 @@ then get a gateway URL and key in one of two ways:
20
20
 
21
21
  - **Use your personal API key (recommended).** Claude Desktop runs on your own
22
22
  machine, so call the project's [User App](../user-apps.mdx). Open the
23
- [**Home**](https://portal.zuplo.com/+/account/project/ai/home) tab of your AI
24
- Gateway project, copy the **Gateway URL**, and create a key under **My API
23
+ [**My Keys**](https://portal.zuplo.com/+/account/project/ai/home) tab of your
24
+ AI Gateway project, copy the **Gateway URL**, and create a key under **My API
25
25
  keys**. Your requests count against your own budget.
26
26
  - **Use an app.** For a shared setup, such as
27
27
  [deploying to a fleet](#deploy-to-a-fleet) with one key,
@@ -99,16 +99,16 @@ policy on the User App or the app controls which models you can use.
99
99
  ## Verify
100
100
 
101
101
  Send a message in Chat and start a Cowork session. Both appear in your usage on
102
- the **Home** tab, or in the app's usage if you used an app, as do Code sessions
103
- started from the desktop app. Terminal Claude Code sessions use their own
104
- configuration. See [Claude Code](./claude-code.mdx).
102
+ the **My Keys** tab, or in the app's usage if you used an app, as do Code
103
+ sessions started from the desktop app. Terminal Claude Code sessions use their
104
+ own configuration. See [Claude Code](./claude-code.mdx).
105
105
 
106
106
  ## Troubleshooting
107
107
 
108
- | Error | Fix |
109
- | -------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
110
- | `400` `The request body model must use "providerName/model"` | A model list entry has no provider prefix. Give every entry a full `providerName/model` ID. |
111
- | `403` `This User App route requires a personal API key issued for this User App` | With a personal key: the key is missing, wrong, from another project, or not sent as `Authorization: Bearer`. Create a key on **Home** and use the Gateway URL from the same project. |
108
+ | Error | Fix |
109
+ | -------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
110
+ | `400` `The request body model must use "providerName/model"` | A model list entry has no provider prefix. Give every entry a full `providerName/model` ID. |
111
+ | `403` `This User App route requires a personal API key issued for this User App` | With a personal key: the key is missing, wrong, from another project, or not sent as `Authorization: Bearer`. Create a key on **My Keys** and use the Gateway URL from the same project. |
112
112
 
113
113
  ## Deploy to a fleet
114
114
 
@@ -24,8 +24,8 @@ get a gateway URL and key in one of two ways:
24
24
 
25
25
  - **Use your personal API key (recommended).** Codex runs on your own machine,
26
26
  so call the project's [User App](../user-apps.mdx). Open the
27
- [**Home**](https://portal.zuplo.com/+/account/project/ai/home) tab of your AI
28
- Gateway project, copy the **Gateway URL**, and create a key under **My API
27
+ [**My Keys**](https://portal.zuplo.com/+/account/project/ai/home) tab of your
28
+ AI Gateway project, copy the **Gateway URL**, and create a key under **My API
29
29
  keys**. Your requests count against your own budget.
30
30
  - **Use an app.** For a shared or automated setup, and for the
31
31
  [ChatGPT subscription](#use-your-chatgpt-subscription) approach,
@@ -158,19 +158,19 @@ codex exec "Reply with the single word OK"
158
158
  ```
159
159
 
160
160
  The session header shows `provider: zuplo`. With a personal key, the request
161
- appears in your usage on the **Home** tab; with an app, it appears in the app's
162
- usage in the Zuplo Portal.
161
+ appears in your usage on the **My Keys** tab; with an app, it appears in the
162
+ app's usage in the Zuplo Portal.
163
163
 
164
164
  ## Troubleshooting
165
165
 
166
- | Error | Fix |
167
- | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
168
- | `400` `The request body model must use "providerName/model"` | Add the provider prefix to `model`. Do not use the `/model` picker. |
169
- | `403` `This User App route requires a personal API key issued for this User App` | With a personal key: the key is missing, wrong, from another project, or not sent as `Authorization: Bearer`. Create a key on **Home** and use the Gateway URL from the same project. |
170
- | `ERROR: Missing environment variable: ZUPLO_AI_GATEWAY_API_KEY` | Export the variable in the shell that runs Codex. |
171
- | `401` `Authorization Failed` | With an app: the key is wrong. Copy it from the app's **API Key** tab. |
172
- | `401` `Header configured by options.authHeader is missing` | Subscription approach: add the `env_http_headers` line and export `ZUPLO_AI_GATEWAY_API_KEY`. |
173
- | `401` `Invalid Authorization Scheme` | Set `authScheme` to the empty string in the policy JSON. |
174
- | `401` `rejected the credential this app passed through from the caller` `(HTTP 401)` | Your ChatGPT login expired or is invalid. Run `codex login` again. |
175
- | `401` `Missing scopes: api.responses.write` | The app is not in passthrough mode. Configure the API Key Authentication policy as above. |
176
- | Errors mention `api.openai.com` or `not supported when using Codex with a ChatGPT account` | Codex is not using your provider. Set `model_provider = "zuplo"`. |
166
+ | Error | Fix |
167
+ | ------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
168
+ | `400` `The request body model must use "providerName/model"` | Add the provider prefix to `model`. Do not use the `/model` picker. |
169
+ | `403` `This User App route requires a personal API key issued for this User App` | With a personal key: the key is missing, wrong, from another project, or not sent as `Authorization: Bearer`. Create a key on **My Keys** and use the Gateway URL from the same project. |
170
+ | `ERROR: Missing environment variable: ZUPLO_AI_GATEWAY_API_KEY` | Export the variable in the shell that runs Codex. |
171
+ | `401` `Authorization Failed` | With an app: the key is wrong. Copy it from the app's **API Key** tab. |
172
+ | `401` `Header configured by options.authHeader is missing` | Subscription approach: add the `env_http_headers` line and export `ZUPLO_AI_GATEWAY_API_KEY`. |
173
+ | `401` `Invalid Authorization Scheme` | Set `authScheme` to the empty string in the policy JSON. |
174
+ | `401` `rejected the credential this app passed through from the caller` `(HTTP 401)` | Your ChatGPT login expired or is invalid. Run `codex login` again. |
175
+ | `401` `Missing scopes: api.responses.write` | The app is not in passthrough mode. Configure the API Key Authentication policy as above. |
176
+ | Errors mention `api.openai.com` or `not supported when using Codex with a ChatGPT account` | Codex is not using your provider. Set `model_provider = "zuplo"`. |
@@ -23,8 +23,8 @@ such as OpenAI or Anthropic, then get a gateway URL and key in one of two ways:
23
23
 
24
24
  - **Use your personal API key (recommended).** Each developer calls the
25
25
  project's [User App](../user-apps.mdx) with their own key. Open the
26
- [**Home**](https://portal.zuplo.com/+/account/project/ai/home) tab of your AI
27
- Gateway project, copy the **Gateway URL**, and create a key under **My API
26
+ [**My Keys**](https://portal.zuplo.com/+/account/project/ai/home) tab of your
27
+ AI Gateway project, copy the **Gateway URL**, and create a key under **My API
28
28
  keys**. Each developer's requests count against their own budget.
29
29
  - **Use an app.** For a shared setup with one key,
30
30
  [create a pool](../managing-pools.mdx) and [an app](../managing-apps.mdx) for
@@ -157,11 +157,11 @@ Copilot reports gateway errors as a retry failure, such as
157
157
  **GitHub Copilot Chat** channel of VS Code's Output panel, or in the CLI's error
158
158
  text.
159
159
 
160
- | The gateway responds | Cause | Fix |
161
- | ----------------------------------------------------------------- | ---------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
162
- | `403` `This User App route requires a personal API key` | A personal key that's missing, wrong, from another project, or sent as `x-api-key` | VS Code: add `requestHeaders`. CLI: use `COPILOT_PROVIDER_BEARER_TOKEN`. Check the key on **Home** |
163
- | `401` `Header configured by options.authHeader is missing` | With an app key: the key was sent as `x-api-key` | VS Code: add `requestHeaders`. CLI: use `COPILOT_PROVIDER_BEARER_TOKEN` |
164
- | `401` `Invalid Authorization Scheme` | VS Code's `apiKey` was replaced with the key itself, so the key sent was empty | Re-enter the key with **Chat: Manage Language Models** |
165
- | `404` | The `url` stops at the gateway URL | Append `/v1/responses`, `/v1/messages`, or `/v1/chat/completions` |
166
- | `Function tools with reasoning_effort are not supported` | A GPT-5.x model on Chat Completions | VS Code: `"apiType": "responses"`. CLI: use a GPT-4.1 or Claude model |
167
- | `'temperature' does not support 0` or `temperature is deprecated` | The CLI's temperature setting on a GPT-5.x or Claude Sonnet 5 model | Use GPT-4.1, GPT-4o, Claude Sonnet 4.6, or Claude Haiku 4.5 |
160
+ | The gateway responds | Cause | Fix |
161
+ | ----------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- |
162
+ | `403` `This User App route requires a personal API key` | A personal key that's missing, wrong, from another project, or sent as `x-api-key` | VS Code: add `requestHeaders`. CLI: use `COPILOT_PROVIDER_BEARER_TOKEN`. Check the key on **My Keys** |
163
+ | `401` `Header configured by options.authHeader is missing` | With an app key: the key was sent as `x-api-key` | VS Code: add `requestHeaders`. CLI: use `COPILOT_PROVIDER_BEARER_TOKEN` |
164
+ | `401` `Invalid Authorization Scheme` | VS Code's `apiKey` was replaced with the key itself, so the key sent was empty | Re-enter the key with **Chat: Manage Language Models** |
165
+ | `404` | The `url` stops at the gateway URL | Append `/v1/responses`, `/v1/messages`, or `/v1/chat/completions` |
166
+ | `Function tools with reasoning_effort are not supported` | A GPT-5.x model on Chat Completions | VS Code: `"apiType": "responses"`. CLI: use a GPT-4.1 or Claude model |
167
+ | `'temperature' does not support 0` or `temperature is deprecated` | The CLI's temperature setting on a GPT-5.x or Claude Sonnet 5 model | Use GPT-4.1, GPT-4o, Claude Sonnet 4.6, or Claude Haiku 4.5 |
@@ -21,8 +21,8 @@ two ways:
21
21
 
22
22
  - **Use your personal API key (recommended).** goose runs on your own machine,
23
23
  so call the project's [User App](../user-apps.mdx). Open the
24
- [**Home**](https://portal.zuplo.com/+/account/project/ai/home) tab of your AI
25
- Gateway project, copy the **Gateway URL**, and create a key under **My API
24
+ [**My Keys**](https://portal.zuplo.com/+/account/project/ai/home) tab of your
25
+ AI Gateway project, copy the **Gateway URL**, and create a key under **My API
26
26
  keys**. Your requests count against your own budget.
27
27
  - **Use an app.** For a shared or automated setup,
28
28
  [create a pool](../managing-pools.mdx) and [an app](../managing-apps.mdx) for
@@ -115,15 +115,15 @@ person has already spent in the current period.
115
115
 
116
116
  1. **Create a personal API key.** Open the AI Gateway project in the Zuplo
117
117
  Portal and go to the
118
- [**Home**](https://portal.zuplo.com/+/account/project/ai/home) tab. Under
118
+ [**My Keys**](https://portal.zuplo.com/+/account/project/ai/home) tab. Under
119
119
  **My API keys**, click **New key**, give it a name such as `Laptop CLI`, and
120
120
  copy the key.
121
121
 
122
- 1. **Call the gateway.** Copy the **Gateway URL** shown at the top of the
123
- **Home** tab once the gateway has a production deployment—the User App's
124
- `/u/` URL—and use it with your personal key in place of the provider's base
125
- URL and API key. The **Home** tab also shows setup steps for common tools
126
- such as Claude Code and Codex.
122
+ 1. **Call the gateway.** Copy the **Gateway URL** shown at the top of the **My
123
+ Keys** tab once the gateway has a production deployment—the User App's `/u/`
124
+ URL—and use it with your personal key in place of the provider's base URL and
125
+ API key. The **My Keys** tab also shows setup steps for common tools such as
126
+ Claude Code and Codex.
127
127
 
128
128
  </Stepper>
129
129
 
@@ -147,8 +147,8 @@ Completions**, **Responses**, and **Messages**. The integration guides for
147
147
  [GitHub Copilot](./integrations/github-copilot.mdx), and
148
148
  [goose](./integrations/goose.mdx) start from your Gateway URL and personal key.
149
149
 
150
- The **Home** tab also shows your allowance and what you've spent against it. If
151
- no budget is set, it says your requests have no personal spending limit. Once
150
+ The **My Keys** tab also shows your allowance and what you've spent against it.
151
+ If no budget is set, it says your requests have no personal spending limit. Once
152
152
  you reach your allowance, the gateway refuses requests with
153
153
  `429 Too Many Requests` until the period resets or an Admin raises your budget.
154
154
 
@@ -95,7 +95,7 @@ const config = {
95
95
  // ...
96
96
  apis: {
97
97
  type: "url",
98
- input: "https://rickandmorty.zuplo.io/openapi.json",
98
+ input: "https://api.rickandmorty.zuplo.io/openapi.json",
99
99
  path: "/api",
100
100
  },
101
101
  // ...
@@ -251,6 +251,7 @@ const config = {
251
251
  ],
252
252
  disablePlayground: false, // Disable the interactive API playground
253
253
  disableSidecar: false, // Disable the sidecar completely
254
+ disableRequestBox: false, // Hide the request box at the top of the sidecar
254
255
  disableSecurity: true, // Disable security scheme display and playground auth (default)
255
256
  disableMcpAuthInstructions: false, // Hide auth steps in the MCP server card
256
257
  showVersionSelect: "if-available", // Control version selector visibility
@@ -272,6 +273,11 @@ Available options:
272
273
  identifier) and `label` (display name)
273
274
  - `disablePlayground`: Disable the interactive API playground globally
274
275
  - `disableSidecar`: Disable the sidecar panel completely
276
+ - `disableRequestBox`: Hide the request box at the top of the sidecar. The box holds the method and
277
+ path, the generated code snippet with its language selector, the auth selector and the button that
278
+ opens the playground, so hiding it also removes the way to open the playground. The request body
279
+ and response examples below it are still shown. Operations can override this with
280
+ [`x-zudoku-request-box-enabled`](../openapi-extensions/x-zudoku-request-box-enabled)
275
281
  - `disableSecurity`: Disable OpenAPI security scheme display (auth badges on operations, security
276
282
  schemes section on the info page, and the Authorize dialog in the playground). Disabled by default
277
283
  (`true`). Set to `false` to enable security scheme support
@@ -310,6 +316,7 @@ const config = {
310
316
  examplesLanguage: "shell", // Default language for code examples
311
317
  disablePlayground: false, // Disable the interactive API playground
312
318
  disableSidecar: false, // Disable the sidecar completely
319
+ disableRequestBox: false, // Hide the request box at the top of the sidecar
313
320
  disableSecurity: true, // Disable security scheme display and playground auth (default)
314
321
  disableMcpAuthInstructions: false, // Hide auth steps in the MCP server card
315
322
  showVersionSelect: "if-available", // Control version selector visibility
@@ -399,9 +406,14 @@ different levels of your API documentation.
399
406
  ### Operations
400
407
 
401
408
  - `x-zudoku-playground-enabled`: Control playground visibility for an operation (default: `true`)
409
+ - `x-zudoku-request-box-enabled`: Control request box visibility in the sidecar for an operation
410
+ (default: `true`). See
411
+ [`x-zudoku-request-box-enabled`](../openapi-extensions/x-zudoku-request-box-enabled)
402
412
  - `x-internal`: Hide an operation from the documentation. Also works on path items and parameters.
403
413
  See [`x-internal`](../openapi-extensions/x-internal)
404
- - `x-explorer-enabled`: Alias for `x-zudoku-playground-enabled` for compatibility Example:
414
+ - `x-explorer-enabled`: Alias for `x-zudoku-playground-enabled` for compatibility
415
+
416
+ Example:
405
417
 
406
418
  ```json
407
419
  {
@@ -409,7 +421,8 @@ different levels of your API documentation.
409
421
  "/users": {
410
422
  "get": {
411
423
  "summary": "Get users",
412
- "x-zudoku-playground-enabled": false // Disable playground for this operation
424
+ "x-zudoku-playground-enabled": false, // Disable playground for this operation
425
+ "x-zudoku-request-box-enabled": false // Hide the sidecar request box for this operation
413
426
  }
414
427
  }
415
428
  }
@@ -114,10 +114,17 @@ export default {
114
114
  An array of [Rehype](https://github.com/rehypejs/rehype) plugins to transform HTML content. These
115
115
  plugins run after Markdown is converted to HTML.
116
116
 
117
+ For example, to render math with [KaTeX](https://katex.org), add `rehype-katex` together with
118
+ `remark-math`, which parses `$...$` and `$$...$$` math in Markdown. KaTeX also needs its stylesheet,
119
+ which you can import in your `zudoku.config.ts` like any other
120
+ [custom CSS](../customization/colors-theme.mdx#custom-css) (`import "katex/dist/katex.min.css";`).
121
+
117
122
  ```ts
118
123
  import rehypeKatex from "rehype-katex";
124
+ import remarkMath from "remark-math";
119
125
 
120
126
  export default {
127
+ remarkPlugins: [remarkMath],
121
128
  rehypePlugins: [rehypeKatex],
122
129
  };
123
130
  ```
@@ -73,7 +73,7 @@ see the [API Reference](./api-reference.md).
73
73
  // ...
74
74
  "apis": {
75
75
  "type": "url",
76
- "input": "https://rickandmorty.zuplo.io/openapi.json",
76
+ "input": "https://api.rickandmorty.zuplo.io/openapi.json",
77
77
  "path": "/api"
78
78
  }
79
79
  // ...
@@ -35,6 +35,25 @@ description: This page explains how to use Zudoku's markdown features.
35
35
  ---
36
36
  ```
37
37
 
38
+ ### `seo`
39
+
40
+ Overrides the browser title (the HTML `<title>`) and meta description without changing the page
41
+ heading or sidebar label. Use it when the visible title is short but search results need more
42
+ context. Both properties are optional and fall back to `title` and `description`.
43
+
44
+ ```md
45
+ ---
46
+ title: Location Key
47
+ seo:
48
+ title: Daily Forecasts by Location Key
49
+ description: Get daily weather forecasts for a location key, up to 15 days ahead.
50
+ ---
51
+ ```
52
+
53
+ The site-wide [`metadata.title`](/dev-portal/zudoku/configuration/overview#metadata) template still applies to
54
+ `seo.title`. To do the same for an API tag page, use the
55
+ [`x-zudoku-seo`](/dev-portal/zudoku/openapi-extensions/x-zudoku-seo) extension.
56
+
38
57
  ### `category`
39
58
 
40
59
  Assigns the page to a specific category for organizational purposes. This will be shown above the
@@ -0,0 +1,47 @@
1
+ ---
2
+ title: x-zudoku-request-box-enabled
3
+ sidebar_icon: square-code
4
+ ---
5
+
6
+ Use `x-zudoku-request-box-enabled` to show or hide the request box at the top of an operation's
7
+ sidecar for a specific operation. By default, the request box is shown for all operations unless
8
+ globally disabled via the [`disableRequestBox`](/dev-portal/zudoku/configuration/api-reference) option.
9
+
10
+ The request box holds the method and path, the generated code snippet (or your
11
+ [`x-code-samples`](./x-code-samples)) with its language selector, the auth selector and the button
12
+ that opens the playground. Hiding it also removes the way to open the playground for that operation.
13
+ The request body and response examples below it are still shown.
14
+
15
+ ## Location
16
+
17
+ The extension is added at the **Operation Object** level.
18
+
19
+ | Option | Type | Description |
20
+ | ------------------------------ | --------- | ------------------------------------------------ |
21
+ | `x-zudoku-request-box-enabled` | `boolean` | Show (`true`) or hide (`false`) the request box. |
22
+
23
+ If the extension is not set, the request box visibility falls back to the global `disableRequestBox`
24
+ configuration.
25
+
26
+ ## Example
27
+
28
+ ```yaml
29
+ paths:
30
+ /users:
31
+ get:
32
+ summary: List users
33
+ x-zudoku-request-box-enabled: true
34
+ responses:
35
+ "200":
36
+ description: Successful response
37
+ /webhooks/trigger:
38
+ post:
39
+ summary: Trigger webhook
40
+ x-zudoku-request-box-enabled: false
41
+ responses:
42
+ "200":
43
+ description: Accepted
44
+ ```
45
+
46
+ In this example, `List users` shows the request box while `Trigger webhook` hides it regardless of
47
+ the global setting.
@@ -41,3 +41,6 @@ tags:
41
41
 
42
42
  Both tags show `Location Key` in the sidebar and as the page heading, but each page has its own
43
43
  browser title and description.
44
+
45
+ To do the same for a Markdown page, use the [`seo`](/dev-portal/zudoku/markdown/frontmatter#seo) frontmatter
46
+ property.
@@ -72,6 +72,7 @@
72
72
  | mcp-token-exchange-inbound | MCP Token Exchange | Resolve a gateway-managed upstream MCP credential and apply it to the request before the normal Zuplo route handler forwards the request. Validation runs lazily inside the policy constructor, which the runtime caches per policy name — so a misconfigured policy fails the first request with a `ConfigurationError` (surfaced in the 500 problem body) rather than crashing boot. | mcp-gateway |
73
73
  | mcp-workos-oauth-inbound | MCP WorkOS OAuth | Authenticate MCP gateway requests using a gateway-issued OAuth access token, with browser login delegated to WorkOS. WorkOS-friendly wrapper around `McpOAuthInboundPolicy`. Provide `clientId` and `clientSecret`; the constructor derives the WorkOS OIDC issuer, JWKS URL, authorize URL, and token URL automatically and runs the resulting shape through the same Zod schema as the generic policy. | mcp-gateway |
74
74
  | mock-api-inbound | Mock API Response | Returns example responses from the OpenAPI document associated with this route. | api-gateway |
75
+ | ai-gateway-load-balancing-inbound | Model Load Balancing | Spreads AI requests across a list of models. The policy cycles through the list, or keeps requests that share a key, such as a user or a conversation, on the same model. Most requests also get a retry model from the list. A request moves there when the chosen model stays rate limited. Chat completions and embeddings requests also move there when the model returns a server error, can't be reached, or times out. The policy picks the model for every request it handles and ignores the request's own `model`, so the list also limits which models clients can reach. An earlier policy's model selection is never overwritten. | ai-gateway |
75
76
  | moesif-inbound | Moesif Analytics & Billing | Moesif is an API analytics and billing service. This policy allows you to send metering calls for each API to their events batch endpoint. | api-gateway |
76
77
  | monetization-inbound | Monetization | Monetization inbound policy for API key validation and usage metering. | api-gateway |
77
78
  | mtls-auth-inbound | mTLS Auth | Authenticate requests based on the mTLS protocol. | api-gateway |