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.
- package/README.md +9 -0
- package/docs/_index.md +44 -0
- package/docs/ai-gateway/apps.mdx +28 -0
- package/docs/ai-gateway/custom-providers.mdx +54 -0
- package/docs/ai-gateway/getting-started.mdx +224 -0
- package/docs/ai-gateway/guardrails.mdx +65 -0
- package/docs/ai-gateway/integrations/ai-sdk.mdx +109 -0
- package/docs/ai-gateway/integrations/claude-code.mdx +49 -0
- package/docs/ai-gateway/integrations/codex.mdx +78 -0
- package/docs/ai-gateway/integrations/goose.mdx +104 -0
- package/docs/ai-gateway/integrations/langchain.mdx +66 -0
- package/docs/ai-gateway/integrations/openai.mdx +99 -0
- package/docs/ai-gateway/introduction.mdx +85 -0
- package/docs/ai-gateway/managing-apps.mdx +46 -0
- package/docs/ai-gateway/managing-providers.mdx +66 -0
- package/docs/ai-gateway/managing-teams.mdx +63 -0
- package/docs/ai-gateway/policies/akamai-ai-firewall.mdx +125 -0
- package/docs/ai-gateway/policies/comet-opik-tracing.mdx +139 -0
- package/docs/ai-gateway/policies/galileo-tracing.mdx +147 -0
- package/docs/ai-gateway/providers.mdx +32 -0
- package/docs/ai-gateway/teams.mdx +38 -0
- package/docs/ai-gateway/universal-api.mdx +43 -0
- package/docs/ai-gateway/usage-limits.mdx +89 -0
- package/docs/api-management/introduction.md +127 -0
- package/docs/articles/accounts/audit-logs.mdx +227 -0
- package/docs/articles/accounts/billing.mdx +25 -0
- package/docs/articles/accounts/default-api-key.mdx +30 -0
- package/docs/articles/accounts/delete-account.mdx +36 -0
- package/docs/articles/accounts/enterprise-sso.mdx +116 -0
- package/docs/articles/accounts/managing-account-members.mdx +45 -0
- package/docs/articles/accounts/managing-project-members.mdx +37 -0
- package/docs/articles/accounts/members-and-roles.mdx +21 -0
- package/docs/articles/accounts/roles-and-permissions.mdx +115 -0
- package/docs/articles/accounts/zuplo-api-keys.mdx +94 -0
- package/docs/articles/add-api-to-backstage.mdx +216 -0
- package/docs/articles/advanced-path-matching.mdx +139 -0
- package/docs/articles/api-key-administration.mdx +47 -0
- package/docs/articles/api-key-api.mdx +220 -0
- package/docs/articles/api-key-authentication.mdx +195 -0
- package/docs/articles/api-key-buckets.mdx +61 -0
- package/docs/articles/api-key-end-users.mdx +52 -0
- package/docs/articles/api-key-leak-detection.mdx +75 -0
- package/docs/articles/api-key-management.mdx +100 -0
- package/docs/articles/api-key-react-component.mdx +90 -0
- package/docs/articles/api-key-service-limits.mdx +14 -0
- package/docs/articles/archiving-requests-to-storage.mdx +119 -0
- package/docs/articles/branch-based-deployments.mdx +184 -0
- package/docs/articles/bypass-policy-for-testing.mdx +117 -0
- package/docs/articles/check-ip-address.mdx +17 -0
- package/docs/articles/ci-cd-azure/basic-deployment.mdx +49 -0
- package/docs/articles/ci-cd-azure/deploy-and-test.mdx +47 -0
- package/docs/articles/ci-cd-azure/local-testing.mdx +59 -0
- package/docs/articles/ci-cd-azure/multi-stage-deployment.mdx +88 -0
- package/docs/articles/ci-cd-azure/pr-preview-environments.mdx +50 -0
- package/docs/articles/ci-cd-azure/tag-based-releases.mdx +37 -0
- package/docs/articles/ci-cd-bitbucket/basic-deployment.mdx +27 -0
- package/docs/articles/ci-cd-bitbucket/deploy-and-test.mdx +41 -0
- package/docs/articles/ci-cd-bitbucket/local-testing.mdx +34 -0
- package/docs/articles/ci-cd-bitbucket/multi-stage-deployment.mdx +52 -0
- package/docs/articles/ci-cd-bitbucket/pr-preview-environments.mdx +46 -0
- package/docs/articles/ci-cd-bitbucket/tag-based-releases.mdx +27 -0
- package/docs/articles/ci-cd-circleci/basic-deployment.mdx +34 -0
- package/docs/articles/ci-cd-circleci/deploy-and-test.mdx +44 -0
- package/docs/articles/ci-cd-circleci/local-testing.mdx +50 -0
- package/docs/articles/ci-cd-circleci/multi-stage-deployment.mdx +82 -0
- package/docs/articles/ci-cd-circleci/pr-preview-environments.mdx +47 -0
- package/docs/articles/ci-cd-circleci/tag-based-releases.mdx +38 -0
- package/docs/articles/ci-cd-github/basic-deployment.mdx +48 -0
- package/docs/articles/ci-cd-github/cleanup-on-branch-delete.mdx +123 -0
- package/docs/articles/ci-cd-github/deploy-and-test.mdx +82 -0
- package/docs/articles/ci-cd-github/local-testing.mdx +102 -0
- package/docs/articles/ci-cd-github/multi-stage-deployment.mdx +136 -0
- package/docs/articles/ci-cd-github/pr-preview-environments.mdx +106 -0
- package/docs/articles/ci-cd-github/tag-based-releases.mdx +99 -0
- package/docs/articles/ci-cd-gitlab/basic-deployment.mdx +28 -0
- package/docs/articles/ci-cd-gitlab/deploy-and-test.mdx +44 -0
- package/docs/articles/ci-cd-gitlab/local-testing.mdx +39 -0
- package/docs/articles/ci-cd-gitlab/mr-preview-environments.mdx +52 -0
- package/docs/articles/ci-cd-gitlab/multi-stage-deployment.mdx +64 -0
- package/docs/articles/ci-cd-gitlab/tag-based-releases.mdx +28 -0
- package/docs/articles/composite-policy-reference.mdx +284 -0
- package/docs/articles/configuring-auth0-for-mcp-auth.mdx +186 -0
- package/docs/articles/configuring-okta-for-mcp-auth.mdx +208 -0
- package/docs/articles/convert-urls-to-openapi.mdx +62 -0
- package/docs/articles/cors.mdx +447 -0
- package/docs/articles/custom-audit-log-policy.mdx +95 -0
- package/docs/articles/custom-ci-cd-azure.mdx +81 -0
- package/docs/articles/custom-ci-cd-bitbucket.mdx +80 -0
- package/docs/articles/custom-ci-cd-circleci.mdx +78 -0
- package/docs/articles/custom-ci-cd-github.mdx +99 -0
- package/docs/articles/custom-ci-cd-gitlab.mdx +79 -0
- package/docs/articles/custom-ci-cd.mdx +82 -0
- package/docs/articles/custom-code-patterns.md +418 -0
- package/docs/articles/custom-domains.mdx +258 -0
- package/docs/articles/custom-logging-example.mdx +139 -0
- package/docs/articles/ddos-protection.mdx +138 -0
- package/docs/articles/development-options.mdx +49 -0
- package/docs/articles/environment-variables.mdx +134 -0
- package/docs/articles/environments.mdx +143 -0
- package/docs/articles/fastly-zuplo-host-setup.mdx +41 -0
- package/docs/articles/github-deployment-testing.mdx +101 -0
- package/docs/articles/gke-with-upstream-auth-policy.mdx +192 -0
- package/docs/articles/graphql-security.mdx +180 -0
- package/docs/articles/handling-form-data.mdx +61 -0
- package/docs/articles/health-checks.mdx +109 -0
- package/docs/articles/hosting-options.mdx +70 -0
- package/docs/articles/lazy-load-configuration-into-cache.mdx +92 -0
- package/docs/articles/limits.mdx +98 -0
- package/docs/articles/local-development-debugging.mdx +44 -0
- package/docs/articles/local-development-env-variables.mdx +23 -0
- package/docs/articles/local-development-installing-packages.mdx +23 -0
- package/docs/articles/local-development-routes-designer.mdx +27 -0
- package/docs/articles/local-development-services.mdx +40 -0
- package/docs/articles/local-development-troubleshooting.mdx +56 -0
- package/docs/articles/local-development.mdx +81 -0
- package/docs/articles/log-plugin-aws-cloudwatch.mdx +83 -0
- package/docs/articles/log-plugin-datadog.mdx +84 -0
- package/docs/articles/log-plugin-dynatrace.mdx +75 -0
- package/docs/articles/log-plugin-gcp.mdx +75 -0
- package/docs/articles/log-plugin-loki.mdx +136 -0
- package/docs/articles/log-plugin-new-relic.mdx +84 -0
- package/docs/articles/log-plugin-splunk.mdx +104 -0
- package/docs/articles/log-plugin-sumo.mdx +73 -0
- package/docs/articles/log-plugin-vmware-log-insight.mdx +154 -0
- package/docs/articles/log-request-response-data.mdx +398 -0
- package/docs/articles/logging.mdx +115 -0
- package/docs/articles/manual-mcp-oauth-testing.mdx +193 -0
- package/docs/articles/mcp-quickstart.mdx +135 -0
- package/docs/articles/metrics-plugins.mdx +371 -0
- package/docs/articles/migrate-from-apigee.md +408 -0
- package/docs/articles/migrate-from-aws-api-gateway.md +248 -0
- package/docs/articles/migrate-from-azure-apim.md +292 -0
- package/docs/articles/migrate-from-kong.md +300 -0
- package/docs/articles/migration-overview.md +81 -0
- package/docs/articles/monetization/api-access.mdx +69 -0
- package/docs/articles/monetization/billing-models.md +520 -0
- package/docs/articles/monetization/developer-portal.md +167 -0
- package/docs/articles/monetization/features.mdx +98 -0
- package/docs/articles/monetization/index.mdx +113 -0
- package/docs/articles/monetization/meters.mdx +135 -0
- package/docs/articles/monetization/monetization-policy.md +314 -0
- package/docs/articles/monetization/plan-examples.mdx +366 -0
- package/docs/articles/monetization/plans.mdx +266 -0
- package/docs/articles/monetization/pricing-models.mdx +225 -0
- package/docs/articles/monetization/private-plans.md +154 -0
- package/docs/articles/monetization/quickstart.md +355 -0
- package/docs/articles/monetization/rate-cards.mdx +171 -0
- package/docs/articles/monetization/stripe-integration.md +195 -0
- package/docs/articles/monetization/subscription-lifecycle.md +298 -0
- package/docs/articles/monetization/tax-collection.md +166 -0
- package/docs/articles/monetization/troubleshooting.md +272 -0
- package/docs/articles/monetization-custom.mdx +71 -0
- package/docs/articles/monetization-integrations.mdx +104 -0
- package/docs/articles/monitoring-your-gateway.mdx +53 -0
- package/docs/articles/monorepo-deployment.mdx +350 -0
- package/docs/articles/multiple-auth-policies.mdx +81 -0
- package/docs/articles/non-standard-ports.mdx +30 -0
- package/docs/articles/oauth-authentication.mdx +54 -0
- package/docs/articles/openapi-server-urls.mdx +60 -0
- package/docs/articles/openapi.mdx +130 -0
- package/docs/articles/opentelemetry.mdx +250 -0
- package/docs/articles/per-user-rate-limits-using-db.mdx +112 -0
- package/docs/articles/performance-testing.mdx +304 -0
- package/docs/articles/plugin-akamai-api-security.mdx +76 -0
- package/docs/articles/plugin-azure-blob.mdx +73 -0
- package/docs/articles/plugin-azure-event-hubs.mdx +64 -0
- package/docs/articles/plugin-hydrolix-traffic-peak.mdx +147 -0
- package/docs/articles/policies.mdx +33 -0
- package/docs/articles/rename-or-move-project.mdx +39 -0
- package/docs/articles/rick-and-morty-api-developer-portal-example.mdx +23 -0
- package/docs/articles/routing.mdx +193 -0
- package/docs/articles/s3-signed-url-uploads.mdx +521 -0
- package/docs/articles/secure-tunnel.mdx +84 -0
- package/docs/articles/securing-backend-mtls.mdx +268 -0
- package/docs/articles/securing-your-backend.mdx +148 -0
- package/docs/articles/security.mdx +105 -0
- package/docs/articles/sharing-code-across-projects.mdx +412 -0
- package/docs/articles/source-control-setup-azure.mdx +13 -0
- package/docs/articles/source-control-setup-bitbucket.mdx +43 -0
- package/docs/articles/source-control-setup-github.mdx +172 -0
- package/docs/articles/source-control-setup-gitlab.mdx +12 -0
- package/docs/articles/source-control.mdx +80 -0
- package/docs/articles/step-1-setup-basic-gateway-local.mdx +136 -0
- package/docs/articles/step-1-setup-basic-gateway.mdx +118 -0
- package/docs/articles/step-2-add-rate-limiting-local.mdx +126 -0
- package/docs/articles/step-2-add-rate-limiting.mdx +82 -0
- package/docs/articles/step-3-add-api-key-auth-local.mdx +199 -0
- package/docs/articles/step-3-add-api-key-auth.mdx +166 -0
- package/docs/articles/step-4-deploying-to-the-edge.mdx +220 -0
- package/docs/articles/step-5-dynamic-rate-limiting.mdx +167 -0
- package/docs/articles/support.mdx +144 -0
- package/docs/articles/terraform.mdx +114 -0
- package/docs/articles/testing-graphql.mdx +34 -0
- package/docs/articles/testing.mdx +522 -0
- package/docs/articles/troubleshooting-slow-responses.mdx +301 -0
- package/docs/articles/troubleshooting.md +302 -0
- package/docs/articles/tsconfig.mdx +105 -0
- package/docs/articles/tunnel-setup.mdx +195 -0
- package/docs/articles/tunnel-troubleshooting.mdx +50 -0
- package/docs/articles/update-zup-in-github-action.mdx +110 -0
- package/docs/articles/use-openapi-extension-data.mdx +79 -0
- package/docs/articles/users/multifactor-authentication.mdx +64 -0
- package/docs/articles/users/profile.mdx +13 -0
- package/docs/articles/versioning-on-zuplo.mdx +89 -0
- package/docs/articles/waf-ddos-akamai.md +133 -0
- package/docs/articles/waf-ddos-aws-waf-shield.mdx +85 -0
- package/docs/articles/waf-ddos-fastly.mdx +251 -0
- package/docs/articles/waf-ddos.mdx +140 -0
- package/docs/articles/zuplo-waf.mdx +156 -0
- package/docs/ask.mdx +3 -0
- package/docs/cli/authentication.mdx +56 -0
- package/docs/cli/connectivity.mdx +38 -0
- package/docs/cli/create-zuplo-api.mdx +80 -0
- package/docs/cli/delete.mdx +79 -0
- package/docs/cli/deploy.mdx +156 -0
- package/docs/cli/deploy.partial.mdx +46 -0
- package/docs/cli/dev.mdx +115 -0
- package/docs/cli/docs.mdx +66 -0
- package/docs/cli/editor.mdx +50 -0
- package/docs/cli/global-options.mdx +19 -0
- package/docs/cli/init.mdx +74 -0
- package/docs/cli/link.mdx +74 -0
- package/docs/cli/list.mdx +55 -0
- package/docs/cli/mtls-certificate-create.mdx +94 -0
- package/docs/cli/mtls-certificate-delete.mdx +55 -0
- package/docs/cli/mtls-certificate-describe.mdx +55 -0
- package/docs/cli/mtls-certificate-disable.mdx +55 -0
- package/docs/cli/mtls-certificate-list.mdx +47 -0
- package/docs/cli/mtls-certificate-update.mdx +72 -0
- package/docs/cli/openapi-convert.mdx +111 -0
- package/docs/cli/openapi-merge.mdx +138 -0
- package/docs/cli/openapi-merge.partial.mdx +29 -0
- package/docs/cli/openapi-overlay.mdx +123 -0
- package/docs/cli/overview.mdx +78 -0
- package/docs/cli/project-create.mdx +43 -0
- package/docs/cli/source-migrate.mdx +18 -0
- package/docs/cli/source-upgrade.mdx +41 -0
- package/docs/cli/test.mdx +70 -0
- package/docs/cli/test.partial.mdx +7 -0
- package/docs/cli/tunnel-create.mdx +53 -0
- package/docs/cli/tunnel-create.partial.mdx +9 -0
- package/docs/cli/tunnel-delete.mdx +35 -0
- package/docs/cli/tunnel-delete.partial.mdx +9 -0
- package/docs/cli/tunnel-describe.mdx +45 -0
- package/docs/cli/tunnel-describe.partial.mdx +5 -0
- package/docs/cli/tunnel-list.mdx +35 -0
- package/docs/cli/tunnel-list.partial.mdx +9 -0
- package/docs/cli/tunnel-rate-token.partial.mdx +9 -0
- package/docs/cli/tunnel-rotate-token.mdx +39 -0
- package/docs/cli/tunnel-services-describe.mdx +45 -0
- package/docs/cli/tunnel-services-describe.partial.mdx +9 -0
- package/docs/cli/tunnel-services-update.mdx +48 -0
- package/docs/cli/variable-create.mdx +91 -0
- package/docs/cli/variable-create.partial.mdx +5 -0
- package/docs/cli/variable-update.mdx +75 -0
- package/docs/cli/variable-update.partial.mdx +5 -0
- package/docs/concepts/api-keys.md +146 -0
- package/docs/concepts/authentication.mdx +109 -0
- package/docs/concepts/how-zuplo-works.mdx +120 -0
- package/docs/concepts/project-structure.mdx +174 -0
- package/docs/concepts/rate-limiting.md +246 -0
- package/docs/concepts/request-lifecycle.mdx +56 -0
- package/docs/concepts/source-control-and-deployment.mdx +229 -0
- package/docs/conferences/conference-prize-terms.mdx +80 -0
- package/docs/dedicated/akamai/ai-powered-applications.mdx +223 -0
- package/docs/dedicated/akamai/architecture.mdx +280 -0
- package/docs/dedicated/akamai/caching.mdx +212 -0
- package/docs/dedicated/akamai/cdn.mdx +156 -0
- package/docs/dedicated/architecture.mdx +208 -0
- package/docs/dedicated/custom-domains.mdx +31 -0
- package/docs/dedicated/federated-gateways.mdx +80 -0
- package/docs/dedicated/networking.mdx +69 -0
- package/docs/dedicated/overview.mdx +80 -0
- package/docs/dedicated/source-control.mdx +63 -0
- package/docs/dev-portal/dev-portal-create-consumer-on-auth.mdx +134 -0
- package/docs/dev-portal/introduction.mdx +65 -0
- package/docs/dev-portal/local-development.mdx +72 -0
- package/docs/dev-portal/migration.mdx +526 -0
- package/docs/dev-portal/node-modules.mdx +45 -0
- package/docs/dev-portal/updating.mdx +28 -0
- package/docs/dev-portal/zudoku/components/alert.mdx +130 -0
- package/docs/dev-portal/zudoku/components/badge.mdx +70 -0
- package/docs/dev-portal/zudoku/components/button.mdx +132 -0
- package/docs/dev-portal/zudoku/components/callout.mdx +112 -0
- package/docs/dev-portal/zudoku/components/card.mdx +104 -0
- package/docs/dev-portal/zudoku/components/checkbox.mdx +72 -0
- package/docs/dev-portal/zudoku/components/client-only.mdx +79 -0
- package/docs/dev-portal/zudoku/components/code-tabs.mdx +179 -0
- package/docs/dev-portal/zudoku/components/dialog.mdx +167 -0
- package/docs/dev-portal/zudoku/components/head.mdx +199 -0
- package/docs/dev-portal/zudoku/components/icons.mdx +27 -0
- package/docs/dev-portal/zudoku/components/input.mdx +96 -0
- package/docs/dev-portal/zudoku/components/label.mdx +86 -0
- package/docs/dev-portal/zudoku/components/link.mdx +242 -0
- package/docs/dev-portal/zudoku/components/markdown.mdx +151 -0
- package/docs/dev-portal/zudoku/components/mermaid.mdx +81 -0
- package/docs/dev-portal/zudoku/components/playground.mdx +87 -0
- package/docs/dev-portal/zudoku/components/secret.mdx +78 -0
- package/docs/dev-portal/zudoku/components/select.mdx +176 -0
- package/docs/dev-portal/zudoku/components/shadcn.mdx +73 -0
- package/docs/dev-portal/zudoku/components/slider.mdx +108 -0
- package/docs/dev-portal/zudoku/components/slot.mdx +119 -0
- package/docs/dev-portal/zudoku/components/stepper.mdx +138 -0
- package/docs/dev-portal/zudoku/components/switch.mdx +96 -0
- package/docs/dev-portal/zudoku/components/syntax-highlight.mdx +602 -0
- package/docs/dev-portal/zudoku/components/textarea.mdx +78 -0
- package/docs/dev-portal/zudoku/components/tooltip.mdx +195 -0
- package/docs/dev-portal/zudoku/components/typography.mdx +61 -0
- package/docs/dev-portal/zudoku/configuration/ai-assistants.md +64 -0
- package/docs/dev-portal/zudoku/configuration/api-catalog.md +108 -0
- package/docs/dev-portal/zudoku/configuration/api-reference.md +397 -0
- package/docs/dev-portal/zudoku/configuration/authentication-auth0.md +173 -0
- package/docs/dev-portal/zudoku/configuration/authentication-azure-ad.md +238 -0
- package/docs/dev-portal/zudoku/configuration/authentication-clerk.md +110 -0
- package/docs/dev-portal/zudoku/configuration/authentication-firebase.md +61 -0
- package/docs/dev-portal/zudoku/configuration/authentication-pingfederate.md +136 -0
- package/docs/dev-portal/zudoku/configuration/authentication-supabase.md +225 -0
- package/docs/dev-portal/zudoku/configuration/authentication.md +199 -0
- package/docs/dev-portal/zudoku/configuration/build-configuration.mdx +147 -0
- package/docs/dev-portal/zudoku/configuration/docs.md +282 -0
- package/docs/dev-portal/zudoku/configuration/footer.mdx +214 -0
- package/docs/dev-portal/zudoku/configuration/llms.md +89 -0
- package/docs/dev-portal/zudoku/configuration/navigation.mdx +408 -0
- package/docs/dev-portal/zudoku/configuration/overview.md +380 -0
- package/docs/dev-portal/zudoku/configuration/protected-routes.md +149 -0
- package/docs/dev-portal/zudoku/configuration/search.md +169 -0
- package/docs/dev-portal/zudoku/configuration/sentry.mdx +44 -0
- package/docs/dev-portal/zudoku/configuration/site.md +124 -0
- package/docs/dev-portal/zudoku/configuration/slots.mdx +124 -0
- package/docs/dev-portal/zudoku/configuration/vite-config.md +18 -0
- package/docs/dev-portal/zudoku/custom-plugins.md +287 -0
- package/docs/dev-portal/zudoku/customization/colors-theme.mdx +275 -0
- package/docs/dev-portal/zudoku/customization/fonts.md +110 -0
- package/docs/dev-portal/zudoku/extending/events.md +124 -0
- package/docs/dev-portal/zudoku/guides/custom-pages.md +106 -0
- package/docs/dev-portal/zudoku/guides/environment-variables.md +99 -0
- package/docs/dev-portal/zudoku/guides/mermaid.mdx +70 -0
- package/docs/dev-portal/zudoku/guides/navigation-migration.md +87 -0
- package/docs/dev-portal/zudoku/guides/navigation-rules.mdx +197 -0
- package/docs/dev-portal/zudoku/guides/processors.mdx +234 -0
- package/docs/dev-portal/zudoku/guides/static-files.md +55 -0
- package/docs/dev-portal/zudoku/guides/transforming-examples.md +156 -0
- package/docs/dev-portal/zudoku/guides/using-multiple-apis.md +87 -0
- package/docs/dev-portal/zudoku/markdown/admonitions.md +128 -0
- package/docs/dev-portal/zudoku/markdown/code-blocks.md +196 -0
- package/docs/dev-portal/zudoku/markdown/frontmatter.md +172 -0
- package/docs/dev-portal/zudoku/markdown/mdx.md +68 -0
- package/docs/dev-portal/zudoku/markdown/overview.md +275 -0
- package/docs/dev-portal/zudoku/plugins.md +5 -0
- package/docs/dev-portal/zudoku/writing.mdx +72 -0
- package/docs/errors/bad-request.mdx +39 -0
- package/docs/errors/build-error.mdx +45 -0
- package/docs/errors/fatal-project-error.mdx +39 -0
- package/docs/errors/gateway-timeout.mdx +33 -0
- package/docs/errors/get-head-body-error.mdx +41 -0
- package/docs/errors/main-mod-error.mdx +40 -0
- package/docs/errors/no-project-set.mdx +41 -0
- package/docs/errors/not-found.mdx +43 -0
- package/docs/errors/rate-limit-exceeded.mdx +31 -0
- package/docs/errors/schema-validation-failed.mdx +51 -0
- package/docs/errors/system-configuration-error.mdx +44 -0
- package/docs/errors/unauthorized.mdx +50 -0
- package/docs/errors/unknown-error.mdx +42 -0
- package/docs/errors.mdx +14 -0
- package/docs/guides/canary-routing-for-employees.mdx +385 -0
- package/docs/guides/geolocation-backend-routing.mdx +404 -0
- package/docs/guides/modify-openapi-paths.mdx +371 -0
- package/docs/guides/openapi-overlays.mdx +492 -0
- package/docs/guides/overview.mdx +12 -0
- package/docs/guides/user-based-backend-routing.mdx +437 -0
- package/docs/handlers/aws-lambda.mdx +201 -0
- package/docs/handlers/custom-handler.mdx +112 -0
- package/docs/handlers/legacy-dev-portal-handler.mdx +135 -0
- package/docs/handlers/mcp-server.mdx +730 -0
- package/docs/handlers/openapi.mdx +78 -0
- package/docs/handlers/redirect.mdx +115 -0
- package/docs/handlers/system-handlers.mdx +41 -0
- package/docs/handlers/url-forward.mdx +204 -0
- package/docs/handlers/url-rewrite.mdx +224 -0
- package/docs/handlers/websocket-handler.mdx +154 -0
- package/docs/home.mdx +6 -0
- package/docs/managed-edge/overview.md +78 -0
- package/docs/mcp-server/configuration-migration-guide.mdx +344 -0
- package/docs/mcp-server/custom-tools.mdx +487 -0
- package/docs/mcp-server/graphql.mdx +241 -0
- package/docs/mcp-server/introduction.mdx +122 -0
- package/docs/mcp-server/openai-apps-sdk.mdx +160 -0
- package/docs/mcp-server/prompts.mdx +283 -0
- package/docs/mcp-server/resources.mdx +288 -0
- package/docs/mcp-server/testing.mdx +53 -0
- package/docs/mcp-server/tools.mdx +306 -0
- package/docs/policies/_index.md +92 -0
- package/docs/policies/ab-test-inbound/intro.md +8 -0
- package/docs/policies/ab-test-inbound/policy.ts +14 -0
- package/docs/policies/ab-test-inbound/schema.json +27 -0
- package/docs/policies/ab-test-outbound/intro.md +8 -0
- package/docs/policies/ab-test-outbound/policy.ts +26 -0
- package/docs/policies/ab-test-outbound/schema.json +27 -0
- package/docs/policies/acl-policy-inbound/intro.md +5 -0
- package/docs/policies/acl-policy-inbound/policy.ts +32 -0
- package/docs/policies/acl-policy-inbound/schema.json +52 -0
- package/docs/policies/akamai-ai-firewall/schema.json +98 -0
- package/docs/policies/amberflo-metering-inbound/doc.md +183 -0
- package/docs/policies/amberflo-metering-inbound/intro.md +20 -0
- package/docs/policies/amberflo-metering-inbound/schema.json +108 -0
- package/docs/policies/api-key-inbound/doc.md +77 -0
- package/docs/policies/api-key-inbound/intro.md +30 -0
- package/docs/policies/api-key-inbound/schema.json +84 -0
- package/docs/policies/archive-request-aws-s3-inbound/intro.md +4 -0
- package/docs/policies/archive-request-aws-s3-inbound/policy.ts +58 -0
- package/docs/policies/archive-request-aws-s3-inbound/schema.json +68 -0
- package/docs/policies/archive-request-azure-storage-inbound/doc.md +31 -0
- package/docs/policies/archive-request-azure-storage-inbound/intro.md +4 -0
- package/docs/policies/archive-request-azure-storage-inbound/policy.ts +54 -0
- package/docs/policies/archive-request-azure-storage-inbound/schema.json +53 -0
- package/docs/policies/archive-request-gcp-storage-inbound/doc.md +63 -0
- package/docs/policies/archive-request-gcp-storage-inbound/intro.md +4 -0
- package/docs/policies/archive-request-gcp-storage-inbound/policy.ts +68 -0
- package/docs/policies/archive-request-gcp-storage-inbound/schema.json +47 -0
- package/docs/policies/archive-response-aws-s3-outbound/intro.md +2 -0
- package/docs/policies/archive-response-aws-s3-outbound/policy.ts +59 -0
- package/docs/policies/archive-response-aws-s3-outbound/schema.json +68 -0
- package/docs/policies/archive-response-azure-storage-outbound/doc.md +31 -0
- package/docs/policies/archive-response-azure-storage-outbound/intro.md +3 -0
- package/docs/policies/archive-response-azure-storage-outbound/policy.ts +54 -0
- package/docs/policies/archive-response-azure-storage-outbound/schema.json +53 -0
- package/docs/policies/audit-log-inbound/doc.md +78 -0
- package/docs/policies/audit-log-inbound/intro.md +10 -0
- package/docs/policies/audit-log-inbound/schema.json +81 -0
- package/docs/policies/auth0-jwt-auth-inbound/doc.md +125 -0
- package/docs/policies/auth0-jwt-auth-inbound/intro.md +17 -0
- package/docs/policies/auth0-jwt-auth-inbound/schema.json +74 -0
- package/docs/policies/authzen-inbound/doc.md +24 -0
- package/docs/policies/authzen-inbound/intro.md +31 -0
- package/docs/policies/authzen-inbound/schema.json +126 -0
- package/docs/policies/axiomatics-authz-inbound/doc.md +144 -0
- package/docs/policies/axiomatics-authz-inbound/intro.md +11 -0
- package/docs/policies/axiomatics-authz-inbound/schema.json +161 -0
- package/docs/policies/basic-auth-inbound/intro.md +9 -0
- package/docs/policies/basic-auth-inbound/schema.json +99 -0
- package/docs/policies/bot-detection-inbound/intro.md +4 -0
- package/docs/policies/bot-detection-inbound/schema.json +56 -0
- package/docs/policies/brownout-inbound/doc.md +55 -0
- package/docs/policies/brownout-inbound/intro.md +12 -0
- package/docs/policies/brownout-inbound/schema.json +115 -0
- package/docs/policies/caching-inbound/doc.md +209 -0
- package/docs/policies/caching-inbound/intro.md +23 -0
- package/docs/policies/caching-inbound/schema.json +98 -0
- package/docs/policies/change-method-inbound/schema.json +56 -0
- package/docs/policies/clear-headers-inbound/schema.json +59 -0
- package/docs/policies/clear-headers-outbound/schema.json +59 -0
- package/docs/policies/clerk-jwt-auth-inbound/doc.md +85 -0
- package/docs/policies/clerk-jwt-auth-inbound/intro.md +4 -0
- package/docs/policies/clerk-jwt-auth-inbound/schema.json +68 -0
- package/docs/policies/cognito-jwt-auth-inbound/intro.md +7 -0
- package/docs/policies/cognito-jwt-auth-inbound/schema.json +74 -0
- package/docs/policies/comet-opik-tracing-inbound/schema.json +65 -0
- package/docs/policies/complex-rate-limit-inbound/doc.md +20 -0
- package/docs/policies/complex-rate-limit-inbound/intro.md +23 -0
- package/docs/policies/complex-rate-limit-inbound/schema.json +142 -0
- package/docs/policies/composite-inbound/doc.md +69 -0
- package/docs/policies/composite-inbound/intro.md +15 -0
- package/docs/policies/composite-inbound/schema.json +59 -0
- package/docs/policies/composite-outbound/intro.md +6 -0
- package/docs/policies/composite-outbound/schema.json +59 -0
- package/docs/policies/curity-phantom-token-inbound/doc.md +109 -0
- package/docs/policies/curity-phantom-token-inbound/intro.md +3 -0
- package/docs/policies/curity-phantom-token-inbound/schema.json +68 -0
- package/docs/policies/custom-code-inbound/doc.md +267 -0
- package/docs/policies/custom-code-inbound/intro.md +2 -0
- package/docs/policies/custom-code-inbound/schema.json +48 -0
- package/docs/policies/custom-code-outbound/doc.md +235 -0
- package/docs/policies/custom-code-outbound/intro.md +2 -0
- package/docs/policies/custom-code-outbound/schema.json +43 -0
- package/docs/policies/firebase-jwt-inbound/intro.md +6 -0
- package/docs/policies/firebase-jwt-inbound/schema.json +68 -0
- package/docs/policies/formdata-to-json-inbound/schema.json +60 -0
- package/docs/policies/galileo-tracing-inbound/schema.json +65 -0
- package/docs/policies/geo-filter-inbound/doc.md +33 -0
- package/docs/policies/geo-filter-inbound/schema.json +108 -0
- package/docs/policies/graphql-complexity-limit-inbound/doc.md +48 -0
- package/docs/policies/graphql-complexity-limit-inbound/intro.md +2 -0
- package/docs/policies/graphql-complexity-limit-inbound/schema.json +90 -0
- package/docs/policies/graphql-disable-introspection-inbound/doc.md +66 -0
- package/docs/policies/graphql-disable-introspection-inbound/intro.md +15 -0
- package/docs/policies/graphql-disable-introspection-inbound/schema.json +48 -0
- package/docs/policies/graphql-introspection-filter-outbound/doc.md +148 -0
- package/docs/policies/graphql-introspection-filter-outbound/schema.json +79 -0
- package/docs/policies/hmac-auth-inbound/doc.md +30 -0
- package/docs/policies/hmac-auth-inbound/intro.md +10 -0
- package/docs/policies/hmac-auth-inbound/policy.ts +70 -0
- package/docs/policies/hmac-auth-inbound/schema.json +53 -0
- package/docs/policies/http-deprecation-outbound/doc.md +73 -0
- package/docs/policies/http-deprecation-outbound/schema.json +83 -0
- package/docs/policies/ip-restriction-inbound/intro.md +8 -0
- package/docs/policies/ip-restriction-inbound/policy.ts +40 -0
- package/docs/policies/ip-restriction-inbound/schema.json +58 -0
- package/docs/policies/jwt-scopes-inbound/schema.json +59 -0
- package/docs/policies/ldap-auth-inbound/schema.json +56 -0
- package/docs/policies/mock-api-inbound/schema.json +72 -0
- package/docs/policies/moesif-inbound/doc.md +44 -0
- package/docs/policies/moesif-inbound/intro.md +6 -0
- package/docs/policies/moesif-inbound/schema.json +68 -0
- package/docs/policies/monetization-inbound/doc.md +87 -0
- package/docs/policies/monetization-inbound/intro.md +6 -0
- package/docs/policies/monetization-inbound/schema.json +102 -0
- package/docs/policies/mtls-auth-inbound/intro.md +6 -0
- package/docs/policies/mtls-auth-inbound/schema.json +68 -0
- package/docs/policies/okta-fga-authz-inbound/doc.md +181 -0
- package/docs/policies/okta-fga-authz-inbound/intro.md +20 -0
- package/docs/policies/okta-fga-authz-inbound/schema.json +104 -0
- package/docs/policies/okta-jwt-auth-inbound/intro.md +7 -0
- package/docs/policies/okta-jwt-auth-inbound/schema.json +74 -0
- package/docs/policies/open-id-jwt-auth-inbound/doc.md +58 -0
- package/docs/policies/open-id-jwt-auth-inbound/intro.md +30 -0
- package/docs/policies/open-id-jwt-auth-inbound/schema.json +128 -0
- package/docs/policies/openfga-authz-inbound/doc.md +207 -0
- package/docs/policies/openfga-authz-inbound/intro.md +17 -0
- package/docs/policies/openfga-authz-inbound/schema.json +191 -0
- package/docs/policies/openmeter-inbound/doc.md +163 -0
- package/docs/policies/openmeter-inbound/intro.md +18 -0
- package/docs/policies/openmeter-inbound/schema.json +183 -0
- package/docs/policies/prompt-injection-outbound/doc.md +106 -0
- package/docs/policies/prompt-injection-outbound/intro.md +4 -0
- package/docs/policies/prompt-injection-outbound/schema.json +74 -0
- package/docs/policies/propel-auth-jwt-inbound/doc.md +88 -0
- package/docs/policies/propel-auth-jwt-inbound/intro.md +4 -0
- package/docs/policies/propel-auth-jwt-inbound/schema.json +74 -0
- package/docs/policies/query-param-to-header-inbound/doc.md +70 -0
- package/docs/policies/query-param-to-header-inbound/intro.md +5 -0
- package/docs/policies/query-param-to-header-inbound/schema.json +74 -0
- package/docs/policies/quota-inbound/doc.md +235 -0
- package/docs/policies/quota-inbound/intro.md +7 -0
- package/docs/policies/quota-inbound/schema.json +133 -0
- package/docs/policies/rate-limit-inbound/doc.md +78 -0
- package/docs/policies/rate-limit-inbound/intro.md +30 -0
- package/docs/policies/rate-limit-inbound/schema.json +134 -0
- package/docs/policies/rbac-policy-inbound/intro.md +3 -0
- package/docs/policies/rbac-policy-inbound/policy.ts +42 -0
- package/docs/policies/rbac-policy-inbound/schema.json +52 -0
- package/docs/policies/readme-metrics-inbound/doc.md +1 -0
- package/docs/policies/readme-metrics-inbound/intro.md +3 -0
- package/docs/policies/readme-metrics-inbound/schema.json +84 -0
- package/docs/policies/remove-headers-inbound/schema.json +59 -0
- package/docs/policies/remove-headers-outbound/schema.json +59 -0
- package/docs/policies/remove-query-params-inbound/schema.json +59 -0
- package/docs/policies/replace-string-outbound/schema.json +69 -0
- package/docs/policies/request-size-limit-inbound/schema.json +60 -0
- package/docs/policies/request-validation-inbound/doc.md +72 -0
- package/docs/policies/request-validation-inbound/intro.md +24 -0
- package/docs/policies/request-validation-inbound/schema.json +98 -0
- package/docs/policies/require-origin-inbound/intro.md +12 -0
- package/docs/policies/require-origin-inbound/schema.json +65 -0
- package/docs/policies/secret-masking-outbound/doc.md +41 -0
- package/docs/policies/secret-masking-outbound/intro.md +13 -0
- package/docs/policies/secret-masking-outbound/schema.json +65 -0
- package/docs/policies/semantic-cache-inbound/doc.md +63 -0
- package/docs/policies/semantic-cache-inbound/intro.md +4 -0
- package/docs/policies/semantic-cache-inbound/schema.json +179 -0
- package/docs/policies/set-body-inbound/intro.md +7 -0
- package/docs/policies/set-body-inbound/schema.json +56 -0
- package/docs/policies/set-headers-inbound/doc.md +41 -0
- package/docs/policies/set-headers-inbound/intro.md +2 -0
- package/docs/policies/set-headers-inbound/schema.json +83 -0
- package/docs/policies/set-headers-outbound/schema.json +83 -0
- package/docs/policies/set-query-params-inbound/schema.json +83 -0
- package/docs/policies/set-status-outbound/schema.json +62 -0
- package/docs/policies/sleep-inbound/schema.json +56 -0
- package/docs/policies/stripe-webhook-verification-inbound/intro.md +2 -0
- package/docs/policies/stripe-webhook-verification-inbound/schema.json +60 -0
- package/docs/policies/supabase-jwt-auth-inbound/doc.md +29 -0
- package/docs/policies/supabase-jwt-auth-inbound/intro.md +12 -0
- package/docs/policies/supabase-jwt-auth-inbound/schema.json +86 -0
- package/docs/policies/transform-body-inbound/intro.md +8 -0
- package/docs/policies/transform-body-inbound/policy.ts +16 -0
- package/docs/policies/transform-body-inbound/schema.json +27 -0
- package/docs/policies/transform-body-outbound/intro.md +8 -0
- package/docs/policies/transform-body-outbound/policy.ts +19 -0
- package/docs/policies/transform-body-outbound/schema.json +27 -0
- package/docs/policies/upstream-azure-ad-service-auth-inbound/doc.md +82 -0
- package/docs/policies/upstream-azure-ad-service-auth-inbound/intro.md +20 -0
- package/docs/policies/upstream-azure-ad-service-auth-inbound/schema.json +84 -0
- package/docs/policies/upstream-firebase-admin-auth-inbound/intro.md +10 -0
- package/docs/policies/upstream-firebase-admin-auth-inbound/schema.json +68 -0
- package/docs/policies/upstream-firebase-user-auth-inbound/intro.md +2 -0
- package/docs/policies/upstream-firebase-user-auth-inbound/schema.json +113 -0
- package/docs/policies/upstream-gcp-federated-auth-inbound/doc.md +139 -0
- package/docs/policies/upstream-gcp-federated-auth-inbound/intro.md +21 -0
- package/docs/policies/upstream-gcp-federated-auth-inbound/schema.json +96 -0
- package/docs/policies/upstream-gcp-jwt-inbound/intro.md +10 -0
- package/docs/policies/upstream-gcp-jwt-inbound/schema.json +62 -0
- package/docs/policies/upstream-gcp-service-auth-inbound/doc.md +132 -0
- package/docs/policies/upstream-gcp-service-auth-inbound/intro.md +25 -0
- package/docs/policies/upstream-gcp-service-auth-inbound/schema.json +95 -0
- package/docs/policies/upstream-zuplo-jwt-auth-inbound/doc.md +213 -0
- package/docs/policies/upstream-zuplo-jwt-auth-inbound/intro.md +16 -0
- package/docs/policies/upstream-zuplo-jwt-auth-inbound/schema.json +101 -0
- package/docs/policies/validate-json-schema-inbound/doc.md +129 -0
- package/docs/policies/validate-json-schema-inbound/intro.md +7 -0
- package/docs/policies/validate-json-schema-inbound/schema.json +56 -0
- package/docs/policies/web-bot-auth-inbound/doc.md +104 -0
- package/docs/policies/web-bot-auth-inbound/intro.md +16 -0
- package/docs/policies/web-bot-auth-inbound/schema.json +76 -0
- package/docs/policies/xml-to-json-outbound/doc.md +71 -0
- package/docs/policies/xml-to-json-outbound/intro.md +4 -0
- package/docs/policies/xml-to-json-outbound/schema.json +117 -0
- package/docs/programmable-api/audit-log.mdx +74 -0
- package/docs/programmable-api/background-dispatcher.mdx +124 -0
- package/docs/programmable-api/background-loader.mdx +104 -0
- package/docs/programmable-api/cache.mdx +186 -0
- package/docs/programmable-api/compatibility-dates.mdx +201 -0
- package/docs/programmable-api/console-logging.mdx +48 -0
- package/docs/programmable-api/context-data.mdx +127 -0
- package/docs/programmable-api/custom-cors-policy.mdx +64 -0
- package/docs/programmable-api/environment.mdx +328 -0
- package/docs/programmable-api/hooks.mdx +569 -0
- package/docs/programmable-api/http-problems.mdx +385 -0
- package/docs/programmable-api/jwt-service-plugin.mdx +420 -0
- package/docs/programmable-api/logger.mdx +223 -0
- package/docs/programmable-api/memory-zone-read-through-cache.mdx +96 -0
- package/docs/programmable-api/node-modules.mdx +67 -0
- package/docs/programmable-api/not-found-handler.mdx +47 -0
- package/docs/programmable-api/oauth-protected-resource-plugin.mdx +46 -0
- package/docs/programmable-api/overview.mdx +213 -0
- package/docs/programmable-api/problem-response-formatter.mdx +183 -0
- package/docs/programmable-api/request-user.mdx +289 -0
- package/docs/programmable-api/reusing-code.mdx +26 -0
- package/docs/programmable-api/route-raw.mdx +55 -0
- package/docs/programmable-api/runtime-behaviors.mdx +25 -0
- package/docs/programmable-api/runtime-errors.mdx +246 -0
- package/docs/programmable-api/runtime-extensions.mdx +340 -0
- package/docs/programmable-api/safely-clone-a-request-or-response.mdx +57 -0
- package/docs/programmable-api/streaming-zone-cache.mdx +155 -0
- package/docs/programmable-api/web-crypto-apis.mdx +219 -0
- package/docs/programmable-api/web-standard-apis.mdx +109 -0
- package/docs/programmable-api/zone-cache.mdx +131 -0
- package/docs/programmable-api/zp-body-removed.mdx +32 -0
- package/docs/programmable-api/zuplo-context.mdx +414 -0
- package/docs/programmable-api/zuplo-id-token.mdx +90 -0
- package/docs/programmable-api/zuplo-json.mdx +91 -0
- package/docs/programmable-api/zuplo-request.mdx +200 -0
- package/docs/sample-apis.mdx +78 -0
- package/docs/self-hosted/overview.md +60 -0
- package/package.json +6 -5
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Plans
|
|
3
|
+
sidebar_label: Plans
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
:::note{title="Beta"}
|
|
7
|
+
|
|
8
|
+
API Monetization is in beta and free to try. The APIs are stable but should be
|
|
9
|
+
evaluated in non-production environments first. To go to production, contact
|
|
10
|
+
[sales@zuplo.com](mailto:sales@zuplo.com). Production pricing has not yet been
|
|
11
|
+
announced.
|
|
12
|
+
|
|
13
|
+
:::
|
|
14
|
+
|
|
15
|
+
Plans are subscription tiers that package features together. They represent the
|
|
16
|
+
rows on your pricing page - Free, Pro, Enterprise - each with different feature
|
|
17
|
+
access and usage limits. Plans define what customers get when they subscribe.
|
|
18
|
+
|
|
19
|
+
## Plan Structure
|
|
20
|
+
|
|
21
|
+
Plans follow a hierarchical structure where each level defines a specific aspect
|
|
22
|
+
of your pricing:
|
|
23
|
+
|
|
24
|
+
<Diagram height="h-96">
|
|
25
|
+
<DiagramNode id="plan">Plan</DiagramNode>
|
|
26
|
+
<DiagramNode id="phase">Phase</DiagramNode>
|
|
27
|
+
<DiagramNode id="ratecard">Rate Card</DiagramNode>
|
|
28
|
+
<DiagramNode id="price">Price</DiagramNode>
|
|
29
|
+
<DiagramNode id="entitlement">Entitlement</DiagramNode>
|
|
30
|
+
<DiagramNode id="feature">Feature</DiagramNode>
|
|
31
|
+
<DiagramNode id="meter">Meter</DiagramNode>
|
|
32
|
+
<DiagramEdge from="plan" to="phase" />
|
|
33
|
+
<DiagramEdge from="phase" to="ratecard" />
|
|
34
|
+
<DiagramEdge from="ratecard" to="price" />
|
|
35
|
+
<DiagramEdge from="ratecard" to="entitlement" />
|
|
36
|
+
<DiagramEdge from="entitlement" to="feature" />
|
|
37
|
+
<DiagramEdge from="feature" to="meter" />
|
|
38
|
+
</Diagram>
|
|
39
|
+
|
|
40
|
+
| Entity | Description |
|
|
41
|
+
| --------------- | ----------------------------------------------------- |
|
|
42
|
+
| **Plan** | A subscription tier (e.g., Pro, Enterprise) |
|
|
43
|
+
| **Phase** | A time period within a plan (e.g., trial, default) |
|
|
44
|
+
| **Rate Card** | Pricing and entitlements for a feature within a phase |
|
|
45
|
+
| **Price** | The pricing model (flat, tiered, package, etc.) |
|
|
46
|
+
| **Entitlement** | Usage limits and access controls for customers |
|
|
47
|
+
| **Feature** | A capability that can be metered or toggled |
|
|
48
|
+
| **Meter** | Tracks usage data for metered features |
|
|
49
|
+
|
|
50
|
+
Plans contain **phases**, and each phase contains **rate cards** that define
|
|
51
|
+
pricing and entitlements. See [Rate Cards](./rate-cards.mdx) for details on
|
|
52
|
+
configuring pricing within plans.
|
|
53
|
+
|
|
54
|
+
:::note
|
|
55
|
+
|
|
56
|
+
Before creating a plan, you must first define the [Features](./features.mdx)
|
|
57
|
+
that will be included. Plans reference features by their `key`, so features must
|
|
58
|
+
exist before they can be added to rate cards.
|
|
59
|
+
|
|
60
|
+
:::
|
|
61
|
+
|
|
62
|
+
## Plan Lifecycle
|
|
63
|
+
|
|
64
|
+
Plans move through a defined lifecycle:
|
|
65
|
+
|
|
66
|
+
1. **Draft** - Initial state when created. Can be modified freely.
|
|
67
|
+
2. **Active** - Published and available for subscriptions. Cannot be modified.
|
|
68
|
+
3. **Archived** - No longer available for new subscriptions but existing
|
|
69
|
+
subscriptions continue.
|
|
70
|
+
|
|
71
|
+
## Example: Pro Plan with Trial
|
|
72
|
+
|
|
73
|
+
This example creates a Pro plan with:
|
|
74
|
+
|
|
75
|
+
- A 1-week free trial phase with 1,000 API calls
|
|
76
|
+
- A default phase with $99/month subscription and 10,000 included API calls
|
|
77
|
+
- Overage pricing at $0.01 per additional call
|
|
78
|
+
- Static features for premium access
|
|
79
|
+
|
|
80
|
+
For step-by-step examples building plans from simple to complex, see
|
|
81
|
+
[Plan Examples](./plan-examples.mdx).
|
|
82
|
+
|
|
83
|
+
```shell
|
|
84
|
+
curl \
|
|
85
|
+
https://dev.zuplo.com/v3/metering/$BUCKET_ID/plans \
|
|
86
|
+
--request POST \
|
|
87
|
+
--header "Authorization: Bearer $ZAPI_KEY" \
|
|
88
|
+
--header "Content-Type: application/json" \
|
|
89
|
+
--data @- << EOF
|
|
90
|
+
{
|
|
91
|
+
"key": "pro",
|
|
92
|
+
"name": "Pro Plan",
|
|
93
|
+
"description": "For growing teams with a 1-week free trial",
|
|
94
|
+
"currency": "USD",
|
|
95
|
+
"billingCadence": "P1M",
|
|
96
|
+
"phases": [
|
|
97
|
+
{
|
|
98
|
+
"key": "trial",
|
|
99
|
+
"name": "Trial",
|
|
100
|
+
"duration": "P1W",
|
|
101
|
+
"rateCards": [
|
|
102
|
+
{
|
|
103
|
+
"type": "flat_fee",
|
|
104
|
+
"key": "api_requests",
|
|
105
|
+
"name": "API Requests (Trial)",
|
|
106
|
+
"featureKey": "api_requests",
|
|
107
|
+
"billingCadence": null,
|
|
108
|
+
"price": null,
|
|
109
|
+
"entitlementTemplate": {
|
|
110
|
+
"type": "metered",
|
|
111
|
+
"issueAfterReset": 1000,
|
|
112
|
+
"isSoftLimit": false,
|
|
113
|
+
"usagePeriod": "P1W"
|
|
114
|
+
}
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
"type": "flat_fee",
|
|
118
|
+
"key": "priority_support",
|
|
119
|
+
"name": "Priority Support (Trial)",
|
|
120
|
+
"featureKey": "priority_support",
|
|
121
|
+
"billingCadence": null,
|
|
122
|
+
"price": null,
|
|
123
|
+
"entitlementTemplate": {
|
|
124
|
+
"type": "boolean",
|
|
125
|
+
"config": true
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
]
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
"key": "default",
|
|
132
|
+
"name": "Default",
|
|
133
|
+
"duration": null,
|
|
134
|
+
"rateCards": [
|
|
135
|
+
{
|
|
136
|
+
"type": "usage_based",
|
|
137
|
+
"key": "api_requests",
|
|
138
|
+
"name": "API Requests",
|
|
139
|
+
"featureKey": "api_requests",
|
|
140
|
+
"billingCadence": "P1M",
|
|
141
|
+
"entitlementTemplate": {
|
|
142
|
+
"type": "metered",
|
|
143
|
+
"issueAfterReset": 10000,
|
|
144
|
+
"isSoftLimit": true,
|
|
145
|
+
"usagePeriod": "P1M"
|
|
146
|
+
},
|
|
147
|
+
"price": {
|
|
148
|
+
"type": "tiered",
|
|
149
|
+
"mode": "graduated",
|
|
150
|
+
"tiers": [
|
|
151
|
+
{
|
|
152
|
+
"upToAmount": "10000",
|
|
153
|
+
"flatPrice": { "type": "flat", "amount": "99.00" },
|
|
154
|
+
"unitPrice": null
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
"flatPrice": null,
|
|
158
|
+
"unitPrice": { "type": "unit", "amount": "0.01" }
|
|
159
|
+
}
|
|
160
|
+
]
|
|
161
|
+
}
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
"type": "flat_fee",
|
|
165
|
+
"key": "priority_support",
|
|
166
|
+
"name": "Priority Support",
|
|
167
|
+
"featureKey": "priority_support",
|
|
168
|
+
"billingCadence": null,
|
|
169
|
+
"price": null,
|
|
170
|
+
"entitlementTemplate": {
|
|
171
|
+
"type": "boolean",
|
|
172
|
+
"config": true
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
]
|
|
176
|
+
}
|
|
177
|
+
]
|
|
178
|
+
}
|
|
179
|
+
EOF
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### How This Plan Works
|
|
183
|
+
|
|
184
|
+
| Phase | Duration | API Requests | Cost |
|
|
185
|
+
| ------- | -------- | ------------------ | --------- |
|
|
186
|
+
| Trial | 1 week | 1,000 (hard limit) | Free |
|
|
187
|
+
| Default | Ongoing | 10,000 included | $99/month |
|
|
188
|
+
|
|
189
|
+
After the trial ends, customers automatically move to the default phase. In the
|
|
190
|
+
default phase, the first 10,000 API requests are included in the $99 monthly
|
|
191
|
+
fee. Additional requests are billed at $0.01 each (soft limit allows overage).
|
|
192
|
+
|
|
193
|
+
## Plan Properties
|
|
194
|
+
|
|
195
|
+
| Property | Required | Description |
|
|
196
|
+
| ----------------- | -------- | ------------------------------------------------------------- |
|
|
197
|
+
| `key` | Yes | Unique identifier for the plan |
|
|
198
|
+
| `name` | Yes | Human-readable display name |
|
|
199
|
+
| `currency` | Yes | Three-letter ISO currency code (e.g., `USD`) |
|
|
200
|
+
| `billingCadence` | Yes | Billing period as ISO 8601 duration (e.g., `P1M` for monthly) |
|
|
201
|
+
| `phases` | Yes | Array of plan phases with rate cards |
|
|
202
|
+
| `description` | No | Detailed description of the plan |
|
|
203
|
+
| `metadata` | No | Custom key-value pairs for your own use |
|
|
204
|
+
| `proRatingConfig` | No | Proration settings (see below) |
|
|
205
|
+
|
|
206
|
+
## Phase Properties
|
|
207
|
+
|
|
208
|
+
| Property | Required | Description |
|
|
209
|
+
| ----------- | -------- | --------------------------------------------------------------------- |
|
|
210
|
+
| `key` | Yes | Unique identifier for the phase within the plan |
|
|
211
|
+
| `name` | Yes | Human-readable display name |
|
|
212
|
+
| `duration` | No | ISO 8601 duration (e.g., `P1W` for 1 week). Omit for the final phase. |
|
|
213
|
+
| `rateCards` | Yes | Array of rate cards defining pricing and entitlements |
|
|
214
|
+
|
|
215
|
+
## Proration
|
|
216
|
+
|
|
217
|
+
Plans support automatic proration when customers upgrade or downgrade
|
|
218
|
+
mid-billing-period. Enable proration with the `proRatingConfig` property:
|
|
219
|
+
|
|
220
|
+
```json
|
|
221
|
+
{
|
|
222
|
+
"proRatingConfig": {
|
|
223
|
+
"enabled": true,
|
|
224
|
+
"mode": "max_consumption_based"
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
When proration is enabled, charges are automatically adjusted based on the
|
|
230
|
+
portion of the billing period remaining at the time of the plan change.
|
|
231
|
+
|
|
232
|
+
## Publishing a Plan
|
|
233
|
+
|
|
234
|
+
:::caution
|
|
235
|
+
|
|
236
|
+
Plans must be published before customers can subscribe to them. A newly created
|
|
237
|
+
plan starts in `draft` status and is not available for subscriptions until
|
|
238
|
+
published.
|
|
239
|
+
|
|
240
|
+
:::
|
|
241
|
+
|
|
242
|
+
Transition a draft plan to active status:
|
|
243
|
+
|
|
244
|
+
```shell
|
|
245
|
+
curl \
|
|
246
|
+
https://dev.zuplo.com/v3/metering/$BUCKET_ID/plans/$PLAN_ID/publish \
|
|
247
|
+
--request POST \
|
|
248
|
+
--header "Authorization: Bearer $ZAPI_KEY"
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
Once published, a plan cannot be modified. To make changes, you must create a
|
|
252
|
+
new version of the plan.
|
|
253
|
+
|
|
254
|
+
## Common Billing Cadences
|
|
255
|
+
|
|
256
|
+
| Duration | Description |
|
|
257
|
+
| -------- | ----------- |
|
|
258
|
+
| `P1W` | Weekly |
|
|
259
|
+
| `P1M` | Monthly |
|
|
260
|
+
| `P3M` | Quarterly |
|
|
261
|
+
| `P1Y` | Yearly |
|
|
262
|
+
|
|
263
|
+
## API Reference
|
|
264
|
+
|
|
265
|
+
For complete API operations (list, get, update, delete, archive), see the
|
|
266
|
+
[Plans API Reference](../../api/metering-plans).
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Pricing Models
|
|
3
|
+
sidebar_label: Pricing Models
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
:::note{title="Beta"}
|
|
7
|
+
|
|
8
|
+
API Monetization is in beta and free to try. The APIs are stable but should be
|
|
9
|
+
evaluated in non-production environments first. To go to production, contact
|
|
10
|
+
[sales@zuplo.com](mailto:sales@zuplo.com). Production pricing has not yet been
|
|
11
|
+
announced.
|
|
12
|
+
|
|
13
|
+
:::
|
|
14
|
+
|
|
15
|
+
Pricing models define how charges are calculated within a
|
|
16
|
+
[rate card](./rate-cards.mdx). Each model suits different business scenarios,
|
|
17
|
+
from simple flat fees to complex usage-based pricing.
|
|
18
|
+
|
|
19
|
+
## Flat Fee Pricing
|
|
20
|
+
|
|
21
|
+
Flat fee pricing charges a fixed amount regardless of usage. Use `flat_fee` rate
|
|
22
|
+
cards for subscriptions, setup fees, or access charges.
|
|
23
|
+
|
|
24
|
+
### Recurring Subscription
|
|
25
|
+
|
|
26
|
+
A monthly platform fee that recurs each billing period:
|
|
27
|
+
|
|
28
|
+
```json
|
|
29
|
+
{
|
|
30
|
+
"type": "flat_fee",
|
|
31
|
+
"key": "platform_fee",
|
|
32
|
+
"name": "Platform Fee",
|
|
33
|
+
"billingCadence": "P1M",
|
|
34
|
+
"price": {
|
|
35
|
+
"type": "flat",
|
|
36
|
+
"amount": "99.00"
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### One-Time Setup Fee
|
|
42
|
+
|
|
43
|
+
A setup fee charged once when the subscription starts (no `billingCadence`):
|
|
44
|
+
|
|
45
|
+
```json
|
|
46
|
+
{
|
|
47
|
+
"type": "flat_fee",
|
|
48
|
+
"key": "setup_fee",
|
|
49
|
+
"name": "Setup Fee",
|
|
50
|
+
"price": {
|
|
51
|
+
"type": "flat",
|
|
52
|
+
"amount": "500.00"
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Per-Unit Pricing
|
|
58
|
+
|
|
59
|
+
Per-unit pricing charges a fixed amount for each unit of metered usage. Use
|
|
60
|
+
`usage_based` rate cards linked to a feature.
|
|
61
|
+
|
|
62
|
+
```json
|
|
63
|
+
{
|
|
64
|
+
"type": "usage_based",
|
|
65
|
+
"featureKey": "api_calls",
|
|
66
|
+
"billingCadence": "P1M",
|
|
67
|
+
"price": {
|
|
68
|
+
"type": "unit",
|
|
69
|
+
"amount": "0.001"
|
|
70
|
+
},
|
|
71
|
+
"entitlementTemplate": {
|
|
72
|
+
"type": "metered",
|
|
73
|
+
"isSoftLimit": true
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
**Example:** At $0.001 per unit, a customer using 100,000 API calls pays:
|
|
79
|
+
|
|
80
|
+
`100,000 × $0.001 = $100`
|
|
81
|
+
|
|
82
|
+
## Tiered Pricing
|
|
83
|
+
|
|
84
|
+
Tiered pricing varies the price based on usage volume. There are two modes:
|
|
85
|
+
|
|
86
|
+
### Graduated Pricing
|
|
87
|
+
|
|
88
|
+
Each unit is charged according to the tier it falls into:
|
|
89
|
+
|
|
90
|
+
```json
|
|
91
|
+
{
|
|
92
|
+
"type": "usage_based",
|
|
93
|
+
"featureKey": "api_calls",
|
|
94
|
+
"billingCadence": "P1M",
|
|
95
|
+
"price": {
|
|
96
|
+
"type": "tiered",
|
|
97
|
+
"mode": "graduated",
|
|
98
|
+
"tiers": [
|
|
99
|
+
{ "upToAmount": 1000, "unitPrice": { "amount": "0.10" } },
|
|
100
|
+
{ "upToAmount": 10000, "unitPrice": { "amount": "0.05" } },
|
|
101
|
+
{ "upToAmount": null, "unitPrice": { "amount": "0.01" } }
|
|
102
|
+
]
|
|
103
|
+
},
|
|
104
|
+
"entitlementTemplate": {
|
|
105
|
+
"type": "metered",
|
|
106
|
+
"isSoftLimit": true
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
| Tier | Units | Unit Price |
|
|
112
|
+
| ---- | -------------- | ---------- |
|
|
113
|
+
| 1 | 0 - 1,000 | $0.10 |
|
|
114
|
+
| 2 | 1,001 - 10,000 | $0.05 |
|
|
115
|
+
| 3 | 10,001+ | $0.01 |
|
|
116
|
+
|
|
117
|
+
**Example:** A customer using 15,000 units pays:
|
|
118
|
+
|
|
119
|
+
`(1,000 × $0.10) + (9,000 × $0.05) + (5,000 × $0.01) = $100 + $450 + $50 = $600`
|
|
120
|
+
|
|
121
|
+
### Volume Pricing
|
|
122
|
+
|
|
123
|
+
All units are charged at the rate of the highest tier reached:
|
|
124
|
+
|
|
125
|
+
```json
|
|
126
|
+
{
|
|
127
|
+
"type": "usage_based",
|
|
128
|
+
"featureKey": "api_calls",
|
|
129
|
+
"billingCadence": "P1M",
|
|
130
|
+
"price": {
|
|
131
|
+
"type": "tiered",
|
|
132
|
+
"mode": "volume",
|
|
133
|
+
"tiers": [
|
|
134
|
+
{ "upToAmount": 1000, "unitPrice": { "amount": "0.10" } },
|
|
135
|
+
{ "upToAmount": 10000, "unitPrice": { "amount": "0.05" } },
|
|
136
|
+
{ "upToAmount": null, "unitPrice": { "amount": "0.01" } }
|
|
137
|
+
]
|
|
138
|
+
},
|
|
139
|
+
"entitlementTemplate": {
|
|
140
|
+
"type": "metered",
|
|
141
|
+
"isSoftLimit": true
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
**Example:** A customer using 15,000 units pays:
|
|
147
|
+
|
|
148
|
+
`15,000 × $0.01 = $150`
|
|
149
|
+
|
|
150
|
+
All units are charged at the tier 3 rate because usage exceeded 10,000.
|
|
151
|
+
|
|
152
|
+
### Included Usage with Overage
|
|
153
|
+
|
|
154
|
+
Combine a flat fee for included usage with per-unit overage charges. This is a
|
|
155
|
+
common pattern for "X calls included, then $Y per additional call":
|
|
156
|
+
|
|
157
|
+
```json
|
|
158
|
+
{
|
|
159
|
+
"type": "usage_based",
|
|
160
|
+
"featureKey": "api_calls",
|
|
161
|
+
"billingCadence": "P1M",
|
|
162
|
+
"price": {
|
|
163
|
+
"type": "tiered",
|
|
164
|
+
"mode": "graduated",
|
|
165
|
+
"tiers": [
|
|
166
|
+
{ "upToAmount": 10000, "flatPrice": { "amount": "0" } },
|
|
167
|
+
{ "upToAmount": null, "unitPrice": { "amount": "0.01" } }
|
|
168
|
+
]
|
|
169
|
+
},
|
|
170
|
+
"entitlementTemplate": {
|
|
171
|
+
"type": "metered",
|
|
172
|
+
"issueAfterReset": 10000,
|
|
173
|
+
"isSoftLimit": true
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
This grants 10,000 API calls included (via `issueAfterReset`), then charges
|
|
179
|
+
$0.01 per additional call.
|
|
180
|
+
|
|
181
|
+
## Package Pricing
|
|
182
|
+
|
|
183
|
+
Package pricing sells usage in fixed bundles rather than individual units:
|
|
184
|
+
|
|
185
|
+
```json
|
|
186
|
+
{
|
|
187
|
+
"type": "usage_based",
|
|
188
|
+
"featureKey": "api_calls",
|
|
189
|
+
"billingCadence": "P1M",
|
|
190
|
+
"price": {
|
|
191
|
+
"type": "package",
|
|
192
|
+
"amount": "10.00",
|
|
193
|
+
"quantityPerPackage": 1000
|
|
194
|
+
},
|
|
195
|
+
"entitlementTemplate": {
|
|
196
|
+
"type": "metered",
|
|
197
|
+
"isSoftLimit": true
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
| Usage | Packages | Total |
|
|
203
|
+
| ----- | -------- | ----- |
|
|
204
|
+
| 0 | 0 | $0 |
|
|
205
|
+
| 500 | 1 | $10 |
|
|
206
|
+
| 1,000 | 1 | $10 |
|
|
207
|
+
| 1,001 | 2 | $20 |
|
|
208
|
+
| 5,500 | 6 | $60 |
|
|
209
|
+
|
|
210
|
+
Usage is rounded up to the next package.
|
|
211
|
+
|
|
212
|
+
## Choosing a Pricing Model
|
|
213
|
+
|
|
214
|
+
| Model | Best For |
|
|
215
|
+
| ------------- | --------------------------------------------------------- |
|
|
216
|
+
| **Flat** | Subscriptions, setup fees, fixed-price features |
|
|
217
|
+
| **Per-Unit** | Simple usage billing where each unit has equal value |
|
|
218
|
+
| **Graduated** | Volume discounts while maintaining revenue on lower tiers |
|
|
219
|
+
| **Volume** | Aggressive volume discounts to incentivize high usage |
|
|
220
|
+
| **Package** | Simplified billing, encouraging bulk purchases |
|
|
221
|
+
|
|
222
|
+
## Complete Example
|
|
223
|
+
|
|
224
|
+
See [Plan Examples](./plan-examples.mdx) for step-by-step examples showing how
|
|
225
|
+
to build plans with different pricing models.
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Private Plans — Invite-Only Subscriptions
|
|
3
|
+
sidebar_label: Private Plans
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
:::note{title="Beta"}
|
|
7
|
+
|
|
8
|
+
API Monetization is in beta and free to try. The APIs are stable but should be
|
|
9
|
+
evaluated in non-production environments first. To go to production, contact
|
|
10
|
+
[sales@zuplo.com](mailto:sales@zuplo.com). Production pricing has not yet been
|
|
11
|
+
announced.
|
|
12
|
+
|
|
13
|
+
:::
|
|
14
|
+
|
|
15
|
+
Private plans are hidden from the public pricing table and can only be accessed
|
|
16
|
+
by users you explicitly invite. Use private plans for custom enterprise pricing,
|
|
17
|
+
partner deals, or beta testing with specific users.
|
|
18
|
+
|
|
19
|
+
## Prerequisites
|
|
20
|
+
|
|
21
|
+
Before creating private plans, complete the [Quickstart](./quickstart.md) guide
|
|
22
|
+
to set up meters, features, and at least one public plan.
|
|
23
|
+
|
|
24
|
+
## Create a private plan
|
|
25
|
+
|
|
26
|
+
A plan becomes private when you set `"zuplo_private_plan": "true"` in the plan's
|
|
27
|
+
`metadata` field. You can create private plans through the API.
|
|
28
|
+
|
|
29
|
+
This example creates an invite-only Developer plan with 1,000 included requests
|
|
30
|
+
and $0.10/request overage:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
curl -X POST "https://dev.zuplo.com/v3/metering/${ZUPLO_BUCKET_ID}/plans" \
|
|
34
|
+
-H "Authorization: Bearer ${ZUPLO_API_KEY}" \
|
|
35
|
+
-H "Content-Type: application/json" \
|
|
36
|
+
-d '{
|
|
37
|
+
"billingCadence": "P1M",
|
|
38
|
+
"currency": "USD",
|
|
39
|
+
"description": "1000 requests per month with overages",
|
|
40
|
+
"key": "private_developer",
|
|
41
|
+
"metadata": {
|
|
42
|
+
"zuplo_private_plan": "true"
|
|
43
|
+
},
|
|
44
|
+
"name": "Private Developer",
|
|
45
|
+
"proRatingConfig": {
|
|
46
|
+
"enabled": true,
|
|
47
|
+
"mode": "max_consumption_based"
|
|
48
|
+
},
|
|
49
|
+
"phases": [
|
|
50
|
+
{
|
|
51
|
+
"duration": null,
|
|
52
|
+
"key": "default",
|
|
53
|
+
"name": "Default",
|
|
54
|
+
"rateCards": [
|
|
55
|
+
{
|
|
56
|
+
"billingCadence": "P1M",
|
|
57
|
+
"featureKey": "monthly_fee",
|
|
58
|
+
"key": "monthly_fee",
|
|
59
|
+
"name": "Monthly Fee",
|
|
60
|
+
"price": {
|
|
61
|
+
"amount": "9.99",
|
|
62
|
+
"paymentTerm": "in_advance",
|
|
63
|
+
"type": "flat"
|
|
64
|
+
},
|
|
65
|
+
"type": "flat_fee"
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"billingCadence": "P1M",
|
|
69
|
+
"entitlementTemplate": {
|
|
70
|
+
"isSoftLimit": true,
|
|
71
|
+
"issueAfterReset": 1000,
|
|
72
|
+
"preserveOverageAtReset": false,
|
|
73
|
+
"type": "metered",
|
|
74
|
+
"usagePeriod": "P1M"
|
|
75
|
+
},
|
|
76
|
+
"featureKey": "api",
|
|
77
|
+
"key": "api",
|
|
78
|
+
"name": "api",
|
|
79
|
+
"price": {
|
|
80
|
+
"mode": "graduated",
|
|
81
|
+
"tiers": [
|
|
82
|
+
{
|
|
83
|
+
"flatPrice": {
|
|
84
|
+
"amount": "0",
|
|
85
|
+
"type": "flat"
|
|
86
|
+
},
|
|
87
|
+
"unitPrice": null,
|
|
88
|
+
"upToAmount": "155000"
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"flatPrice": null,
|
|
92
|
+
"unitPrice": {
|
|
93
|
+
"amount": "0.10",
|
|
94
|
+
"type": "unit"
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
],
|
|
98
|
+
"type": "tiered"
|
|
99
|
+
},
|
|
100
|
+
"type": "usage_based"
|
|
101
|
+
}
|
|
102
|
+
]
|
|
103
|
+
}
|
|
104
|
+
]
|
|
105
|
+
}'
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Save the returned `id` — you need it to publish and invite users.
|
|
109
|
+
|
|
110
|
+
The key difference from a public plan is `metadata.zuplo_private_plan` set to
|
|
111
|
+
`"true"`. Everything else (rate cards, entitlements, pricing) works the same as
|
|
112
|
+
public plans.
|
|
113
|
+
|
|
114
|
+
## Publish the plan
|
|
115
|
+
|
|
116
|
+
Like standard plans, private plans are created as drafts. Publish before users
|
|
117
|
+
can subscribe:
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
curl -X POST "https://dev.zuplo.com/v3/metering/${ZUPLO_BUCKET_ID}/plans/${PLAN_ID}/publish" \
|
|
121
|
+
-H "Authorization: Bearer ${ZUPLO_API_KEY}" \
|
|
122
|
+
-H "Content-Type: application/json" \
|
|
123
|
+
-d '{}'
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
## Invite a user
|
|
127
|
+
|
|
128
|
+
After publishing, create an invite tied to the user's email address. The user
|
|
129
|
+
does not need to exist in Zuplo yet, but they must sign in with the invited
|
|
130
|
+
email to see the private plan.
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
curl -X POST "https://dev.zuplo.com/v3/metering/${ZUPLO_BUCKET_ID}/plan-invites" \
|
|
134
|
+
-H "Authorization: Bearer ${ZUPLO_API_KEY}" \
|
|
135
|
+
-H "Content-Type: application/json" \
|
|
136
|
+
-d '{
|
|
137
|
+
"email": "user@example.com",
|
|
138
|
+
"planId": "${PLAN_ID}"
|
|
139
|
+
}'
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
Once the invite is created, the invited user sees this plan on the Developer
|
|
143
|
+
Portal pricing page after logging in. Users who have not been invited do not see
|
|
144
|
+
the plan.
|
|
145
|
+
|
|
146
|
+
## How it works
|
|
147
|
+
|
|
148
|
+
- Private plans do not appear on the public pricing table.
|
|
149
|
+
- Only users with a matching invite (by email) see the plan after signing in.
|
|
150
|
+
- A user can be invited to multiple private plans.
|
|
151
|
+
- Private plans support the same rate cards, entitlements, and billing features
|
|
152
|
+
as public plans.
|
|
153
|
+
- Subscriptions to private plans work identically to public plan subscriptions
|
|
154
|
+
(Stripe Checkout, API key provisioning, usage tracking).
|