> This page is for Developer.

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.bigcommerce.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.bigcommerce.com/_mcp/server.

# Update Product Tax Properties

PUT https://api.bigcommerce.com/stores/{store_hash}/v3/tax/products/properties
Content-Type: application/json

Update the tax properties associated with one or more products. This operation will be additive to any tax property values already associated with the product, overwriting any existing tax property values.

Reference: https://docs.bigcommerce.com/developer/api-reference/rest/admin/management/tax/product-tax-properties/update-product-tax-properties

## Authentication

- `X-Auth-Token` header (required) — ### OAuth scopes | UI Name | Permission | Parameter | |:--------|:-----------|:----------| | Information & Settings | modify | `store_v2_information` | | Information & Settings | read-only | `store_v2_information_read_only` | ### Authentication header | Header | Argument | Description | |:-------|:---------|:------------| | `X-Auth-Token` | `access_token` | For more about API accounts that generate `access_token`s, see our [Guide to API Accounts](/developer/docs/overview/api-fundamentals/api-accounts#api-accounts). | ### Further reading For example requests and more information about authenticating BigCommerce APIs, see [Authentication and Example Requests](/developer/docs/overview/api-fundamentals/api-accounts#x-auth-token-header-example-requests). For more about BigCommerce OAuth scopes, see our [Guide to API Accounts](/developer/docs/overview/api-fundamentals/api-accounts#oauth-scopes). For a list of API status codes, see [API Status Codes](/developer/api-reference/rest/overview#rest-http-status-codes).

## Request

### Path parameters

- `store_hash` (string, required) — Permanent ID of the BigCommerce store.

### Headers

- `Accept` (string, required, default: application/json) — The [MIME type](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types) of the response body.

### Body (application/json)

This endpoint expects a list of ProductTaxProperty.

- `list of ProductTaxProperty`

## Response

### 200

OK

- `data` (list of ProductTaxProperty, optional)
- `meta` (MetaOpen, optional) — Response metadata.

## Errors

### 422 Unprocessable Entity Error

The request body does not meet specifications.

- `any`

## Types

### ProductTaxProperty

A collection of tax property values associated with a product.

- `product_id` (integer, required) — A reference to the product that the product tax properties are associated with.
- `tax_properties` (ProductTaxPropertyTaxProperties, required) — A simple key-value pairing. The tax property must be defined to associate a value. These values will be sent to the active tax provider during Tax Provider API operations whenever the associated product is included in the operation.

### MetaOpen

Response metadata.

### ProductTaxPropertyTaxProperties

A simple key-value pairing. The tax property must be defined to associate a value. These values will be sent to the active tax provider during Tax Provider API operations whenever the associated product is included in the operation.

## Examples

**Request**

```json
[
  {
    "product_id": 157,
    "tax_properties": {
      "A-123456789": "26",
      "B-6731789": "200"
    }
  }
]
```

**Response**

```json
{
  "data": [
    {
      "product_id": 157,
      "tax_properties": {
        "A-123456789": "26",
        "B-6731789": "200"
      }
    }
  ],
  "meta": {}
}
```

**SDK Code**

```python Example
import requests

url = "https://api.bigcommerce.com/stores/store_hash/v3/tax/products/properties"

payload = [
    {
        "product_id": 157,
        "tax_properties": {
            "A-123456789": "26",
            "B-6731789": "200"
        }
    }
]
headers = {
    "Accept": "application/json",
    "X-Auth-Token": "<apiKey>",
    "Content-Type": "application/json"
}

response = requests.put(url, json=payload, headers=headers)

print(response.json())
```

```javascript Example
const url = 'https://api.bigcommerce.com/stores/store_hash/v3/tax/products/properties';
const options = {
  method: 'PUT',
  headers: {
    Accept: 'application/json',
    'X-Auth-Token': '<apiKey>',
    'Content-Type': 'application/json'
  },
  body: '[{"product_id":157,"tax_properties":{"A-123456789":"26","B-6731789":"200"}}]'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Example
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.bigcommerce.com/stores/store_hash/v3/tax/products/properties"

	payload := strings.NewReader("[\n  {\n    \"product_id\": 157,\n    \"tax_properties\": {\n      \"A-123456789\": \"26\",\n      \"B-6731789\": \"200\"\n    }\n  }\n]")

	req, _ := http.NewRequest("PUT", url, payload)

	req.Header.Add("Accept", "application/json")
	req.Header.Add("X-Auth-Token", "<apiKey>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Example
require 'uri'
require 'net/http'

url = URI("https://api.bigcommerce.com/stores/store_hash/v3/tax/products/properties")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Put.new(url)
request["Accept"] = 'application/json'
request["X-Auth-Token"] = '<apiKey>'
request["Content-Type"] = 'application/json'
request.body = "[\n  {\n    \"product_id\": 157,\n    \"tax_properties\": {\n      \"A-123456789\": \"26\",\n      \"B-6731789\": \"200\"\n    }\n  }\n]"

response = http.request(request)
puts response.read_body
```

```java Example
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.put("https://api.bigcommerce.com/stores/store_hash/v3/tax/products/properties")
  .header("Accept", "application/json")
  .header("X-Auth-Token", "<apiKey>")
  .header("Content-Type", "application/json")
  .body("[\n  {\n    \"product_id\": 157,\n    \"tax_properties\": {\n      \"A-123456789\": \"26\",\n      \"B-6731789\": \"200\"\n    }\n  }\n]")
  .asString();
```

```php Example
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('PUT', 'https://api.bigcommerce.com/stores/store_hash/v3/tax/products/properties', [
  'body' => '[
  {
    "product_id": 157,
    "tax_properties": {
      "A-123456789": "26",
      "B-6731789": "200"
    }
  }
]',
  'headers' => [
    'Accept' => 'application/json',
    'Content-Type' => 'application/json',
    'X-Auth-Token' => '<apiKey>',
  ],
]);

echo $response->getBody();
```

```csharp Example
using RestSharp;

var client = new RestClient("https://api.bigcommerce.com/stores/store_hash/v3/tax/products/properties");
var request = new RestRequest(Method.PUT);
request.AddHeader("Accept", "application/json");
request.AddHeader("X-Auth-Token", "<apiKey>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "[\n  {\n    \"product_id\": 157,\n    \"tax_properties\": {\n      \"A-123456789\": \"26\",\n      \"B-6731789\": \"200\"\n    }\n  }\n]", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Example
import Foundation

let headers = [
  "Accept": "application/json",
  "X-Auth-Token": "<apiKey>",
  "Content-Type": "application/json"
]
let parameters = [
  [
    "product_id": 157,
    "tax_properties": [
      "A-123456789": "26",
      "B-6731789": "200"
    ]
  ]
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.bigcommerce.com/stores/store_hash/v3/tax/products/properties")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "PUT"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```