diff --git a/docs/guides/api-gateway/add-traffic-policy.mdx b/docs/guides/api-gateway/add-traffic-policy.mdx
new file mode 100644
index 000000000..a0e432e12
--- /dev/null
+++ b/docs/guides/api-gateway/add-traffic-policy.mdx
@@ -0,0 +1,302 @@
+---
+title: Add API gateway traffic management policies
+description: Learn how to add and compose Traffic Policy rules, like authentication and rate limiting, to all or some of your API services.
+---
+
+import TabItem from "@theme/TabItem";
+import Tabs from "@theme/Tabs";
+import Auth0 from "./img/auth0-create-api.png";
+
+ngrok's API gateway is designed for composability, allowing you to pick and
+choose from many [Traffic Policy
+actions](/docs/traffic-policy/actions) and order them in many ways to
+manage API traffic according to your needs.
+
+With our common pattern of using a cloud endpoint to route traffic to internal
+agent endpoints, you can centrally manage certain policies like rate limiting or
+authentication, then compose additional policies onto specific internal agent
+endpoints and API services.
+
+If you haven't yet deployed ngrok as your API gateway, start with one of these
+tutorials:
+
+- [Get started with an API gateway](/docs/guides/api-gateway/get-started)
+- [Deploy an API gateway in Kubernetes](/docs/guides/api-gateway/kubernetes)
+- [Deploy a multicloud API gateway](/docs/guides/api-gateway/multicloud)
+
+## Add a rate limiting policy to all API services
+
+We recommend you add a rate limiting policy on your cloud endpoint to protect
+all your services from unintentional misuse and malicious attacks.
+
+When you apply rate limiting to your cloud endpoint, then forward traffic to one
+or more internal URLs, then ngrok applies the policy equally across all your API
+services.
+
+The Traffic Policy file below:
+
+1. Allows up to `10` requests per IP in a `60s` window.
+2. Rejects requests that exceed the rate limiting `capacity` with a `429` error response.
+3. Forwards all requests not subject to the rate limit to an internal endpoint.
+ You will need to edit this action, and potentially add additional
+ `forward-internal` actions, based on your routing topology.
+
+```yaml title="policy.yaml" mode=traffic-policy
+on_http_request:
+ - actions:
+ - type: rate-limit
+ config:
+ name: Only allow 10 requests per minute
+ algorithm: sliding_window
+ capacity: 10
+ rate: 60s
+ bucket_key:
+ - conn.client_ip
+ - actions:
+ - type: forward-internal
+ config:
+ url: https://foo.internal
+```
+
+Apply the rule to your cloud endpoint with the dashboard or API.
+
+
+
+### Access your JWT
+
+Upon creating your new API, Auth0 will create an associated application under
+**Applications > APIs** in the left navigation bar.
+
+Navigate to your application, and click on the `Test` tab. Here, you will
+find a signed, fully functional JWT, as well as examples of how to programmatically
+generate one.
+
+### Update your Traffic Policy rules with the `validate-jwt` action
+
+The Traffic Policy file below:
+
+1. Integrates ngrok with your authentication provider so ngrok can validate JWTs
+ passed in requests to your API.
+2. Rejects requests without a `Authorization: Bearer ...` header or valid token.
+3. Forwards all authenticated requests to an internal endpoint. You will need to
+ edit this action, and potentially add additional `forward-internal` actions,
+ based on your routing topology.
+
+```yaml title="policy.yaml" traffic-policy
+on_http_request:
+ - actions:
+ - type: "jwt-validation"
+ config:
+ issuer:
+ allow_list:
+ - value: "https://{YOUR_AUTH0_TENANT_ID}.us.auth0.com/"
+ audience:
+ allow_list:
+ - value: "https://{YOUR_NGROK_DOMAIN}"
+ http:
+ tokens:
+ - type: "jwt"
+ method: "header"
+ name: "Authorization"
+ prefix: "Bearer "
+ jws:
+ allowed_algorithms:
+ - "RS256"
+ keys:
+ sources:
+ additional_jkus:
+ - "https://{YOUR_AUTH0_TENANT_ID}.us.auth0.com/.well-known/jwks.json"
+ - actions:
+ - type: "forward-internal"
+ config:
+ url: "https://foo.internal"
+```
+
+Replace `{YOUR_AUTH0_TENANT_ID}` and `{YOUR_NGROK_DOMAIN}` and apply the rule to
+your cloud endpoint with the dashboard or API.
+
+You can test the JWT validation policy, substituting your domain for
+`{YOUR_NGROK_DOMAIN}` and the JWT obtained from the Auth0 dashboard for
+`{YOUR_JWT}`:
+
+```bash
+curl -X GET https://{YOUR_NGROK_DOMAIN}/ \
+ --header "Authorization: Bearer {YOUR_JWT}"
+```
+
+By authenticating yourself against ngrok's JWT validation, you'll get the
+expected response. If you include an invalid token, you'll see a `403 Forbidden`
+error, and if you send a request with no `Authorization` header, you'll get `401
+Unauthorized` error.
+
+## Compose policies on specific API services
+
+In certain cases, you'll want to apply Traffic Policy rules to just one API
+service—in those cases, you should update your internal agent endpoint with a
+Traffic Policy file.
+
+### Example with URL rewrites
+
+The [`url-rewrite` Traffic Policy
+action](/docs/traffic-policy/actions/url-rewrite/) lets you to modify the
+incoming request URL before it reaches your API service and invisibly to the
+user—perfect for routing user requests without exposing details about your
+internal systems.
+
+To rewrite one path to another:
+
+```yaml title="url-rewrite.yaml" mode=traffic-policy
+on_http_request:
+ - expressions:
+ - "req.url.path == '/foo'"
+ actions:
+ - type: url-rewrite
+ config:
+ from: /foo
+ to: /bar
+```
+
+To rewrite multiple URLs using regular expressions:
+
+```
+on_http_request:
+ - expressions:
+ - req.url.path.startsWith('/products')
+ actions:
+ - type: url-rewrite
+ config:
+ from: /foo/?([.*]+)?
+ to: /bar/$1
+```
+
+Restart the ngrok agent on the same internal URL, while also specifying your new
+Traffic Policy file.
+
+```
+ngrok http 8080 --url https://foo.internal --traffic-policy-file=url-rewrite.yaml
+```
+
+:::tip
+If you're using other configuration flags, like `--pooling-enabled`, make
+sure you add those to the command above.
+:::
+
+When you send a request to the `/foo` path, your API service will respond as
+though it had come from the `/bar` path.
+
+### Example with the `circuit-breaker` action
+
+For example, one API service is running on a machine with less system resources,
+making it more suseptible to errors during peak load. You can implement the
+[`circuit-breaker` Traffic Policy
+action](/docs/traffic-policy/actions/circuit-breaker) on just the internal
+agent endpoint that forwards traffic to that service for additional protection.
+
+Create a new Traffic Policy file named `circuit-breaker.yaml` on the system
+where this internal agent endpoint runs. To help you see how it works, the
+following `circuit-breaker` rule sets an intentionally low volume threshold that
+allows `10` requests in a `60s` window before tripping the circuit breaker for
+`2m`.
+
+```yaml title="circuit-breaker.yaml" mode=traffic-policy
+on_http_request:
+ - actions:
+ - type: circuit-breaker
+ config:
+ error_threshold: 0
+ volume_threshold: 10
+ window_duration: 60s
+ tripped_duration: 2m
+ enforce: true
+```
+
+Restart the ngrok agent on the same internal URL, while also specifying your new
+Traffic Policy file.
+
+```
+ngrok http 8080 --url https://foo.internal --traffic-policy-file=circuit-breaker.yaml
+```
+
+:::tip
+If you're using other configuration flags, like `--pooling-enabled`, make
+sure you add those to the command above.
+:::
+
+You can test this behavior out by sending multiple `curl` requests to your APIs
+in quick succession to trip the circuit breaker.
+
+## What's next?
+
+You've now adding common traffic management policies to your ngrok API gateway
+at both your cloud and internal agent endpoints, allowing you to centrally
+manage certain rules and compose others as needed.
+
+Explore other opportunities to manage and take action on API traffic in our
+[Traffic Policy documentation](/docs/traffic-policy).
+
+Check out your [Traffic
+Inspector](https://dashboard.ngrok.com/observability/traffic-inspector)
+([documentation](/docs/obs/traffic-inspection)) to observe, modify, and
+replay requests across your API gateway.
diff --git a/docs/guides/api-gateway/get-started.mdx b/docs/guides/api-gateway/get-started.mdx
index a1a262cf4..368b8f947 100644
--- a/docs/guides/api-gateway/get-started.mdx
+++ b/docs/guides/api-gateway/get-started.mdx
@@ -1,5 +1,5 @@
---
-title: Get started - Deliver and secure APIs in production
+title: Get started with ngrok's API gateway
tags:
- guides
- API
@@ -10,8 +10,6 @@ tags:
import Auth0 from "./img/auth0-create-api.png";
-# Get started - Deliver and secure APIs in production
-
You've developed a world-class API, and now you want to make it available for clients to access. This guide takes you from
bringing your API online in one line to configuring an API gateway that simplifies routing, security, contract management,
protocol translation, and more, providing a single point of entry for clients and services accessing your APIs.
diff --git a/docs/guides/api-gateway/kubernetes.mdx b/docs/guides/api-gateway/kubernetes.mdx
index 6922d66a6..f2a58c34b 100644
--- a/docs/guides/api-gateway/kubernetes.mdx
+++ b/docs/guides/api-gateway/kubernetes.mdx
@@ -1,12 +1,11 @@
---
+title: Deploy an API gateway in Kubernetes
description: Deploy ngrok's Kubernetes Operator onto your cluster for unified ingress and advanced traffic shaping with K8s-native interfaces.
---
import TabItem from "@theme/TabItem";
import Tabs from "@theme/Tabs";
-# Deliver and secure ingress for APIs in Kubernetes
-
You currently have a K8s cluster with an API (micro)service and want to deliver it
to production with additional features and protection, like rate limiting,
authentication, and DDoS protection.
diff --git a/docs/guides/api-gateway/multicloud.mdx b/docs/guides/api-gateway/multicloud.mdx
new file mode 100644
index 000000000..cd6a8323f
--- /dev/null
+++ b/docs/guides/api-gateway/multicloud.mdx
@@ -0,0 +1,311 @@
+---
+title: Deploy a multicloud API gateway
+description: In this tutorial, you'll learn how to load balance API services across multiple clouds and apply common multicloud traffic patterns.
+---
+
+import TabItem from "@theme/TabItem";
+import Tabs from "@theme/Tabs";
+
+You've developed a world-class API, and now you want to make it available online
+on not just one cloud provider, but two or more.
+
+Aside from the challenges involved in any multicloud deployment, you're looking
+for a multicloud API gateway that allows you to:
+
+- Consistently apply security and traffic management policy in one place
+- Provide a single pane of glass for observability
+- Work identically in every cloud or environment
+
+## What you'll learn
+
+In this tutorial, you'll learn how to implement ngrok as a multicloud API gateway
+with these broad steps:
+
+1. Set up the common pattern of using a single cloud endpoint to route all API
+ traffic to internal agent endpoints.
+2. Use endpoint pooling to enable dead-simple load balancing between replicas of
+ your API service.
+3. Connect non-replicated API services with additional internal agent endpoints.
+
+## What you'll need
+
+- **An ngrok account**: [Sign up](https://dashboard.ngrok.com/signup) for for
+ free if you don't already have one.
+- **Your authtoken**: [Create an
+ authtoken](https://dashboard.ngrok.com/authtokens) using the ngrok dashboard.
+- **A reserved domain**: [Reserve a domain](https://dashboard.ngrok.com/domains)
+ in the ngrok dashboard or using the [ngrok
+ API](/docs/api/resources/reserved-domains/#create-reserved-domain).
+ - You can choose from an ngrok subdomain or bring your own [custom branded
+ domain](/docs/guides/other-guides/how-to-set-up-a-custom-domain), like
+ `https://api.example.com`.
+ - We'll refer to this domain as `{YOUR_NGROK_DOMAIN}` throughout the guide.
+- **The ngrok agent**: [Download](https://download.ngrok.com) the appropriate
+ version and install it on the same machine or network as the API service you
+ want to make available via ngrok's API gateway.
+- (optional) **An API key**: [Create an ngrok API
+ key](https://dashboard.ngrok.com/api-keys/new) if you'd like to use the ngrok
+ API to manage your cloud endpoints.
+
+:::info
+This guide uses endpoint pools, which are not yet generally available. To use
+them, you must [request access to the developer
+preview](https://dashboard.ngrok.com/developer-preview).
+:::
+
+## Deploy a demo API service (optional)
+
+If you don't yet have API services you'd like to bring online with a multicloud
+API gateway, or just want to quickly wire up a POC using ngrok, we recommend
+running multiple "replicas" of our [ngrok demo
+API](https://github.com/ngrok-samples/api-demo), which responds with details
+about the request.
+
+Assuming you have Docker installed on the systems where your API services run,
+you can deploy a container listening on port `4000`.
+
+```shell
+docker run -p 4000:4000 -e MESSAGE='Hello from cloud A!' -d joelatngrok/api-demo
+```
+
+Spin up the same service on your other cloud providers as replicas. Change the
+`MESSAGE` environment variable to help you later see which replica and which
+clouds respond to your requests.
+
+## Add your API services to an endpoint pool
+
+When your create multiple endpoints with the same URL and binding, ngrok pools
+them by default, load-balancing traffic between them. This can improve your
+API's performance and resiliency.
+
+In one cloud, create an internal agent endpoint on an internal URL, like
+`https://foo.internal`. Replace `4000` if you've brought your own API service.
+
+```
+ngrok http 4000 --url https://foo.internal --pooling-enabled
+```
+
+Run the same command for each replica of your API service on other clouds.
+
+Your API service replicas are now pooled and load-balanced, but not yet
+accessible on the public internet. To fix that, you need two things:
+
+1. A cloud endpoint for traffic routing and centralized policy management.
+2. A Traffic Policy rule that forwards traffic from your cloud endpoint to
+ `https://foo.internal`.
+
+## Create a cloud endpoint
+
+Cloud endpoints are persistent, always-on endpoints that you can manage with the
+ngrok dashboard or API.
+
+You centrally control your traffic management and security policy on your cloud
+endpoint, then forward traffic to your endpoint pool. That's much easier than trying
+to synchronize policies across multiple replicas and >1 cloud.
+
+