Stripe: Update a tax rate
Stripe taxRates.postTaxRatesTaxRate: arguments, response, policy and SDK examples.
← Tax rates operations · Get started
Operation stripe.posttaxratestaxrate
Provider route: POST /v1/tax_rates/{tax_rate}. Alter supplies the connection’s credentials and routing.
Call through Alter
Section titled “Call through Alter”Install @alter-ai/sdk @alter-ai/stripe with npm, or alter-sdk-stripe with pip. Supply your connected customer’s grant ID and the arguments described below.
import { App } from "@alter-ai/sdk";import { StripeIntegration } from "@alter-ai/stripe";
async function execute(input: Parameters<StripeIntegration["taxRates"]["postTaxRatesTaxRate"]>[0]) { const app = new App({ apiKey: process.env.ALTER_API_KEY! }); try { const provider = new StripeIntegration(app, { grantId: process.env.PROVIDER_GRANT_ID! }); const call = await provider.taxRates.postTaxRatesTaxRate(input); const result = await call.wait(); return result.bodyJson(); } finally { await app.close(); }}import osfrom alter_sdk import Appfrom alter_sdk_stripe import StripeIntegration
async def execute(arguments): async with App(api_key=os.environ["ALTER_API_KEY"]) as app: provider = StripeIntegration(app, {"grant_id": os.environ["PROVIDER_GRANT_ID"]}) call = await provider.tax_rates.post_tax_rates_tax_rate(arguments) result = await call.wait() return result.body_json()| Field | Type | Presence | Description and constraints |
|---|---|---|---|
$ | object | Root | Additional keys: not allowed |
path | object | Required within parent | Additional keys: not allowed |
path.tax_rate | string | Required within parent | Maximum length: 5000 |
headers | object | Optional | Additional keys: not allowed |
headers.Idempotency-Key | string | Optional | Minimum length: 1 Maximum length: 255 |
body | object | Optional | Additional keys: not allowed |
body.active | boolean | Optional | Flag determining whether the tax rate is active or inactive (archived). Inactive tax rates cannot be used with new applications or Checkout Sessions, but will still work for subscriptions and invoices that already have it set. |
body.country | string | Optional | Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). Maximum length: 5000 |
body.description | string | Optional | An arbitrary string attached to the tax rate for your internal use only. It will not be visible to your customers. Maximum length: 5000 |
body.display_name | string | Optional | The display name of the tax rate, which will be shown to users. Maximum length: 50 |
body.expand | array | Optional | Specifies which fields in the response should be expanded. |
body.expand[] | string | Each item | Maximum length: 5000 |
body.jurisdiction | string | Optional | The jurisdiction for the tax rate. You can use this label field for tax reporting purposes. It also appears on your customer’s invoice. Maximum length: 50 |
body.metadata | JSON | Optional | Set of [key-value pairs](https://docs.stripe.com/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Individual keys can be unset by posting an empty value to them. All keys can be unset by posting an empty value to `metadata`. |
body.metadata (anyOf 1) | object | Alternative | Additional keys: see wildcard field |
body.metadata (anyOf 1).* | string | Additional keys | |
body.metadata (anyOf 2) | string | Alternative | One of: |
body.state | string | Optional | [ISO 3166-2 subdivision code](https://en.wikipedia.org/wiki/ISO_3166-2), without country prefix. For example, “NY” for New York, United States. Maximum length: 5000 |
body.tax_type | string | Optional | The high-level tax type, such as `vat` or `sales_tax`. One of: amusement_tax, communications_tax, digital_excise_tax, gst, hst, igst, jct, lease_tax, mass_transit_parking_tax, parking_tax, pst, qst, retail_delivery_fee, rst, sales_tax, service_tax, utility_users_tax, vat |
Response
Section titled “Response”Response media type: application/json. The table describes the pinned successful response. Referenced models link to their complete fields.
| Field | Type | Presence | Description and constraints |
|---|---|---|---|
$ | Model | Root | Expand Create a tax rate — response body |
Referenced models: Create a tax rate — response body
Schemas
Section titled “Schemas”Create a tax rate — response body
| Field | Type | Presence | Description and constraints |
|---|---|---|---|
$ | object | Root | Tax rates can be applied to [invoices](/invoicing/taxes/tax-rates), [subscriptions](/billing/taxes/tax-rates) and [Checkout Sessions](/payments/checkout/use-manual-tax-rates) to collect tax. Related guide: [Tax rates](/billing/taxes/tax-rates) |
active | boolean | Required within parent | Defaults to `true`. When set to `false`, this tax rate cannot be used with new applications or Checkout Sessions, but will still work for subscriptions and invoices that already have it set. |
country | JSON | Optional | |
country (anyOf 1) | string | Alternative | Two-letter country code ([ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)). Maximum length: 5000 |
country (anyOf 2) | null | Alternative | |
created | JSON | Required within parent | |
created (anyOf 1) | integer | Alternative | Time at which the object was created. Measured in seconds since the Unix epoch. Format: unix-time |
created (anyOf 2) | string | Alternative | Pattern: ^-?[0-9]+(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?$ |
description | JSON | Optional | |
description (anyOf 1) | string | Alternative | An arbitrary string attached to the tax rate for your internal use only. It will not be visible to your customers. Maximum length: 5000 |
description (anyOf 2) | null | Alternative | |
display_name | string | Required within parent | The display name of the tax rates as it will appear to your customer on their receipt email, PDF, and the hosted invoice page. Maximum length: 5000 |
effective_percentage | JSON | Optional | |
effective_percentage (anyOf 1) | JSON | Alternative | |
effective_percentage (anyOf 1) (anyOf 1) | number | Alternative | Actual/effective tax rate percentage out of 100. For tax calculations with automatic_tax[enabled]=true, this percentage reflects the rate actually used to calculate tax based on the product's taxability and whether the user is registered to collect taxes in the corresponding jurisdiction. |
effective_percentage (anyOf 1) (anyOf 2) | string | Alternative | Pattern: ^-?[0-9]+(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?$ |
effective_percentage (anyOf 2) | null | Alternative | |
flat_amount | JSON | Optional | |
flat_amount (anyOf 1) | JSON | Alternative | The amount of the tax rate when the `rate_type` is `flat_amount`. Tax rates with `rate_type` `percentage` can vary based on the transaction, resulting in this field being `null`. This field exposes the amount and currency of the flat tax rate. |
flat_amount (anyOf 1) (anyOf 1) | Model | Alternative | Expand Create a tax rate — response body — flat amount value amount, currency |
flat_amount (anyOf 2) | null | Alternative | |
id | string | Required within parent | Unique identifier for the object. Maximum length: 5000 |
inclusive | boolean | Required within parent | This specifies if the tax rate is inclusive or exclusive. |
jurisdiction | JSON | Optional | |
jurisdiction (anyOf 1) | string | Alternative | The jurisdiction for the tax rate. You can use this label field for tax reporting purposes. It also appears on your customer’s invoice. Maximum length: 5000 |
jurisdiction (anyOf 2) | null | Alternative | |
jurisdiction_level | JSON | Optional | |
jurisdiction_level (anyOf 1) | string | Alternative | The level of the jurisdiction that imposes this tax rate. Will be `null` for manually defined tax rates. Known values: city, country, county, district, multiple, state |
jurisdiction_level (anyOf 2) | null | Alternative | |
livemode | boolean | Required within parent | If the object exists in live mode, the value is `true`. If the object exists in test mode, the value is `false`. |
metadata | JSON | Optional | |
metadata (anyOf 1) | object | Alternative | Set of [key-value pairs](https://docs.stripe.com/api/metadata) that you can attach to an object. This can be useful for storing additional information about the object in a structured format. Additional keys: see wildcard field |
metadata (anyOf 1).* | string | Additional keys | Maximum length: 500 |
metadata (anyOf 2) | null | Alternative | |
object | string | Required within parent | String representing the object's type. Objects of the same type share the same value. Known values: tax_rate |
percentage | JSON | Required within parent | |
percentage (anyOf 1) | number | Alternative | Tax rate percentage out of 100. For tax calculations with automatic_tax[enabled]=true, this percentage includes the statutory tax rate of non-taxable jurisdictions. |
percentage (anyOf 2) | string | Alternative | Pattern: ^-?[0-9]+(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?$ |
rate_type | JSON | Optional | |
rate_type (anyOf 1) | string | Alternative | Indicates the type of tax rate applied to the taxable amount. This value can be `null` when no tax applies to the location. This field is only present for TaxRates created by Stripe Tax. Known values: flat_amount, percentage |
rate_type (anyOf 2) | null | Alternative | |
state | JSON | Optional | |
state (anyOf 1) | string | Alternative | [ISO 3166-2 subdivision code](https://en.wikipedia.org/wiki/ISO_3166-2), without country prefix. For example, "NY" for New York, United States. Maximum length: 5000 |
state (anyOf 2) | null | Alternative | |
tax_type | JSON | Optional | |
tax_type (anyOf 1) | string | Alternative | The high-level tax type, such as `vat` or `sales_tax`. Known values: amusement_tax, communications_tax, digital_excise_tax, gst, hst, igst, jct, lease_tax, mass_transit_parking_tax, parking_tax, pst, qst, retail_delivery_fee, rst, sales_tax, service_tax, utility_users_tax, vat |
tax_type (anyOf 2) | null | Alternative |
Referenced models: Create a tax rate — response body — flat amount value amount, currency
Create a tax rate — response body — flat amount value amount, currency
| Field | Type | Presence | Description and constraints |
|---|---|---|---|
$ | object | Root | The amount of the tax rate when the `rate_type`` is `flat_amount`. Tax rates with `rate_type` `percentage` can vary based on the transaction, resulting in this field being `null`. This field exposes the amount and currency of the flat tax rate. |
amount | JSON | Required within parent | |
amount (anyOf 1) | integer | Alternative | Amount of the tax when the `rate_type` is `flat_amount`. This positive integer represents how much to charge in the smallest currency unit (e.g., 100 cents to charge $1.00 or 100 to charge ¥100, a zero-decimal currency). The amount value supports up to eight digits (e.g., a value of 99999999 for a USD charge of $999,999.99). |
amount (anyOf 2) | string | Alternative | Pattern: ^-?[0-9]+(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?$ |
currency | string | Required within parent | Three-letter ISO currency code, in lowercase. Maximum length: 5000 |
Policy, approvals and errors
Section titled “Policy, approvals and errors”SDK function policy ID: stripe.posttaxratestaxrate. Catalog operation: PostTaxRatesTaxRate. Rules can name either ID; function rules distinguish managed calls and conservatively cover raw calls sharing the route. Existing grant permissions and policy rules apply. wait() returns an immediate result or waits for a required approval; it never approves the request itself. Persist the approval ID to resume after a restart.
Provider errors retain their response; JSON decoding raises ProviderAPIError for provider failures. ManagedOperationError identifies contract/input/retention errors. See error handling and provider-specific behavior. Sensitive input may be refused before approval storage. A decoding error never resubmits a write.
Pinned headers: {"Stripe-Version": "2026-09-30.endive"}