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,408 @@
1
+ ---
2
+ title: Migrate from Google Apigee to Zuplo
3
+ sidebar_label: Migrate from Apigee
4
+ ---
5
+
6
+ This guide walks through migrating from Google Apigee (including Apigee X,
7
+ Apigee hybrid, and legacy Apigee Edge) to Zuplo. It covers the key differences,
8
+ concept mapping, policy translation, and a step-by-step migration process.
9
+
10
+ :::caution{title="Apigee Edge End of Life"}
11
+
12
+ Apigee Edge for Private Cloud v4.53 reached end of life on April 11, 2026. The
13
+ final version (v4.53.01) reaches end of life on **February 26, 2027**. After
14
+ these dates, Google provides no security patches, bug fixes, or support. If you
15
+ are still running Apigee Edge, now is the time to migrate.
16
+
17
+ :::
18
+
19
+ ## Pre-migration checklist
20
+
21
+ Before starting your migration, gather the following from your Apigee
22
+ environment:
23
+
24
+ - [ ] **API proxy inventory** — List all active API proxies, their base paths,
25
+ and target endpoints
26
+ - [ ] **OpenAPI specs** — Export specs for each proxy (or document endpoints if
27
+ specs don't exist)
28
+ - [ ] **Policy audit** — List every policy attached to each proxy
29
+ (authentication, rate limiting, transformation, etc.)
30
+ - [ ] **Environment configuration** — Document KVM entries, target servers,
31
+ keystores, and virtual host settings
32
+ - [ ] **Developer portal content** — Export API documentation, custom pages, and
33
+ developer account data
34
+ - [ ] **CI/CD pipeline configuration** — Document your current deployment
35
+ process and any automation scripts
36
+ - [ ] **Traffic patterns** — Understand request volumes, peak usage times, and
37
+ geographic distribution of API consumers
38
+ - [ ] **Custom Java callouts** — Identify any Java callouts that will need
39
+ translation to TypeScript
40
+
41
+ ## Why teams migrate from Apigee
42
+
43
+ Apigee is one of the oldest API management platforms, acquired by Google
44
+ in 2016. While it offers deep enterprise analytics and compliance features,
45
+ teams increasingly find the platform difficult to justify:
46
+
47
+ - **Apigee Edge end-of-life** — Google has been sunsetting legacy Apigee Edge
48
+ (on-premises and private cloud) versions, pushing customers to migrate to
49
+ Apigee X on Google Cloud. This forced migration is an opportunity to evaluate
50
+ modern alternatives.
51
+ - **Google Cloud lock-in** — Apigee X is tightly coupled to Google Cloud
52
+ Platform. While Apigee hybrid exists, it adds operational complexity. Teams
53
+ running multi-cloud or non-GCP backends face unnecessary friction.
54
+ - **High cost** — Apigee pricing starts at approximately $1,500/month for just
55
+ 100K requests, with separate charges for environments, analytics, and
56
+ developer portals. Enterprise contracts often require five-figure monthly
57
+ commitments.
58
+ - **XML-based policy configuration** — Apigee policies are configured in verbose
59
+ XML files that are difficult to read, maintain, and version control. Custom
60
+ logic uses a limited JavaScript engine.
61
+ - **Slow deployment cycles** — Apigee deployments can take several minutes to
62
+ propagate, slowing down the development iteration loop.
63
+ - **Drupal-based developer portal** — Apigee's developer portal is built on
64
+ Drupal, requiring significant setup, customization, and ongoing maintenance.
65
+
66
+ :::tip
67
+
68
+ Zuplo has a video walkthrough of the Apigee to Zuplo migration process:
69
+ [Migrating from Apigee API Management Made Easy](https://zuplo.com/videos/migrating-from-apigee-api-management-made-easy).
70
+
71
+ :::
72
+
73
+ ## Concept mapping: Apigee to Zuplo
74
+
75
+ | Apigee concept | Zuplo equivalent |
76
+ | ----------------------- | ---------------------------------------------------------------------- |
77
+ | API Proxy | Routes in your [OpenAPI spec](./openapi.md) |
78
+ | ProxyEndpoint | Route path + [handler](../handlers/url-forward.md) |
79
+ | TargetEndpoint | [URL forward handler](../handlers/url-forward.md) base URL |
80
+ | Policy (XML) | [Policy](./policies.md) (TypeScript) or built-in policy |
81
+ | PreFlow / PostFlow | Inbound / outbound [policies](./policies.md) |
82
+ | Conditional flow | Custom code in a [custom policy](../policies/custom-code-inbound.md) |
83
+ | SharedFlow | Reusable [custom code module](../programmable-api/reusing-code.md) |
84
+ | Environment | [Environment](./environments.md) |
85
+ | API Product | API key with [metadata](./api-key-management.md) |
86
+ | Developer App | [API key consumer](./api-key-management.md) |
87
+ | Apigee Developer Portal | [Zuplo Developer Portal](../dev-portal/introduction.md) |
88
+ | VerifyAPIKey policy | [API Key Authentication](../policies/api-key-inbound.md) |
89
+ | OAuthV2 policy | [JWT authentication policies](../policies/open-id-jwt-auth-inbound.md) |
90
+ | SpikeArrest | [Rate Limiting](../policies/rate-limit-inbound.md) |
91
+ | Quota | [Quota policy](../policies/quota-inbound.md) |
92
+ | KVM (Key Value Map) | [Environment variables](./environment-variables.md) |
93
+ | Management API | [Zuplo API](./accounts/zuplo-api-keys.md) |
94
+
95
+ ## Step-by-step migration
96
+
97
+ ### Step 1: Export your API definitions
98
+
99
+ Apigee API proxies contain OpenAPI specs or can generate them. Export your API
100
+ definitions:
101
+
102
+ 1. In the Apigee console, navigate to your API proxy.
103
+ 2. Download the OpenAPI spec from the **Develop** tab, or export the proxy
104
+ bundle as a ZIP file and extract the spec.
105
+ 3. If no spec exists, create one from your proxy's endpoint and resource
106
+ definitions.
107
+
108
+ ### Step 2: Map Apigee policies to Zuplo policies
109
+
110
+ The following table maps common Apigee policies to Zuplo equivalents:
111
+
112
+ | Apigee policy | Zuplo policy |
113
+ | ------------------------- | ------------------------------------------------------------------------------------------------ |
114
+ | `VerifyAPIKey` | [API Key Authentication](../policies/api-key-inbound.md) |
115
+ | `OAuthV2` | [Open ID JWT Authentication](../policies/open-id-jwt-auth-inbound.md) |
116
+ | `BasicAuthentication` | [Basic Authentication](../policies/basic-auth-inbound.md) |
117
+ | `SpikeArrest` | [Rate Limiting](../policies/rate-limit-inbound.md) |
118
+ | `Quota` | [Quota](../policies/quota-inbound.md) |
119
+ | `AssignMessage` | [Set Headers](../policies/set-headers-inbound.md) or [Set Body](../policies/set-body-inbound.md) |
120
+ | `ExtractVariables` | [Custom Code Policy](../policies/custom-code-inbound.md) |
121
+ | `XMLToJSON` / `JSONToXML` | [XML to JSON](../policies/xml-to-json-outbound.md) or custom code |
122
+ | `RaiseFault` | Custom code returning an error [Response](../programmable-api/http-problems.md) |
123
+ | `AccessControl` | [IP Restriction](../policies/ip-restriction-inbound.md) |
124
+ | `CORS` | Built-in [CORS configuration](../programmable-api/custom-cors-policy.md) |
125
+ | `JavaScript` callout | [Custom Code Policy](../policies/custom-code-inbound.md) (TypeScript) |
126
+ | `ServiceCallout` | [Custom Code Policy](../policies/custom-code-inbound.md) using `fetch()` |
127
+
128
+ ### Step 3: Translate policy configuration
129
+
130
+ Here is an example of translating an Apigee SpikeArrest policy to a Zuplo rate
131
+ limit policy.
132
+
133
+ **Apigee XML policy:**
134
+
135
+ ```xml
136
+ <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
137
+ <SpikeArrest name="SA-RateLimit">
138
+ <Rate>100pm</Rate>
139
+ <Identifier ref="request.header.x-api-key"/>
140
+ <UseEffectiveCount>true</UseEffectiveCount>
141
+ </SpikeArrest>
142
+ ```
143
+
144
+ **Zuplo policy configuration:**
145
+
146
+ ```json
147
+ {
148
+ "name": "rate-limit-inbound",
149
+ "policyType": "rate-limit-inbound",
150
+ "handler": {
151
+ "export": "RateLimitInboundPolicy",
152
+ "module": "$import(@zuplo/runtime)",
153
+ "options": {
154
+ "rateLimitBy": "user",
155
+ "requestsAllowed": 100,
156
+ "timeWindowMinutes": 1
157
+ }
158
+ }
159
+ }
160
+ ```
161
+
162
+ :::note
163
+
164
+ Apigee's SpikeArrest uses a smoothing algorithm that spreads allowed requests
165
+ evenly across the time window. Zuplo's rate limiter uses a sliding window
166
+ algorithm and is globally distributed — limits are enforced across all 300+ edge
167
+ locations as a single zone, unlike Apigee which synchronizes within a region but
168
+ not across regions by default.
169
+
170
+ :::
171
+
172
+ Here is an example of translating an Apigee OAuthV2 verification policy to a
173
+ Zuplo JWT authentication policy.
174
+
175
+ **Apigee OAuthV2 policy:**
176
+
177
+ ```xml
178
+ <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
179
+ <OAuthV2 name="VerifyAccessToken">
180
+ <Operation>VerifyAccessToken</Operation>
181
+ <ExternalAuthorization>false</ExternalAuthorization>
182
+ <SupportedGrantTypes>
183
+ <GrantType>client_credentials</GrantType>
184
+ </SupportedGrantTypes>
185
+ </OAuthV2>
186
+ ```
187
+
188
+ **Zuplo JWT authentication policy configuration:**
189
+
190
+ ```json
191
+ {
192
+ "name": "jwt-auth-inbound",
193
+ "policyType": "open-id-jwt-auth-inbound",
194
+ "handler": {
195
+ "export": "OpenIdJwtInboundPolicy",
196
+ "module": "$import(@zuplo/runtime)",
197
+ "options": {
198
+ "issuer": "$env(AUTH_ISSUER)",
199
+ "audience": "$env(AUTH_AUDIENCE)",
200
+ "jwkUrl": "$env(AUTH_JWK_URL)",
201
+ "allowUnauthenticatedRequests": false
202
+ }
203
+ }
204
+ }
205
+ ```
206
+
207
+ :::note
208
+
209
+ Apigee can act as a full OAuth 2.0 server (issuing and managing tokens). Zuplo
210
+ validates tokens issued by external identity providers (Auth0, Cognito, Clerk,
211
+ Firebase, Supabase, or any OIDC-compliant provider). If you are using Apigee as
212
+ your OAuth server, you will need to move token issuance to a dedicated identity
213
+ provider during migration.
214
+
215
+ :::
216
+
217
+ Here is an example of translating an Apigee ResponseCache to a Zuplo caching
218
+ policy.
219
+
220
+ **Apigee ResponseCache policy:**
221
+
222
+ ```xml
223
+ <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
224
+ <ResponseCache name="Cache-Response">
225
+ <CacheKey>
226
+ <KeyFragment ref="request.uri"/>
227
+ </CacheKey>
228
+ <ExpirySettings>
229
+ <TimeoutInSec>300</TimeoutInSec>
230
+ </ExpirySettings>
231
+ </ResponseCache>
232
+ ```
233
+
234
+ **Zuplo caching policy configuration:**
235
+
236
+ ```json
237
+ {
238
+ "name": "caching-inbound",
239
+ "policyType": "caching-inbound",
240
+ "handler": {
241
+ "export": "CachingInboundPolicy",
242
+ "module": "$import(@zuplo/runtime)",
243
+ "options": {
244
+ "expirationSecondsTtl": 300
245
+ }
246
+ }
247
+ }
248
+ ```
249
+
250
+ ### Step 4: Translate JavaScript callouts to TypeScript
251
+
252
+ If you use Apigee JavaScript callouts, rewrite them as Zuplo custom code
253
+ policies in TypeScript.
254
+
255
+ **Apigee JavaScript callout:**
256
+
257
+ ```javascript
258
+ var apiKey = context.getVariable("request.header.x-api-key");
259
+ var clientId = context.getVariable("request.header.x-client-id");
260
+
261
+ if (!apiKey || !clientId) {
262
+ context.setVariable("isError", true);
263
+ context.setVariable("errorMessage", "Missing required headers");
264
+ }
265
+
266
+ var payload = JSON.parse(context.getVariable("request.content"));
267
+ payload.enriched = true;
268
+ payload.timestamp = new Date().toISOString();
269
+ context.setVariable("request.content", JSON.stringify(payload));
270
+ ```
271
+
272
+ **Equivalent Zuplo TypeScript policy:**
273
+
274
+ ```typescript
275
+ import { ZuploContext, ZuploRequest, HttpProblems } from "@zuplo/runtime";
276
+
277
+ export default async function (
278
+ request: ZuploRequest,
279
+ context: ZuploContext,
280
+ options: never,
281
+ policyName: string,
282
+ ) {
283
+ const apiKey = request.headers.get("x-api-key");
284
+ const clientId = request.headers.get("x-client-id");
285
+
286
+ if (!apiKey || !clientId) {
287
+ return HttpProblems.badRequest(request, context, {
288
+ detail: "Missing required headers",
289
+ });
290
+ }
291
+
292
+ const payload = await request.json();
293
+ payload.enriched = true;
294
+ payload.timestamp = new Date().toISOString();
295
+
296
+ return new ZuploRequest(request, {
297
+ body: JSON.stringify(payload),
298
+ headers: {
299
+ ...Object.fromEntries(request.headers.entries()),
300
+ "content-type": "application/json",
301
+ },
302
+ });
303
+ }
304
+ ```
305
+
306
+ ### Step 5: Migrate your developer portal
307
+
308
+ Apigee's Drupal-based developer portal requires significant setup and
309
+ maintenance. Zuplo's [Developer Portal](../dev-portal/introduction.md) is
310
+ automatically generated from your OpenAPI spec and includes:
311
+
312
+ - Interactive API reference documentation
313
+ - Self-serve API key management
314
+ - Built-in authentication
315
+ - Customizable theming
316
+ - Zero maintenance — it updates automatically when your API changes
317
+
318
+ ### Step 6: Migrate environment configuration
319
+
320
+ **Apigee KVMs to Zuplo environment variables:**
321
+
322
+ Apigee uses Key Value Maps (KVMs) for environment-specific configuration. In
323
+ Zuplo, use [environment variables](./environment-variables.md):
324
+
325
+ | Apigee KVM | Zuplo environment variable |
326
+ | ----------------------------------- | ----------------------------------- |
327
+ | `kvm.get("backend-url")` | `$env(BACKEND_URL)` in route config |
328
+ | `context.getVariable("my-kvm.key")` | `context.env.MY_KEY` in custom code |
329
+ | Encrypted KVM entries | Secret environment variables |
330
+
331
+ ### Step 7: Deploy and migrate traffic
332
+
333
+ 1. Deploy your Zuplo project by pushing to your connected Git repository.
334
+ 2. Set up a [custom domain](./custom-domains.md) for your Zuplo gateway.
335
+ 3. Route a subset of traffic to Zuplo using DNS-based traffic splitting.
336
+ 4. Monitor both gateways and compare behavior.
337
+ 5. Gradually shift all traffic to Zuplo.
338
+ 6. Decommission your Apigee environment.
339
+
340
+ ## Apigee Edge to Zuplo: a special case
341
+
342
+ If you are migrating from legacy Apigee Edge (on-premises or private cloud)
343
+ rather than Apigee X, the migration to Zuplo is an opportunity to modernize
344
+ without the complexity of moving to Apigee X:
345
+
346
+ - **Skip the Apigee X migration** — Instead of migrating from Edge to X (which
347
+ Google recommends but requires significant effort), migrate directly to Zuplo.
348
+ - **Eliminate infrastructure** — Apigee Edge requires managing on-premises
349
+ infrastructure (Cassandra, ZooKeeper, Qpid clusters). Zuplo is fully managed.
350
+ - **Reduce costs** — Apigee X pricing is often higher than Edge licensing. Zuplo
351
+ offers transparent, usage-based pricing starting with a free tier.
352
+ - **No GCP dependency** — Apigee X requires Google Cloud Platform. Apigee hybrid
353
+ still requires GCP for its control plane. Zuplo is cloud-agnostic and can
354
+ front backends on any cloud provider.
355
+
356
+ ### Apigee Edge end-of-life timeline
357
+
358
+ | Version | End-of-life date | Status |
359
+ | ------- | --------------------- | ------------- |
360
+ | 4.52.00 | August 31, 2024 | EOL reached |
361
+ | 4.52.01 | September 30, 2025 | EOL reached |
362
+ | 4.52.02 | December 31, 2025 | EOL reached |
363
+ | 4.53.00 | April 11, 2026 | EOL reached |
364
+ | 4.53.01 | **February 26, 2027** | Final version |
365
+
366
+ After end of life, Google provides no security patches, bug fixes, hot fixes, or
367
+ technical support for that version.
368
+
369
+ ## Common migration gotchas
370
+
371
+ **Encrypted KVM entries cannot be exported.** Apigee's management API does not
372
+ return values for encrypted Key Value Map entries. You will need to manually
373
+ re-enter these values as Zuplo secret environment variables.
374
+
375
+ **Apigee's OAuth server has no direct equivalent.** If you use Apigee to issue
376
+ and manage OAuth tokens (not just validate them), you will need to move token
377
+ issuance to a dedicated identity provider such as Auth0, Cognito, or Clerk.
378
+ Zuplo validates tokens from external providers but does not act as an OAuth
379
+ server.
380
+
381
+ **Shared flows become reusable modules.** Apigee shared flows that are
382
+ referenced across multiple proxies should be refactored into reusable TypeScript
383
+ modules. See [Reusing Code](../programmable-api/reusing-code.md).
384
+
385
+ **Java callouts require rewriting.** Apigee Java callouts have no direct
386
+ TypeScript equivalent. Evaluate each callout and rewrite the logic as a
387
+ [custom code policy](../policies/custom-code-inbound.md). In most cases, the
388
+ TypeScript version will be simpler because you have access to the full npm
389
+ ecosystem and standard web APIs.
390
+
391
+ **Apigee analytics must be replaced.** Apigee's built-in analytics dashboards
392
+ and custom reports do not migrate. Zuplo provides built-in analytics and
393
+ integrates with observability platforms like [Datadog](./log-plugin-datadog.mdx)
394
+ and [Google Cloud Logging](./log-plugin-gcp.mdx) for advanced reporting.
395
+
396
+ **Test with representative traffic before cutover.** Use Zuplo's
397
+ [branch-based deployments](./branch-based-deployments.md) to create a preview
398
+ environment and route a subset of traffic through Zuplo before migrating
399
+ production traffic. Compare response codes, latencies, and payload correctness
400
+ between both gateways.
401
+
402
+ ## Next steps
403
+
404
+ - [Set up your first Zuplo gateway](./step-1-setup-basic-gateway.md)
405
+ - [Add rate limiting](./step-2-add-rate-limiting.md)
406
+ - [Add API key authentication](./step-3-add-api-key-auth.md)
407
+ - [Configure your developer portal](../dev-portal/introduction.md)
408
+ - [Set up source control](./source-control.md)
@@ -0,0 +1,248 @@
1
+ ---
2
+ title: Migrate from AWS API Gateway to Zuplo
3
+ sidebar_label: Migrate from AWS API Gateway
4
+ ---
5
+
6
+ This guide walks through migrating from AWS API Gateway (REST API, HTTP API, or
7
+ WebSocket API) to Zuplo. It covers the key differences, concept mapping, and a
8
+ step-by-step migration process.
9
+
10
+ ## Why teams migrate from AWS API Gateway
11
+
12
+ AWS API Gateway is a natural choice for teams already building on AWS. However,
13
+ as API programs grow, teams encounter several limitations:
14
+
15
+ - **AWS lock-in** — AWS API Gateway only works within the AWS ecosystem. If your
16
+ backends span multiple cloud providers or you want to avoid single-vendor
17
+ dependency, you need a multi-cloud solution.
18
+ - **No built-in developer portal** — AWS API Gateway does not include a
19
+ developer-facing portal. The "Serverless Developer Portal" is a reference
20
+ implementation that requires self-hosting and maintenance.
21
+ - **Complex customization** — Custom request/response transformations use
22
+ Velocity Template Language (VTL) for REST APIs, a templating language that is
23
+ difficult to write, debug, and maintain. More complex logic requires separate
24
+ Lambda functions.
25
+ - **Region-bound traffic** — AWS API Gateway routes traffic through specific AWS
26
+ regions, not a global edge network. Users far from your selected region
27
+ experience higher latency.
28
+ - **CloudFormation complexity** — Managing API Gateway configuration through
29
+ CloudFormation, SAM, or CDK templates adds significant complexity and slow
30
+ deployment cycles.
31
+ - **Limited rate limiting** — Throttling is global or stage-based with limited
32
+ per-user or per-key customization. There is no built-in sliding window rate
33
+ limiter.
34
+
35
+ ## Concept mapping: AWS API Gateway to Zuplo
36
+
37
+ | AWS API Gateway concept | Zuplo equivalent |
38
+ | ------------------------------ | ------------------------------------------------------------------------------------------------------------- |
39
+ | REST API / HTTP API | [OpenAPI route configuration](./openapi.md) |
40
+ | Resource | Route path in OpenAPI spec |
41
+ | Method | HTTP method on a route |
42
+ | Integration (Lambda, HTTP) | [Handler](../handlers/url-forward.md) (URL Forward, URL Rewrite, Custom) |
43
+ | Lambda Authorizer | [Authentication policy](../policies/api-key-inbound.md) or [custom code](../policies/custom-code-inbound.md) |
44
+ | API Key + Usage Plan | [API Key Authentication](../policies/api-key-inbound.md) + [Rate Limiting](../policies/rate-limit-inbound.md) |
45
+ | Stage | [Environment](./environments.md) |
46
+ | Stage variables | [Environment variables](./environment-variables.md) |
47
+ | Request/Response mapping (VTL) | [Custom code policy](../policies/custom-code-inbound.md) (TypeScript) |
48
+ | CloudFormation / SAM / CDK | [GitOps deployment](./source-control.md) via `git push` |
49
+ | CloudWatch Logs | [Logging integrations](./logging.md) (Datadog, Splunk, etc.) |
50
+ | WAF integration | [WAF & DDoS protection](./waf-ddos.md) |
51
+ | Custom domain | [Custom domains](./custom-domains.md) |
52
+
53
+ ## Step-by-step migration
54
+
55
+ ### Step 1: Export your API definition
56
+
57
+ AWS API Gateway supports exporting your API as an OpenAPI spec:
58
+
59
+ **Using the AWS Console:**
60
+
61
+ 1. Navigate to your API in the API Gateway console.
62
+ 2. Select **Stages** and choose the stage to export.
63
+ 3. Go to the **Export** tab.
64
+ 4. Select **OpenAPI 3** and **JSON** format.
65
+ 5. Choose **Export as OpenAPI 3 + API Gateway Extensions** to include
66
+ integration details.
67
+
68
+ **Using the AWS CLI:**
69
+
70
+ ```bash
71
+ aws apigateway get-export \
72
+ --rest-api-id YOUR_API_ID \
73
+ --stage-name prod \
74
+ --export-type oas30 \
75
+ --accepts application/json \
76
+ output.json
77
+ ```
78
+
79
+ ### Step 2: Clean up and import your OpenAPI spec
80
+
81
+ The exported spec includes AWS-specific extensions (`x-amazon-apigateway-*`)
82
+ that you need to replace with Zuplo configuration.
83
+
84
+ For each path and method, replace the `x-amazon-apigateway-integration` with
85
+ Zuplo's `x-zuplo-route` extension:
86
+
87
+ **AWS API Gateway export:**
88
+
89
+ ```json
90
+ {
91
+ "/users": {
92
+ "get": {
93
+ "x-amazon-apigateway-integration": {
94
+ "type": "HTTP_PROXY",
95
+ "httpMethod": "GET",
96
+ "uri": "https://api.backend.example.com/users"
97
+ }
98
+ }
99
+ }
100
+ }
101
+ ```
102
+
103
+ **Zuplo route configuration:**
104
+
105
+ ```json
106
+ {
107
+ "/users": {
108
+ "get": {
109
+ "operationId": "get-users",
110
+ "summary": "List users",
111
+ "x-zuplo-route": {
112
+ "corsPolicy": "none",
113
+ "handler": {
114
+ "export": "urlForwardHandler",
115
+ "module": "$import(@zuplo/runtime)",
116
+ "options": {
117
+ "baseUrl": "https://api.backend.example.com"
118
+ }
119
+ },
120
+ "policies": {
121
+ "inbound": []
122
+ }
123
+ }
124
+ }
125
+ }
126
+ }
127
+ ```
128
+
129
+ ### Step 3: Map AWS integrations to Zuplo handlers
130
+
131
+ | AWS integration type | Zuplo handler |
132
+ | -------------------- | -------------------------------------------------------------------------------------------------------------------- |
133
+ | HTTP / HTTP_PROXY | [URL Forward](../handlers/url-forward.md) or [URL Rewrite](../handlers/url-rewrite.md) |
134
+ | Lambda | [URL Forward](../handlers/url-forward.md) to Lambda function URL, or [AWS Lambda handler](../handlers/aws-lambda.md) |
135
+ | Mock | [Mock API policy](../policies/mock-api-inbound.md) |
136
+
137
+ ### Step 4: Replace VTL mappings with TypeScript
138
+
139
+ If you use Velocity Template Language (VTL) for request/response
140
+ transformations, replace them with TypeScript custom code policies.
141
+
142
+ **AWS VTL mapping template:**
143
+
144
+ ```velocity
145
+ #set($inputRoot = $input.path('$'))
146
+ {
147
+ "userId": "$inputRoot.id",
148
+ "fullName": "$inputRoot.first_name $inputRoot.last_name",
149
+ "email": "$inputRoot.email"
150
+ }
151
+ ```
152
+
153
+ **Zuplo outbound custom code policy:**
154
+
155
+ ```typescript
156
+ import { ZuploContext, ZuploRequest } from "@zuplo/runtime";
157
+
158
+ export default async function (
159
+ response: Response,
160
+ request: ZuploRequest,
161
+ context: ZuploContext,
162
+ options: never,
163
+ policyName: string,
164
+ ) {
165
+ const data = await response.json();
166
+
167
+ const transformed = {
168
+ userId: data.id,
169
+ fullName: `${data.first_name} ${data.last_name}`,
170
+ email: data.email,
171
+ };
172
+
173
+ return new Response(JSON.stringify(transformed), {
174
+ status: response.status,
175
+ headers: response.headers,
176
+ });
177
+ }
178
+ ```
179
+
180
+ ### Step 5: Migrate Lambda authorizers
181
+
182
+ If you use Lambda authorizers for authentication, replace them with Zuplo's
183
+ built-in authentication policies or custom code policies.
184
+
185
+ **For API key authentication:**
186
+
187
+ Replace the Lambda authorizer + usage plan pattern with Zuplo's
188
+ [API Key Authentication](../policies/api-key-inbound.md) policy, which includes
189
+ built-in key management, a developer portal, and per-key rate limiting.
190
+
191
+ **For JWT / OAuth authentication:**
192
+
193
+ Replace the Lambda authorizer with one of Zuplo's JWT policies:
194
+
195
+ - [Auth0 JWT](../policies/auth0-jwt-auth-inbound.md)
196
+ - [AWS Cognito JWT](../policies/cognito-jwt-auth-inbound.md)
197
+ - [Firebase JWT](../policies/firebase-jwt-inbound.md)
198
+ - [Open ID JWT](../policies/open-id-jwt-auth-inbound.md) (generic OIDC)
199
+
200
+ :::note
201
+
202
+ You can continue using AWS Cognito as your identity provider. Use Zuplo's
203
+ [Cognito JWT Authentication](../policies/cognito-jwt-auth-inbound.md) policy to
204
+ validate Cognito tokens at the gateway.
205
+
206
+ :::
207
+
208
+ ### Step 6: Replace usage plans with Zuplo rate limiting
209
+
210
+ AWS API Gateway's usage plans provide basic throttling and quota management.
211
+ Zuplo's rate limiting is more flexible:
212
+
213
+ | AWS usage plan feature | Zuplo equivalent |
214
+ | ---------------------------- | --------------------------------------------------------------------------- |
215
+ | Throttle rate (requests/sec) | [Rate Limiting](../policies/rate-limit-inbound.md) with `timeWindowMinutes` |
216
+ | Quota (requests/period) | [Quota policy](../policies/quota-inbound.md) |
217
+ | Per-key throttling | `rateLimitBy: "user"` on the rate limit policy |
218
+ | Burst limit | Built-in — Zuplo's sliding window handles bursts naturally |
219
+
220
+ ### Step 7: Deploy and migrate traffic
221
+
222
+ 1. Deploy your Zuplo project by pushing to your connected Git repository.
223
+ 2. Set up a [custom domain](./custom-domains.md) for Zuplo.
224
+ 3. Update your DNS to route traffic through Zuplo.
225
+ 4. Zuplo can forward requests to your existing AWS backends (Lambda, ALB, ECS)
226
+ without changes.
227
+ 5. Monitor traffic and gradually decommission your AWS API Gateway stages.
228
+
229
+ ## Keeping AWS backends with Zuplo
230
+
231
+ You do not need to migrate your backend infrastructure. Zuplo works with any
232
+ HTTP backend, including:
233
+
234
+ - AWS Lambda (via function URLs or API Gateway pass-through)
235
+ - Application Load Balancers (ALB)
236
+ - Amazon ECS / EKS services
237
+ - Any AWS service with an HTTP endpoint
238
+
239
+ Use [backend security](./securing-your-backend.md) options like mTLS or shared
240
+ secrets to secure the connection between Zuplo and your AWS backends.
241
+
242
+ ## Next steps
243
+
244
+ - [Set up your first Zuplo gateway](./step-1-setup-basic-gateway.md)
245
+ - [Add rate limiting](./step-2-add-rate-limiting.md)
246
+ - [Add API key authentication](./step-3-add-api-key-auth.md)
247
+ - [Configure your developer portal](../dev-portal/introduction.md)
248
+ - [Set up source control](./source-control.md)