zuplo 6.67.32 → 6.68.0

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.
Files changed (644) hide show
  1. package/README.md +9 -0
  2. package/docs/_index.md +44 -0
  3. package/docs/ai-gateway/apps.mdx +28 -0
  4. package/docs/ai-gateway/custom-providers.mdx +54 -0
  5. package/docs/ai-gateway/getting-started.mdx +224 -0
  6. package/docs/ai-gateway/guardrails.mdx +65 -0
  7. package/docs/ai-gateway/integrations/ai-sdk.mdx +109 -0
  8. package/docs/ai-gateway/integrations/claude-code.mdx +49 -0
  9. package/docs/ai-gateway/integrations/codex.mdx +78 -0
  10. package/docs/ai-gateway/integrations/goose.mdx +104 -0
  11. package/docs/ai-gateway/integrations/langchain.mdx +66 -0
  12. package/docs/ai-gateway/integrations/openai.mdx +99 -0
  13. package/docs/ai-gateway/introduction.mdx +85 -0
  14. package/docs/ai-gateway/managing-apps.mdx +46 -0
  15. package/docs/ai-gateway/managing-providers.mdx +66 -0
  16. package/docs/ai-gateway/managing-teams.mdx +63 -0
  17. package/docs/ai-gateway/policies/akamai-ai-firewall.mdx +125 -0
  18. package/docs/ai-gateway/policies/comet-opik-tracing.mdx +139 -0
  19. package/docs/ai-gateway/policies/galileo-tracing.mdx +147 -0
  20. package/docs/ai-gateway/providers.mdx +32 -0
  21. package/docs/ai-gateway/teams.mdx +38 -0
  22. package/docs/ai-gateway/universal-api.mdx +43 -0
  23. package/docs/ai-gateway/usage-limits.mdx +89 -0
  24. package/docs/api-management/introduction.md +127 -0
  25. package/docs/articles/accounts/audit-logs.mdx +227 -0
  26. package/docs/articles/accounts/billing.mdx +25 -0
  27. package/docs/articles/accounts/default-api-key.mdx +30 -0
  28. package/docs/articles/accounts/delete-account.mdx +36 -0
  29. package/docs/articles/accounts/enterprise-sso.mdx +116 -0
  30. package/docs/articles/accounts/managing-account-members.mdx +45 -0
  31. package/docs/articles/accounts/managing-project-members.mdx +37 -0
  32. package/docs/articles/accounts/members-and-roles.mdx +21 -0
  33. package/docs/articles/accounts/roles-and-permissions.mdx +115 -0
  34. package/docs/articles/accounts/zuplo-api-keys.mdx +94 -0
  35. package/docs/articles/add-api-to-backstage.mdx +216 -0
  36. package/docs/articles/advanced-path-matching.mdx +139 -0
  37. package/docs/articles/api-key-administration.mdx +47 -0
  38. package/docs/articles/api-key-api.mdx +220 -0
  39. package/docs/articles/api-key-authentication.mdx +195 -0
  40. package/docs/articles/api-key-buckets.mdx +61 -0
  41. package/docs/articles/api-key-end-users.mdx +52 -0
  42. package/docs/articles/api-key-leak-detection.mdx +75 -0
  43. package/docs/articles/api-key-management.mdx +100 -0
  44. package/docs/articles/api-key-react-component.mdx +90 -0
  45. package/docs/articles/api-key-service-limits.mdx +14 -0
  46. package/docs/articles/archiving-requests-to-storage.mdx +119 -0
  47. package/docs/articles/branch-based-deployments.mdx +184 -0
  48. package/docs/articles/bypass-policy-for-testing.mdx +117 -0
  49. package/docs/articles/check-ip-address.mdx +17 -0
  50. package/docs/articles/ci-cd-azure/basic-deployment.mdx +49 -0
  51. package/docs/articles/ci-cd-azure/deploy-and-test.mdx +47 -0
  52. package/docs/articles/ci-cd-azure/local-testing.mdx +59 -0
  53. package/docs/articles/ci-cd-azure/multi-stage-deployment.mdx +88 -0
  54. package/docs/articles/ci-cd-azure/pr-preview-environments.mdx +50 -0
  55. package/docs/articles/ci-cd-azure/tag-based-releases.mdx +37 -0
  56. package/docs/articles/ci-cd-bitbucket/basic-deployment.mdx +27 -0
  57. package/docs/articles/ci-cd-bitbucket/deploy-and-test.mdx +41 -0
  58. package/docs/articles/ci-cd-bitbucket/local-testing.mdx +34 -0
  59. package/docs/articles/ci-cd-bitbucket/multi-stage-deployment.mdx +52 -0
  60. package/docs/articles/ci-cd-bitbucket/pr-preview-environments.mdx +46 -0
  61. package/docs/articles/ci-cd-bitbucket/tag-based-releases.mdx +27 -0
  62. package/docs/articles/ci-cd-circleci/basic-deployment.mdx +34 -0
  63. package/docs/articles/ci-cd-circleci/deploy-and-test.mdx +44 -0
  64. package/docs/articles/ci-cd-circleci/local-testing.mdx +50 -0
  65. package/docs/articles/ci-cd-circleci/multi-stage-deployment.mdx +82 -0
  66. package/docs/articles/ci-cd-circleci/pr-preview-environments.mdx +47 -0
  67. package/docs/articles/ci-cd-circleci/tag-based-releases.mdx +38 -0
  68. package/docs/articles/ci-cd-github/basic-deployment.mdx +48 -0
  69. package/docs/articles/ci-cd-github/cleanup-on-branch-delete.mdx +123 -0
  70. package/docs/articles/ci-cd-github/deploy-and-test.mdx +82 -0
  71. package/docs/articles/ci-cd-github/local-testing.mdx +102 -0
  72. package/docs/articles/ci-cd-github/multi-stage-deployment.mdx +136 -0
  73. package/docs/articles/ci-cd-github/pr-preview-environments.mdx +106 -0
  74. package/docs/articles/ci-cd-github/tag-based-releases.mdx +99 -0
  75. package/docs/articles/ci-cd-gitlab/basic-deployment.mdx +28 -0
  76. package/docs/articles/ci-cd-gitlab/deploy-and-test.mdx +44 -0
  77. package/docs/articles/ci-cd-gitlab/local-testing.mdx +39 -0
  78. package/docs/articles/ci-cd-gitlab/mr-preview-environments.mdx +52 -0
  79. package/docs/articles/ci-cd-gitlab/multi-stage-deployment.mdx +64 -0
  80. package/docs/articles/ci-cd-gitlab/tag-based-releases.mdx +28 -0
  81. package/docs/articles/composite-policy-reference.mdx +284 -0
  82. package/docs/articles/configuring-auth0-for-mcp-auth.mdx +186 -0
  83. package/docs/articles/configuring-okta-for-mcp-auth.mdx +208 -0
  84. package/docs/articles/convert-urls-to-openapi.mdx +62 -0
  85. package/docs/articles/cors.mdx +447 -0
  86. package/docs/articles/custom-audit-log-policy.mdx +95 -0
  87. package/docs/articles/custom-ci-cd-azure.mdx +81 -0
  88. package/docs/articles/custom-ci-cd-bitbucket.mdx +80 -0
  89. package/docs/articles/custom-ci-cd-circleci.mdx +78 -0
  90. package/docs/articles/custom-ci-cd-github.mdx +99 -0
  91. package/docs/articles/custom-ci-cd-gitlab.mdx +79 -0
  92. package/docs/articles/custom-ci-cd.mdx +82 -0
  93. package/docs/articles/custom-code-patterns.md +418 -0
  94. package/docs/articles/custom-domains.mdx +258 -0
  95. package/docs/articles/custom-logging-example.mdx +139 -0
  96. package/docs/articles/ddos-protection.mdx +138 -0
  97. package/docs/articles/development-options.mdx +49 -0
  98. package/docs/articles/environment-variables.mdx +134 -0
  99. package/docs/articles/environments.mdx +143 -0
  100. package/docs/articles/fastly-zuplo-host-setup.mdx +41 -0
  101. package/docs/articles/github-deployment-testing.mdx +101 -0
  102. package/docs/articles/gke-with-upstream-auth-policy.mdx +192 -0
  103. package/docs/articles/graphql-security.mdx +180 -0
  104. package/docs/articles/handling-form-data.mdx +61 -0
  105. package/docs/articles/health-checks.mdx +109 -0
  106. package/docs/articles/hosting-options.mdx +70 -0
  107. package/docs/articles/lazy-load-configuration-into-cache.mdx +92 -0
  108. package/docs/articles/limits.mdx +98 -0
  109. package/docs/articles/local-development-debugging.mdx +44 -0
  110. package/docs/articles/local-development-env-variables.mdx +23 -0
  111. package/docs/articles/local-development-installing-packages.mdx +23 -0
  112. package/docs/articles/local-development-routes-designer.mdx +27 -0
  113. package/docs/articles/local-development-services.mdx +40 -0
  114. package/docs/articles/local-development-troubleshooting.mdx +56 -0
  115. package/docs/articles/local-development.mdx +81 -0
  116. package/docs/articles/log-plugin-aws-cloudwatch.mdx +83 -0
  117. package/docs/articles/log-plugin-datadog.mdx +84 -0
  118. package/docs/articles/log-plugin-dynatrace.mdx +75 -0
  119. package/docs/articles/log-plugin-gcp.mdx +75 -0
  120. package/docs/articles/log-plugin-loki.mdx +136 -0
  121. package/docs/articles/log-plugin-new-relic.mdx +84 -0
  122. package/docs/articles/log-plugin-splunk.mdx +104 -0
  123. package/docs/articles/log-plugin-sumo.mdx +73 -0
  124. package/docs/articles/log-plugin-vmware-log-insight.mdx +154 -0
  125. package/docs/articles/log-request-response-data.mdx +398 -0
  126. package/docs/articles/logging.mdx +115 -0
  127. package/docs/articles/manual-mcp-oauth-testing.mdx +193 -0
  128. package/docs/articles/mcp-quickstart.mdx +135 -0
  129. package/docs/articles/metrics-plugins.mdx +371 -0
  130. package/docs/articles/migrate-from-apigee.md +408 -0
  131. package/docs/articles/migrate-from-aws-api-gateway.md +248 -0
  132. package/docs/articles/migrate-from-azure-apim.md +292 -0
  133. package/docs/articles/migrate-from-kong.md +300 -0
  134. package/docs/articles/migration-overview.md +81 -0
  135. package/docs/articles/monetization/api-access.mdx +69 -0
  136. package/docs/articles/monetization/billing-models.md +520 -0
  137. package/docs/articles/monetization/developer-portal.md +167 -0
  138. package/docs/articles/monetization/features.mdx +98 -0
  139. package/docs/articles/monetization/index.mdx +113 -0
  140. package/docs/articles/monetization/meters.mdx +135 -0
  141. package/docs/articles/monetization/monetization-policy.md +314 -0
  142. package/docs/articles/monetization/plan-examples.mdx +366 -0
  143. package/docs/articles/monetization/plans.mdx +266 -0
  144. package/docs/articles/monetization/pricing-models.mdx +225 -0
  145. package/docs/articles/monetization/private-plans.md +154 -0
  146. package/docs/articles/monetization/quickstart.md +355 -0
  147. package/docs/articles/monetization/rate-cards.mdx +171 -0
  148. package/docs/articles/monetization/stripe-integration.md +195 -0
  149. package/docs/articles/monetization/subscription-lifecycle.md +298 -0
  150. package/docs/articles/monetization/tax-collection.md +166 -0
  151. package/docs/articles/monetization/troubleshooting.md +272 -0
  152. package/docs/articles/monetization-custom.mdx +71 -0
  153. package/docs/articles/monetization-integrations.mdx +104 -0
  154. package/docs/articles/monitoring-your-gateway.mdx +53 -0
  155. package/docs/articles/monorepo-deployment.mdx +350 -0
  156. package/docs/articles/multiple-auth-policies.mdx +81 -0
  157. package/docs/articles/non-standard-ports.mdx +30 -0
  158. package/docs/articles/oauth-authentication.mdx +54 -0
  159. package/docs/articles/openapi-server-urls.mdx +60 -0
  160. package/docs/articles/openapi.mdx +130 -0
  161. package/docs/articles/opentelemetry.mdx +250 -0
  162. package/docs/articles/per-user-rate-limits-using-db.mdx +112 -0
  163. package/docs/articles/performance-testing.mdx +304 -0
  164. package/docs/articles/plugin-akamai-api-security.mdx +76 -0
  165. package/docs/articles/plugin-azure-blob.mdx +73 -0
  166. package/docs/articles/plugin-azure-event-hubs.mdx +64 -0
  167. package/docs/articles/plugin-hydrolix-traffic-peak.mdx +147 -0
  168. package/docs/articles/policies.mdx +33 -0
  169. package/docs/articles/rename-or-move-project.mdx +39 -0
  170. package/docs/articles/rick-and-morty-api-developer-portal-example.mdx +23 -0
  171. package/docs/articles/routing.mdx +193 -0
  172. package/docs/articles/s3-signed-url-uploads.mdx +521 -0
  173. package/docs/articles/secure-tunnel.mdx +84 -0
  174. package/docs/articles/securing-backend-mtls.mdx +268 -0
  175. package/docs/articles/securing-your-backend.mdx +148 -0
  176. package/docs/articles/security.mdx +105 -0
  177. package/docs/articles/sharing-code-across-projects.mdx +412 -0
  178. package/docs/articles/source-control-setup-azure.mdx +13 -0
  179. package/docs/articles/source-control-setup-bitbucket.mdx +43 -0
  180. package/docs/articles/source-control-setup-github.mdx +172 -0
  181. package/docs/articles/source-control-setup-gitlab.mdx +12 -0
  182. package/docs/articles/source-control.mdx +80 -0
  183. package/docs/articles/step-1-setup-basic-gateway-local.mdx +136 -0
  184. package/docs/articles/step-1-setup-basic-gateway.mdx +118 -0
  185. package/docs/articles/step-2-add-rate-limiting-local.mdx +126 -0
  186. package/docs/articles/step-2-add-rate-limiting.mdx +82 -0
  187. package/docs/articles/step-3-add-api-key-auth-local.mdx +199 -0
  188. package/docs/articles/step-3-add-api-key-auth.mdx +166 -0
  189. package/docs/articles/step-4-deploying-to-the-edge.mdx +220 -0
  190. package/docs/articles/step-5-dynamic-rate-limiting.mdx +167 -0
  191. package/docs/articles/support.mdx +144 -0
  192. package/docs/articles/terraform.mdx +114 -0
  193. package/docs/articles/testing-graphql.mdx +34 -0
  194. package/docs/articles/testing.mdx +522 -0
  195. package/docs/articles/troubleshooting-slow-responses.mdx +301 -0
  196. package/docs/articles/troubleshooting.md +302 -0
  197. package/docs/articles/tsconfig.mdx +105 -0
  198. package/docs/articles/tunnel-setup.mdx +195 -0
  199. package/docs/articles/tunnel-troubleshooting.mdx +50 -0
  200. package/docs/articles/update-zup-in-github-action.mdx +110 -0
  201. package/docs/articles/use-openapi-extension-data.mdx +79 -0
  202. package/docs/articles/users/multifactor-authentication.mdx +64 -0
  203. package/docs/articles/users/profile.mdx +13 -0
  204. package/docs/articles/versioning-on-zuplo.mdx +89 -0
  205. package/docs/articles/waf-ddos-akamai.md +133 -0
  206. package/docs/articles/waf-ddos-aws-waf-shield.mdx +85 -0
  207. package/docs/articles/waf-ddos-fastly.mdx +251 -0
  208. package/docs/articles/waf-ddos.mdx +140 -0
  209. package/docs/articles/zuplo-waf.mdx +156 -0
  210. package/docs/ask.mdx +3 -0
  211. package/docs/cli/authentication.mdx +56 -0
  212. package/docs/cli/connectivity.mdx +38 -0
  213. package/docs/cli/create-zuplo-api.mdx +80 -0
  214. package/docs/cli/delete.mdx +79 -0
  215. package/docs/cli/deploy.mdx +156 -0
  216. package/docs/cli/deploy.partial.mdx +46 -0
  217. package/docs/cli/dev.mdx +115 -0
  218. package/docs/cli/docs.mdx +66 -0
  219. package/docs/cli/editor.mdx +50 -0
  220. package/docs/cli/global-options.mdx +19 -0
  221. package/docs/cli/init.mdx +74 -0
  222. package/docs/cli/link.mdx +74 -0
  223. package/docs/cli/list.mdx +55 -0
  224. package/docs/cli/mtls-certificate-create.mdx +94 -0
  225. package/docs/cli/mtls-certificate-delete.mdx +55 -0
  226. package/docs/cli/mtls-certificate-describe.mdx +55 -0
  227. package/docs/cli/mtls-certificate-disable.mdx +55 -0
  228. package/docs/cli/mtls-certificate-list.mdx +47 -0
  229. package/docs/cli/mtls-certificate-update.mdx +72 -0
  230. package/docs/cli/openapi-convert.mdx +111 -0
  231. package/docs/cli/openapi-merge.mdx +138 -0
  232. package/docs/cli/openapi-merge.partial.mdx +29 -0
  233. package/docs/cli/openapi-overlay.mdx +123 -0
  234. package/docs/cli/overview.mdx +78 -0
  235. package/docs/cli/project-create.mdx +43 -0
  236. package/docs/cli/source-migrate.mdx +18 -0
  237. package/docs/cli/source-upgrade.mdx +41 -0
  238. package/docs/cli/test.mdx +70 -0
  239. package/docs/cli/test.partial.mdx +7 -0
  240. package/docs/cli/tunnel-create.mdx +53 -0
  241. package/docs/cli/tunnel-create.partial.mdx +9 -0
  242. package/docs/cli/tunnel-delete.mdx +35 -0
  243. package/docs/cli/tunnel-delete.partial.mdx +9 -0
  244. package/docs/cli/tunnel-describe.mdx +45 -0
  245. package/docs/cli/tunnel-describe.partial.mdx +5 -0
  246. package/docs/cli/tunnel-list.mdx +35 -0
  247. package/docs/cli/tunnel-list.partial.mdx +9 -0
  248. package/docs/cli/tunnel-rate-token.partial.mdx +9 -0
  249. package/docs/cli/tunnel-rotate-token.mdx +39 -0
  250. package/docs/cli/tunnel-services-describe.mdx +45 -0
  251. package/docs/cli/tunnel-services-describe.partial.mdx +9 -0
  252. package/docs/cli/tunnel-services-update.mdx +48 -0
  253. package/docs/cli/variable-create.mdx +91 -0
  254. package/docs/cli/variable-create.partial.mdx +5 -0
  255. package/docs/cli/variable-update.mdx +75 -0
  256. package/docs/cli/variable-update.partial.mdx +5 -0
  257. package/docs/concepts/api-keys.md +146 -0
  258. package/docs/concepts/authentication.mdx +109 -0
  259. package/docs/concepts/how-zuplo-works.mdx +120 -0
  260. package/docs/concepts/project-structure.mdx +174 -0
  261. package/docs/concepts/rate-limiting.md +246 -0
  262. package/docs/concepts/request-lifecycle.mdx +56 -0
  263. package/docs/concepts/source-control-and-deployment.mdx +229 -0
  264. package/docs/conferences/conference-prize-terms.mdx +80 -0
  265. package/docs/dedicated/akamai/ai-powered-applications.mdx +223 -0
  266. package/docs/dedicated/akamai/architecture.mdx +280 -0
  267. package/docs/dedicated/akamai/caching.mdx +212 -0
  268. package/docs/dedicated/akamai/cdn.mdx +156 -0
  269. package/docs/dedicated/architecture.mdx +208 -0
  270. package/docs/dedicated/custom-domains.mdx +31 -0
  271. package/docs/dedicated/federated-gateways.mdx +80 -0
  272. package/docs/dedicated/networking.mdx +69 -0
  273. package/docs/dedicated/overview.mdx +80 -0
  274. package/docs/dedicated/source-control.mdx +63 -0
  275. package/docs/dev-portal/dev-portal-create-consumer-on-auth.mdx +134 -0
  276. package/docs/dev-portal/introduction.mdx +65 -0
  277. package/docs/dev-portal/local-development.mdx +72 -0
  278. package/docs/dev-portal/migration.mdx +526 -0
  279. package/docs/dev-portal/node-modules.mdx +45 -0
  280. package/docs/dev-portal/updating.mdx +28 -0
  281. package/docs/dev-portal/zudoku/components/alert.mdx +130 -0
  282. package/docs/dev-portal/zudoku/components/badge.mdx +70 -0
  283. package/docs/dev-portal/zudoku/components/button.mdx +132 -0
  284. package/docs/dev-portal/zudoku/components/callout.mdx +112 -0
  285. package/docs/dev-portal/zudoku/components/card.mdx +104 -0
  286. package/docs/dev-portal/zudoku/components/checkbox.mdx +72 -0
  287. package/docs/dev-portal/zudoku/components/client-only.mdx +79 -0
  288. package/docs/dev-portal/zudoku/components/code-tabs.mdx +179 -0
  289. package/docs/dev-portal/zudoku/components/dialog.mdx +167 -0
  290. package/docs/dev-portal/zudoku/components/head.mdx +199 -0
  291. package/docs/dev-portal/zudoku/components/icons.mdx +27 -0
  292. package/docs/dev-portal/zudoku/components/input.mdx +96 -0
  293. package/docs/dev-portal/zudoku/components/label.mdx +86 -0
  294. package/docs/dev-portal/zudoku/components/link.mdx +242 -0
  295. package/docs/dev-portal/zudoku/components/markdown.mdx +151 -0
  296. package/docs/dev-portal/zudoku/components/mermaid.mdx +81 -0
  297. package/docs/dev-portal/zudoku/components/playground.mdx +87 -0
  298. package/docs/dev-portal/zudoku/components/secret.mdx +78 -0
  299. package/docs/dev-portal/zudoku/components/select.mdx +176 -0
  300. package/docs/dev-portal/zudoku/components/shadcn.mdx +73 -0
  301. package/docs/dev-portal/zudoku/components/slider.mdx +108 -0
  302. package/docs/dev-portal/zudoku/components/slot.mdx +119 -0
  303. package/docs/dev-portal/zudoku/components/stepper.mdx +138 -0
  304. package/docs/dev-portal/zudoku/components/switch.mdx +96 -0
  305. package/docs/dev-portal/zudoku/components/syntax-highlight.mdx +602 -0
  306. package/docs/dev-portal/zudoku/components/textarea.mdx +78 -0
  307. package/docs/dev-portal/zudoku/components/tooltip.mdx +195 -0
  308. package/docs/dev-portal/zudoku/components/typography.mdx +61 -0
  309. package/docs/dev-portal/zudoku/configuration/ai-assistants.md +64 -0
  310. package/docs/dev-portal/zudoku/configuration/api-catalog.md +108 -0
  311. package/docs/dev-portal/zudoku/configuration/api-reference.md +397 -0
  312. package/docs/dev-portal/zudoku/configuration/authentication-auth0.md +173 -0
  313. package/docs/dev-portal/zudoku/configuration/authentication-azure-ad.md +238 -0
  314. package/docs/dev-portal/zudoku/configuration/authentication-clerk.md +110 -0
  315. package/docs/dev-portal/zudoku/configuration/authentication-firebase.md +61 -0
  316. package/docs/dev-portal/zudoku/configuration/authentication-pingfederate.md +136 -0
  317. package/docs/dev-portal/zudoku/configuration/authentication-supabase.md +225 -0
  318. package/docs/dev-portal/zudoku/configuration/authentication.md +199 -0
  319. package/docs/dev-portal/zudoku/configuration/build-configuration.mdx +147 -0
  320. package/docs/dev-portal/zudoku/configuration/docs.md +282 -0
  321. package/docs/dev-portal/zudoku/configuration/footer.mdx +214 -0
  322. package/docs/dev-portal/zudoku/configuration/llms.md +89 -0
  323. package/docs/dev-portal/zudoku/configuration/navigation.mdx +408 -0
  324. package/docs/dev-portal/zudoku/configuration/overview.md +380 -0
  325. package/docs/dev-portal/zudoku/configuration/protected-routes.md +149 -0
  326. package/docs/dev-portal/zudoku/configuration/search.md +169 -0
  327. package/docs/dev-portal/zudoku/configuration/sentry.mdx +44 -0
  328. package/docs/dev-portal/zudoku/configuration/site.md +124 -0
  329. package/docs/dev-portal/zudoku/configuration/slots.mdx +124 -0
  330. package/docs/dev-portal/zudoku/configuration/vite-config.md +18 -0
  331. package/docs/dev-portal/zudoku/custom-plugins.md +287 -0
  332. package/docs/dev-portal/zudoku/customization/colors-theme.mdx +275 -0
  333. package/docs/dev-portal/zudoku/customization/fonts.md +110 -0
  334. package/docs/dev-portal/zudoku/extending/events.md +124 -0
  335. package/docs/dev-portal/zudoku/guides/custom-pages.md +106 -0
  336. package/docs/dev-portal/zudoku/guides/environment-variables.md +99 -0
  337. package/docs/dev-portal/zudoku/guides/mermaid.mdx +70 -0
  338. package/docs/dev-portal/zudoku/guides/navigation-migration.md +87 -0
  339. package/docs/dev-portal/zudoku/guides/navigation-rules.mdx +197 -0
  340. package/docs/dev-portal/zudoku/guides/processors.mdx +234 -0
  341. package/docs/dev-portal/zudoku/guides/static-files.md +55 -0
  342. package/docs/dev-portal/zudoku/guides/transforming-examples.md +156 -0
  343. package/docs/dev-portal/zudoku/guides/using-multiple-apis.md +87 -0
  344. package/docs/dev-portal/zudoku/markdown/admonitions.md +128 -0
  345. package/docs/dev-portal/zudoku/markdown/code-blocks.md +196 -0
  346. package/docs/dev-portal/zudoku/markdown/frontmatter.md +172 -0
  347. package/docs/dev-portal/zudoku/markdown/mdx.md +68 -0
  348. package/docs/dev-portal/zudoku/markdown/overview.md +275 -0
  349. package/docs/dev-portal/zudoku/plugins.md +5 -0
  350. package/docs/dev-portal/zudoku/writing.mdx +72 -0
  351. package/docs/errors/bad-request.mdx +39 -0
  352. package/docs/errors/build-error.mdx +45 -0
  353. package/docs/errors/fatal-project-error.mdx +39 -0
  354. package/docs/errors/gateway-timeout.mdx +33 -0
  355. package/docs/errors/get-head-body-error.mdx +41 -0
  356. package/docs/errors/main-mod-error.mdx +40 -0
  357. package/docs/errors/no-project-set.mdx +41 -0
  358. package/docs/errors/not-found.mdx +43 -0
  359. package/docs/errors/rate-limit-exceeded.mdx +31 -0
  360. package/docs/errors/schema-validation-failed.mdx +51 -0
  361. package/docs/errors/system-configuration-error.mdx +44 -0
  362. package/docs/errors/unauthorized.mdx +50 -0
  363. package/docs/errors/unknown-error.mdx +42 -0
  364. package/docs/errors.mdx +14 -0
  365. package/docs/guides/canary-routing-for-employees.mdx +385 -0
  366. package/docs/guides/geolocation-backend-routing.mdx +404 -0
  367. package/docs/guides/modify-openapi-paths.mdx +371 -0
  368. package/docs/guides/openapi-overlays.mdx +492 -0
  369. package/docs/guides/overview.mdx +12 -0
  370. package/docs/guides/user-based-backend-routing.mdx +437 -0
  371. package/docs/handlers/aws-lambda.mdx +201 -0
  372. package/docs/handlers/custom-handler.mdx +112 -0
  373. package/docs/handlers/legacy-dev-portal-handler.mdx +135 -0
  374. package/docs/handlers/mcp-server.mdx +730 -0
  375. package/docs/handlers/openapi.mdx +78 -0
  376. package/docs/handlers/redirect.mdx +115 -0
  377. package/docs/handlers/system-handlers.mdx +41 -0
  378. package/docs/handlers/url-forward.mdx +204 -0
  379. package/docs/handlers/url-rewrite.mdx +224 -0
  380. package/docs/handlers/websocket-handler.mdx +154 -0
  381. package/docs/home.mdx +6 -0
  382. package/docs/managed-edge/overview.md +78 -0
  383. package/docs/mcp-server/configuration-migration-guide.mdx +344 -0
  384. package/docs/mcp-server/custom-tools.mdx +487 -0
  385. package/docs/mcp-server/graphql.mdx +241 -0
  386. package/docs/mcp-server/introduction.mdx +122 -0
  387. package/docs/mcp-server/openai-apps-sdk.mdx +160 -0
  388. package/docs/mcp-server/prompts.mdx +283 -0
  389. package/docs/mcp-server/resources.mdx +288 -0
  390. package/docs/mcp-server/testing.mdx +53 -0
  391. package/docs/mcp-server/tools.mdx +306 -0
  392. package/docs/policies/_index.md +92 -0
  393. package/docs/policies/ab-test-inbound/intro.md +8 -0
  394. package/docs/policies/ab-test-inbound/policy.ts +14 -0
  395. package/docs/policies/ab-test-inbound/schema.json +27 -0
  396. package/docs/policies/ab-test-outbound/intro.md +8 -0
  397. package/docs/policies/ab-test-outbound/policy.ts +26 -0
  398. package/docs/policies/ab-test-outbound/schema.json +27 -0
  399. package/docs/policies/acl-policy-inbound/intro.md +5 -0
  400. package/docs/policies/acl-policy-inbound/policy.ts +32 -0
  401. package/docs/policies/acl-policy-inbound/schema.json +52 -0
  402. package/docs/policies/akamai-ai-firewall/schema.json +98 -0
  403. package/docs/policies/amberflo-metering-inbound/doc.md +183 -0
  404. package/docs/policies/amberflo-metering-inbound/intro.md +20 -0
  405. package/docs/policies/amberflo-metering-inbound/schema.json +108 -0
  406. package/docs/policies/api-key-inbound/doc.md +77 -0
  407. package/docs/policies/api-key-inbound/intro.md +30 -0
  408. package/docs/policies/api-key-inbound/schema.json +84 -0
  409. package/docs/policies/archive-request-aws-s3-inbound/intro.md +4 -0
  410. package/docs/policies/archive-request-aws-s3-inbound/policy.ts +58 -0
  411. package/docs/policies/archive-request-aws-s3-inbound/schema.json +68 -0
  412. package/docs/policies/archive-request-azure-storage-inbound/doc.md +31 -0
  413. package/docs/policies/archive-request-azure-storage-inbound/intro.md +4 -0
  414. package/docs/policies/archive-request-azure-storage-inbound/policy.ts +54 -0
  415. package/docs/policies/archive-request-azure-storage-inbound/schema.json +53 -0
  416. package/docs/policies/archive-request-gcp-storage-inbound/doc.md +63 -0
  417. package/docs/policies/archive-request-gcp-storage-inbound/intro.md +4 -0
  418. package/docs/policies/archive-request-gcp-storage-inbound/policy.ts +68 -0
  419. package/docs/policies/archive-request-gcp-storage-inbound/schema.json +47 -0
  420. package/docs/policies/archive-response-aws-s3-outbound/intro.md +2 -0
  421. package/docs/policies/archive-response-aws-s3-outbound/policy.ts +59 -0
  422. package/docs/policies/archive-response-aws-s3-outbound/schema.json +68 -0
  423. package/docs/policies/archive-response-azure-storage-outbound/doc.md +31 -0
  424. package/docs/policies/archive-response-azure-storage-outbound/intro.md +3 -0
  425. package/docs/policies/archive-response-azure-storage-outbound/policy.ts +54 -0
  426. package/docs/policies/archive-response-azure-storage-outbound/schema.json +53 -0
  427. package/docs/policies/audit-log-inbound/doc.md +78 -0
  428. package/docs/policies/audit-log-inbound/intro.md +10 -0
  429. package/docs/policies/audit-log-inbound/schema.json +81 -0
  430. package/docs/policies/auth0-jwt-auth-inbound/doc.md +125 -0
  431. package/docs/policies/auth0-jwt-auth-inbound/intro.md +17 -0
  432. package/docs/policies/auth0-jwt-auth-inbound/schema.json +74 -0
  433. package/docs/policies/authzen-inbound/doc.md +24 -0
  434. package/docs/policies/authzen-inbound/intro.md +31 -0
  435. package/docs/policies/authzen-inbound/schema.json +126 -0
  436. package/docs/policies/axiomatics-authz-inbound/doc.md +144 -0
  437. package/docs/policies/axiomatics-authz-inbound/intro.md +11 -0
  438. package/docs/policies/axiomatics-authz-inbound/schema.json +161 -0
  439. package/docs/policies/basic-auth-inbound/intro.md +9 -0
  440. package/docs/policies/basic-auth-inbound/schema.json +99 -0
  441. package/docs/policies/bot-detection-inbound/intro.md +4 -0
  442. package/docs/policies/bot-detection-inbound/schema.json +56 -0
  443. package/docs/policies/brownout-inbound/doc.md +55 -0
  444. package/docs/policies/brownout-inbound/intro.md +12 -0
  445. package/docs/policies/brownout-inbound/schema.json +115 -0
  446. package/docs/policies/caching-inbound/doc.md +209 -0
  447. package/docs/policies/caching-inbound/intro.md +23 -0
  448. package/docs/policies/caching-inbound/schema.json +98 -0
  449. package/docs/policies/change-method-inbound/schema.json +56 -0
  450. package/docs/policies/clear-headers-inbound/schema.json +59 -0
  451. package/docs/policies/clear-headers-outbound/schema.json +59 -0
  452. package/docs/policies/clerk-jwt-auth-inbound/doc.md +85 -0
  453. package/docs/policies/clerk-jwt-auth-inbound/intro.md +4 -0
  454. package/docs/policies/clerk-jwt-auth-inbound/schema.json +68 -0
  455. package/docs/policies/cognito-jwt-auth-inbound/intro.md +7 -0
  456. package/docs/policies/cognito-jwt-auth-inbound/schema.json +74 -0
  457. package/docs/policies/comet-opik-tracing-inbound/schema.json +65 -0
  458. package/docs/policies/complex-rate-limit-inbound/doc.md +20 -0
  459. package/docs/policies/complex-rate-limit-inbound/intro.md +23 -0
  460. package/docs/policies/complex-rate-limit-inbound/schema.json +142 -0
  461. package/docs/policies/composite-inbound/doc.md +69 -0
  462. package/docs/policies/composite-inbound/intro.md +15 -0
  463. package/docs/policies/composite-inbound/schema.json +59 -0
  464. package/docs/policies/composite-outbound/intro.md +6 -0
  465. package/docs/policies/composite-outbound/schema.json +59 -0
  466. package/docs/policies/curity-phantom-token-inbound/doc.md +109 -0
  467. package/docs/policies/curity-phantom-token-inbound/intro.md +3 -0
  468. package/docs/policies/curity-phantom-token-inbound/schema.json +68 -0
  469. package/docs/policies/custom-code-inbound/doc.md +267 -0
  470. package/docs/policies/custom-code-inbound/intro.md +2 -0
  471. package/docs/policies/custom-code-inbound/schema.json +48 -0
  472. package/docs/policies/custom-code-outbound/doc.md +235 -0
  473. package/docs/policies/custom-code-outbound/intro.md +2 -0
  474. package/docs/policies/custom-code-outbound/schema.json +43 -0
  475. package/docs/policies/firebase-jwt-inbound/intro.md +6 -0
  476. package/docs/policies/firebase-jwt-inbound/schema.json +68 -0
  477. package/docs/policies/formdata-to-json-inbound/schema.json +60 -0
  478. package/docs/policies/galileo-tracing-inbound/schema.json +65 -0
  479. package/docs/policies/geo-filter-inbound/doc.md +33 -0
  480. package/docs/policies/geo-filter-inbound/schema.json +108 -0
  481. package/docs/policies/graphql-complexity-limit-inbound/doc.md +48 -0
  482. package/docs/policies/graphql-complexity-limit-inbound/intro.md +2 -0
  483. package/docs/policies/graphql-complexity-limit-inbound/schema.json +90 -0
  484. package/docs/policies/graphql-disable-introspection-inbound/doc.md +66 -0
  485. package/docs/policies/graphql-disable-introspection-inbound/intro.md +15 -0
  486. package/docs/policies/graphql-disable-introspection-inbound/schema.json +48 -0
  487. package/docs/policies/graphql-introspection-filter-outbound/doc.md +148 -0
  488. package/docs/policies/graphql-introspection-filter-outbound/schema.json +79 -0
  489. package/docs/policies/hmac-auth-inbound/doc.md +30 -0
  490. package/docs/policies/hmac-auth-inbound/intro.md +10 -0
  491. package/docs/policies/hmac-auth-inbound/policy.ts +70 -0
  492. package/docs/policies/hmac-auth-inbound/schema.json +53 -0
  493. package/docs/policies/http-deprecation-outbound/doc.md +73 -0
  494. package/docs/policies/http-deprecation-outbound/schema.json +83 -0
  495. package/docs/policies/ip-restriction-inbound/intro.md +8 -0
  496. package/docs/policies/ip-restriction-inbound/policy.ts +40 -0
  497. package/docs/policies/ip-restriction-inbound/schema.json +58 -0
  498. package/docs/policies/jwt-scopes-inbound/schema.json +59 -0
  499. package/docs/policies/ldap-auth-inbound/schema.json +56 -0
  500. package/docs/policies/mock-api-inbound/schema.json +72 -0
  501. package/docs/policies/moesif-inbound/doc.md +44 -0
  502. package/docs/policies/moesif-inbound/intro.md +6 -0
  503. package/docs/policies/moesif-inbound/schema.json +68 -0
  504. package/docs/policies/monetization-inbound/doc.md +87 -0
  505. package/docs/policies/monetization-inbound/intro.md +6 -0
  506. package/docs/policies/monetization-inbound/schema.json +102 -0
  507. package/docs/policies/mtls-auth-inbound/intro.md +6 -0
  508. package/docs/policies/mtls-auth-inbound/schema.json +68 -0
  509. package/docs/policies/okta-fga-authz-inbound/doc.md +181 -0
  510. package/docs/policies/okta-fga-authz-inbound/intro.md +20 -0
  511. package/docs/policies/okta-fga-authz-inbound/schema.json +104 -0
  512. package/docs/policies/okta-jwt-auth-inbound/intro.md +7 -0
  513. package/docs/policies/okta-jwt-auth-inbound/schema.json +74 -0
  514. package/docs/policies/open-id-jwt-auth-inbound/doc.md +58 -0
  515. package/docs/policies/open-id-jwt-auth-inbound/intro.md +30 -0
  516. package/docs/policies/open-id-jwt-auth-inbound/schema.json +128 -0
  517. package/docs/policies/openfga-authz-inbound/doc.md +207 -0
  518. package/docs/policies/openfga-authz-inbound/intro.md +17 -0
  519. package/docs/policies/openfga-authz-inbound/schema.json +191 -0
  520. package/docs/policies/openmeter-inbound/doc.md +163 -0
  521. package/docs/policies/openmeter-inbound/intro.md +18 -0
  522. package/docs/policies/openmeter-inbound/schema.json +183 -0
  523. package/docs/policies/prompt-injection-outbound/doc.md +106 -0
  524. package/docs/policies/prompt-injection-outbound/intro.md +4 -0
  525. package/docs/policies/prompt-injection-outbound/schema.json +74 -0
  526. package/docs/policies/propel-auth-jwt-inbound/doc.md +88 -0
  527. package/docs/policies/propel-auth-jwt-inbound/intro.md +4 -0
  528. package/docs/policies/propel-auth-jwt-inbound/schema.json +74 -0
  529. package/docs/policies/query-param-to-header-inbound/doc.md +70 -0
  530. package/docs/policies/query-param-to-header-inbound/intro.md +5 -0
  531. package/docs/policies/query-param-to-header-inbound/schema.json +74 -0
  532. package/docs/policies/quota-inbound/doc.md +235 -0
  533. package/docs/policies/quota-inbound/intro.md +7 -0
  534. package/docs/policies/quota-inbound/schema.json +133 -0
  535. package/docs/policies/rate-limit-inbound/doc.md +78 -0
  536. package/docs/policies/rate-limit-inbound/intro.md +30 -0
  537. package/docs/policies/rate-limit-inbound/schema.json +134 -0
  538. package/docs/policies/rbac-policy-inbound/intro.md +3 -0
  539. package/docs/policies/rbac-policy-inbound/policy.ts +42 -0
  540. package/docs/policies/rbac-policy-inbound/schema.json +52 -0
  541. package/docs/policies/readme-metrics-inbound/doc.md +1 -0
  542. package/docs/policies/readme-metrics-inbound/intro.md +3 -0
  543. package/docs/policies/readme-metrics-inbound/schema.json +84 -0
  544. package/docs/policies/remove-headers-inbound/schema.json +59 -0
  545. package/docs/policies/remove-headers-outbound/schema.json +59 -0
  546. package/docs/policies/remove-query-params-inbound/schema.json +59 -0
  547. package/docs/policies/replace-string-outbound/schema.json +69 -0
  548. package/docs/policies/request-size-limit-inbound/schema.json +60 -0
  549. package/docs/policies/request-validation-inbound/doc.md +72 -0
  550. package/docs/policies/request-validation-inbound/intro.md +24 -0
  551. package/docs/policies/request-validation-inbound/schema.json +98 -0
  552. package/docs/policies/require-origin-inbound/intro.md +12 -0
  553. package/docs/policies/require-origin-inbound/schema.json +65 -0
  554. package/docs/policies/secret-masking-outbound/doc.md +41 -0
  555. package/docs/policies/secret-masking-outbound/intro.md +13 -0
  556. package/docs/policies/secret-masking-outbound/schema.json +65 -0
  557. package/docs/policies/semantic-cache-inbound/doc.md +63 -0
  558. package/docs/policies/semantic-cache-inbound/intro.md +4 -0
  559. package/docs/policies/semantic-cache-inbound/schema.json +179 -0
  560. package/docs/policies/set-body-inbound/intro.md +7 -0
  561. package/docs/policies/set-body-inbound/schema.json +56 -0
  562. package/docs/policies/set-headers-inbound/doc.md +41 -0
  563. package/docs/policies/set-headers-inbound/intro.md +2 -0
  564. package/docs/policies/set-headers-inbound/schema.json +83 -0
  565. package/docs/policies/set-headers-outbound/schema.json +83 -0
  566. package/docs/policies/set-query-params-inbound/schema.json +83 -0
  567. package/docs/policies/set-status-outbound/schema.json +62 -0
  568. package/docs/policies/sleep-inbound/schema.json +56 -0
  569. package/docs/policies/stripe-webhook-verification-inbound/intro.md +2 -0
  570. package/docs/policies/stripe-webhook-verification-inbound/schema.json +60 -0
  571. package/docs/policies/supabase-jwt-auth-inbound/doc.md +29 -0
  572. package/docs/policies/supabase-jwt-auth-inbound/intro.md +12 -0
  573. package/docs/policies/supabase-jwt-auth-inbound/schema.json +86 -0
  574. package/docs/policies/transform-body-inbound/intro.md +8 -0
  575. package/docs/policies/transform-body-inbound/policy.ts +16 -0
  576. package/docs/policies/transform-body-inbound/schema.json +27 -0
  577. package/docs/policies/transform-body-outbound/intro.md +8 -0
  578. package/docs/policies/transform-body-outbound/policy.ts +19 -0
  579. package/docs/policies/transform-body-outbound/schema.json +27 -0
  580. package/docs/policies/upstream-azure-ad-service-auth-inbound/doc.md +82 -0
  581. package/docs/policies/upstream-azure-ad-service-auth-inbound/intro.md +20 -0
  582. package/docs/policies/upstream-azure-ad-service-auth-inbound/schema.json +84 -0
  583. package/docs/policies/upstream-firebase-admin-auth-inbound/intro.md +10 -0
  584. package/docs/policies/upstream-firebase-admin-auth-inbound/schema.json +68 -0
  585. package/docs/policies/upstream-firebase-user-auth-inbound/intro.md +2 -0
  586. package/docs/policies/upstream-firebase-user-auth-inbound/schema.json +113 -0
  587. package/docs/policies/upstream-gcp-federated-auth-inbound/doc.md +139 -0
  588. package/docs/policies/upstream-gcp-federated-auth-inbound/intro.md +21 -0
  589. package/docs/policies/upstream-gcp-federated-auth-inbound/schema.json +96 -0
  590. package/docs/policies/upstream-gcp-jwt-inbound/intro.md +10 -0
  591. package/docs/policies/upstream-gcp-jwt-inbound/schema.json +62 -0
  592. package/docs/policies/upstream-gcp-service-auth-inbound/doc.md +132 -0
  593. package/docs/policies/upstream-gcp-service-auth-inbound/intro.md +25 -0
  594. package/docs/policies/upstream-gcp-service-auth-inbound/schema.json +95 -0
  595. package/docs/policies/upstream-zuplo-jwt-auth-inbound/doc.md +213 -0
  596. package/docs/policies/upstream-zuplo-jwt-auth-inbound/intro.md +16 -0
  597. package/docs/policies/upstream-zuplo-jwt-auth-inbound/schema.json +101 -0
  598. package/docs/policies/validate-json-schema-inbound/doc.md +129 -0
  599. package/docs/policies/validate-json-schema-inbound/intro.md +7 -0
  600. package/docs/policies/validate-json-schema-inbound/schema.json +56 -0
  601. package/docs/policies/web-bot-auth-inbound/doc.md +104 -0
  602. package/docs/policies/web-bot-auth-inbound/intro.md +16 -0
  603. package/docs/policies/web-bot-auth-inbound/schema.json +76 -0
  604. package/docs/policies/xml-to-json-outbound/doc.md +71 -0
  605. package/docs/policies/xml-to-json-outbound/intro.md +4 -0
  606. package/docs/policies/xml-to-json-outbound/schema.json +117 -0
  607. package/docs/programmable-api/audit-log.mdx +74 -0
  608. package/docs/programmable-api/background-dispatcher.mdx +124 -0
  609. package/docs/programmable-api/background-loader.mdx +104 -0
  610. package/docs/programmable-api/cache.mdx +186 -0
  611. package/docs/programmable-api/compatibility-dates.mdx +201 -0
  612. package/docs/programmable-api/console-logging.mdx +48 -0
  613. package/docs/programmable-api/context-data.mdx +127 -0
  614. package/docs/programmable-api/custom-cors-policy.mdx +64 -0
  615. package/docs/programmable-api/environment.mdx +328 -0
  616. package/docs/programmable-api/hooks.mdx +569 -0
  617. package/docs/programmable-api/http-problems.mdx +385 -0
  618. package/docs/programmable-api/jwt-service-plugin.mdx +420 -0
  619. package/docs/programmable-api/logger.mdx +223 -0
  620. package/docs/programmable-api/memory-zone-read-through-cache.mdx +96 -0
  621. package/docs/programmable-api/node-modules.mdx +67 -0
  622. package/docs/programmable-api/not-found-handler.mdx +47 -0
  623. package/docs/programmable-api/oauth-protected-resource-plugin.mdx +46 -0
  624. package/docs/programmable-api/overview.mdx +213 -0
  625. package/docs/programmable-api/problem-response-formatter.mdx +183 -0
  626. package/docs/programmable-api/request-user.mdx +289 -0
  627. package/docs/programmable-api/reusing-code.mdx +26 -0
  628. package/docs/programmable-api/route-raw.mdx +55 -0
  629. package/docs/programmable-api/runtime-behaviors.mdx +25 -0
  630. package/docs/programmable-api/runtime-errors.mdx +246 -0
  631. package/docs/programmable-api/runtime-extensions.mdx +340 -0
  632. package/docs/programmable-api/safely-clone-a-request-or-response.mdx +57 -0
  633. package/docs/programmable-api/streaming-zone-cache.mdx +155 -0
  634. package/docs/programmable-api/web-crypto-apis.mdx +219 -0
  635. package/docs/programmable-api/web-standard-apis.mdx +109 -0
  636. package/docs/programmable-api/zone-cache.mdx +131 -0
  637. package/docs/programmable-api/zp-body-removed.mdx +32 -0
  638. package/docs/programmable-api/zuplo-context.mdx +414 -0
  639. package/docs/programmable-api/zuplo-id-token.mdx +90 -0
  640. package/docs/programmable-api/zuplo-json.mdx +91 -0
  641. package/docs/programmable-api/zuplo-request.mdx +200 -0
  642. package/docs/sample-apis.mdx +78 -0
  643. package/docs/self-hosted/overview.md +60 -0
  644. package/package.json +6 -5
@@ -0,0 +1,314 @@
1
+ ---
2
+ title: Monetization Policy Reference
3
+ sidebar_label: Monetization Policy
4
+ ---
5
+
6
+ :::note{title="Beta"}
7
+
8
+ API Monetization is in beta and free to try. The APIs are stable but should be
9
+ evaluated in non-production environments first. To go to production, contact
10
+ [sales@zuplo.com](mailto:sales@zuplo.com). Production pricing has not yet been
11
+ announced.
12
+
13
+ :::
14
+
15
+ The `MonetizationInboundPolicy` is the gateway enforcement mechanism. It runs on
16
+ every request to a protected route, authenticates the API key, checks the
17
+ customer's subscription and payment status, enforces quota, meters the request,
18
+ and allows or blocks access.
19
+
20
+ ## Basic configuration
21
+
22
+ Add the policy to your `policies.json`:
23
+
24
+ ```json
25
+ {
26
+ "name": "monetization-inbound",
27
+ "policyType": "monetization-inbound",
28
+ "handler": {
29
+ "export": "MonetizationInboundPolicy",
30
+ "module": "$import(@zuplo/runtime)",
31
+ "options": {
32
+ "meters": {
33
+ "api_requests": 1
34
+ }
35
+ }
36
+ }
37
+ }
38
+ ```
39
+
40
+ Then reference it in your route's inbound policy pipeline:
41
+
42
+ ```json
43
+ {
44
+ "x-zuplo-route": {
45
+ "policies": {
46
+ "inbound": ["monetization-inbound"]
47
+ }
48
+ }
49
+ }
50
+ ```
51
+
52
+ :::note
53
+
54
+ The `MonetizationInboundPolicy` handles API key authentication internally. It
55
+ reads the API key from the `Authorization` header, validates it, and sets
56
+ `request.user`. You do not need a separate `api-key-auth` policy on monetized
57
+ routes — the monetization policy replaces it.
58
+
59
+ :::
60
+
61
+ ## Configuration options
62
+
63
+ | Option | Type | Default | Description |
64
+ | -------------------- | ------------------ | ----------------- | ------------------------------------------------- |
65
+ | `meters` | object | (required) | Map of meter keys to increment values |
66
+ | `meterOnStatusCodes` | string or number[] | `"200-299"` | Status code range to meter |
67
+ | `authHeader` | string | `"authorization"` | Header to read the API key from |
68
+ | `authScheme` | string | `"Bearer"` | Expected auth scheme prefix |
69
+ | `cacheTtlSeconds` | number | `60` | How long to cache subscription data (minimum 60s) |
70
+
71
+ ### `meters`
72
+
73
+ The `meters` option defines which meters to increment and by how much when a
74
+ request is processed. Values must be positive numbers.
75
+
76
+ ```json
77
+ // Increment the api_requests meter by 1 per request
78
+ { "meters": { "api_requests": 1 } }
79
+
80
+ // Increment multiple meters simultaneously
81
+ { "meters": { "api_requests": 1, "api_credits": 5 } }
82
+
83
+ // Increment by a fixed amount per request (expensive endpoint)
84
+ { "meters": { "api_credits": 10 } }
85
+ ```
86
+
87
+ ### `meterOnStatusCodes`
88
+
89
+ Controls which responses count toward metering. By default, only successful
90
+ responses (2xx) are metered.
91
+
92
+ ```json
93
+ // Only meter successful responses (default)
94
+ { "meterOnStatusCodes": "200-299" }
95
+
96
+ // Only meter 200 OK
97
+ { "meterOnStatusCodes": "200" }
98
+
99
+ // Meter success and redirects
100
+ { "meterOnStatusCodes": "200-399" }
101
+
102
+ // Comma-separated ranges
103
+ { "meterOnStatusCodes": "200, 201, 300-304" }
104
+
105
+ // Array of specific status codes
106
+ { "meterOnStatusCodes": [200, 201, 202] }
107
+ ```
108
+
109
+ :::caution
110
+
111
+ The wildcard `"*"` is not a valid value for `meterOnStatusCodes` and throws a
112
+ configuration error. Use a specific range like `"200-599"` if you want to meter
113
+ most responses.
114
+
115
+ :::
116
+
117
+ This is important for fairness: if your backend returns a 500 error, you
118
+ probably don't want to charge the customer for that request.
119
+
120
+ ### `authHeader`
121
+
122
+ The header to read the API key from. Defaults to `"authorization"`.
123
+
124
+ ### `authScheme`
125
+
126
+ The expected auth scheme prefix. Defaults to `"Bearer"`. The policy expects the
127
+ header value in the format `{authScheme} {apiKey}`.
128
+
129
+ ### `cacheTtlSeconds`
130
+
131
+ How long to cache subscription and entitlement data, in seconds. Defaults to
132
+ `60` with a minimum of `60`. Increasing this value reduces calls to the gateway
133
+ service but means entitlement changes take longer to propagate.
134
+
135
+ ## Subscription and payment validation
136
+
137
+ The policy checks payment status on every request. Access is granted when:
138
+
139
+ - The subscription is active and not expired
140
+ - Payment status is `paid` or `not_required` (free plans)
141
+
142
+ When payment fails, a configurable grace period (default 3 days) allows
143
+ continued access while retries are attempted. After the grace period, access is
144
+ blocked until payment succeeds.
145
+
146
+ The grace period is configurable via metadata on the plan or customer:
147
+
148
+ - Plan metadata key: `zuplo_max_payment_overdue_days`
149
+ - Customer metadata key: `zuplo_max_payment_overdue_days`
150
+ - Default: `3` (days)
151
+
152
+ ## Multiple policies for different routes
153
+
154
+ Different routes can have different metering configurations. Define multiple
155
+ policy instances:
156
+
157
+ ```json
158
+ [
159
+ {
160
+ "name": "monetization-standard",
161
+ "policyType": "monetization-inbound",
162
+ "handler": {
163
+ "export": "MonetizationInboundPolicy",
164
+ "module": "$import(@zuplo/runtime)",
165
+ "options": {
166
+ "meters": { "api_requests": 1 }
167
+ }
168
+ }
169
+ },
170
+ {
171
+ "name": "monetization-ai",
172
+ "policyType": "monetization-inbound",
173
+ "handler": {
174
+ "export": "MonetizationInboundPolicy",
175
+ "module": "$import(@zuplo/runtime)",
176
+ "options": {
177
+ "meters": { "api_requests": 1, "tokens": 1 }
178
+ }
179
+ }
180
+ },
181
+ {
182
+ "name": "monetization-premium",
183
+ "policyType": "monetization-inbound",
184
+ "handler": {
185
+ "export": "MonetizationInboundPolicy",
186
+ "module": "$import(@zuplo/runtime)",
187
+ "options": {
188
+ "meters": { "api_credits": 10 }
189
+ }
190
+ }
191
+ }
192
+ ]
193
+ ```
194
+
195
+ Apply each to the appropriate routes:
196
+
197
+ ```json
198
+ // Simple lookup -> 1 request meter
199
+ "/api/v1/search": { "inbound": ["monetization-standard"] }
200
+
201
+ // AI endpoint -> 1 request + token metering
202
+ "/api/v1/analyze": { "inbound": ["monetization-ai"] }
203
+
204
+ // Premium endpoint -> 10 credits
205
+ "/api/v1/bulk-export": { "inbound": ["monetization-premium"] }
206
+ ```
207
+
208
+ ## Dynamic metering
209
+
210
+ For AI APIs and other variable-cost endpoints, you may need to meter based on
211
+ the response — for example, counting the number of tokens returned by an LLM.
212
+
213
+ Use the `setMeters` and `addMeters` static methods to set meter values
214
+ programmatically at runtime from a custom policy or handler:
215
+
216
+ ```typescript
217
+ import { MonetizationInboundPolicy } from "@zuplo/runtime";
218
+
219
+ // In a custom outbound policy, set meters based on the response
220
+ export default async function meterTokens(response, request, context) {
221
+ if (response.ok) {
222
+ const body = await response.json();
223
+ const tokens = body.usage?.total_tokens ?? 0;
224
+
225
+ MonetizationInboundPolicy.setMeters(context, {
226
+ tokens_used: tokens,
227
+ });
228
+ }
229
+ return response;
230
+ }
231
+ ```
232
+
233
+ You can also use `addMeters` to add to existing meter values rather than
234
+ replacing them:
235
+
236
+ ```typescript
237
+ MonetizationInboundPolicy.addMeters(context, {
238
+ api_credits: creditsConsumed,
239
+ });
240
+ ```
241
+
242
+ You can also read the current runtime meter values at any point:
243
+
244
+ ```typescript
245
+ const meters = MonetizationInboundPolicy.getMeters(context);
246
+ // { tokens_used: 150 }
247
+ ```
248
+
249
+ ### How meter values are merged
250
+
251
+ The final metering hook combines static and runtime values before usage is sent:
252
+
253
+ - `options.meters` provides the static base values
254
+ - `setMeters` replaces the current runtime meter map, overriding matching static
255
+ keys
256
+ - `addMeters` accumulates into the runtime meter map, then combines additively
257
+ with static values
258
+ - If both static and runtime maps are empty, metering is skipped
259
+
260
+ For a meter key like `api` with `options.meters.api = 1`:
261
+
262
+ - `setMeters(context, { api: 50 })` sends `api: 50` (replaces static value)
263
+ - `addMeters(context, { api: 50 })` sends `api: 51` (adds to static value)
264
+
265
+ ## Error responses
266
+
267
+ The policy returns `403 Forbidden` for all error conditions. Responses follow
268
+ the RFC 7807 Problem Details format:
269
+
270
+ ```json
271
+ {
272
+ "type": "https://httpproblems.com/http-status/403",
273
+ "title": "Forbidden",
274
+ "status": 403,
275
+ "detail": "API Key has exceeded the allowed limit for \"api_requests\" meter.",
276
+ "instance": "/api/v1/resource",
277
+ "trace": {
278
+ "timestamp": "2026-01-15T10:00:00Z",
279
+ "requestId": "req_abc123",
280
+ "buildId": "build_xyz"
281
+ }
282
+ }
283
+ ```
284
+
285
+ Common error details:
286
+
287
+ | Condition | `detail` message |
288
+ | ------------------------- | ------------------------------------------------------------------- |
289
+ | No auth header | `"No Authorization Header"` |
290
+ | Wrong auth scheme | `"Invalid Authorization Scheme"` |
291
+ | Invalid API key | `"API Key is invalid or does not have access to the API"` |
292
+ | Expired API key | `"API Key has expired."` |
293
+ | Expired subscription | `"API Key has an expired subscription."` |
294
+ | Payment not made | `"Payment has not been made."` |
295
+ | Payment overdue | `"Payment is overdue. Please update your payment method."` |
296
+ | Quota exhausted | `"API Key has exceeded the allowed limit for \"X\" meter."` |
297
+ | Meter not in subscription | `"API Key does not have \"X\" meter provided by the subscription."` |
298
+
299
+ ## Pipeline ordering
300
+
301
+ The monetization policy should be the first policy in the inbound pipeline since
302
+ it handles authentication:
303
+
304
+ ```
305
+ 1. monetization-inbound → Authenticates, checks subscription, enforces quota, meters usage
306
+ 2. rate-limiting → (Optional) Per-second/per-minute spike protection
307
+ 3. caching → (Optional) Response caching
308
+ 4. → Route handler → Your API logic
309
+ ```
310
+
311
+ If you still want per-second or per-minute rate limiting on top of monthly
312
+ quotas, add a standalone rate-limiting policy after the monetization policy.
313
+ These serve different purposes: monetization enforces billing quotas, while rate
314
+ limiting protects against traffic spikes.
@@ -0,0 +1,366 @@
1
+ ---
2
+ title: Plan Examples
3
+ sidebar_label: Plan Examples
4
+ ---
5
+
6
+ :::note{title="Beta"}
7
+
8
+ API Monetization is in beta and free to try. The APIs are stable but should be
9
+ evaluated in non-production environments first. To go to production, contact
10
+ [sales@zuplo.com](mailto:sales@zuplo.com). Production pricing has not yet been
11
+ announced.
12
+
13
+ :::
14
+
15
+ This guide walks through progressively building a plan, starting simple and
16
+ adding complexity. All examples assume you have already created:
17
+
18
+ - A meter called `api_requests` that tracks API calls
19
+ - A feature called `api_requests` linked to that meter
20
+
21
+ ## 1. Basic Fixed Monthly Plan
22
+
23
+ A simple plan with a flat $9.99/month fee and 1,000 API requests included.
24
+
25
+ ```shell
26
+ curl \
27
+ https://dev.zuplo.com/v3/metering/$BUCKET_ID/plans \
28
+ --request POST \
29
+ --header "Authorization: Bearer $ZAPI_KEY" \
30
+ --header "Content-Type: application/json" \
31
+ --data @- << EOF
32
+ {
33
+ "key": "starter",
34
+ "name": "Starter Plan",
35
+ "description": "1,000 API requests per month",
36
+ "currency": "USD",
37
+ "billingCadence": "P1M",
38
+ "phases": [
39
+ {
40
+ "key": "default",
41
+ "name": "Default",
42
+ "duration": null,
43
+ "rateCards": [
44
+ {
45
+ "type": "flat_fee",
46
+ "key": "api_requests",
47
+ "name": "API Requests",
48
+ "featureKey": "api_requests",
49
+ "billingCadence": "P1M",
50
+ "price": {
51
+ "type": "flat",
52
+ "amount": "9.99"
53
+ },
54
+ "entitlementTemplate": {
55
+ "type": "metered",
56
+ "issueAfterReset": 1000,
57
+ "isSoftLimit": false,
58
+ "usagePeriod": "P1M"
59
+ }
60
+ }
61
+ ]
62
+ }
63
+ ]
64
+ }
65
+ EOF
66
+ ```
67
+
68
+ **What this does:**
69
+
70
+ - Charges $9.99 at the start of each month
71
+ - Grants 1,000 API requests per month
72
+ - Hard limit (`isSoftLimit: false`) - requests are blocked after 1,000
73
+
74
+ ## 2. Add a Free Trial
75
+
76
+ Building on the previous example, add a 2-week free trial with 1,000 requests.
77
+
78
+ ```shell
79
+ curl \
80
+ https://dev.zuplo.com/v3/metering/$BUCKET_ID/plans \
81
+ --request POST \
82
+ --header "Authorization: Bearer $ZAPI_KEY" \
83
+ --header "Content-Type: application/json" \
84
+ --data @- << EOF
85
+ {
86
+ "key": "starter",
87
+ "name": "Starter Plan",
88
+ "description": "1,000 API requests per month with 2-week free trial",
89
+ "currency": "USD",
90
+ "billingCadence": "P1M",
91
+ "phases": [
92
+ {
93
+ "key": "trial",
94
+ "name": "Free Trial",
95
+ "duration": "P2W",
96
+ "rateCards": [
97
+ {
98
+ "type": "flat_fee",
99
+ "key": "api_requests",
100
+ "name": "API Requests (Trial)",
101
+ "featureKey": "api_requests",
102
+ "billingCadence": null,
103
+ "price": null,
104
+ "entitlementTemplate": {
105
+ "type": "metered",
106
+ "issueAfterReset": 1000,
107
+ "isSoftLimit": false,
108
+ "usagePeriod": "P2W"
109
+ }
110
+ }
111
+ ]
112
+ },
113
+ {
114
+ "key": "default",
115
+ "name": "Default",
116
+ "duration": null,
117
+ "rateCards": [
118
+ {
119
+ "type": "flat_fee",
120
+ "key": "api_requests",
121
+ "name": "API Requests",
122
+ "featureKey": "api_requests",
123
+ "billingCadence": "P1M",
124
+ "price": {
125
+ "type": "flat",
126
+ "amount": "9.99"
127
+ },
128
+ "entitlementTemplate": {
129
+ "type": "metered",
130
+ "issueAfterReset": 1000,
131
+ "isSoftLimit": false,
132
+ "usagePeriod": "P1M"
133
+ }
134
+ }
135
+ ]
136
+ }
137
+ ]
138
+ }
139
+ EOF
140
+ ```
141
+
142
+ **What changed:**
143
+
144
+ - Added a `trial` phase with `duration: "P2W"` (2 weeks)
145
+ - Trial phase has `price: null` and `billingCadence: null` - it's free
146
+ - After 2 weeks, customer automatically moves to the `default` phase
147
+
148
+ ## 3. Add Overage Charges
149
+
150
+ Now allow customers to exceed their quota and charge $0.01 per additional
151
+ request after the first 1,000.
152
+
153
+ ```shell
154
+ curl \
155
+ https://dev.zuplo.com/v3/metering/$BUCKET_ID/plans \
156
+ --request POST \
157
+ --header "Authorization: Bearer $ZAPI_KEY" \
158
+ --header "Content-Type: application/json" \
159
+ --data @- << EOF
160
+ {
161
+ "key": "starter",
162
+ "name": "Starter Plan",
163
+ "description": "1,000 API requests per month with 2-week free trial and overages",
164
+ "currency": "USD",
165
+ "billingCadence": "P1M",
166
+ "phases": [
167
+ {
168
+ "key": "trial",
169
+ "name": "Free Trial",
170
+ "duration": "P2W",
171
+ "rateCards": [
172
+ {
173
+ "type": "flat_fee",
174
+ "key": "api_requests",
175
+ "name": "API Requests (Trial)",
176
+ "featureKey": "api_requests",
177
+ "billingCadence": null,
178
+ "price": null,
179
+ "entitlementTemplate": {
180
+ "type": "metered",
181
+ "issueAfterReset": 1000,
182
+ "isSoftLimit": false,
183
+ "usagePeriod": "P2W"
184
+ }
185
+ }
186
+ ]
187
+ },
188
+ {
189
+ "key": "default",
190
+ "name": "Default",
191
+ "duration": null,
192
+ "rateCards": [
193
+ {
194
+ "type": "usage_based",
195
+ "key": "api_requests",
196
+ "name": "API Requests",
197
+ "featureKey": "api_requests",
198
+ "billingCadence": "P1M",
199
+ "entitlementTemplate": {
200
+ "type": "metered",
201
+ "issueAfterReset": 1000,
202
+ "isSoftLimit": true,
203
+ "usagePeriod": "P1M"
204
+ },
205
+ "price": {
206
+ "type": "tiered",
207
+ "mode": "graduated",
208
+ "tiers": [
209
+ {
210
+ "upToAmount": "1000",
211
+ "flatPrice": { "type": "flat", "amount": "9.99" },
212
+ "unitPrice": null
213
+ },
214
+ {
215
+ "flatPrice": null,
216
+ "unitPrice": { "type": "unit", "amount": "0.01" }
217
+ }
218
+ ]
219
+ }
220
+ }
221
+ ]
222
+ }
223
+ ]
224
+ }
225
+ EOF
226
+ ```
227
+
228
+ **What changed:**
229
+
230
+ - Changed the rate card from `flat_fee` to `usage_based`
231
+ - Changed `isSoftLimit` to `true` - requests continue after 1,000
232
+ - Combined base fee and overage into tiered pricing: first 1,000 cost $9.99
233
+ flat, then $0.01 per additional request
234
+
235
+ **Example billing:**
236
+
237
+ | Usage | Base Fee | Overage | Total |
238
+ | ----- | -------- | ------------------- | ------ |
239
+ | 500 | $9.99 | $0 | $9.99 |
240
+ | 1,000 | $9.99 | $0 | $9.99 |
241
+ | 1,500 | $9.99 | 500 × $0.01 = $5 | $14.99 |
242
+ | 5,000 | $9.99 | 4,000 × $0.01 = $40 | $49.99 |
243
+
244
+ ## 4. Add Static Entitlements
245
+
246
+ Finally, add a static entitlement for "large payloads" that grants premium
247
+ features without metering.
248
+
249
+ :::note
250
+
251
+ Before adding the `large_payloads` rate card, you must first create a feature
252
+ with `key: "large_payloads"`.
253
+
254
+ :::
255
+
256
+ ```shell
257
+ curl \
258
+ https://dev.zuplo.com/v3/metering/$BUCKET_ID/plans \
259
+ --request POST \
260
+ --header "Authorization: Bearer $ZAPI_KEY" \
261
+ --header "Content-Type: application/json" \
262
+ --data @- << EOF
263
+ {
264
+ "key": "starter",
265
+ "name": "Starter Plan",
266
+ "description": "1,000 API requests per month with 2-week free trial and overages",
267
+ "currency": "USD",
268
+ "billingCadence": "P1M",
269
+ "phases": [
270
+ {
271
+ "key": "trial",
272
+ "name": "Free Trial",
273
+ "duration": "P2W",
274
+ "rateCards": [
275
+ {
276
+ "type": "flat_fee",
277
+ "key": "api_requests",
278
+ "name": "API Requests (Trial)",
279
+ "featureKey": "api_requests",
280
+ "billingCadence": null,
281
+ "price": null,
282
+ "entitlementTemplate": {
283
+ "type": "metered",
284
+ "issueAfterReset": 1000,
285
+ "isSoftLimit": false,
286
+ "usagePeriod": "P2W"
287
+ }
288
+ },
289
+ {
290
+ "type": "flat_fee",
291
+ "key": "large_payloads",
292
+ "name": "Large Payloads (Trial)",
293
+ "featureKey": "large_payloads",
294
+ "billingCadence": null,
295
+ "price": null,
296
+ "entitlementTemplate": {
297
+ "type": "boolean",
298
+ "config": true
299
+ }
300
+ }
301
+ ]
302
+ },
303
+ {
304
+ "key": "default",
305
+ "name": "Default",
306
+ "duration": null,
307
+ "rateCards": [
308
+ {
309
+ "type": "usage_based",
310
+ "key": "api_requests",
311
+ "name": "API Requests",
312
+ "featureKey": "api_requests",
313
+ "billingCadence": "P1M",
314
+ "entitlementTemplate": {
315
+ "type": "metered",
316
+ "issueAfterReset": 1000,
317
+ "isSoftLimit": true,
318
+ "usagePeriod": "P1M"
319
+ },
320
+ "price": {
321
+ "type": "tiered",
322
+ "mode": "graduated",
323
+ "tiers": [
324
+ {
325
+ "upToAmount": "1000",
326
+ "flatPrice": { "type": "flat", "amount": "9.99" },
327
+ "unitPrice": null
328
+ },
329
+ {
330
+ "flatPrice": null,
331
+ "unitPrice": { "type": "unit", "amount": "0.01" }
332
+ }
333
+ ]
334
+ }
335
+ },
336
+ {
337
+ "type": "flat_fee",
338
+ "key": "large_payloads",
339
+ "name": "Large Payloads",
340
+ "featureKey": "large_payloads",
341
+ "billingCadence": null,
342
+ "price": null,
343
+ "entitlementTemplate": {
344
+ "type": "boolean",
345
+ "config": true
346
+ }
347
+ }
348
+ ]
349
+ }
350
+ ]
351
+ }
352
+ EOF
353
+ ```
354
+
355
+ **What changed:**
356
+
357
+ - Added `large_payloads` rate card to both phases
358
+ - Uses `type: "boolean"` with `config: true` to grant the feature
359
+ - No meter required - this is a static on/off entitlement
360
+
361
+ **Final plan summary:**
362
+
363
+ | Phase | Duration | API Requests | Large Payloads | Cost |
364
+ | ------- | -------- | ------------------ | -------------- | ----------- |
365
+ | Trial | 2 weeks | 1,000 (hard limit) | Enabled | Free |
366
+ | Default | Ongoing | 1,000 + overages | Enabled | $9.99/month |