From ca0cec62f83d57db3bd102840e1f267c3c8a079d Mon Sep 17 00:00:00 2001 From: samcrichard <119348077+samcrichard@users.noreply.github.com> Date: Wed, 20 Aug 2025 10:44:21 -0400 Subject: [PATCH 01/13] Create traffic-policy-unit-pricing Adding page for TPU for new pricing --- .../traffic-policy-unit-pricing | 214 ++++++++++++++++++ 1 file changed, 214 insertions(+) create mode 100644 docs/pricing-limits/traffic-policy-unit-pricing diff --git a/docs/pricing-limits/traffic-policy-unit-pricing b/docs/pricing-limits/traffic-policy-unit-pricing new file mode 100644 index 0000000000..72bb8ef378 --- /dev/null +++ b/docs/pricing-limits/traffic-policy-unit-pricing @@ -0,0 +1,214 @@ +# Traffic Policy Unit (TPU) Pricing + +## Definition--What are TPUs? + +Traffic Processing Units (TPUs) are ngrok's usage-based unit for measuring how much processing your traffic policies perform. Instead of charging per request or connection, ngrok charges based combined cost of the actions, variables, and macros you use. TPUs are sold in bundles of 100,000 for $1, and are deducted as your policies run. + +## Actions, Expressions, and Variables + +- [**Actions**](https://ngrok.com/docs/traffic-policy/concepts/actions/): Define what happens when a traffic policy rule matches (e.g. add headers, deny a request, forward traffic). +- [**Expressions**](https://ngrok.com/docs/traffic-policy/concepts/expressions/): Conditions (written in CEL) that determine whether actions execute, based on request or connection properties. +- [**Variables**](https://ngrok.com/docs/traffic-policy/variables/): Metadata about connections or requests that you can use in expressions or actions (e.g. client IP, headers). + +## Pricing Tables + +Below are the TPU costs for variables, actions, and macros. + +### Variables + +| Name | TPU Cost | +|------|----------| +| Name | TPU Cost | +|---|---| +| [actions.ngrok.add_headers.headers_added](https://ngrok.com/docs/traffic-policy/variables/action/#add-headers) | Free | +| [actions.ngrok.basic_auth.credentials.presented](https://ngrok.com/docs/traffic-policy/variables/action/#basic-auth) | Free | +| [actions.ngrok.basic_auth.credentials.username](https://ngrok.com/docs/traffic-policy/variables/action/#basic-auth) | Free | +| [actions.ngrok.basic_auth.credentials.authorized](https://ngrok.com/docs/traffic-policy/variables/action/#basic-auth) | Free | +| [actions.ngrok.compress.already_compressed](https://ngrok.com/docs/traffic-policy/variables/action/#compress-response) | Free | +| [actions.ngrok.compress.negotiated_algorithm](https://ngrok.com/docs/traffic-policy/variables/action/#compress-response) | Free | +| [actions.ngrok.http_request.error.code](https://ngrok.com/docs/traffic-policy/variables/action/#http-request) | Free | +| [actions.ngrok.http_request.error.message](https://ngrok.com/docs/traffic-policy/variables/action/#http-request) | Free | +| [actions.ngrok.http_request.attempts](https://ngrok.com/docs/traffic-policy/variables/action/#http-request) | Free | +| [actions.ngrok.http_request.req](https://ngrok.com/docs/traffic-policy/variables/action/#http-request) | Free | +| [actions.ngrok.http_request.res](https://ngrok.com/docs/traffic-policy/variables/action/#http-request) | Free | +| [actions.ngrok.jwt_validation.tokens](https://ngrok.com/docs/traffic-policy/variables/action/#jwt-validation) | Free | +| [actions.ngrok.jwt_validation.error.code](https://ngrok.com/docs/traffic-policy/variables/action/#jwt-validation) | Free | +| [actions.ngrok.jwt_validation.error.message](https://ngrok.com/docs/traffic-policy/variables/action/#jwt-validation) | Free | +| [actions.ngrok.log.metadata](https://ngrok.com/docs/traffic-policy/variables/action/#log) | Free | +| [actions.ngrok.oauth.error.code](https://ngrok.com/docs/traffic-policy/variables/action/#oauth) | Free | +| [actions.ngrok.oauth.error.message](https://ngrok.com/docs/traffic-policy/variables/action/#oauth) | Free | +| [actions.ngrok.oauth.identity.id](https://ngrok.com/docs/traffic-policy/variables/action/#oauth) | Free | +| [actions.ngrok.oauth.identity.email](https://ngrok.com/docs/traffic-policy/variables/action/#oauth) | Free | +| [actions.ngrok.oauth.identity.name](https://ngrok.com/docs/traffic-policy/variables/action/#oauth) | Free | +| [actions.ngrok.oauth.identity.provider_user_id](https://ngrok.com/docs/traffic-policy/variables/action/#oauth) | Free | +| [actions.ngrok.oauth.identity.current_provider_session_id](https://ngrok.com/docs/traffic-policy/variables/action/#oauth) | Free | +| [actions.ngrok.oauth.access_token](https://ngrok.com/docs/traffic-policy/variables/action/#oauth) | Free | +| [actions.ngrok.oauth.refresh_token](https://ngrok.com/docs/traffic-policy/variables/action/#oauth) | Free | +| [actions.ngrok.oauth.expires_at](https://ngrok.com/docs/traffic-policy/variables/action/#oauth) | Free | +| [actions.ngrok.oauth.session_timed_out](https://ngrok.com/docs/traffic-policy/variables/action/#oauth) | Free | +| [actions.ngrok.oauth.session_max_duration_reached](https://ngrok.com/docs/traffic-policy/variables/action/#oauth) | Free | +| [actions.ngrok.oidc.error.code](https://ngrok.com/docs/traffic-policy/variables/action/#openid-connect-oidc) | Free | +| [actions.ngrok.oidc.error.message](https://ngrok.com/docs/traffic-policy/variables/action/#openid-connect-oidc) | Free | +| [actions.ngrok.oidc.identity.id](https://ngrok.com/docs/traffic-policy/variables/action/#openid-connect-oidc) | Free | +| [actions.ngrok.oidc.identity.email](https://ngrok.com/docs/traffic-policy/variables/action/#openid-connect-oidc) | Free | +| [actions.ngrok.oidc.identity.name](https://ngrok.com/docs/traffic-policy/variables/action/#openid-connect-oidc) | Free | +| [actions.ngrok.oidc.identity.provider_user_id](https://ngrok.com/docs/traffic-policy/variables/action/#openid-connect-oidc) | Free | +| [actions.ngrok.oidc.identity.current_session_id](https://ngrok.com/docs/traffic-policy/variables/action/#openid-connect-oidc) | Free | +| [actions.ngrok.oidc.identity_token](https://ngrok.com/docs/traffic-policy/variables/action/#openid-connect-oidc) | Free | +| [actions.ngrok.oidc.access_token](https://ngrok.com/docs/traffic-policy/variables/action/#openid-connect-oidc) | Free | +| [actions.ngrok.oidc.refresh_token](https://ngrok.com/docs/traffic-policy/variables/action/#openid-connect-oidc) | Free | +| [actions.ngrok.oidc.expires_at](https://ngrok.com/docs/traffic-policy/variables/action/#openid-connect-oidc) | Free | +| [actions.ngrok.oidc.session_timed_out](https://ngrok.com/docs/traffic-policy/variables/action/#openid-connect-oidc) | Free | +| [actions.ngrok.oidc.session_max_duration_reached](https://ngrok.com/docs/traffic-policy/variables/action/#openid-connect-oidc) | Free | +| [actions.ngrok.oidc.userinfo_refreshed](https://ngrok.com/docs/traffic-policy/variables/action/#openid-connect-oidc) | Free | +| [actions.ngrok.rate_limit.bucket_key](https://ngrok.com/docs/traffic-policy/variables/action/#rate-limit) | Free | +| [actions.ngrok.rate_limit.limited](https://ngrok.com/docs/traffic-policy/variables/action/#rate-limit) | Free | +| [actions.ngrok.rate_limit.error.code](https://ngrok.com/docs/traffic-policy/variables/action/#rate-limit) | Free | +| [actions.ngrok.rate_limit.error.message](https://ngrok.com/docs/traffic-policy/variables/action/#rate-limit) | Free | +| [actions.ngrok.redirect.matches](https://ngrok.com/docs/traffic-policy/variables/action/#redirect) | Free | +| [actions.ngrok.redirect.url](https://ngrok.com/docs/traffic-policy/variables/action/#redirect) | Free | +| [actions.ngrok.redirect.error.code](https://ngrok.com/docs/traffic-policy/variables/action/#redirect) | Free | +| [actions.ngrok.redirect.error.message](https://ngrok.com/docs/traffic-policy/variables/action/#redirect) | Free | +| [actions.ngrok.remove_headers.headers_removed](https://ngrok.com/docs/traffic-policy/variables/action/#remove-headers) | Free | +| [actions.ngrok.restrict_ips.action](https://ngrok.com/docs/traffic-policy/variables/action/#restrict-ips) | Free | +| [actions.ngrok.restrict_ips.matched_cidr](https://ngrok.com/docs/traffic-policy/variables/action/#restrict-ips) | Free | +| [actions.ngrok.restrict_ips.error.code](https://ngrok.com/docs/traffic-policy/variables/action/#restrict-ips) | Free | +| [actions.ngrok.restrict_ips.error.message](https://ngrok.com/docs/traffic-policy/variables/action/#restrict-ips) | Free | +| [actions.ngrok.url_rewrite.matches](https://ngrok.com/docs/traffic-policy/variables/action/#url-rewrite) | Free | +| [actions.ngrok.url_rewrite.url](https://ngrok.com/docs/traffic-policy/variables/action/#url-rewrite) | Free | +| [actions.ngrok.url_rewrite.error.code](https://ngrok.com/docs/traffic-policy/variables/action/#url-rewrite) | Free | +| [actions.ngrok.url_rewrite.error.message](https://ngrok.com/docs/traffic-policy/variables/action/#url-rewrite) | Free | +| [actions.ngrok.verify_webhook.verified](https://ngrok.com/docs/traffic-policy/variables/action/#verify-webhook) | Free | +| [conn.bytes_in](https://ngrok.com/docs/traffic-policy/variables/connection/#connbytes_in) | Free | +| [conn.bytes_out](https://ngrok.com/docs/traffic-policy/variables/connection/#connbytes_out) | Free | +| [conn.client_ip](https://ngrok.com/docs/traffic-policy/variables/connection/#connclient_ip) | Free | +| [conn.client_port](https://ngrok.com/docs/traffic-policy/variables/connection/#connclient_port) | Free | +| [conn.server_ip](https://ngrok.com/docs/traffic-policy/variables/connection/#connserver_ip) | Free | +| [conn.server_port](https://ngrok.com/docs/traffic-policy/variables/connection/#connserver_port) | Free | +| [conn.server_region](https://ngrok.com/docs/traffic-policy/variables/connection/#connserver_region) | Free | +| [conn.ts.start](https://ngrok.com/docs/traffic-policy/variables/connection/#conntsstart) | Free | + + +### Actions + +| Name | TPU Cost | +|------|----------| +| [add-headers](https://ngrok.com/docs/traffic-policy/actions/add-headers/) | Free | +| [basic-auth](https://ngrok.com/docs/traffic-policy/actions/basic-auth/) | Free | +| [circuit-breaker](https://ngrok.com/docs/traffic-policy/actions/circuit-breaker/) | 10 TPU | +| [compress-response](https://ngrok.com/docs/traffic-policy/actions/compress-response/) | 10 TPU | +| [custom-response](https://ngrok.com/docs/traffic-policy/actions/custom-response/) | Free | +| [deny](https://ngrok.com/docs/traffic-policy/actions/deny/) | Free | +| [forward-internal](https://ngrok.com/docs/traffic-policy/actions/forward-internal/) | Free | +| [forward-external](https://ngrok.com/docs/traffic-policy/actions/forward-external/) | 10 TPU | +| [http-request](https://ngrok.com/docs/traffic-policy/actions/http-request/) | 1 TPU | +| [jwt-validation](https://ngrok.com/docs/traffic-policy/actions/jwt-validation/) | 10 TPU | +| [log](https://ngrok.com/docs/traffic-policy/actions/log/) | Free | +| [oauth](https://ngrok.com/docs/traffic-policy/actions/oauth/) | Free | +| [oidc](https://ngrok.com/docs/traffic-policy/actions/oidc/) | Free | +| [owasp-crs-request](https://ngrok.com/docs/traffic-policy/actions/owasp-crs-request/) | 10 TPU | +| [owasp-crs-response](https://ngrok.com/docs/traffic-policy/actions/owasp-crs-response/) | 10 TPU | +| [rate-limit](https://ngrok.com/docs/traffic-policy/actions/rate-limit/) | 1 TPU | +| [redirect](https://ngrok.com/docs/traffic-policy/actions/redirect/) | 10 TPU | +| [remove-headers](https://ngrok.com/docs/traffic-policy/actions/remove-headers/) | 1 TPU | +| [restrict-ips](https://ngrok.com/docs/traffic-policy/actions/restrict-ips/) | 10 TPU | +| [saml](https://ngrok.com/docs/traffic-policy/actions/saml/) | Free | +| [set-vars](https://ngrok.com/docs/traffic-policy/actions/set-vars/) | Free | +| [terminate-tls](https://ngrok.com/docs/traffic-policy/actions/terminate-tls/) | 100 TPU | +| [url-rewrite](https://ngrok.com/docs/traffic-policy/actions/url-rewrite/) | 10 TPU | +| [verify-webhook](https://ngrok.com/docs/traffic-policy/actions/verify-webhook/) | 1 TPU | + + +### Macros + +| Name | TPU Cost | +|---|---| +| [b64.decode(string)](https://ngrok.com/docs/traffic-policy/macros/#base64) | 3 TPU per GB after 1 GB | +| [b64.encode(string)](https://ngrok.com/docs/traffic-policy/macros/#base64) | 3 TPU per GB after 1 GB | +| [basic_auth.encode(username, password)](https://ngrok.com/docs/traffic-policy/macros/#basic-auth) | Free | +| [http.header(name)](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | +| [http.header(name, default)](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | +| [http.param(name)](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | +| [http.param(name, default)](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | +| [http.path()](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | +| [http.path_segment(index)](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | +| [http.path_segment(index, default)](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | +| [http.query()](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | +| [http.query_param(name)](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | +| [http.query_param(name, default)](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | +| [http.remote_addr()](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | +| [http.request_body()](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | +| [http.request_body_json()](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | +| [http.request_body_query()](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | +| [http.request_method()](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | +| [http.request_uri()](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | +| [http.response_body()](https://ngrok.com/docs/traffic-policy/macros/#http-responses) | Free | +| [http.response_body_json()](https://ngrok.com/docs/traffic-policy/macros/#http-responses) | Free | +| [http.response_body_query()](https://ngrok.com/docs/traffic-policy/macros/#http-responses) | Free | +| [http.scheme()](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | +| [http.status()](https://ngrok.com/docs/traffic-policy/macros/#http-responses) | Free | +| [http.status_text()](https://ngrok.com/docs/traffic-policy/macros/#http-responses) | Free | +| [http.user_agent()](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | +| [inCidrRange(ip, cidr)](https://ngrok.com/docs/traffic-policy/macros/#utility) | Free | +| [inCidrRanges(ip, cidrs)](https://ngrok.com/docs/traffic-policy/macros/#utility) | Free | +| [json.decode(string)](https://ngrok.com/docs/traffic-policy/macros/#json) | 3 TPU per GB after 1 GB | +| [json.encode(list | map)](https://ngrok.com/docs/traffic-policy/macros/#json) | 3 TPU per GB after 1 GB | +| [list.encodeJson()](https://ngrok.com/docs/traffic-policy/macros/#lists) | Free | +| [object.encodeJson()](https://ngrok.com/docs/traffic-policy/macros/#maps) | Free | +| [object.encodeQueryString()](https://ngrok.com/docs/traffic-policy/macros/#maps) | Free | +| [queryString.decode(string)](https://ngrok.com/docs/traffic-policy/macros/#query-string) | Free | +| [queryString.encode(map)](https://ngrok.com/docs/traffic-policy/macros/#query-string) | Free | +| [rand.double()](https://ngrok.com/docs/traffic-policy/macros/#random) | Free | +| [rand.int(min, max)](https://ngrok.com/docs/traffic-policy/macros/#random) | Free | +| [security.secret(string, string)](https://ngrok.com/docs/traffic-policy/macros/#secrets) | Free | +| [string.decodeBase64()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | +| [string.decodeJson()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | +| [string.decodeQueryString()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | +| [string.encodeBase64()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | +| [string.escapeUrl()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | +| [string.isJson()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | +| [string.isQueryString()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | +| [string.isURL()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | +| [string.parseUrl()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | +| [string.unescapeUrl()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | +| [url.escape(string)](https://ngrok.com/docs/traffic-policy/macros/#url) | Free | +| [url.parse(string)](https://ngrok.com/docs/traffic-policy/macros/#url) | Free | +| [url.unescape(string)](https://ngrok.com/docs/traffic-policy/macros/#url) | Free | +| [utility.base64_decode(string)](https://ngrok.com/docs/traffic-policy/macros/#base64) | Free | +| [utility.base64_encode(string)](https://ngrok.com/docs/traffic-policy/macros/#base64) | Free | +| [utility.basic_auth_encode(username, password)](https://ngrok.com/docs/traffic-policy/macros/#basic-auth) | Free | +| [utility.in_cidr_range(ip, cidr)](https://ngrok.com/docs/traffic-policy/macros/#utility) | Free | +| [utility.in_cidr_ranges(ip, cidrs)](https://ngrok.com/docs/traffic-policy/macros/#utility) | Free | +| [utility.json_decode(string)](https://ngrok.com/docs/traffic-policy/macros/#json) | Free | +| [utility.json_encode(list | map)](https://ngrok.com/docs/traffic-policy/macros/#json) | Free | +| [utility.list_encode_json()](https://ngrok.com/docs/traffic-policy/macros/#lists) | Free | +| [utility.object_encode_json()](https://ngrok.com/docs/traffic-policy/macros/#maps) | Free | +| [utility.object_encode_query_string()](https://ngrok.com/docs/traffic-policy/macros/#maps) | Free | +| [utility.query_string_decode(string)](https://ngrok.com/docs/traffic-policy/macros/#query-string) | Free | +| [utility.query_string_encode(map)](https://ngrok.com/docs/traffic-policy/macros/#query-string) | Free | +| [utility.rand_double()](https://ngrok.com/docs/traffic-policy/macros/#random) | Free | +| [utility.rand_int(min, max)](https://ngrok.com/docs/traffic-policy/macros/#random) | Free | +| [utility.string_decode_base64()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | +| [utility.string_decode_json()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | +| [utility.string_decode_query_string()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | +| [utility.string_encode_base64()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | +| [utility.string_escape_url()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | +| [utility.string_is_json()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | +| [utility.string_is_query_string()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | +| [utility.string_is_url()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | +| [utility.string_parse_url()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | +| [utility.string_unescape_url()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | +| [utility.url_escape(string)](https://ngrok.com/docs/traffic-policy/macros/#url) | Free | +| [utility.url_parse(string)](https://ngrok.com/docs/traffic-policy/macros/#url) | Free | +| [utility.url_unescape(string)](https://ngrok.com/docs/traffic-policy/macros/#url) | Free | +### Traffic Policy Units (TPUs) Discounts at Scale + +The Pay-as-You go plan discounts TPUs at a large scale, so you don't have to talk to sales tog et a pricepoint that grows as you grow. Discounted pricing is as follows: + +| Count | TPU Cost | +|------|----------| +| 0+ | $1/100k | +| 1M+ | $.75/100k | +| 10M+ | $.55/100k | +| 100M+ | $0.35/100k | +| 1B+ | $0.25/100k | From 51e6ea42c44f3500b311b6642179d1a6326ad1f7 Mon Sep 17 00:00:00 2001 From: Shaquil Hansford Date: Wed, 20 Aug 2025 11:29:47 -0400 Subject: [PATCH 02/13] Add TPU page to sidebar; make it an mdx file --- ...t-pricing => traffic-policy-unit-pricing.mdx} | 16 ++++++++-------- sidebars.js | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) rename docs/pricing-limits/{traffic-policy-unit-pricing => traffic-policy-unit-pricing.mdx} (98%) diff --git a/docs/pricing-limits/traffic-policy-unit-pricing b/docs/pricing-limits/traffic-policy-unit-pricing.mdx similarity index 98% rename from docs/pricing-limits/traffic-policy-unit-pricing rename to docs/pricing-limits/traffic-policy-unit-pricing.mdx index 72bb8ef378..bcdeb92148 100644 --- a/docs/pricing-limits/traffic-policy-unit-pricing +++ b/docs/pricing-limits/traffic-policy-unit-pricing.mdx @@ -1,8 +1,11 @@ -# Traffic Policy Unit (TPU) Pricing +--- +title: Traffic Policy Unit (TPU) Pricing +description: Learn about how ngrok uses Traffic Processing Units (TPUs) to measure and charge for traffic policy usage. +--- -## Definition--What are TPUs? +Traffic Processing Units (TPUs) are ngrok's usage-based unit for measuring how much processing your traffic policies perform. Instead of charging per request or connection, ngrok charges based combined cost of the actions, variables, and macros you use. -Traffic Processing Units (TPUs) are ngrok's usage-based unit for measuring how much processing your traffic policies perform. Instead of charging per request or connection, ngrok charges based combined cost of the actions, variables, and macros you use. TPUs are sold in bundles of 100,000 for $1, and are deducted as your policies run. +TPUs are sold in bundles of `100,000` for $1, and are deducted as your policies run. ## Actions, Expressions, and Variables @@ -10,10 +13,6 @@ Traffic Processing Units (TPUs) are ngrok's usage-based unit for measuring how m - [**Expressions**](https://ngrok.com/docs/traffic-policy/concepts/expressions/): Conditions (written in CEL) that determine whether actions execute, based on request or connection properties. - [**Variables**](https://ngrok.com/docs/traffic-policy/variables/): Metadata about connections or requests that you can use in expressions or actions (e.g. client IP, headers). -## Pricing Tables - -Below are the TPU costs for variables, actions, and macros. - ### Variables | Name | TPU Cost | @@ -201,7 +200,8 @@ Below are the TPU costs for variables, actions, and macros. | [utility.url_escape(string)](https://ngrok.com/docs/traffic-policy/macros/#url) | Free | | [utility.url_parse(string)](https://ngrok.com/docs/traffic-policy/macros/#url) | Free | | [utility.url_unescape(string)](https://ngrok.com/docs/traffic-policy/macros/#url) | Free | -### Traffic Policy Units (TPUs) Discounts at Scale + +## Traffic Policy Unit (TPU) discounts at scale The Pay-as-You go plan discounts TPUs at a large scale, so you don't have to talk to sales tog et a pricepoint that grows as you grow. Discounted pricing is as follows: diff --git a/sidebars.js b/sidebars.js index cd710a0aab..0d75083b47 100644 --- a/sidebars.js +++ b/sidebars.js @@ -23,7 +23,7 @@ const sidebars = { label: "Pricing & Limits", type: "category", link: { type: "doc", id: "pricing-limits/index" }, - items: ["pricing-limits/free-plan-limits"], + items: ["pricing-limits/free-plan-limits", "pricing-limits/traffic-policy-unit-pricing"], }, { label: "Getting Started", From a436b8d9fcd2e9874e7bd700872add5081593a3d Mon Sep 17 00:00:00 2001 From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com> Date: Wed, 20 Aug 2025 15:30:42 +0000 Subject: [PATCH 03/13] ci: apply automated fixes --- .../traffic-policy-unit-pricing.mdx | 368 +++++++++--------- sidebars.js | 5 +- 2 files changed, 187 insertions(+), 186 deletions(-) diff --git a/docs/pricing-limits/traffic-policy-unit-pricing.mdx b/docs/pricing-limits/traffic-policy-unit-pricing.mdx index bcdeb92148..741f7c2e03 100644 --- a/docs/pricing-limits/traffic-policy-unit-pricing.mdx +++ b/docs/pricing-limits/traffic-policy-unit-pricing.mdx @@ -15,200 +15,198 @@ TPUs are sold in bundles of `100,000` for $1, and are deducted as your policies ### Variables -| Name | TPU Cost | -|------|----------| -| Name | TPU Cost | -|---|---| -| [actions.ngrok.add_headers.headers_added](https://ngrok.com/docs/traffic-policy/variables/action/#add-headers) | Free | -| [actions.ngrok.basic_auth.credentials.presented](https://ngrok.com/docs/traffic-policy/variables/action/#basic-auth) | Free | -| [actions.ngrok.basic_auth.credentials.username](https://ngrok.com/docs/traffic-policy/variables/action/#basic-auth) | Free | -| [actions.ngrok.basic_auth.credentials.authorized](https://ngrok.com/docs/traffic-policy/variables/action/#basic-auth) | Free | -| [actions.ngrok.compress.already_compressed](https://ngrok.com/docs/traffic-policy/variables/action/#compress-response) | Free | -| [actions.ngrok.compress.negotiated_algorithm](https://ngrok.com/docs/traffic-policy/variables/action/#compress-response) | Free | -| [actions.ngrok.http_request.error.code](https://ngrok.com/docs/traffic-policy/variables/action/#http-request) | Free | -| [actions.ngrok.http_request.error.message](https://ngrok.com/docs/traffic-policy/variables/action/#http-request) | Free | -| [actions.ngrok.http_request.attempts](https://ngrok.com/docs/traffic-policy/variables/action/#http-request) | Free | -| [actions.ngrok.http_request.req](https://ngrok.com/docs/traffic-policy/variables/action/#http-request) | Free | -| [actions.ngrok.http_request.res](https://ngrok.com/docs/traffic-policy/variables/action/#http-request) | Free | -| [actions.ngrok.jwt_validation.tokens](https://ngrok.com/docs/traffic-policy/variables/action/#jwt-validation) | Free | -| [actions.ngrok.jwt_validation.error.code](https://ngrok.com/docs/traffic-policy/variables/action/#jwt-validation) | Free | -| [actions.ngrok.jwt_validation.error.message](https://ngrok.com/docs/traffic-policy/variables/action/#jwt-validation) | Free | -| [actions.ngrok.log.metadata](https://ngrok.com/docs/traffic-policy/variables/action/#log) | Free | -| [actions.ngrok.oauth.error.code](https://ngrok.com/docs/traffic-policy/variables/action/#oauth) | Free | -| [actions.ngrok.oauth.error.message](https://ngrok.com/docs/traffic-policy/variables/action/#oauth) | Free | -| [actions.ngrok.oauth.identity.id](https://ngrok.com/docs/traffic-policy/variables/action/#oauth) | Free | -| [actions.ngrok.oauth.identity.email](https://ngrok.com/docs/traffic-policy/variables/action/#oauth) | Free | -| [actions.ngrok.oauth.identity.name](https://ngrok.com/docs/traffic-policy/variables/action/#oauth) | Free | -| [actions.ngrok.oauth.identity.provider_user_id](https://ngrok.com/docs/traffic-policy/variables/action/#oauth) | Free | -| [actions.ngrok.oauth.identity.current_provider_session_id](https://ngrok.com/docs/traffic-policy/variables/action/#oauth) | Free | -| [actions.ngrok.oauth.access_token](https://ngrok.com/docs/traffic-policy/variables/action/#oauth) | Free | -| [actions.ngrok.oauth.refresh_token](https://ngrok.com/docs/traffic-policy/variables/action/#oauth) | Free | -| [actions.ngrok.oauth.expires_at](https://ngrok.com/docs/traffic-policy/variables/action/#oauth) | Free | -| [actions.ngrok.oauth.session_timed_out](https://ngrok.com/docs/traffic-policy/variables/action/#oauth) | Free | -| [actions.ngrok.oauth.session_max_duration_reached](https://ngrok.com/docs/traffic-policy/variables/action/#oauth) | Free | -| [actions.ngrok.oidc.error.code](https://ngrok.com/docs/traffic-policy/variables/action/#openid-connect-oidc) | Free | -| [actions.ngrok.oidc.error.message](https://ngrok.com/docs/traffic-policy/variables/action/#openid-connect-oidc) | Free | -| [actions.ngrok.oidc.identity.id](https://ngrok.com/docs/traffic-policy/variables/action/#openid-connect-oidc) | Free | -| [actions.ngrok.oidc.identity.email](https://ngrok.com/docs/traffic-policy/variables/action/#openid-connect-oidc) | Free | -| [actions.ngrok.oidc.identity.name](https://ngrok.com/docs/traffic-policy/variables/action/#openid-connect-oidc) | Free | -| [actions.ngrok.oidc.identity.provider_user_id](https://ngrok.com/docs/traffic-policy/variables/action/#openid-connect-oidc) | Free | -| [actions.ngrok.oidc.identity.current_session_id](https://ngrok.com/docs/traffic-policy/variables/action/#openid-connect-oidc) | Free | -| [actions.ngrok.oidc.identity_token](https://ngrok.com/docs/traffic-policy/variables/action/#openid-connect-oidc) | Free | -| [actions.ngrok.oidc.access_token](https://ngrok.com/docs/traffic-policy/variables/action/#openid-connect-oidc) | Free | -| [actions.ngrok.oidc.refresh_token](https://ngrok.com/docs/traffic-policy/variables/action/#openid-connect-oidc) | Free | -| [actions.ngrok.oidc.expires_at](https://ngrok.com/docs/traffic-policy/variables/action/#openid-connect-oidc) | Free | -| [actions.ngrok.oidc.session_timed_out](https://ngrok.com/docs/traffic-policy/variables/action/#openid-connect-oidc) | Free | -| [actions.ngrok.oidc.session_max_duration_reached](https://ngrok.com/docs/traffic-policy/variables/action/#openid-connect-oidc) | Free | -| [actions.ngrok.oidc.userinfo_refreshed](https://ngrok.com/docs/traffic-policy/variables/action/#openid-connect-oidc) | Free | -| [actions.ngrok.rate_limit.bucket_key](https://ngrok.com/docs/traffic-policy/variables/action/#rate-limit) | Free | -| [actions.ngrok.rate_limit.limited](https://ngrok.com/docs/traffic-policy/variables/action/#rate-limit) | Free | -| [actions.ngrok.rate_limit.error.code](https://ngrok.com/docs/traffic-policy/variables/action/#rate-limit) | Free | -| [actions.ngrok.rate_limit.error.message](https://ngrok.com/docs/traffic-policy/variables/action/#rate-limit) | Free | -| [actions.ngrok.redirect.matches](https://ngrok.com/docs/traffic-policy/variables/action/#redirect) | Free | -| [actions.ngrok.redirect.url](https://ngrok.com/docs/traffic-policy/variables/action/#redirect) | Free | -| [actions.ngrok.redirect.error.code](https://ngrok.com/docs/traffic-policy/variables/action/#redirect) | Free | -| [actions.ngrok.redirect.error.message](https://ngrok.com/docs/traffic-policy/variables/action/#redirect) | Free | -| [actions.ngrok.remove_headers.headers_removed](https://ngrok.com/docs/traffic-policy/variables/action/#remove-headers) | Free | -| [actions.ngrok.restrict_ips.action](https://ngrok.com/docs/traffic-policy/variables/action/#restrict-ips) | Free | -| [actions.ngrok.restrict_ips.matched_cidr](https://ngrok.com/docs/traffic-policy/variables/action/#restrict-ips) | Free | -| [actions.ngrok.restrict_ips.error.code](https://ngrok.com/docs/traffic-policy/variables/action/#restrict-ips) | Free | -| [actions.ngrok.restrict_ips.error.message](https://ngrok.com/docs/traffic-policy/variables/action/#restrict-ips) | Free | -| [actions.ngrok.url_rewrite.matches](https://ngrok.com/docs/traffic-policy/variables/action/#url-rewrite) | Free | -| [actions.ngrok.url_rewrite.url](https://ngrok.com/docs/traffic-policy/variables/action/#url-rewrite) | Free | -| [actions.ngrok.url_rewrite.error.code](https://ngrok.com/docs/traffic-policy/variables/action/#url-rewrite) | Free | -| [actions.ngrok.url_rewrite.error.message](https://ngrok.com/docs/traffic-policy/variables/action/#url-rewrite) | Free | -| [actions.ngrok.verify_webhook.verified](https://ngrok.com/docs/traffic-policy/variables/action/#verify-webhook) | Free | -| [conn.bytes_in](https://ngrok.com/docs/traffic-policy/variables/connection/#connbytes_in) | Free | -| [conn.bytes_out](https://ngrok.com/docs/traffic-policy/variables/connection/#connbytes_out) | Free | -| [conn.client_ip](https://ngrok.com/docs/traffic-policy/variables/connection/#connclient_ip) | Free | -| [conn.client_port](https://ngrok.com/docs/traffic-policy/variables/connection/#connclient_port) | Free | -| [conn.server_ip](https://ngrok.com/docs/traffic-policy/variables/connection/#connserver_ip) | Free | -| [conn.server_port](https://ngrok.com/docs/traffic-policy/variables/connection/#connserver_port) | Free | -| [conn.server_region](https://ngrok.com/docs/traffic-policy/variables/connection/#connserver_region) | Free | -| [conn.ts.start](https://ngrok.com/docs/traffic-policy/variables/connection/#conntsstart) | Free | - +| Name | TPU Cost | +| ------------------------------------------------------------------------------------------------------------------------------ | -------- | +| Name | TPU Cost | +| --- | --- | +| [actions.ngrok.add_headers.headers_added](https://ngrok.com/docs/traffic-policy/variables/action/#add-headers) | Free | +| [actions.ngrok.basic_auth.credentials.presented](https://ngrok.com/docs/traffic-policy/variables/action/#basic-auth) | Free | +| [actions.ngrok.basic_auth.credentials.username](https://ngrok.com/docs/traffic-policy/variables/action/#basic-auth) | Free | +| [actions.ngrok.basic_auth.credentials.authorized](https://ngrok.com/docs/traffic-policy/variables/action/#basic-auth) | Free | +| [actions.ngrok.compress.already_compressed](https://ngrok.com/docs/traffic-policy/variables/action/#compress-response) | Free | +| [actions.ngrok.compress.negotiated_algorithm](https://ngrok.com/docs/traffic-policy/variables/action/#compress-response) | Free | +| [actions.ngrok.http_request.error.code](https://ngrok.com/docs/traffic-policy/variables/action/#http-request) | Free | +| [actions.ngrok.http_request.error.message](https://ngrok.com/docs/traffic-policy/variables/action/#http-request) | Free | +| [actions.ngrok.http_request.attempts](https://ngrok.com/docs/traffic-policy/variables/action/#http-request) | Free | +| [actions.ngrok.http_request.req](https://ngrok.com/docs/traffic-policy/variables/action/#http-request) | Free | +| [actions.ngrok.http_request.res](https://ngrok.com/docs/traffic-policy/variables/action/#http-request) | Free | +| [actions.ngrok.jwt_validation.tokens](https://ngrok.com/docs/traffic-policy/variables/action/#jwt-validation) | Free | +| [actions.ngrok.jwt_validation.error.code](https://ngrok.com/docs/traffic-policy/variables/action/#jwt-validation) | Free | +| [actions.ngrok.jwt_validation.error.message](https://ngrok.com/docs/traffic-policy/variables/action/#jwt-validation) | Free | +| [actions.ngrok.log.metadata](https://ngrok.com/docs/traffic-policy/variables/action/#log) | Free | +| [actions.ngrok.oauth.error.code](https://ngrok.com/docs/traffic-policy/variables/action/#oauth) | Free | +| [actions.ngrok.oauth.error.message](https://ngrok.com/docs/traffic-policy/variables/action/#oauth) | Free | +| [actions.ngrok.oauth.identity.id](https://ngrok.com/docs/traffic-policy/variables/action/#oauth) | Free | +| [actions.ngrok.oauth.identity.email](https://ngrok.com/docs/traffic-policy/variables/action/#oauth) | Free | +| [actions.ngrok.oauth.identity.name](https://ngrok.com/docs/traffic-policy/variables/action/#oauth) | Free | +| [actions.ngrok.oauth.identity.provider_user_id](https://ngrok.com/docs/traffic-policy/variables/action/#oauth) | Free | +| [actions.ngrok.oauth.identity.current_provider_session_id](https://ngrok.com/docs/traffic-policy/variables/action/#oauth) | Free | +| [actions.ngrok.oauth.access_token](https://ngrok.com/docs/traffic-policy/variables/action/#oauth) | Free | +| [actions.ngrok.oauth.refresh_token](https://ngrok.com/docs/traffic-policy/variables/action/#oauth) | Free | +| [actions.ngrok.oauth.expires_at](https://ngrok.com/docs/traffic-policy/variables/action/#oauth) | Free | +| [actions.ngrok.oauth.session_timed_out](https://ngrok.com/docs/traffic-policy/variables/action/#oauth) | Free | +| [actions.ngrok.oauth.session_max_duration_reached](https://ngrok.com/docs/traffic-policy/variables/action/#oauth) | Free | +| [actions.ngrok.oidc.error.code](https://ngrok.com/docs/traffic-policy/variables/action/#openid-connect-oidc) | Free | +| [actions.ngrok.oidc.error.message](https://ngrok.com/docs/traffic-policy/variables/action/#openid-connect-oidc) | Free | +| [actions.ngrok.oidc.identity.id](https://ngrok.com/docs/traffic-policy/variables/action/#openid-connect-oidc) | Free | +| [actions.ngrok.oidc.identity.email](https://ngrok.com/docs/traffic-policy/variables/action/#openid-connect-oidc) | Free | +| [actions.ngrok.oidc.identity.name](https://ngrok.com/docs/traffic-policy/variables/action/#openid-connect-oidc) | Free | +| [actions.ngrok.oidc.identity.provider_user_id](https://ngrok.com/docs/traffic-policy/variables/action/#openid-connect-oidc) | Free | +| [actions.ngrok.oidc.identity.current_session_id](https://ngrok.com/docs/traffic-policy/variables/action/#openid-connect-oidc) | Free | +| [actions.ngrok.oidc.identity_token](https://ngrok.com/docs/traffic-policy/variables/action/#openid-connect-oidc) | Free | +| [actions.ngrok.oidc.access_token](https://ngrok.com/docs/traffic-policy/variables/action/#openid-connect-oidc) | Free | +| [actions.ngrok.oidc.refresh_token](https://ngrok.com/docs/traffic-policy/variables/action/#openid-connect-oidc) | Free | +| [actions.ngrok.oidc.expires_at](https://ngrok.com/docs/traffic-policy/variables/action/#openid-connect-oidc) | Free | +| [actions.ngrok.oidc.session_timed_out](https://ngrok.com/docs/traffic-policy/variables/action/#openid-connect-oidc) | Free | +| [actions.ngrok.oidc.session_max_duration_reached](https://ngrok.com/docs/traffic-policy/variables/action/#openid-connect-oidc) | Free | +| [actions.ngrok.oidc.userinfo_refreshed](https://ngrok.com/docs/traffic-policy/variables/action/#openid-connect-oidc) | Free | +| [actions.ngrok.rate_limit.bucket_key](https://ngrok.com/docs/traffic-policy/variables/action/#rate-limit) | Free | +| [actions.ngrok.rate_limit.limited](https://ngrok.com/docs/traffic-policy/variables/action/#rate-limit) | Free | +| [actions.ngrok.rate_limit.error.code](https://ngrok.com/docs/traffic-policy/variables/action/#rate-limit) | Free | +| [actions.ngrok.rate_limit.error.message](https://ngrok.com/docs/traffic-policy/variables/action/#rate-limit) | Free | +| [actions.ngrok.redirect.matches](https://ngrok.com/docs/traffic-policy/variables/action/#redirect) | Free | +| [actions.ngrok.redirect.url](https://ngrok.com/docs/traffic-policy/variables/action/#redirect) | Free | +| [actions.ngrok.redirect.error.code](https://ngrok.com/docs/traffic-policy/variables/action/#redirect) | Free | +| [actions.ngrok.redirect.error.message](https://ngrok.com/docs/traffic-policy/variables/action/#redirect) | Free | +| [actions.ngrok.remove_headers.headers_removed](https://ngrok.com/docs/traffic-policy/variables/action/#remove-headers) | Free | +| [actions.ngrok.restrict_ips.action](https://ngrok.com/docs/traffic-policy/variables/action/#restrict-ips) | Free | +| [actions.ngrok.restrict_ips.matched_cidr](https://ngrok.com/docs/traffic-policy/variables/action/#restrict-ips) | Free | +| [actions.ngrok.restrict_ips.error.code](https://ngrok.com/docs/traffic-policy/variables/action/#restrict-ips) | Free | +| [actions.ngrok.restrict_ips.error.message](https://ngrok.com/docs/traffic-policy/variables/action/#restrict-ips) | Free | +| [actions.ngrok.url_rewrite.matches](https://ngrok.com/docs/traffic-policy/variables/action/#url-rewrite) | Free | +| [actions.ngrok.url_rewrite.url](https://ngrok.com/docs/traffic-policy/variables/action/#url-rewrite) | Free | +| [actions.ngrok.url_rewrite.error.code](https://ngrok.com/docs/traffic-policy/variables/action/#url-rewrite) | Free | +| [actions.ngrok.url_rewrite.error.message](https://ngrok.com/docs/traffic-policy/variables/action/#url-rewrite) | Free | +| [actions.ngrok.verify_webhook.verified](https://ngrok.com/docs/traffic-policy/variables/action/#verify-webhook) | Free | +| [conn.bytes_in](https://ngrok.com/docs/traffic-policy/variables/connection/#connbytes_in) | Free | +| [conn.bytes_out](https://ngrok.com/docs/traffic-policy/variables/connection/#connbytes_out) | Free | +| [conn.client_ip](https://ngrok.com/docs/traffic-policy/variables/connection/#connclient_ip) | Free | +| [conn.client_port](https://ngrok.com/docs/traffic-policy/variables/connection/#connclient_port) | Free | +| [conn.server_ip](https://ngrok.com/docs/traffic-policy/variables/connection/#connserver_ip) | Free | +| [conn.server_port](https://ngrok.com/docs/traffic-policy/variables/connection/#connserver_port) | Free | +| [conn.server_region](https://ngrok.com/docs/traffic-policy/variables/connection/#connserver_region) | Free | +| [conn.ts.start](https://ngrok.com/docs/traffic-policy/variables/connection/#conntsstart) | Free | ### Actions -| Name | TPU Cost | -|------|----------| -| [add-headers](https://ngrok.com/docs/traffic-policy/actions/add-headers/) | Free | -| [basic-auth](https://ngrok.com/docs/traffic-policy/actions/basic-auth/) | Free | -| [circuit-breaker](https://ngrok.com/docs/traffic-policy/actions/circuit-breaker/) | 10 TPU | -| [compress-response](https://ngrok.com/docs/traffic-policy/actions/compress-response/) | 10 TPU | -| [custom-response](https://ngrok.com/docs/traffic-policy/actions/custom-response/) | Free | -| [deny](https://ngrok.com/docs/traffic-policy/actions/deny/) | Free | -| [forward-internal](https://ngrok.com/docs/traffic-policy/actions/forward-internal/) | Free | -| [forward-external](https://ngrok.com/docs/traffic-policy/actions/forward-external/) | 10 TPU | -| [http-request](https://ngrok.com/docs/traffic-policy/actions/http-request/) | 1 TPU | -| [jwt-validation](https://ngrok.com/docs/traffic-policy/actions/jwt-validation/) | 10 TPU | -| [log](https://ngrok.com/docs/traffic-policy/actions/log/) | Free | -| [oauth](https://ngrok.com/docs/traffic-policy/actions/oauth/) | Free | -| [oidc](https://ngrok.com/docs/traffic-policy/actions/oidc/) | Free | -| [owasp-crs-request](https://ngrok.com/docs/traffic-policy/actions/owasp-crs-request/) | 10 TPU | -| [owasp-crs-response](https://ngrok.com/docs/traffic-policy/actions/owasp-crs-response/) | 10 TPU | -| [rate-limit](https://ngrok.com/docs/traffic-policy/actions/rate-limit/) | 1 TPU | -| [redirect](https://ngrok.com/docs/traffic-policy/actions/redirect/) | 10 TPU | -| [remove-headers](https://ngrok.com/docs/traffic-policy/actions/remove-headers/) | 1 TPU | -| [restrict-ips](https://ngrok.com/docs/traffic-policy/actions/restrict-ips/) | 10 TPU | -| [saml](https://ngrok.com/docs/traffic-policy/actions/saml/) | Free | -| [set-vars](https://ngrok.com/docs/traffic-policy/actions/set-vars/) | Free | -| [terminate-tls](https://ngrok.com/docs/traffic-policy/actions/terminate-tls/) | 100 TPU | -| [url-rewrite](https://ngrok.com/docs/traffic-policy/actions/url-rewrite/) | 10 TPU | -| [verify-webhook](https://ngrok.com/docs/traffic-policy/actions/verify-webhook/) | 1 TPU | - +| Name | TPU Cost | +| --------------------------------------------------------------------------------------- | -------- | +| [add-headers](https://ngrok.com/docs/traffic-policy/actions/add-headers/) | Free | +| [basic-auth](https://ngrok.com/docs/traffic-policy/actions/basic-auth/) | Free | +| [circuit-breaker](https://ngrok.com/docs/traffic-policy/actions/circuit-breaker/) | 10 TPU | +| [compress-response](https://ngrok.com/docs/traffic-policy/actions/compress-response/) | 10 TPU | +| [custom-response](https://ngrok.com/docs/traffic-policy/actions/custom-response/) | Free | +| [deny](https://ngrok.com/docs/traffic-policy/actions/deny/) | Free | +| [forward-internal](https://ngrok.com/docs/traffic-policy/actions/forward-internal/) | Free | +| [forward-external](https://ngrok.com/docs/traffic-policy/actions/forward-external/) | 10 TPU | +| [http-request](https://ngrok.com/docs/traffic-policy/actions/http-request/) | 1 TPU | +| [jwt-validation](https://ngrok.com/docs/traffic-policy/actions/jwt-validation/) | 10 TPU | +| [log](https://ngrok.com/docs/traffic-policy/actions/log/) | Free | +| [oauth](https://ngrok.com/docs/traffic-policy/actions/oauth/) | Free | +| [oidc](https://ngrok.com/docs/traffic-policy/actions/oidc/) | Free | +| [owasp-crs-request](https://ngrok.com/docs/traffic-policy/actions/owasp-crs-request/) | 10 TPU | +| [owasp-crs-response](https://ngrok.com/docs/traffic-policy/actions/owasp-crs-response/) | 10 TPU | +| [rate-limit](https://ngrok.com/docs/traffic-policy/actions/rate-limit/) | 1 TPU | +| [redirect](https://ngrok.com/docs/traffic-policy/actions/redirect/) | 10 TPU | +| [remove-headers](https://ngrok.com/docs/traffic-policy/actions/remove-headers/) | 1 TPU | +| [restrict-ips](https://ngrok.com/docs/traffic-policy/actions/restrict-ips/) | 10 TPU | +| [saml](https://ngrok.com/docs/traffic-policy/actions/saml/) | Free | +| [set-vars](https://ngrok.com/docs/traffic-policy/actions/set-vars/) | Free | +| [terminate-tls](https://ngrok.com/docs/traffic-policy/actions/terminate-tls/) | 100 TPU | +| [url-rewrite](https://ngrok.com/docs/traffic-policy/actions/url-rewrite/) | 10 TPU | +| [verify-webhook](https://ngrok.com/docs/traffic-policy/actions/verify-webhook/) | 1 TPU | ### Macros -| Name | TPU Cost | -|---|---| -| [b64.decode(string)](https://ngrok.com/docs/traffic-policy/macros/#base64) | 3 TPU per GB after 1 GB | -| [b64.encode(string)](https://ngrok.com/docs/traffic-policy/macros/#base64) | 3 TPU per GB after 1 GB | -| [basic_auth.encode(username, password)](https://ngrok.com/docs/traffic-policy/macros/#basic-auth) | Free | -| [http.header(name)](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | -| [http.header(name, default)](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | -| [http.param(name)](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | -| [http.param(name, default)](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | -| [http.path()](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | -| [http.path_segment(index)](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | -| [http.path_segment(index, default)](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | -| [http.query()](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | -| [http.query_param(name)](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | -| [http.query_param(name, default)](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | -| [http.remote_addr()](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | -| [http.request_body()](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | -| [http.request_body_json()](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | -| [http.request_body_query()](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | -| [http.request_method()](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | -| [http.request_uri()](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | -| [http.response_body()](https://ngrok.com/docs/traffic-policy/macros/#http-responses) | Free | -| [http.response_body_json()](https://ngrok.com/docs/traffic-policy/macros/#http-responses) | Free | -| [http.response_body_query()](https://ngrok.com/docs/traffic-policy/macros/#http-responses) | Free | -| [http.scheme()](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | -| [http.status()](https://ngrok.com/docs/traffic-policy/macros/#http-responses) | Free | -| [http.status_text()](https://ngrok.com/docs/traffic-policy/macros/#http-responses) | Free | -| [http.user_agent()](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | -| [inCidrRange(ip, cidr)](https://ngrok.com/docs/traffic-policy/macros/#utility) | Free | -| [inCidrRanges(ip, cidrs)](https://ngrok.com/docs/traffic-policy/macros/#utility) | Free | -| [json.decode(string)](https://ngrok.com/docs/traffic-policy/macros/#json) | 3 TPU per GB after 1 GB | -| [json.encode(list | map)](https://ngrok.com/docs/traffic-policy/macros/#json) | 3 TPU per GB after 1 GB | -| [list.encodeJson()](https://ngrok.com/docs/traffic-policy/macros/#lists) | Free | -| [object.encodeJson()](https://ngrok.com/docs/traffic-policy/macros/#maps) | Free | -| [object.encodeQueryString()](https://ngrok.com/docs/traffic-policy/macros/#maps) | Free | -| [queryString.decode(string)](https://ngrok.com/docs/traffic-policy/macros/#query-string) | Free | -| [queryString.encode(map)](https://ngrok.com/docs/traffic-policy/macros/#query-string) | Free | -| [rand.double()](https://ngrok.com/docs/traffic-policy/macros/#random) | Free | -| [rand.int(min, max)](https://ngrok.com/docs/traffic-policy/macros/#random) | Free | -| [security.secret(string, string)](https://ngrok.com/docs/traffic-policy/macros/#secrets) | Free | -| [string.decodeBase64()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | -| [string.decodeJson()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | -| [string.decodeQueryString()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | -| [string.encodeBase64()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | -| [string.escapeUrl()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | -| [string.isJson()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | -| [string.isQueryString()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | -| [string.isURL()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | -| [string.parseUrl()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | -| [string.unescapeUrl()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | -| [url.escape(string)](https://ngrok.com/docs/traffic-policy/macros/#url) | Free | -| [url.parse(string)](https://ngrok.com/docs/traffic-policy/macros/#url) | Free | -| [url.unescape(string)](https://ngrok.com/docs/traffic-policy/macros/#url) | Free | -| [utility.base64_decode(string)](https://ngrok.com/docs/traffic-policy/macros/#base64) | Free | -| [utility.base64_encode(string)](https://ngrok.com/docs/traffic-policy/macros/#base64) | Free | -| [utility.basic_auth_encode(username, password)](https://ngrok.com/docs/traffic-policy/macros/#basic-auth) | Free | -| [utility.in_cidr_range(ip, cidr)](https://ngrok.com/docs/traffic-policy/macros/#utility) | Free | -| [utility.in_cidr_ranges(ip, cidrs)](https://ngrok.com/docs/traffic-policy/macros/#utility) | Free | -| [utility.json_decode(string)](https://ngrok.com/docs/traffic-policy/macros/#json) | Free | -| [utility.json_encode(list | map)](https://ngrok.com/docs/traffic-policy/macros/#json) | Free | -| [utility.list_encode_json()](https://ngrok.com/docs/traffic-policy/macros/#lists) | Free | -| [utility.object_encode_json()](https://ngrok.com/docs/traffic-policy/macros/#maps) | Free | -| [utility.object_encode_query_string()](https://ngrok.com/docs/traffic-policy/macros/#maps) | Free | -| [utility.query_string_decode(string)](https://ngrok.com/docs/traffic-policy/macros/#query-string) | Free | -| [utility.query_string_encode(map)](https://ngrok.com/docs/traffic-policy/macros/#query-string) | Free | -| [utility.rand_double()](https://ngrok.com/docs/traffic-policy/macros/#random) | Free | -| [utility.rand_int(min, max)](https://ngrok.com/docs/traffic-policy/macros/#random) | Free | -| [utility.string_decode_base64()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | -| [utility.string_decode_json()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | -| [utility.string_decode_query_string()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | -| [utility.string_encode_base64()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | -| [utility.string_escape_url()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | -| [utility.string_is_json()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | -| [utility.string_is_query_string()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | -| [utility.string_is_url()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | -| [utility.string_parse_url()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | -| [utility.string_unescape_url()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | -| [utility.url_escape(string)](https://ngrok.com/docs/traffic-policy/macros/#url) | Free | -| [utility.url_parse(string)](https://ngrok.com/docs/traffic-policy/macros/#url) | Free | -| [utility.url_unescape(string)](https://ngrok.com/docs/traffic-policy/macros/#url) | Free | +| Name | TPU Cost | +| --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | ----------------------- | +| [b64.decode(string)](https://ngrok.com/docs/traffic-policy/macros/#base64) | 3 TPU per GB after 1 GB | +| [b64.encode(string)](https://ngrok.com/docs/traffic-policy/macros/#base64) | 3 TPU per GB after 1 GB | +| [basic_auth.encode(username, password)](https://ngrok.com/docs/traffic-policy/macros/#basic-auth) | Free | +| [http.header(name)](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | +| [http.header(name, default)](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | +| [http.param(name)](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | +| [http.param(name, default)](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | +| [http.path()](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | +| [http.path_segment(index)](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | +| [http.path_segment(index, default)](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | +| [http.query()](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | +| [http.query_param(name)](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | +| [http.query_param(name, default)](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | +| [http.remote_addr()](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | +| [http.request_body()](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | +| [http.request_body_json()](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | +| [http.request_body_query()](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | +| [http.request_method()](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | +| [http.request_uri()](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | +| [http.response_body()](https://ngrok.com/docs/traffic-policy/macros/#http-responses) | Free | +| [http.response_body_json()](https://ngrok.com/docs/traffic-policy/macros/#http-responses) | Free | +| [http.response_body_query()](https://ngrok.com/docs/traffic-policy/macros/#http-responses) | Free | +| [http.scheme()](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | +| [http.status()](https://ngrok.com/docs/traffic-policy/macros/#http-responses) | Free | +| [http.status_text()](https://ngrok.com/docs/traffic-policy/macros/#http-responses) | Free | +| [http.user_agent()](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | +| [inCidrRange(ip, cidr)](https://ngrok.com/docs/traffic-policy/macros/#utility) | Free | +| [inCidrRanges(ip, cidrs)](https://ngrok.com/docs/traffic-policy/macros/#utility) | Free | +| [json.decode(string)](https://ngrok.com/docs/traffic-policy/macros/#json) | 3 TPU per GB after 1 GB | +| [json.encode(list | map)](https://ngrok.com/docs/traffic-policy/macros/#json) | 3 TPU per GB after 1 GB | +| [list.encodeJson()](https://ngrok.com/docs/traffic-policy/macros/#lists) | Free | +| [object.encodeJson()](https://ngrok.com/docs/traffic-policy/macros/#maps) | Free | +| [object.encodeQueryString()](https://ngrok.com/docs/traffic-policy/macros/#maps) | Free | +| [queryString.decode(string)](https://ngrok.com/docs/traffic-policy/macros/#query-string) | Free | +| [queryString.encode(map)](https://ngrok.com/docs/traffic-policy/macros/#query-string) | Free | +| [rand.double()](https://ngrok.com/docs/traffic-policy/macros/#random) | Free | +| [rand.int(min, max)](https://ngrok.com/docs/traffic-policy/macros/#random) | Free | +| [security.secret(string, string)](https://ngrok.com/docs/traffic-policy/macros/#secrets) | Free | +| [string.decodeBase64()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | +| [string.decodeJson()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | +| [string.decodeQueryString()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | +| [string.encodeBase64()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | +| [string.escapeUrl()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | +| [string.isJson()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | +| [string.isQueryString()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | +| [string.isURL()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | +| [string.parseUrl()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | +| [string.unescapeUrl()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | +| [url.escape(string)](https://ngrok.com/docs/traffic-policy/macros/#url) | Free | +| [url.parse(string)](https://ngrok.com/docs/traffic-policy/macros/#url) | Free | +| [url.unescape(string)](https://ngrok.com/docs/traffic-policy/macros/#url) | Free | +| [utility.base64_decode(string)](https://ngrok.com/docs/traffic-policy/macros/#base64) | Free | +| [utility.base64_encode(string)](https://ngrok.com/docs/traffic-policy/macros/#base64) | Free | +| [utility.basic_auth_encode(username, password)](https://ngrok.com/docs/traffic-policy/macros/#basic-auth) | Free | +| [utility.in_cidr_range(ip, cidr)](https://ngrok.com/docs/traffic-policy/macros/#utility) | Free | +| [utility.in_cidr_ranges(ip, cidrs)](https://ngrok.com/docs/traffic-policy/macros/#utility) | Free | +| [utility.json_decode(string)](https://ngrok.com/docs/traffic-policy/macros/#json) | Free | +| [utility.json_encode(list | map)](https://ngrok.com/docs/traffic-policy/macros/#json) | Free | +| [utility.list_encode_json()](https://ngrok.com/docs/traffic-policy/macros/#lists) | Free | +| [utility.object_encode_json()](https://ngrok.com/docs/traffic-policy/macros/#maps) | Free | +| [utility.object_encode_query_string()](https://ngrok.com/docs/traffic-policy/macros/#maps) | Free | +| [utility.query_string_decode(string)](https://ngrok.com/docs/traffic-policy/macros/#query-string) | Free | +| [utility.query_string_encode(map)](https://ngrok.com/docs/traffic-policy/macros/#query-string) | Free | +| [utility.rand_double()](https://ngrok.com/docs/traffic-policy/macros/#random) | Free | +| [utility.rand_int(min, max)](https://ngrok.com/docs/traffic-policy/macros/#random) | Free | +| [utility.string_decode_base64()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | +| [utility.string_decode_json()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | +| [utility.string_decode_query_string()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | +| [utility.string_encode_base64()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | +| [utility.string_escape_url()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | +| [utility.string_is_json()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | +| [utility.string_is_query_string()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | +| [utility.string_is_url()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | +| [utility.string_parse_url()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | +| [utility.string_unescape_url()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | +| [utility.url_escape(string)](https://ngrok.com/docs/traffic-policy/macros/#url) | Free | +| [utility.url_parse(string)](https://ngrok.com/docs/traffic-policy/macros/#url) | Free | +| [utility.url_unescape(string)](https://ngrok.com/docs/traffic-policy/macros/#url) | Free | ## Traffic Policy Unit (TPU) discounts at scale The Pay-as-You go plan discounts TPUs at a large scale, so you don't have to talk to sales tog et a pricepoint that grows as you grow. Discounted pricing is as follows: -| Count | TPU Cost | -|------|----------| -| 0+ | $1/100k | -| 1M+ | $.75/100k | -| 10M+ | $.55/100k | +| Count | TPU Cost | +| ----- | ---------- | +| 0+ | $1/100k | +| 1M+ | $.75/100k | +| 10M+ | $.55/100k | | 100M+ | $0.35/100k | -| 1B+ | $0.25/100k | +| 1B+ | $0.25/100k | diff --git a/sidebars.js b/sidebars.js index 0d75083b47..92488ece15 100644 --- a/sidebars.js +++ b/sidebars.js @@ -23,7 +23,10 @@ const sidebars = { label: "Pricing & Limits", type: "category", link: { type: "doc", id: "pricing-limits/index" }, - items: ["pricing-limits/free-plan-limits", "pricing-limits/traffic-policy-unit-pricing"], + items: [ + "pricing-limits/free-plan-limits", + "pricing-limits/traffic-policy-unit-pricing", + ], }, { label: "Getting Started", From 6c1822c1829512fe2a1a3fb25b3c0c4902c0a6f7 Mon Sep 17 00:00:00 2001 From: Shaquil Hansford Date: Wed, 20 Aug 2025 11:48:13 -0400 Subject: [PATCH 04/13] Update docs/pricing-limits/traffic-policy-unit-pricing.mdx --- docs/pricing-limits/traffic-policy-unit-pricing.mdx | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/pricing-limits/traffic-policy-unit-pricing.mdx b/docs/pricing-limits/traffic-policy-unit-pricing.mdx index 741f7c2e03..fa13c6f87f 100644 --- a/docs/pricing-limits/traffic-policy-unit-pricing.mdx +++ b/docs/pricing-limits/traffic-policy-unit-pricing.mdx @@ -1,5 +1,6 @@ --- title: Traffic Policy Unit (TPU) Pricing +sidebar_label: Traffic Policy Pricing description: Learn about how ngrok uses Traffic Processing Units (TPUs) to measure and charge for traffic policy usage. --- From d89cce7df401ce1fe6808185b7094ce372e364b0 Mon Sep 17 00:00:00 2001 From: samcrichard <119348077+samcrichard@users.noreply.github.com> Date: Thu, 21 Aug 2025 17:00:24 -0400 Subject: [PATCH 05/13] Update docs/pricing-limits/traffic-policy-unit-pricing.mdx Co-authored-by: Shaquil Hansford --- docs/pricing-limits/traffic-policy-unit-pricing.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pricing-limits/traffic-policy-unit-pricing.mdx b/docs/pricing-limits/traffic-policy-unit-pricing.mdx index fa13c6f87f..75463d6a08 100644 --- a/docs/pricing-limits/traffic-policy-unit-pricing.mdx +++ b/docs/pricing-limits/traffic-policy-unit-pricing.mdx @@ -8,7 +8,7 @@ Traffic Processing Units (TPUs) are ngrok's usage-based unit for measuring how m TPUs are sold in bundles of `100,000` for $1, and are deducted as your policies run. -## Actions, Expressions, and Variables +## TPU pricing breakdown - [**Actions**](https://ngrok.com/docs/traffic-policy/concepts/actions/): Define what happens when a traffic policy rule matches (e.g. add headers, deny a request, forward traffic). - [**Expressions**](https://ngrok.com/docs/traffic-policy/concepts/expressions/): Conditions (written in CEL) that determine whether actions execute, based on request or connection properties. From 254947998cb2eb4d90f7ce4df3b22fa7340647ac Mon Sep 17 00:00:00 2001 From: samcrichard <119348077+samcrichard@users.noreply.github.com> Date: Thu, 21 Aug 2025 17:00:54 -0400 Subject: [PATCH 06/13] Update docs/pricing-limits/traffic-policy-unit-pricing.mdx Co-authored-by: SG <212444234+sg-writer@users.noreply.github.com> --- docs/pricing-limits/traffic-policy-unit-pricing.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pricing-limits/traffic-policy-unit-pricing.mdx b/docs/pricing-limits/traffic-policy-unit-pricing.mdx index 75463d6a08..f4c45240b7 100644 --- a/docs/pricing-limits/traffic-policy-unit-pricing.mdx +++ b/docs/pricing-limits/traffic-policy-unit-pricing.mdx @@ -4,7 +4,7 @@ sidebar_label: Traffic Policy Pricing description: Learn about how ngrok uses Traffic Processing Units (TPUs) to measure and charge for traffic policy usage. --- -Traffic Processing Units (TPUs) are ngrok's usage-based unit for measuring how much processing your traffic policies perform. Instead of charging per request or connection, ngrok charges based combined cost of the actions, variables, and macros you use. +Traffic Processing Units (TPUs) are ngrok's usage-based unit for measuring how much processing your traffic policies perform. Instead of charging per request or connection, ngrok charges based on the combined cost of the actions, variables, and macros you use. TPUs are sold in bundles of `100,000` for $1, and are deducted as your policies run. From f6a2d367029a0ff860648f2a81cc17769f9d4d91 Mon Sep 17 00:00:00 2001 From: samcrichard <119348077+samcrichard@users.noreply.github.com> Date: Thu, 21 Aug 2025 17:01:02 -0400 Subject: [PATCH 07/13] Update docs/pricing-limits/traffic-policy-unit-pricing.mdx Co-authored-by: SG <212444234+sg-writer@users.noreply.github.com> --- docs/pricing-limits/traffic-policy-unit-pricing.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pricing-limits/traffic-policy-unit-pricing.mdx b/docs/pricing-limits/traffic-policy-unit-pricing.mdx index f4c45240b7..49cb1fa302 100644 --- a/docs/pricing-limits/traffic-policy-unit-pricing.mdx +++ b/docs/pricing-limits/traffic-policy-unit-pricing.mdx @@ -10,7 +10,7 @@ TPUs are sold in bundles of `100,000` for $1, and are deducted as your policies ## TPU pricing breakdown -- [**Actions**](https://ngrok.com/docs/traffic-policy/concepts/actions/): Define what happens when a traffic policy rule matches (e.g. add headers, deny a request, forward traffic). +- [**Actions**](https://ngrok.com/docs/traffic-policy/concepts/actions/): Define what happens when a traffic policy rule matches (such as adding headers, denying a request, or forwarding traffic). - [**Expressions**](https://ngrok.com/docs/traffic-policy/concepts/expressions/): Conditions (written in CEL) that determine whether actions execute, based on request or connection properties. - [**Variables**](https://ngrok.com/docs/traffic-policy/variables/): Metadata about connections or requests that you can use in expressions or actions (e.g. client IP, headers). From f785557831ebb116d38613418e0b2ee4cffabbfe Mon Sep 17 00:00:00 2001 From: samcrichard <119348077+samcrichard@users.noreply.github.com> Date: Thu, 21 Aug 2025 17:03:31 -0400 Subject: [PATCH 08/13] Update docs/pricing-limits/traffic-policy-unit-pricing.mdx Co-authored-by: SG <212444234+sg-writer@users.noreply.github.com> --- docs/pricing-limits/traffic-policy-unit-pricing.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pricing-limits/traffic-policy-unit-pricing.mdx b/docs/pricing-limits/traffic-policy-unit-pricing.mdx index 49cb1fa302..bd8d246118 100644 --- a/docs/pricing-limits/traffic-policy-unit-pricing.mdx +++ b/docs/pricing-limits/traffic-policy-unit-pricing.mdx @@ -202,7 +202,7 @@ TPUs are sold in bundles of `100,000` for $1, and are deducted as your policies ## Traffic Policy Unit (TPU) discounts at scale -The Pay-as-You go plan discounts TPUs at a large scale, so you don't have to talk to sales tog et a pricepoint that grows as you grow. Discounted pricing is as follows: +The pay-as-you-go plan discounts TPUs at a large scale, so you don't have to talk to sales to get the best price as you grow. Discounted pricing is as follows: | Count | TPU Cost | | ----- | ---------- | From 281d0a3e7700d40ebc3006ea3f6316107479816f Mon Sep 17 00:00:00 2001 From: samcrichard <119348077+samcrichard@users.noreply.github.com> Date: Fri, 22 Aug 2025 13:04:47 -0400 Subject: [PATCH 09/13] Update docs/pricing-limits/traffic-policy-unit-pricing.mdx Co-authored-by: SG <212444234+sg-writer@users.noreply.github.com> --- docs/pricing-limits/traffic-policy-unit-pricing.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pricing-limits/traffic-policy-unit-pricing.mdx b/docs/pricing-limits/traffic-policy-unit-pricing.mdx index bd8d246118..f431c761c2 100644 --- a/docs/pricing-limits/traffic-policy-unit-pricing.mdx +++ b/docs/pricing-limits/traffic-policy-unit-pricing.mdx @@ -6,7 +6,7 @@ description: Learn about how ngrok uses Traffic Processing Units (TPUs) to measu Traffic Processing Units (TPUs) are ngrok's usage-based unit for measuring how much processing your traffic policies perform. Instead of charging per request or connection, ngrok charges based on the combined cost of the actions, variables, and macros you use. -TPUs are sold in bundles of `100,000` for $1, and are deducted as your policies run. +TPUs are sold in bundles of 100,000 for $1 and are deducted as your policies run. ## TPU pricing breakdown From 5574333b04ca3da448a9ceb1885db4b96ba2bf74 Mon Sep 17 00:00:00 2001 From: samcrichard <119348077+samcrichard@users.noreply.github.com> Date: Fri, 22 Aug 2025 13:04:52 -0400 Subject: [PATCH 10/13] Update docs/pricing-limits/traffic-policy-unit-pricing.mdx Co-authored-by: SG <212444234+sg-writer@users.noreply.github.com> --- docs/pricing-limits/traffic-policy-unit-pricing.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pricing-limits/traffic-policy-unit-pricing.mdx b/docs/pricing-limits/traffic-policy-unit-pricing.mdx index f431c761c2..fe3cc1beae 100644 --- a/docs/pricing-limits/traffic-policy-unit-pricing.mdx +++ b/docs/pricing-limits/traffic-policy-unit-pricing.mdx @@ -12,7 +12,7 @@ TPUs are sold in bundles of 100,000 for $1 and are deducted as your policies run - [**Actions**](https://ngrok.com/docs/traffic-policy/concepts/actions/): Define what happens when a traffic policy rule matches (such as adding headers, denying a request, or forwarding traffic). - [**Expressions**](https://ngrok.com/docs/traffic-policy/concepts/expressions/): Conditions (written in CEL) that determine whether actions execute, based on request or connection properties. -- [**Variables**](https://ngrok.com/docs/traffic-policy/variables/): Metadata about connections or requests that you can use in expressions or actions (e.g. client IP, headers). +- [**Variables**](https://ngrok.com/docs/traffic-policy/variables/): Metadata about connections or requests that you can use in expressions or actions (such as the client IP or headers). ### Variables From 6e0d3b83e3314641359c11c26fd81b06d05af252 Mon Sep 17 00:00:00 2001 From: Russ Savage Date: Tue, 2 Sep 2025 14:20:29 -0700 Subject: [PATCH 11/13] Apply suggestion from @russorat --- docs/pricing-limits/traffic-policy-unit-pricing.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pricing-limits/traffic-policy-unit-pricing.mdx b/docs/pricing-limits/traffic-policy-unit-pricing.mdx index fe3cc1beae..7cfb244abb 100644 --- a/docs/pricing-limits/traffic-policy-unit-pricing.mdx +++ b/docs/pricing-limits/traffic-policy-unit-pricing.mdx @@ -4,7 +4,7 @@ sidebar_label: Traffic Policy Pricing description: Learn about how ngrok uses Traffic Processing Units (TPUs) to measure and charge for traffic policy usage. --- -Traffic Processing Units (TPUs) are ngrok's usage-based unit for measuring how much processing your traffic policies perform. Instead of charging per request or connection, ngrok charges based on the combined cost of the actions, variables, and macros you use. +Traffic Processing Units (TPUs) are ngrok's usage-based metric for measuring the work your traffic policies perform. Because requests can include any mix of expressions, macros, and actions—often applied only to a subset of traffic—charging a flat rate per request or connection would usually result in overcharging. Instead, ngrok calculates TPUs dynamically for each request, based only on the parts of the traffic policy that were actually executed. TPUs are sold in bundles of 100,000 for $1 and are deducted as your policies run. From bce474f73a8f70d3cb67f00cc6c232f019fb3fdc Mon Sep 17 00:00:00 2001 From: Russ Savage Date: Tue, 2 Sep 2025 14:20:35 -0700 Subject: [PATCH 12/13] Apply suggestion from @russorat --- docs/pricing-limits/traffic-policy-unit-pricing.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pricing-limits/traffic-policy-unit-pricing.mdx b/docs/pricing-limits/traffic-policy-unit-pricing.mdx index 7cfb244abb..9986b06319 100644 --- a/docs/pricing-limits/traffic-policy-unit-pricing.mdx +++ b/docs/pricing-limits/traffic-policy-unit-pricing.mdx @@ -6,7 +6,7 @@ description: Learn about how ngrok uses Traffic Processing Units (TPUs) to measu Traffic Processing Units (TPUs) are ngrok's usage-based metric for measuring the work your traffic policies perform. Because requests can include any mix of expressions, macros, and actions—often applied only to a subset of traffic—charging a flat rate per request or connection would usually result in overcharging. Instead, ngrok calculates TPUs dynamically for each request, based only on the parts of the traffic policy that were actually executed. -TPUs are sold in bundles of 100,000 for $1 and are deducted as your policies run. +TPUs are sold in bundles of 100,000 for $1 and are charged as your policies execute. ## TPU pricing breakdown From 88f91cd1aad545dc17a73fad041b98364e22e7cf Mon Sep 17 00:00:00 2001 From: Russ Savage Date: Tue, 2 Sep 2025 14:28:55 -0700 Subject: [PATCH 13/13] fix: pr feedback Signed-off-by: Russ Savage --- .../traffic-policy-unit-pricing.mdx | 366 +++++++++--------- 1 file changed, 182 insertions(+), 184 deletions(-) diff --git a/docs/pricing-limits/traffic-policy-unit-pricing.mdx b/docs/pricing-limits/traffic-policy-unit-pricing.mdx index 9986b06319..b5fea64230 100644 --- a/docs/pricing-limits/traffic-policy-unit-pricing.mdx +++ b/docs/pricing-limits/traffic-policy-unit-pricing.mdx @@ -10,199 +10,197 @@ TPUs are sold in bundles of 100,000 for $1 and are charged as your policies exec ## TPU pricing breakdown -- [**Actions**](https://ngrok.com/docs/traffic-policy/concepts/actions/): Define what happens when a traffic policy rule matches (such as adding headers, denying a request, or forwarding traffic). -- [**Expressions**](https://ngrok.com/docs/traffic-policy/concepts/expressions/): Conditions (written in CEL) that determine whether actions execute, based on request or connection properties. -- [**Variables**](https://ngrok.com/docs/traffic-policy/variables/): Metadata about connections or requests that you can use in expressions or actions (such as the client IP or headers). - -### Variables - -| Name | TPU Cost | -| ------------------------------------------------------------------------------------------------------------------------------ | -------- | -| Name | TPU Cost | -| --- | --- | -| [actions.ngrok.add_headers.headers_added](https://ngrok.com/docs/traffic-policy/variables/action/#add-headers) | Free | -| [actions.ngrok.basic_auth.credentials.presented](https://ngrok.com/docs/traffic-policy/variables/action/#basic-auth) | Free | -| [actions.ngrok.basic_auth.credentials.username](https://ngrok.com/docs/traffic-policy/variables/action/#basic-auth) | Free | -| [actions.ngrok.basic_auth.credentials.authorized](https://ngrok.com/docs/traffic-policy/variables/action/#basic-auth) | Free | -| [actions.ngrok.compress.already_compressed](https://ngrok.com/docs/traffic-policy/variables/action/#compress-response) | Free | -| [actions.ngrok.compress.negotiated_algorithm](https://ngrok.com/docs/traffic-policy/variables/action/#compress-response) | Free | -| [actions.ngrok.http_request.error.code](https://ngrok.com/docs/traffic-policy/variables/action/#http-request) | Free | -| [actions.ngrok.http_request.error.message](https://ngrok.com/docs/traffic-policy/variables/action/#http-request) | Free | -| [actions.ngrok.http_request.attempts](https://ngrok.com/docs/traffic-policy/variables/action/#http-request) | Free | -| [actions.ngrok.http_request.req](https://ngrok.com/docs/traffic-policy/variables/action/#http-request) | Free | -| [actions.ngrok.http_request.res](https://ngrok.com/docs/traffic-policy/variables/action/#http-request) | Free | -| [actions.ngrok.jwt_validation.tokens](https://ngrok.com/docs/traffic-policy/variables/action/#jwt-validation) | Free | -| [actions.ngrok.jwt_validation.error.code](https://ngrok.com/docs/traffic-policy/variables/action/#jwt-validation) | Free | -| [actions.ngrok.jwt_validation.error.message](https://ngrok.com/docs/traffic-policy/variables/action/#jwt-validation) | Free | -| [actions.ngrok.log.metadata](https://ngrok.com/docs/traffic-policy/variables/action/#log) | Free | -| [actions.ngrok.oauth.error.code](https://ngrok.com/docs/traffic-policy/variables/action/#oauth) | Free | -| [actions.ngrok.oauth.error.message](https://ngrok.com/docs/traffic-policy/variables/action/#oauth) | Free | -| [actions.ngrok.oauth.identity.id](https://ngrok.com/docs/traffic-policy/variables/action/#oauth) | Free | -| [actions.ngrok.oauth.identity.email](https://ngrok.com/docs/traffic-policy/variables/action/#oauth) | Free | -| [actions.ngrok.oauth.identity.name](https://ngrok.com/docs/traffic-policy/variables/action/#oauth) | Free | -| [actions.ngrok.oauth.identity.provider_user_id](https://ngrok.com/docs/traffic-policy/variables/action/#oauth) | Free | -| [actions.ngrok.oauth.identity.current_provider_session_id](https://ngrok.com/docs/traffic-policy/variables/action/#oauth) | Free | -| [actions.ngrok.oauth.access_token](https://ngrok.com/docs/traffic-policy/variables/action/#oauth) | Free | -| [actions.ngrok.oauth.refresh_token](https://ngrok.com/docs/traffic-policy/variables/action/#oauth) | Free | -| [actions.ngrok.oauth.expires_at](https://ngrok.com/docs/traffic-policy/variables/action/#oauth) | Free | -| [actions.ngrok.oauth.session_timed_out](https://ngrok.com/docs/traffic-policy/variables/action/#oauth) | Free | -| [actions.ngrok.oauth.session_max_duration_reached](https://ngrok.com/docs/traffic-policy/variables/action/#oauth) | Free | -| [actions.ngrok.oidc.error.code](https://ngrok.com/docs/traffic-policy/variables/action/#openid-connect-oidc) | Free | -| [actions.ngrok.oidc.error.message](https://ngrok.com/docs/traffic-policy/variables/action/#openid-connect-oidc) | Free | -| [actions.ngrok.oidc.identity.id](https://ngrok.com/docs/traffic-policy/variables/action/#openid-connect-oidc) | Free | -| [actions.ngrok.oidc.identity.email](https://ngrok.com/docs/traffic-policy/variables/action/#openid-connect-oidc) | Free | -| [actions.ngrok.oidc.identity.name](https://ngrok.com/docs/traffic-policy/variables/action/#openid-connect-oidc) | Free | -| [actions.ngrok.oidc.identity.provider_user_id](https://ngrok.com/docs/traffic-policy/variables/action/#openid-connect-oidc) | Free | -| [actions.ngrok.oidc.identity.current_session_id](https://ngrok.com/docs/traffic-policy/variables/action/#openid-connect-oidc) | Free | -| [actions.ngrok.oidc.identity_token](https://ngrok.com/docs/traffic-policy/variables/action/#openid-connect-oidc) | Free | -| [actions.ngrok.oidc.access_token](https://ngrok.com/docs/traffic-policy/variables/action/#openid-connect-oidc) | Free | -| [actions.ngrok.oidc.refresh_token](https://ngrok.com/docs/traffic-policy/variables/action/#openid-connect-oidc) | Free | -| [actions.ngrok.oidc.expires_at](https://ngrok.com/docs/traffic-policy/variables/action/#openid-connect-oidc) | Free | -| [actions.ngrok.oidc.session_timed_out](https://ngrok.com/docs/traffic-policy/variables/action/#openid-connect-oidc) | Free | -| [actions.ngrok.oidc.session_max_duration_reached](https://ngrok.com/docs/traffic-policy/variables/action/#openid-connect-oidc) | Free | -| [actions.ngrok.oidc.userinfo_refreshed](https://ngrok.com/docs/traffic-policy/variables/action/#openid-connect-oidc) | Free | -| [actions.ngrok.rate_limit.bucket_key](https://ngrok.com/docs/traffic-policy/variables/action/#rate-limit) | Free | -| [actions.ngrok.rate_limit.limited](https://ngrok.com/docs/traffic-policy/variables/action/#rate-limit) | Free | -| [actions.ngrok.rate_limit.error.code](https://ngrok.com/docs/traffic-policy/variables/action/#rate-limit) | Free | -| [actions.ngrok.rate_limit.error.message](https://ngrok.com/docs/traffic-policy/variables/action/#rate-limit) | Free | -| [actions.ngrok.redirect.matches](https://ngrok.com/docs/traffic-policy/variables/action/#redirect) | Free | -| [actions.ngrok.redirect.url](https://ngrok.com/docs/traffic-policy/variables/action/#redirect) | Free | -| [actions.ngrok.redirect.error.code](https://ngrok.com/docs/traffic-policy/variables/action/#redirect) | Free | -| [actions.ngrok.redirect.error.message](https://ngrok.com/docs/traffic-policy/variables/action/#redirect) | Free | -| [actions.ngrok.remove_headers.headers_removed](https://ngrok.com/docs/traffic-policy/variables/action/#remove-headers) | Free | -| [actions.ngrok.restrict_ips.action](https://ngrok.com/docs/traffic-policy/variables/action/#restrict-ips) | Free | -| [actions.ngrok.restrict_ips.matched_cidr](https://ngrok.com/docs/traffic-policy/variables/action/#restrict-ips) | Free | -| [actions.ngrok.restrict_ips.error.code](https://ngrok.com/docs/traffic-policy/variables/action/#restrict-ips) | Free | -| [actions.ngrok.restrict_ips.error.message](https://ngrok.com/docs/traffic-policy/variables/action/#restrict-ips) | Free | -| [actions.ngrok.url_rewrite.matches](https://ngrok.com/docs/traffic-policy/variables/action/#url-rewrite) | Free | -| [actions.ngrok.url_rewrite.url](https://ngrok.com/docs/traffic-policy/variables/action/#url-rewrite) | Free | -| [actions.ngrok.url_rewrite.error.code](https://ngrok.com/docs/traffic-policy/variables/action/#url-rewrite) | Free | -| [actions.ngrok.url_rewrite.error.message](https://ngrok.com/docs/traffic-policy/variables/action/#url-rewrite) | Free | -| [actions.ngrok.verify_webhook.verified](https://ngrok.com/docs/traffic-policy/variables/action/#verify-webhook) | Free | -| [conn.bytes_in](https://ngrok.com/docs/traffic-policy/variables/connection/#connbytes_in) | Free | -| [conn.bytes_out](https://ngrok.com/docs/traffic-policy/variables/connection/#connbytes_out) | Free | -| [conn.client_ip](https://ngrok.com/docs/traffic-policy/variables/connection/#connclient_ip) | Free | -| [conn.client_port](https://ngrok.com/docs/traffic-policy/variables/connection/#connclient_port) | Free | -| [conn.server_ip](https://ngrok.com/docs/traffic-policy/variables/connection/#connserver_ip) | Free | -| [conn.server_port](https://ngrok.com/docs/traffic-policy/variables/connection/#connserver_port) | Free | -| [conn.server_region](https://ngrok.com/docs/traffic-policy/variables/connection/#connserver_region) | Free | -| [conn.ts.start](https://ngrok.com/docs/traffic-policy/variables/connection/#conntsstart) | Free | +- [**Actions**](/traffic-policy/concepts/actions/): Define what happens when a traffic policy rule matches (such as adding headers, denying a request, or forwarding traffic). +- [**Macros**](/traffic-policy/macros/): Macros can be used within the Traffic Policy engine to simplify traffic management and dynamic configuration. +- [**Variables**](/traffic-policy/variables/): Metadata about connections or requests that you can use in expressions or actions (such as the client IP or headers). ### Actions -| Name | TPU Cost | -| --------------------------------------------------------------------------------------- | -------- | -| [add-headers](https://ngrok.com/docs/traffic-policy/actions/add-headers/) | Free | -| [basic-auth](https://ngrok.com/docs/traffic-policy/actions/basic-auth/) | Free | -| [circuit-breaker](https://ngrok.com/docs/traffic-policy/actions/circuit-breaker/) | 10 TPU | -| [compress-response](https://ngrok.com/docs/traffic-policy/actions/compress-response/) | 10 TPU | -| [custom-response](https://ngrok.com/docs/traffic-policy/actions/custom-response/) | Free | -| [deny](https://ngrok.com/docs/traffic-policy/actions/deny/) | Free | -| [forward-internal](https://ngrok.com/docs/traffic-policy/actions/forward-internal/) | Free | -| [forward-external](https://ngrok.com/docs/traffic-policy/actions/forward-external/) | 10 TPU | -| [http-request](https://ngrok.com/docs/traffic-policy/actions/http-request/) | 1 TPU | -| [jwt-validation](https://ngrok.com/docs/traffic-policy/actions/jwt-validation/) | 10 TPU | -| [log](https://ngrok.com/docs/traffic-policy/actions/log/) | Free | -| [oauth](https://ngrok.com/docs/traffic-policy/actions/oauth/) | Free | -| [oidc](https://ngrok.com/docs/traffic-policy/actions/oidc/) | Free | -| [owasp-crs-request](https://ngrok.com/docs/traffic-policy/actions/owasp-crs-request/) | 10 TPU | -| [owasp-crs-response](https://ngrok.com/docs/traffic-policy/actions/owasp-crs-response/) | 10 TPU | -| [rate-limit](https://ngrok.com/docs/traffic-policy/actions/rate-limit/) | 1 TPU | -| [redirect](https://ngrok.com/docs/traffic-policy/actions/redirect/) | 10 TPU | -| [remove-headers](https://ngrok.com/docs/traffic-policy/actions/remove-headers/) | 1 TPU | -| [restrict-ips](https://ngrok.com/docs/traffic-policy/actions/restrict-ips/) | 10 TPU | -| [saml](https://ngrok.com/docs/traffic-policy/actions/saml/) | Free | -| [set-vars](https://ngrok.com/docs/traffic-policy/actions/set-vars/) | Free | -| [terminate-tls](https://ngrok.com/docs/traffic-policy/actions/terminate-tls/) | 100 TPU | -| [url-rewrite](https://ngrok.com/docs/traffic-policy/actions/url-rewrite/) | 10 TPU | -| [verify-webhook](https://ngrok.com/docs/traffic-policy/actions/verify-webhook/) | 1 TPU | +| Name | TPU Cost | +| ----------------------------------------------------------------- | -------- | +| [add-headers](/traffic-policy/actions/add-headers/) | Free | +| [basic-auth](/traffic-policy/actions/basic-auth/) | Free | +| [circuit-breaker](/traffic-policy/actions/circuit-breaker/) | 10 TPUs | +| [compress-response](/traffic-policy/actions/compress-response/) | 10 TPUs | +| [custom-response](/traffic-policy/actions/custom-response/) | Free | +| [deny](/traffic-policy/actions/deny/) | Free | +| [forward-internal](/traffic-policy/actions/forward-internal/) | Free | +| [forward-external](/traffic-policy/actions/forward-external/) | 10 TPUs | +| [http-request](/traffic-policy/actions/http-request/) | 1 TPU | +| [jwt-validation](/traffic-policy/actions/jwt-validation/) | 10 TPUs | +| [log](/traffic-policy/actions/log/) | Free | +| [oauth](/traffic-policy/actions/oauth/) | Free | +| [oidc](/traffic-policy/actions/oidc/) | Free | +| [owasp-crs-request](/traffic-policy/actions/owasp-crs-request/) | 10 TPUs | +| [owasp-crs-response](/traffic-policy/actions/owasp-crs-response/) | 10 TPUs | +| [rate-limit](/traffic-policy/actions/rate-limit/) | 1 TPU | +| [redirect](/traffic-policy/actions/redirect/) | 10 TPUs | +| [remove-headers](/traffic-policy/actions/remove-headers/) | 1 TPU | +| [restrict-ips](/traffic-policy/actions/restrict-ips/) | 10 TPUs | +| [saml](/traffic-policy/actions/saml/) | Free | +| [set-vars](/traffic-policy/actions/set-vars/) | Free | +| [terminate-tls](/traffic-policy/actions/terminate-tls/) | 100 TPUs | +| [url-rewrite](/traffic-policy/actions/url-rewrite/) | 10 TPUs | +| [verify-webhook](/traffic-policy/actions/verify-webhook/) | 1 TPU | ### Macros -| Name | TPU Cost | -| --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | ----------------------- | -| [b64.decode(string)](https://ngrok.com/docs/traffic-policy/macros/#base64) | 3 TPU per GB after 1 GB | -| [b64.encode(string)](https://ngrok.com/docs/traffic-policy/macros/#base64) | 3 TPU per GB after 1 GB | -| [basic_auth.encode(username, password)](https://ngrok.com/docs/traffic-policy/macros/#basic-auth) | Free | -| [http.header(name)](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | -| [http.header(name, default)](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | -| [http.param(name)](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | -| [http.param(name, default)](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | -| [http.path()](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | -| [http.path_segment(index)](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | -| [http.path_segment(index, default)](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | -| [http.query()](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | -| [http.query_param(name)](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | -| [http.query_param(name, default)](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | -| [http.remote_addr()](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | -| [http.request_body()](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | -| [http.request_body_json()](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | -| [http.request_body_query()](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | -| [http.request_method()](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | -| [http.request_uri()](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | -| [http.response_body()](https://ngrok.com/docs/traffic-policy/macros/#http-responses) | Free | -| [http.response_body_json()](https://ngrok.com/docs/traffic-policy/macros/#http-responses) | Free | -| [http.response_body_query()](https://ngrok.com/docs/traffic-policy/macros/#http-responses) | Free | -| [http.scheme()](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | -| [http.status()](https://ngrok.com/docs/traffic-policy/macros/#http-responses) | Free | -| [http.status_text()](https://ngrok.com/docs/traffic-policy/macros/#http-responses) | Free | -| [http.user_agent()](https://ngrok.com/docs/traffic-policy/macros/#http-requests) | Free | -| [inCidrRange(ip, cidr)](https://ngrok.com/docs/traffic-policy/macros/#utility) | Free | -| [inCidrRanges(ip, cidrs)](https://ngrok.com/docs/traffic-policy/macros/#utility) | Free | -| [json.decode(string)](https://ngrok.com/docs/traffic-policy/macros/#json) | 3 TPU per GB after 1 GB | -| [json.encode(list | map)](https://ngrok.com/docs/traffic-policy/macros/#json) | 3 TPU per GB after 1 GB | -| [list.encodeJson()](https://ngrok.com/docs/traffic-policy/macros/#lists) | Free | -| [object.encodeJson()](https://ngrok.com/docs/traffic-policy/macros/#maps) | Free | -| [object.encodeQueryString()](https://ngrok.com/docs/traffic-policy/macros/#maps) | Free | -| [queryString.decode(string)](https://ngrok.com/docs/traffic-policy/macros/#query-string) | Free | -| [queryString.encode(map)](https://ngrok.com/docs/traffic-policy/macros/#query-string) | Free | -| [rand.double()](https://ngrok.com/docs/traffic-policy/macros/#random) | Free | -| [rand.int(min, max)](https://ngrok.com/docs/traffic-policy/macros/#random) | Free | -| [security.secret(string, string)](https://ngrok.com/docs/traffic-policy/macros/#secrets) | Free | -| [string.decodeBase64()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | -| [string.decodeJson()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | -| [string.decodeQueryString()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | -| [string.encodeBase64()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | -| [string.escapeUrl()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | -| [string.isJson()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | -| [string.isQueryString()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | -| [string.isURL()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | -| [string.parseUrl()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | -| [string.unescapeUrl()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | -| [url.escape(string)](https://ngrok.com/docs/traffic-policy/macros/#url) | Free | -| [url.parse(string)](https://ngrok.com/docs/traffic-policy/macros/#url) | Free | -| [url.unescape(string)](https://ngrok.com/docs/traffic-policy/macros/#url) | Free | -| [utility.base64_decode(string)](https://ngrok.com/docs/traffic-policy/macros/#base64) | Free | -| [utility.base64_encode(string)](https://ngrok.com/docs/traffic-policy/macros/#base64) | Free | -| [utility.basic_auth_encode(username, password)](https://ngrok.com/docs/traffic-policy/macros/#basic-auth) | Free | -| [utility.in_cidr_range(ip, cidr)](https://ngrok.com/docs/traffic-policy/macros/#utility) | Free | -| [utility.in_cidr_ranges(ip, cidrs)](https://ngrok.com/docs/traffic-policy/macros/#utility) | Free | -| [utility.json_decode(string)](https://ngrok.com/docs/traffic-policy/macros/#json) | Free | -| [utility.json_encode(list | map)](https://ngrok.com/docs/traffic-policy/macros/#json) | Free | -| [utility.list_encode_json()](https://ngrok.com/docs/traffic-policy/macros/#lists) | Free | -| [utility.object_encode_json()](https://ngrok.com/docs/traffic-policy/macros/#maps) | Free | -| [utility.object_encode_query_string()](https://ngrok.com/docs/traffic-policy/macros/#maps) | Free | -| [utility.query_string_decode(string)](https://ngrok.com/docs/traffic-policy/macros/#query-string) | Free | -| [utility.query_string_encode(map)](https://ngrok.com/docs/traffic-policy/macros/#query-string) | Free | -| [utility.rand_double()](https://ngrok.com/docs/traffic-policy/macros/#random) | Free | -| [utility.rand_int(min, max)](https://ngrok.com/docs/traffic-policy/macros/#random) | Free | -| [utility.string_decode_base64()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | -| [utility.string_decode_json()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | -| [utility.string_decode_query_string()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | -| [utility.string_encode_base64()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | -| [utility.string_escape_url()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | -| [utility.string_is_json()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | -| [utility.string_is_query_string()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | -| [utility.string_is_url()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | -| [utility.string_parse_url()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | -| [utility.string_unescape_url()](https://ngrok.com/docs/traffic-policy/macros/#string) | Free | -| [utility.url_escape(string)](https://ngrok.com/docs/traffic-policy/macros/#url) | Free | -| [utility.url_parse(string)](https://ngrok.com/docs/traffic-policy/macros/#url) | Free | -| [utility.url_unescape(string)](https://ngrok.com/docs/traffic-policy/macros/#url) | Free | +| Name | TPU Cost | +| ----------------------------------------------------------------------------------- | ------------------------ | +| [b64.decode(string)](/traffic-policy/macros/#base64) | 3 TPUs per GB after 1 GB | +| [b64.encode(string)](/traffic-policy/macros/#base64) | 3 TPUs per GB after 1 GB | +| [basic_auth.encode(username, password)](/traffic-policy/macros/#basic-auth) | Free | +| [http.header(name)](/traffic-policy/macros/#http-requests) | Free | +| [http.header(name, default)](/traffic-policy/macros/#http-requests) | Free | +| [http.param(name)](/traffic-policy/macros/#http-requests) | Free | +| [http.param(name, default)](/traffic-policy/macros/#http-requests) | Free | +| [http.path()](/traffic-policy/macros/#http-requests) | Free | +| [http.path_segment(index)](/traffic-policy/macros/#http-requests) | Free | +| [http.path_segment(index, default)](/traffic-policy/macros/#http-requests) | Free | +| [http.query()](/traffic-policy/macros/#http-requests) | Free | +| [http.query_param(name)](/traffic-policy/macros/#http-requests) | Free | +| [http.query_param(name, default)](/traffic-policy/macros/#http-requests) | Free | +| [http.remote_addr()](/traffic-policy/macros/#http-requests) | Free | +| [http.request_body()](/traffic-policy/macros/#http-requests) | Free | +| [http.request_body_json()](/traffic-policy/macros/#http-requests) | Free | +| [http.request_body_query()](/traffic-policy/macros/#http-requests) | Free | +| [http.request_method()](/traffic-policy/macros/#http-requests) | Free | +| [http.request_uri()](/traffic-policy/macros/#http-requests) | Free | +| [http.response_body()](/traffic-policy/macros/#http-responses) | Free | +| [http.response_body_json()](/traffic-policy/macros/#http-responses) | Free | +| [http.response_body_query()](/traffic-policy/macros/#http-responses) | Free | +| [http.scheme()](/traffic-policy/macros/#http-requests) | Free | +| [http.status()](/traffic-policy/macros/#http-responses) | Free | +| [http.status_text()](/traffic-policy/macros/#http-responses) | Free | +| [http.user_agent()](/traffic-policy/macros/#http-requests) | Free | +| [inCidrRange(ip, cidr)](/traffic-policy/macros/#utility) | Free | +| [inCidrRanges(ip, cidrs)](/traffic-policy/macros/#utility) | Free | +| [json.decode(string)](/traffic-policy/macros/#json) | 3 TPUs per GB after 1 GB | +| [json.encode(list\| map)](/traffic-policy/macros/#json) | 3 TPUs per GB after 1 GB | +| [list.encodeJson()](/traffic-policy/macros/#lists) | Free | +| [object.encodeJson()](/traffic-policy/macros/#maps) | Free | +| [object.encodeQueryString()](/traffic-policy/macros/#maps) | Free | +| [queryString.decode(string)](/traffic-policy/macros/#query-string) | Free | +| [queryString.encode(map)](/traffic-policy/macros/#query-string) | Free | +| [rand.double()](/traffic-policy/macros/#random) | Free | +| [rand.int(min, max)](/traffic-policy/macros/#random) | Free | +| [security.secret(string, string)](/traffic-policy/macros/#secrets) | Free | +| [string.decodeBase64()](/traffic-policy/macros/#string) | Free | +| [string.decodeJson()](/traffic-policy/macros/#string) | Free | +| [string.decodeQueryString()](/traffic-policy/macros/#string) | Free | +| [string.encodeBase64()](/traffic-policy/macros/#string) | Free | +| [string.escapeUrl()](/traffic-policy/macros/#string) | Free | +| [string.isJson()](/traffic-policy/macros/#string) | Free | +| [string.isQueryString()](/traffic-policy/macros/#string) | Free | +| [string.isURL()](/traffic-policy/macros/#string) | Free | +| [string.parseUrl()](/traffic-policy/macros/#string) | Free | +| [string.unescapeUrl()](/traffic-policy/macros/#string) | Free | +| [url.escape(string)](/traffic-policy/macros/#url) | Free | +| [url.parse(string)](/traffic-policy/macros/#url) | Free | +| [url.unescape(string)](/traffic-policy/macros/#url) | Free | +| [utility.base64_decode(string)](/traffic-policy/macros/#base64) | Free | +| [utility.base64_encode(string)](/traffic-policy/macros/#base64) | Free | +| [utility.basic_auth_encode(username, password)](/traffic-policy/macros/#basic-auth) | Free | +| [utility.in_cidr_range(ip, cidr)](/traffic-policy/macros/#utility) | Free | +| [utility.in_cidr_ranges(ip, cidrs)](/traffic-policy/macros/#utility) | Free | +| [utility.json_decode(string)](/traffic-policy/macros/#json) | Free | +| [utility.json_encode(list \| map)](/traffic-policy/macros/#json) | Free | +| [utility.list_encode_json()](/traffic-policy/macros/#lists) | Free | +| [utility.object_encode_json()](/traffic-policy/macros/#maps) | Free | +| [utility.object_encode_query_string()](/traffic-policy/macros/#maps) | Free | +| [utility.query_string_decode(string)](/traffic-policy/macros/#query-string) | Free | +| [utility.query_string_encode(map)](/traffic-policy/macros/#query-string) | Free | +| [utility.rand_double()](/traffic-policy/macros/#random) | Free | +| [utility.rand_int(min, max)](/traffic-policy/macros/#random) | Free | +| [utility.string_decode_base64()](/traffic-policy/macros/#string) | Free | +| [utility.string_decode_json()](/traffic-policy/macros/#string) | Free | +| [utility.string_decode_query_string()](/traffic-policy/macros/#string) | Free | +| [utility.string_encode_base64()](/traffic-policy/macros/#string) | Free | +| [utility.string_escape_url()](/traffic-policy/macros/#string) | Free | +| [utility.string_is_json()](/traffic-policy/macros/#string) | Free | +| [utility.string_is_query_string()](/traffic-policy/macros/#string) | Free | +| [utility.string_is_url()](/traffic-policy/macros/#string) | Free | +| [utility.string_parse_url()](/traffic-policy/macros/#string) | Free | +| [utility.string_unescape_url()](/traffic-policy/macros/#string) | Free | +| [utility.url_escape(string)](/traffic-policy/macros/#url) | Free | +| [utility.url_parse(string)](/traffic-policy/macros/#url) | Free | +| [utility.url_unescape(string)](/traffic-policy/macros/#url) | Free | + +### Variables + +| Name | TPU Cost | +| -------------------------------------------------------------------------------------------------------- | -------- | +| [actions.ngrok.add_headers.headers_added](/traffic-policy/variables/action/#add-headers) | Free | +| [actions.ngrok.basic_auth.credentials.presented](/traffic-policy/variables/action/#basic-auth) | Free | +| [actions.ngrok.basic_auth.credentials.username](/traffic-policy/variables/action/#basic-auth) | Free | +| [actions.ngrok.basic_auth.credentials.authorized](/traffic-policy/variables/action/#basic-auth) | Free | +| [actions.ngrok.compress.already_compressed](/traffic-policy/variables/action/#compress-response) | Free | +| [actions.ngrok.compress.negotiated_algorithm](/traffic-policy/variables/action/#compress-response) | Free | +| [actions.ngrok.http_request.error.code](/traffic-policy/variables/action/#http-request) | Free | +| [actions.ngrok.http_request.error.message](/traffic-policy/variables/action/#http-request) | Free | +| [actions.ngrok.http_request.attempts](/traffic-policy/variables/action/#http-request) | Free | +| [actions.ngrok.http_request.req](/traffic-policy/variables/action/#http-request) | Free | +| [actions.ngrok.http_request.res](/traffic-policy/variables/action/#http-request) | Free | +| [actions.ngrok.jwt_validation.tokens](/traffic-policy/variables/action/#jwt-validation) | Free | +| [actions.ngrok.jwt_validation.error.code](/traffic-policy/variables/action/#jwt-validation) | Free | +| [actions.ngrok.jwt_validation.error.message](/traffic-policy/variables/action/#jwt-validation) | Free | +| [actions.ngrok.log.metadata](/traffic-policy/variables/action/#log) | Free | +| [actions.ngrok.oauth.error.code](/traffic-policy/variables/action/#oauth) | Free | +| [actions.ngrok.oauth.error.message](/traffic-policy/variables/action/#oauth) | Free | +| [actions.ngrok.oauth.identity.id](/traffic-policy/variables/action/#oauth) | Free | +| [actions.ngrok.oauth.identity.email](/traffic-policy/variables/action/#oauth) | Free | +| [actions.ngrok.oauth.identity.name](/traffic-policy/variables/action/#oauth) | Free | +| [actions.ngrok.oauth.identity.provider_user_id](/traffic-policy/variables/action/#oauth) | Free | +| [actions.ngrok.oauth.identity.current_provider_session_id](/traffic-policy/variables/action/#oauth) | Free | +| [actions.ngrok.oauth.access_token](/traffic-policy/variables/action/#oauth) | Free | +| [actions.ngrok.oauth.refresh_token](/traffic-policy/variables/action/#oauth) | Free | +| [actions.ngrok.oauth.expires_at](/traffic-policy/variables/action/#oauth) | Free | +| [actions.ngrok.oauth.session_timed_out](/traffic-policy/variables/action/#oauth) | Free | +| [actions.ngrok.oauth.session_max_duration_reached](/traffic-policy/variables/action/#oauth) | Free | +| [actions.ngrok.oidc.error.code](/traffic-policy/variables/action/#openid-connect-oidc) | Free | +| [actions.ngrok.oidc.error.message](/traffic-policy/variables/action/#openid-connect-oidc) | Free | +| [actions.ngrok.oidc.identity.id](/traffic-policy/variables/action/#openid-connect-oidc) | Free | +| [actions.ngrok.oidc.identity.email](/traffic-policy/variables/action/#openid-connect-oidc) | Free | +| [actions.ngrok.oidc.identity.name](/traffic-policy/variables/action/#openid-connect-oidc) | Free | +| [actions.ngrok.oidc.identity.provider_user_id](/traffic-policy/variables/action/#openid-connect-oidc) | Free | +| [actions.ngrok.oidc.identity.current_session_id](/traffic-policy/variables/action/#openid-connect-oidc) | Free | +| [actions.ngrok.oidc.identity_token](/traffic-policy/variables/action/#openid-connect-oidc) | Free | +| [actions.ngrok.oidc.access_token](/traffic-policy/variables/action/#openid-connect-oidc) | Free | +| [actions.ngrok.oidc.refresh_token](/traffic-policy/variables/action/#openid-connect-oidc) | Free | +| [actions.ngrok.oidc.expires_at](/traffic-policy/variables/action/#openid-connect-oidc) | Free | +| [actions.ngrok.oidc.session_timed_out](/traffic-policy/variables/action/#openid-connect-oidc) | Free | +| [actions.ngrok.oidc.session_max_duration_reached](/traffic-policy/variables/action/#openid-connect-oidc) | Free | +| [actions.ngrok.oidc.userinfo_refreshed](/traffic-policy/variables/action/#openid-connect-oidc) | Free | +| [actions.ngrok.rate_limit.bucket_key](/traffic-policy/variables/action/#rate-limit) | Free | +| [actions.ngrok.rate_limit.limited](/traffic-policy/variables/action/#rate-limit) | Free | +| [actions.ngrok.rate_limit.error.code](/traffic-policy/variables/action/#rate-limit) | Free | +| [actions.ngrok.rate_limit.error.message](/traffic-policy/variables/action/#rate-limit) | Free | +| [actions.ngrok.redirect.matches](/traffic-policy/variables/action/#redirect) | Free | +| [actions.ngrok.redirect.url](/traffic-policy/variables/action/#redirect) | Free | +| [actions.ngrok.redirect.error.code](/traffic-policy/variables/action/#redirect) | Free | +| [actions.ngrok.redirect.error.message](/traffic-policy/variables/action/#redirect) | Free | +| [actions.ngrok.remove_headers.headers_removed](/traffic-policy/variables/action/#remove-headers) | Free | +| [actions.ngrok.restrict_ips.action](/traffic-policy/variables/action/#restrict-ips) | Free | +| [actions.ngrok.restrict_ips.matched_cidr](/traffic-policy/variables/action/#restrict-ips) | Free | +| [actions.ngrok.restrict_ips.error.code](/traffic-policy/variables/action/#restrict-ips) | Free | +| [actions.ngrok.restrict_ips.error.message](/traffic-policy/variables/action/#restrict-ips) | Free | +| [actions.ngrok.url_rewrite.matches](/traffic-policy/variables/action/#url-rewrite) | Free | +| [actions.ngrok.url_rewrite.url](/traffic-policy/variables/action/#url-rewrite) | Free | +| [actions.ngrok.url_rewrite.error.code](/traffic-policy/variables/action/#url-rewrite) | Free | +| [actions.ngrok.url_rewrite.error.message](/traffic-policy/variables/action/#url-rewrite) | Free | +| [actions.ngrok.verify_webhook.verified](/traffic-policy/variables/action/#verify-webhook) | Free | +| [conn.bytes_in](/traffic-policy/variables/connection/#connbytes_in) | Free | +| [conn.bytes_out](/traffic-policy/variables/connection/#connbytes_out) | Free | +| [conn.client_ip](/traffic-policy/variables/connection/#connclient_ip) | Free | +| [conn.client_port](/traffic-policy/variables/connection/#connclient_port) | Free | +| [conn.server_ip](/traffic-policy/variables/connection/#connserver_ip) | Free | +| [conn.server_port](/traffic-policy/variables/connection/#connserver_port) | Free | +| [conn.server_region](/traffic-policy/variables/connection/#connserver_region) | Free | +| [conn.ts.start](/traffic-policy/variables/connection/#conntsstart) | Free | ## Traffic Policy Unit (TPU) discounts at scale -The pay-as-you-go plan discounts TPUs at a large scale, so you don't have to talk to sales to get the best price as you grow. Discounted pricing is as follows: +The Pay-as-you-go plan provides discounts on TPUs for large scale deployments so you always get the best price as you grow. Discounted pricing is as follows: | Count | TPU Cost | | ----- | ---------- |