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,220 @@
1
+ ---
2
+ title: Using the API Key API
3
+ sidebar_label: Using the API
4
+ ---
5
+
6
+ Zuplo runs a globally distributed API Key management service that scales to
7
+ handle billions of daily key validation requests while maintaining low latency
8
+ from any region around the world.
9
+
10
+ Management of API Keys and consumers
11
+ [can be performed in the Zuplo Portal](./api-key-management.mdx) and for
12
+ end-users in the Zuplo Developer Portal. However, all management operations
13
+ regarding API Keys can also be performed using the
14
+ [Zuplo Developer API](https://zuplo.com/docs/api/api-keys-keys).
15
+
16
+ :::info
17
+
18
+ In order to obtain an API Key for the Developer API, go to your account settings
19
+ in the Zuplo Portal. [More information](./accounts/zuplo-api-keys)
20
+
21
+ :::
22
+
23
+ ## Models
24
+
25
+ The service contains three primary object: **Buckets**, **Consumers**, and **API
26
+ Keys**. For a conceptual overview of these objects see
27
+ [Key Concepts](./api-key-management#key-concepts). Below is an ER diagram
28
+ showing the relationships of the three primary objects and their most important
29
+ fields.
30
+
31
+ The Consumer is the most important object. Each consumer is in a bucket.
32
+ Consumers can contain one or more API Keys.
33
+
34
+ ### Buckets
35
+
36
+ Buckets are the top level group for this service. A bucket could be used with a
37
+ single Zuplo environment or shared among multiple environments or projects. By
38
+ default a Zuplo API Gateway project will be created with several buckets that
39
+ map to production, preview, and development (working copy) environments.
40
+
41
+ Enterprise plan customers run complex configurations where buckets are shared
42
+ across gateway projects or even accounts. This can allow your end-users to
43
+ authenticate to all your APIs with a single API key with unified permissions.
44
+
45
+ ### Consumers
46
+
47
+ Consumers are the core of the API Key service. The consumer is the "identity" of
48
+ any API Keys that are created. Consumers have a `name` which must be unique in
49
+ the bucket. This `name` is used as the default `user.sub` property in the API
50
+ Key Authentication policy.
51
+
52
+ ### API Keys
53
+
54
+ A Consumer can have any number of API keys associated with it. Each API Key
55
+ shares the same identity (for example Consumer) when authenticating with this
56
+ service. Expired keys won't be permitted to authenticate after their expiration.
57
+
58
+ :::tip
59
+
60
+ In most cases, you won't manage API Keys directly. When using the API, the
61
+ typical configuration is to create a consumer with an API key and each consumer
62
+ has only a single API key except when performing operations like rolling keys.
63
+
64
+ :::
65
+
66
+ ## Usage
67
+
68
+ This section explains common scenarios for managing API keys using the API. For
69
+ other uses, see the full [Developer API reference](https://dev.zuplo.com).
70
+
71
+ All examples assume two environment variables are set (in your terminal, not
72
+ inside Zuplo)
73
+
74
+ ```bash
75
+ # Your Zuplo Account Name
76
+ export ACCOUNT_NAME=my-account
77
+ # Your bucket API URL (Found in Settings > General)
78
+ export BUCKET_NAME=my-bucket
79
+ # Your Zuplo API Key (Found in Settings > Zuplo API Keys)
80
+ export ZAPI_KEY=zpka_YOUR_API_KEY
81
+ ```
82
+
83
+ ### Creating a Consumer with a Key
84
+
85
+ When creating a new Consumer, it's a good idea to include some useful metadata
86
+ like the `organizationId` or a particular `plan` that's associated with that
87
+ user.
88
+
89
+ Tags are used for querying the consumers later. It's often useful to store some
90
+ external identifier that links this consumer to your internal data as a tag.
91
+
92
+ ```shell
93
+ curl \
94
+ https://dev.zuplo.com/v1/accounts/$ACCOUNT_NAME/key-buckets/$BUCKET_NAME/consumers?with-api-key=true \
95
+ --request POST \
96
+ --header "Content-type: application/json" \
97
+ --header "Authorization: Bearer $API_KEY" \
98
+ --data @- << EOF
99
+ {
100
+ "name": "my-consumer",
101
+ "description": "My Consumer",
102
+ "metadata": {
103
+ "orgId": 1234,
104
+ "plan": "gold"
105
+ },
106
+ "tags": {
107
+ "externalId": "acct_12345"
108
+ }
109
+ }
110
+ EOF
111
+ ```
112
+
113
+ The response will look like this:
114
+
115
+ ```json
116
+ {
117
+ "id": "csmr_sikZcE754kJu17X8yahPFO8J",
118
+ "name": "my-consumer",
119
+ "description": "My Consumer",
120
+ "createdOn": "2023-02-03T21:33:17.067Z",
121
+ "updatedOn": "2023-02-03T21:33:17.067Z",
122
+ "tags": {
123
+ "externalId": "acct_12345"
124
+ },
125
+ "metadata": {
126
+ "orgId": 1234,
127
+ "plan": "gold"
128
+ },
129
+ "apiKeys": [
130
+ {
131
+ "id": "key_AM7eAiR0BiaXTam951XmC9kK",
132
+ "createdOn": "2023-06-19T17:32:17.737Z",
133
+ "updatedOn": "2023-06-19T17:32:17.737Z",
134
+ "expiresOn": null,
135
+ "key": "zpka_d67b7e241bb948758f415b79aa8exxxx_2efbxxxx"
136
+ }
137
+ ]
138
+ }
139
+ ```
140
+
141
+ You can use this API Key to call your Zuplo API Gateway that's protected by the
142
+ [API Key Authentication](/docs/policies/api-key-inbound) policy.
143
+
144
+ ### Query Consumers with API Keys By Tags
145
+
146
+ ```shell
147
+ export ORG_ID=1234
148
+ curl \
149
+ https://dev.zuplo.com/v1/accounts/$ACCOUNT_NAME/key-buckets/$BUCKET_NAME/consumers/?include-api-keys=true&key-format=visible&tag.orgId=$ORG_ID \
150
+ --header "Authorization: Bearer $API_KEY"
151
+ ```
152
+
153
+ The response will look like this:
154
+
155
+ ```json
156
+ {
157
+ "data": [
158
+ {
159
+ "id": "csmr_sikZcE754kJu17X8yahPFO8J",
160
+ "name": "my-consumer",
161
+ "description": "My Consumer",
162
+ "createdOn": "2023-02-03T21:33:17.067Z",
163
+ "updatedOn": "2023-02-03T21:33:17.067Z",
164
+ "tags": {
165
+ "externalId": "acct_12345"
166
+ },
167
+ "metadata": {
168
+ "orgId": 1234,
169
+ "plan": "gold"
170
+ },
171
+ "apiKeys": [
172
+ {
173
+ "id": "key_AM7eAiR0BiaXTam951XmC9kK",
174
+ "createdOn": "2023-06-19T17:32:17.737Z",
175
+ "updatedOn": "2023-06-19T17:32:17.737Z",
176
+ "expiresOn": null,
177
+ "key": "zpka_d67b7e241bb948758f415b79aa8exxxx_2efbxxxx"
178
+ }
179
+ ]
180
+ }
181
+ ],
182
+ "offset": 0,
183
+ "limit": 1000
184
+ }
185
+ ```
186
+
187
+ ### Roll a Consumer's Keys
188
+
189
+ Sometimes you will want to create a new key and expire the current keys. Instead
190
+ of calling the API for each key and manually creating a new key, you can simply
191
+ call the roll key endpoint.
192
+
193
+ :::tip{title="Tags for Request Authorization"}
194
+
195
+ One useful feature of the API Key service is that most requests can have `tags`
196
+ added to the query parameter even if they aren't get requests. This is useful
197
+ when you want to call the API and ensure some basic condition is met without
198
+ having to first do a GET to retrieve data on the object. For example, in the
199
+ roll key request below the `orgId` tag is set on the request - this ensures that
200
+ the consumer being updated is tagged with that org.
201
+
202
+ :::
203
+
204
+ The following call with set all existing keys to have the expiration date set in
205
+ the request body and will create a new key without an expiration.
206
+
207
+ ```shell
208
+ export ORG_ID=1234
209
+ export CONSUMER_NAME=my-consumer
210
+ curl \
211
+ https://dev.zuplo.com/v1/accounts/$ACCOUNT_NAME/key-buckets/$BUCKET_NAME/consumers/$CONSUMER_NAME/roll-key?tag.orgId=$ORG_ID \
212
+ --request POST \
213
+ --header "Authorization: Bearer $API_KEY"
214
+ --data '{"expiresOn":"2023-04-18"}'
215
+ ```
216
+
217
+ ## Reference
218
+
219
+ The full API Reference for the API Service is hosted using a Zuplo developer
220
+ portal at [https://dev.zuplo.com/docs/](https://dev.zuplo.com/docs/).
@@ -0,0 +1,195 @@
1
+ ---
2
+ title: API Key Authentication & Authorization
3
+ sidebar_label: Authentication
4
+ ---
5
+
6
+ With the [API Key Authentication Policy](../policies/api-key-inbound.mdx)
7
+ configured on your API routes you can build additional policies that run after
8
+ the API Key Authentication policy to perform additional checks or authorization
9
+ on the consumer.
10
+
11
+ ## Request User Object
12
+
13
+ After each successful authentication the policy will set the `request.user`
14
+ object. The name of the API Key consumer is set to the `request.user.sub`
15
+ property. Any `metadata` attached to the consumer is set to the
16
+ `request.user.data` property. The interface of `request.user` is shown below.
17
+
18
+ ```ts
19
+ /**
20
+ * The User object set by the API Key Authentication policy
21
+ */
22
+ interface User {
23
+ /**
24
+ * The name of the API Key consumer
25
+ */
26
+ sub: string;
27
+ /**
28
+ * The metadata attached to the API Key consumer
29
+ */
30
+ data: any;
31
+ }
32
+ ```
33
+
34
+ So if you created a consumer with the following configuration:
35
+
36
+ ```json
37
+ {
38
+ "name": "my-consumer",
39
+ "metadata": {
40
+ "companyId": 12345,
41
+ "plan": "gold"
42
+ }
43
+ }
44
+ ```
45
+
46
+ The request object would be the following:
47
+
48
+ ```ts
49
+ context.log.debug(request.user);
50
+ // Outputs:
51
+ // {
52
+ // sub: "my-consumer",
53
+ // data: {
54
+ // companyId: 12345,
55
+ // plan: "gold"
56
+ // }
57
+ // }
58
+ ```
59
+
60
+ :::note
61
+
62
+ One question you might have is why is the `request.user` object not the same
63
+ shape as the API Key Consumer object. for example why doesn't it has
64
+ `request.user.name` and `request.user.metadata` properties.
65
+
66
+ The reason is because the `request.user` object is reused by many different
67
+ kinds of authentication policies and they all conform to the same interface with
68
+ `sub` and `data`.
69
+
70
+ :::
71
+
72
+ ## Using Consumer Data in Code
73
+
74
+ It's possible to write additional policies that run after the API Key
75
+ Authentication policy that perform further gating or authorization of the
76
+ request based on the data set in the consumer.
77
+
78
+ For example, you could gate access to a feature by checking for the `plan` value
79
+ stored in metadata (exposed via `request.user.data.plan`).
80
+
81
+ ```ts
82
+ async function (request: ZuploRequest, context: ZuploContext) {
83
+ if (request.user?.data.plan !== "gold") {
84
+ return new Response("You need to upgrade your plan", {
85
+ status: 403
86
+ });
87
+ }
88
+ return new Response("you have the gold plan!");
89
+ }
90
+ ```
91
+
92
+ The `metadata` could also be used to route requests to dedicated customer
93
+ services.
94
+
95
+ ```ts
96
+ async function (request: ZuploRequest, context: ZuploContext) {
97
+ const { customerId } = request.user.data;
98
+ return fetch(`https://${customerId}.customers.example.com/`
99
+ }
100
+ ```
101
+
102
+ The `request.user` object can be used in both
103
+ [handlers](../handlers/custom-handler.mdx) and
104
+ [policies](../policies/custom-code-inbound.mdx)
105
+
106
+ If you had a simple [function handler](../handlers/custom-handler.mdx) as
107
+ follows, it would return a `request.user` object to your route if the API Key is
108
+ successfully authenticated:
109
+
110
+ ```ts
111
+ async function (request: ZuploRequest, context: ZuploContext) {
112
+ // auto-serialize the user object and return it as JSON
113
+ return request.user;
114
+ }
115
+ ```
116
+
117
+ Would send the following response.
118
+
119
+ ```json
120
+ {
121
+ "sub": "my-consumer",
122
+ "data": {
123
+ "companyId": 12345,
124
+ "plan": "gold"
125
+ }
126
+ }
127
+ ```
128
+
129
+ ## Testing API Key Authentication
130
+
131
+ When running tests there are several ways to handle API Key authentication. The
132
+ following strategies cover testing with API Key authentication both locally and
133
+ in deployed environments.
134
+
135
+ ### Testing locally
136
+
137
+ When running API Key Authentication locally, if you
138
+ [link the project](../cli/link.mdx) to a project, the same API Key bucket is
139
+ shared by both your development (working copy) environment and local
140
+ development.
141
+
142
+ ### Setting the API Key bucket name
143
+
144
+ Either locally or in CI/CD you can specify any API Key bucket on the
145
+ [API Key Authentication](../policies/api-key-inbound.mdx) policy by setting the
146
+ `bucketName` property. This allows using a consistent API Key bucket that is set
147
+ up with consumers as required for testing. You can use the
148
+ [Zuplo Developer API](https://dev.zuplo.com) to
149
+ [create and manage buckets](./api-key-management.mdx), consumers, keys, and
150
+ more.
151
+
152
+ ### Selectively disabling
153
+
154
+ :::danger
155
+
156
+ Be extremely careful using this strategy. If configured incorrectly this could
157
+ leave your API open to unauthorized access.
158
+
159
+ :::
160
+
161
+ Another option is to disable authentication on endpoints for testing purposes.
162
+ One way of doing this is to configure the
163
+ [API Key Authentication](../policies/api-key-inbound.mdx) policy to allow
164
+ unauthenticated requests through. This can be done by setting
165
+ `allowUnauthenticatedRequests` to true.
166
+
167
+ In order to enforce authentication with this setting disabled, you can create a
168
+ policy that comes after that selectively enforces auth based on some condition.
169
+
170
+ For example, an environment variable flag could be used to disable auth with the
171
+ following policy.
172
+
173
+ ```ts
174
+ import {
175
+ ZuploContext,
176
+ ZuploRequest,
177
+ environment,
178
+ HttpProblems,
179
+ } from "@zuplo/runtime";
180
+
181
+ export default async function enforceAuth(
182
+ request: ZuploRequest,
183
+ context: ZuploContext,
184
+ ) {
185
+ if (environment.DISABLE_AUTH === "AUTH_DISABLED") {
186
+ return request;
187
+ }
188
+
189
+ if (!request.user) {
190
+ return HttpProblems.unauthorized(request, context);
191
+ }
192
+
193
+ return request;
194
+ }
195
+ ```
@@ -0,0 +1,61 @@
1
+ ---
2
+ title: Buckets and Environments
3
+ ---
4
+
5
+ API keys are stored in "buckets," which organize and isolate authentication
6
+ credentials across different environments. Learn more in the
7
+ [API Key API documentation](https://dev.zuplo.com/docs).
8
+
9
+ ## Default bucket configuration
10
+
11
+ Zuplo automatically creates three buckets for each project:
12
+
13
+ - **Working copy**: Stores API keys for the working-copy environment
14
+ - **Production**: Stores API keys for the production environment (your default
15
+ Git branch)
16
+ - **Shared**: Stores API keys shared across all other environments
17
+
18
+ For more information on how environments relate to Git branches, see
19
+ [Branch-Based Deployments](./branch-based-deployments.mdx).
20
+
21
+ ## Custom bucket configuration
22
+
23
+ To use a custom bucket, specify the `bucketName` in your API Key policy options:
24
+
25
+ ```json
26
+ {
27
+ "export": "ApiKeyInboundPolicy",
28
+ "module": "$import(@zuplo/runtime)",
29
+ "options": {
30
+ "bucketName": "contoso-qa-env",
31
+ "allowUnauthenticatedRequests": false
32
+ }
33
+ }
34
+ ```
35
+
36
+ When no `bucketName` appears in the configuration, the policy uses the default
37
+ bucket for the current environment.
38
+
39
+ ## Creating custom buckets
40
+
41
+ Create custom buckets using the
42
+ [API Key management API](https://dev.zuplo.com/docs). See the
43
+ [create buckets endpoint](https://dev.zuplo.com/docs/routes#apikeybucketsservice_create)
44
+ for details.
45
+
46
+ The following example creates a bucket for a QA environment:
47
+
48
+ ```bash
49
+ curl --request POST \
50
+ --url https://dev.zuplo.com/v1/accounts/YOUR_ACCOUNT_NAME/key-buckets \
51
+ --header 'Authorization: Bearer YOUR_ZAPI_KEY' \
52
+ --header 'Content-Type: application/json' \
53
+ --data '{"name":"contoso-qa-bucket","description":"API Key bucket for QA Environment"}'
54
+ ```
55
+
56
+ :::note
57
+
58
+ Replace `YOUR_ACCOUNT_NAME` with your account name and `YOUR_ZAPI_KEY` with your
59
+ Zuplo API key.
60
+
61
+ :::
@@ -0,0 +1,52 @@
1
+ ---
2
+ title: API Key End User Access
3
+ sidebar_label: End User Access
4
+ ---
5
+
6
+ For any API Key to be useful it needs to be shared with the right end-user.
7
+ Zuplo provides several options depending on the level of customization required.
8
+
9
+ ## Dev & Testing
10
+
11
+ For development and testing, the easiest way to obtain an API key is right in
12
+ the [Zuplo Management Portal](https://portal.zuplo.com). From inside the **API
13
+ Key Consumers** section in the **Settings** tab you can create and manage
14
+ consumers and their keys.
15
+
16
+ For quick access the newest, non-expired API key is shown in this section.
17
+
18
+ ![API key section](../../public/media/api-key-end-users/98a3d62f-1b61-4f41-8bac-665e0b02309e.png)
19
+
20
+ ## Zuplo Developer Portal
21
+
22
+ If you are using Zuplo's integrated developer portal to share your API with your
23
+ end-users, you can easily enable API Key management to authenticated users of
24
+ the portal.
25
+
26
+ When API Key Managers log into the Developer Portal they can copy, manage, or
27
+ create new API Keys.
28
+
29
+ ![API Keys in Developer Portal](../../public/media/api-key-dev-portal.png)
30
+
31
+ ## React Component and API
32
+
33
+ If you would prefer to integrate API Key management inside of your own portal
34
+ and you are building with React, Zuplo offers an
35
+ [open source API Key Manager component](https://github.com/zuplo/api-key-manager)
36
+ that makes it easy to allow your users self serve access to their keys.
37
+
38
+ Additionally, you can use the
39
+ [Auth Translation API](https://github.com/zuplo/sample-auth-translation-api)
40
+ sample as a starting point for building your management API using Zuplo.
41
+
42
+ You can find a demo of this component at https://api-key-manager.com.
43
+
44
+ ## Zuplo Developer API
45
+
46
+ Finally, if you want complete control over the entire experience, you can
47
+ utilize Zuplo's Developer API to manage the full lifecycle of API Consumers and
48
+ Keys.
49
+
50
+ For more information on using the API to manage consumers and keys, see
51
+ [Programmatic API Key Management](./api-key-api.mdx) and the
52
+ [Zuplo Developer API documentation](https://dev.zuplo.com).
@@ -0,0 +1,75 @@
1
+ ---
2
+ title: API Key Leak Detection
3
+ sidebar_label: Leak Detection
4
+ ---
5
+
6
+ ## API Key Format
7
+
8
+ Zuplo uses a specially formatted API Key structure that allows us to
9
+ [partner with GitHub's secret scanning](https://github.blog/changelog/2022-07-13-zuplo-is-now-a-github-secret-scanning-partner/)
10
+ to protect your users from accidentally leaked keys.
11
+
12
+ We think the safety of your API key consumers is paramount, so this feature is
13
+ available to all Zuplo customers, including free.
14
+
15
+ ## API Key Leak Detection
16
+
17
+ API keys should never be stored in source control. Accidentally committing API
18
+ keys to source control is a common attack vector that leads to compromises of
19
+ organizations both large and small.
20
+
21
+ Zuplo participates in
22
+ [GitHub's Secret Scanning](https://docs.github.com/en/code-security/secret-scanning/about-secret-scanning)
23
+ program to detect if your or your customer's API Keys are checked into source
24
+ control on GitHub.
25
+
26
+ If an API Key for your Zuplo API Gateway is compromised by checking it into a
27
+ public or private GitHub repository, Zuplo will be notified and can take action
28
+ immediately.
29
+
30
+ ## Leak Notifications
31
+
32
+ You will receive notifications of API Key leaks via email as well as in-app
33
+ notifications. You can customize the notifications settings by going to your
34
+ [Profile](https://portal.zuplo.com/user/profile) in the Zuplo Portal.
35
+
36
+ :::note
37
+
38
+ For security reasons we don't include the full API Key in the notifications we
39
+ send. If you need the full API Key please contact support.
40
+
41
+ :::
42
+
43
+ ## Recommended Actions
44
+
45
+ If you receive an alert that an API Key has been leaked, we recommend taking one
46
+ of the following actions immediately.
47
+
48
+ ### Notify Your Customer
49
+
50
+ Notify your customer and ask them to login to your Zuplo powered developer
51
+ portal and instruct them to roll the API Key. This way the old key is revoked
52
+ and they get a new key.
53
+
54
+ ### Roll the API Key
55
+
56
+ You can use the
57
+ [Zuplo API to roll the API Key](https://dev.zuplo.com/docs/routes#roll-consumer-keys)
58
+ for the consumer. This will create a new key and revoke the old key.
59
+
60
+ ```bash
61
+ export ACCOUNT_NAME="your-account-name"
62
+ export BUCKET_NAME="your-bucket-name"
63
+ export CONSUMER_NAME="your-consumer-name"
64
+ export ZUPLO_API_KEY="your-zuplo-api-key"
65
+
66
+ curl --request POST \
67
+ --url https://dev.zuplo.com/v1/accounts/$ACCOUNT_NAME/key-buckets/$BUCKET_NAME/consumers/$CONSUMER_NAME/roll-key \
68
+ --header 'Authorization: Bearer $ZUPLO_API_KEY' \
69
+ --header 'Content-Type: application/json' \
70
+ --data '
71
+ {
72
+ "expiresOn": "2024-01-01T00:00:00.000Z"
73
+ }
74
+ '
75
+ ```
@@ -0,0 +1,100 @@
1
+ ---
2
+ title: API Keys Overview
3
+ sidebar_label: Overview
4
+ ---
5
+
6
+ Zuplo allows developers to rapidly add API key based authentication to an API in
7
+ minutes. There are several benefits to using Zuplo's API Key solution including
8
+
9
+ - adheres to
10
+ [best practices of API Key implementation](https://zuplo.com/blog/2022/12/01/api-key-authentication)
11
+ - includes [API Key Leak Detection & Notification](./api-key-leak-detection.mdx)
12
+ - offers [out of the box and customizable solutions](./api-key-end-users.mdx)
13
+ for sharing API Keys
14
+
15
+ :::tip
16
+
17
+ To start using Zuplo API Keys in only a few minutes
18
+ [see the quickstart](../articles/step-3-add-api-key-auth.mdx).
19
+
20
+ :::
21
+
22
+ ## Fully Managed API Key Solution
23
+
24
+ Zuplo builds and manages a global API Key solution that can handle millions (or
25
+ billions) of API Keys and a virtually unlimited throughput to scale to the most
26
+ demanding services.
27
+
28
+ The service handles global replication of API Keys allowing your end users to be
29
+ authenticated to your API key with minimal latency. Keys are replicated around
30
+ the world in only a few seconds. Similarly, when keys are revoked or deleted,
31
+ the change replicates in seconds so that your API isn't open to unauthorized
32
+ access.
33
+
34
+ ## API Key Authentication at the Edge
35
+
36
+ Using Zuplo's API Key Authentication policy, your API is secured from
37
+ unauthorized access. Authorization checks happen at the edge in 300+ data
38
+ centers around the world. This keeps load off your backend and keeps your API
39
+ fast for your end-users.
40
+
41
+ Zuplo manages all the complexity of replication, caching, and verifying your API
42
+ keys so you don't have to.
43
+
44
+ Adding API Key authentication using Zuplo takes only a few minutes.
45
+ [See the quickstart to get started](../articles/step-3-add-api-key-auth.mdx).
46
+
47
+ ## Key Concepts
48
+
49
+ ### Consumers
50
+
51
+ An API Key Consumer is the identity that can invoke your API - typically people,
52
+ customers, partners or services. A consumer can have multiple API Keys
53
+ associated with it - but each key authorizes the same consumer (for example
54
+ identity)
55
+
56
+ ### Consumer Metadata
57
+
58
+ Each consumer can be assigned metadata. This information (a
59
+ [small JSON object](./api-key-service-limits.mdx)) is made available to the
60
+ runtime when a user access your API using that key.
61
+
62
+ For example, a Consumer might have metadata that specifies the company they're a
63
+ member of and the plan for the account.
64
+
65
+ ```json
66
+ {
67
+ "companyId": 123,
68
+ "plan": "gold"
69
+ }
70
+ ```
71
+
72
+ ### Consumer Tags
73
+
74
+ Consumers can also have tags associated with them. Tags are simple key value
75
+ pairs. Tags are used for management purposes only (for example querying
76
+ consumers through the Zuplo API). Tags don't get sent to the runtime as part of
77
+ authorization.
78
+
79
+ For example, a Consumer might be tagged in order to track the customer
80
+ associated with the consumer.
81
+
82
+ ```txt
83
+ customer=1234
84
+ ```
85
+
86
+ You can see more on how to use tags in the document on
87
+ [managing consumers and keys using the API](./api-key-api.mdx)
88
+
89
+ ### API Keys
90
+
91
+ API Keys are the actual string value used to authenticate with an API. Unlike
92
+ some other forms of bearer tokens, API Keys don't contain any actual data within
93
+ the key itself.
94
+
95
+ Zuplo API Keys are prefixed with the string `zpka_` followed by
96
+ cryptographically random characters and a signature. While Zuplo's API Key
97
+ management service supports custom key formats (enterprise plan required), the
98
+ structured format our the key enables us to offer
99
+ [key leak detection services](./api-key-leak-detection.mdx) to keep your API
100
+ secure.