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

# Create tax group

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

## Request

- Base URL: `https://api.brex.com`
- URL: `https://api.brex.com/v3/accounting/integration/{integration_id}/tax-groups`
- 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-groups/post.ts> (a function with typed inputs; its response is checked against the schema)

Create a tax group for a non-native integration from existing tax codes 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

- CreateTaxGroupRequest
  - `name` string, required: Name of the tax group. Reserved names ("Not Eligible", "Custom") are rejected
  - `subsidiary_ids` string[], required: Subsidiaries to enable this group for on creation
  - `tax_code_ids` string[], required: The Brex IDs of the existing tax codes to include in this group

## Response `201`

Tax group created

- TaxGroup
  - `brex_id` string, required: The internal Brex ID of the tax group
  - `name` string, required: Human-readable name of the tax group
  - `subsidiaries` TaxSubsidiary[], required: Per-subsidiary enablement, one entry per subsidiary with a setting for this group
    - `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
  - `tax_codes` TaxGroupTaxCode[], required: The member tax codes contained in this group
    - `brex_id` string, required: The internal Brex ID of the member tax code
    - `name` string, required: Human-readable name of the member tax code
    - `rate` number, nullable: Tax rate as a percentage (e.g. 20 for 20%). 0 is zero-rated; null is exempt
    - `updated_at` string, date-time, required: The last updated timestamp of the member tax code
  - `updated_at` string, date-time, required: The last updated timestamp of the tax group

## Other responses

- `400`: Bad request (e.g. reserved name, unknown tax code)
- `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-groups/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)
