> 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 Customer Attribute

PUT https://api.bigcommerce.com/stores/{store_hash}/v3/customers/attributes
Content-Type: application/json

Updates a Customer Attribute. Multiple customer attributes can be updated in one call.

**Required Fields**
* id -- ID of the *Customer Attribute*

Once the data type is set, it can not be changed. The attribute will need to be deleted then created again with the new data type. This will also delete it from the customer.

**Limits**
* Limit of 3 concurrent requests.

Reference: https://docs.bigcommerce.com/developer/api-reference/rest/admin/management/customers/v3/attributes/update-customers-attributes

## Authentication

- `X-Auth-Token` header (required) — ### OAuth scopes | UI Name | Permission | Parameter | |:--------|:-----------|:----------| | Customers | modify | `store_v2_customers` | | Customers | read-only | `store_v2_customers_read_only` | | Stored Payment Instruments | modify | `store_stored_payment_instruments` | | Stored Payment Instruments | read-only | `store_stored_payment_instruments_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, optional, default: application/json) — The MIME type of the response body that the client accepts. Typically `application/json`.

### Body (application/json)

This endpoint expects a list of attribute_Put.

- `list of attribute_Put`

## Response

### 200

A list of customer attributes.

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

## Errors

### 422 Unprocessable Entity Error

The `Attribute` was not valid. This is the result of missing required fields, or of invalid data. See the response for more details.

- `status` (integer, optional) — The HTTP status code.
- `title` (string, optional) — The error title describing the particular error.
- `type` (string, optional) — A link to a list of BigCommerce API status codes.
- `instance` (string, optional)
- `errors` (ErrorResponseErrors, optional)

## Types

### attribute_Put

Once the data type is set, it can not be changed. The attribute will need to be deleted then created again with the new data type. This will also delete it from the customer.

- `name` (string, required) — Attribute name.
- `id` (integer, required) — Attribute ID.

### CustomersAttributesPutResponsesContentApplicationJsonSchemaDataItems

- `name` (string, required) — Attribute name.
- `type` (enum, required) — Attribute type should match one of: string, number, date.
  - Allowed values: `string`, `number`, `date`
- `id` (integer, required) — Attribute ID.
- `date_modified` (datetime, optional) — The date on which the customer attribute was modified.
- `date_created` (datetime, optional) — The date of which the customer attribute was created.

### MetaOpen

Response metadata.

### ErrorResponseErrors

## Examples

**Request**

```json
[
  {
    "name": "string",
    "id": 1
  }
]
```

**Response**

```json
{
  "data": [
    {
      "name": "Age",
      "type": "string",
      "id": 1,
      "date_modified": "2018-11-14T16:46:23Z",
      "date_created": "2018-11-13T21:42:06Z"
    }
  ],
  "meta": {}
}
```

**SDK Code**

```python response
import requests

url = "https://api.bigcommerce.com/stores/store_hash/v3/customers/attributes"

payload = [
    {
        "name": "string",
        "id": 1
    }
]
headers = {
    "X-Auth-Token": "<apiKey>",
    "Content-Type": "application/json"
}

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

print(response.json())
```

```javascript response
const url = 'https://api.bigcommerce.com/stores/store_hash/v3/customers/attributes';
const options = {
  method: 'PUT',
  headers: {'X-Auth-Token': '<apiKey>', 'Content-Type': 'application/json'},
  body: '[{"name":"string","id":1}]'
};

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

```go response
package main

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

func main() {

	url := "https://api.bigcommerce.com/stores/store_hash/v3/customers/attributes"

	payload := strings.NewReader("[\n  {\n    \"name\": \"string\",\n    \"id\": 1\n  }\n]")

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

	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 response
require 'uri'
require 'net/http'

url = URI("https://api.bigcommerce.com/stores/store_hash/v3/customers/attributes")

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

request = Net::HTTP::Put.new(url)
request["X-Auth-Token"] = '<apiKey>'
request["Content-Type"] = 'application/json'
request.body = "[\n  {\n    \"name\": \"string\",\n    \"id\": 1\n  }\n]"

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

```java response
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/customers/attributes")
  .header("X-Auth-Token", "<apiKey>")
  .header("Content-Type", "application/json")
  .body("[\n  {\n    \"name\": \"string\",\n    \"id\": 1\n  }\n]")
  .asString();
```

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

$client = new \GuzzleHttp\Client();

$response = $client->request('PUT', 'https://api.bigcommerce.com/stores/store_hash/v3/customers/attributes', [
  'body' => '[
  {
    "name": "string",
    "id": 1
  }
]',
  'headers' => [
    'Content-Type' => 'application/json',
    'X-Auth-Token' => '<apiKey>',
  ],
]);

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

```csharp response
using RestSharp;

var client = new RestClient("https://api.bigcommerce.com/stores/store_hash/v3/customers/attributes");
var request = new RestRequest(Method.PUT);
request.AddHeader("X-Auth-Token", "<apiKey>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "[\n  {\n    \"name\": \"string\",\n    \"id\": 1\n  }\n]", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift response
import Foundation

let headers = [
  "X-Auth-Token": "<apiKey>",
  "Content-Type": "application/json"
]
let parameters = [
  [
    "name": "string",
    "id": 1
  ]
] as [String : Any]

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

let request = NSMutableURLRequest(url: NSURL(string: "https://api.bigcommerce.com/stores/store_hash/v3/customers/attributes")! 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()
```