---
title: "Create tax code"
method: POST
path: "/v3/accounting/integration/{integration_id}/tax-codes"
tags: ["Accounting VAT"]
---

# Create tax code

`POST /v3/accounting/integration/{integration_id}/tax-codes`

## Request

- Base URL: `https://api.brex.com`
- URL: `https://api.brex.com/v3/accounting/integration/{integration_id}/tax-codes`
- Auth: one of:
  - HTTP bearer
  - OAuth 2
    - Authorization code: `https://accounts-api.brex.com/oauth2/default/v1/authorize`
    - Token URL: `https://accounts-api.brex.com/oauth2/default/v1/token` scopes: `accounting.integration.write`
- TypeScript: <https://skmtc.dev/brex-com/apis/accounting-api/docs/v3/accounting/integration/:integration_id/tax-codes/post.ts> (a function with typed inputs; its response is checked against the schema)

Create a tax code for a non-native integration and enable it for the requested subsidiaries. Other subsidiaries default to DISABLED. Native ERP integrations are not eligible because their VAT configuration is owned by the ERP sync.

## Path parameters

- `integration_id` string, required

## Headers

- `Idempotency-Key` string

## Request body

- CreateTaxCodeRequest
  - `name` string, required: Name of the tax code. Reserved names ("Not Eligible", "Custom") are rejected
  - `rate` number, required: Tax rate as a percentage (e.g. 20 for 20%). Use 0 for zero-rated. Required on create
  - `remote_id` string: The tax code's identifier in the remote accounting system. Omit when the remote system has no identifier.
  - `subsidiary_ids` string[], required: Subsidiaries to enable this code for on creation

## Response `201`

Tax code created

- TaxCode
  - `brex_id` string, required: The internal Brex ID of the tax code
  - `name` string, required: Human-readable name of the tax code
  - `rate` number, nullable: Tax rate as a percentage (e.g. 20 for 20%). 0 is zero-rated; null is exempt
  - `remote_id` string, nullable: The tax code's identifier in the remote accounting system. Null when the caller did not provide one.
  - `subsidiaries` TaxSubsidiary[], required: Per-subsidiary enablement, one entry per subsidiary with a setting for this code
    - `status` 'ENABLED' | 'DISABLED', required: Whether the code/group is enabled for this subsidiary
    - `subsidiary_id` string, required: The internal Brex ID of the subsidiary
    - `subsidiary_name` string, required: Human-readable name of the subsidiary
  - `updated_at` string, date-time, required: The last updated timestamp of the tax code

## Other responses

- `400`: Bad request (e.g. reserved name, missing rate)
- `401`: The bearer token is missing or rejected.
- `403`: The token does not have a required scope.

## Changes

- **2026-11-06** `abca76caa09d`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/brex-com/apis/accounting-api/changes/v3/accounting/integration/:integration_id/tax-codes/post.md)

---

[API](https://skmtc.dev/brex-com/apis/accounting-api.md) - [All operations](https://skmtc.dev/brex-com/apis/accounting-api/llms.txt) - [OpenAPI document](https://skmtc.dev/brex-com/apis/accounting-api/revisions/abca76caa09d?raw)
