> ## Documentation Index
> Fetch the complete documentation index at: https://docs.weav.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Update customer

> Requires a token with the external-api:write ability. id string required Format: uuid . email string Format: email . first_name string | null last_name string | null phone string | null locale string | null country string | null region string | null Maximum length: 10. city string | null Maximum…

```http
PUT https://api.weav.com/v1/customers/{id}
```

Requires a token with the `external-api:write` ability.

## Path parameters

<ParamField path="id" type="string" required>
Format: `uuid`.
</ParamField>

## Body

<ParamField body="email" type="string">
Format: `email`.
</ParamField>

<ParamField body="first_name" type="string | null">

</ParamField>

<ParamField body="last_name" type="string | null">

</ParamField>

<ParamField body="phone" type="string | null">

</ParamField>

<ParamField body="locale" type="string | null">

</ParamField>

<ParamField body="country" type="string | null">

</ParamField>

<ParamField body="region" type="string | null">
Maximum length: 10.
</ParamField>

<ParamField body="city" type="string | null">
Maximum length: 64.
</ParamField>

<ParamField body="timezone" type="string | null">
Maximum length: 64.
</ParamField>

<ParamField body="language" type="string | null">
Maximum length: 35.
</ParamField>

<ParamField body="company_id" type="string | null">
Format: `uuid`.
</ParamField>

## Request

<CodeGroup>

```bash cURL
curl --request PUT \
  --url 'https://api.weav.com/v1/customers/{id}' \
  --header "Authorization: Bearer ${WEAV_API_TOKEN}" \
  --header 'Content-Type: application/json' \
  --data '{
  "email": "user@example.com",
  "first_name": "string",
  "last_name": "string",
  "phone": "string",
  "locale": "string",
  "country": "string",
  "region": "string",
  "city": "string",
  "timezone": "string",
  "language": "string",
  "company_id": "9b2f6c1e-3d4a-4f5b-8c7d-1e2f3a4b5c6d"
}'
```

```js JavaScript
const body = {
  "email": "user@example.com",
  "first_name": "string",
  "last_name": "string",
  "phone": "string",
  "locale": "string",
  "country": "string",
  "region": "string",
  "city": "string",
  "timezone": "string",
  "language": "string",
  "company_id": "9b2f6c1e-3d4a-4f5b-8c7d-1e2f3a4b5c6d"
};
const response = await fetch("https://api.weav.com/v1/customers/{id}", {
  method: "PUT",
  headers: {
    Authorization: `Bearer ${process.env.WEAV_API_TOKEN}`,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify(body)
});
console.log(await response.json());
```

```python Python
import os
import requests

headers = {"Authorization": f"Bearer {os.environ['WEAV_API_TOKEN']}"}
body = {"email": "user@example.com", "first_name": "string", "last_name": "string", "phone": "string", "locale": "string", "country": "string", "region": "string", "city": "string", "timezone": "string", "language": "string", "company_id": "9b2f6c1e-3d4a-4f5b-8c7d-1e2f3a4b5c6d"}
response = requests.put("https://api.weav.com/v1/customers/{id}", headers=headers, json=body)
print(response.json())
```

```php PHP
use GuzzleHttp\Client;

$client = new Client();
$response = $client->request('PUT', 'https://api.weav.com/v1/customers/{id}', [
    'headers' => ['Authorization' => 'Bearer '.getenv('WEAV_API_TOKEN')],
    'json' => array (
  'email' => 'user@example.com',
  'first_name' => 'string',
  'last_name' => 'string',
  'phone' => 'string',
  'locale' => 'string',
  'country' => 'string',
  'region' => 'string',
  'city' => 'string',
  'timezone' => 'string',
  'language' => 'string',
  'company_id' => '9b2f6c1e-3d4a-4f5b-8c7d-1e2f3a4b5c6d',
),
]);
echo $response->getBody();
```

</CodeGroup>

## Response

<CodeGroup>

```json 200 OK
{
    "id": "9b2f6c1e-3d4a-4f5b-8c7d-1e2f3a4b5c6d",
    "first_name": "John",
    "last_name": "Doe",
    "email": "john@example.com",
    "phone": "string",
    "locale": "en",
    "country": "string",
    "region": "string",
    "city": "string",
    "timezone": "string",
    "language": "string",
    "company_id": "9b2f6c1e-3d4a-4f5b-8c7d-1e2f3a4b5c6d",
    "avatar_url": "https://example.com",
    "first_seen_at": "2026-01-01T00:00:00Z",
    "last_seen_at": "2026-01-01T00:00:00Z",
    "created_at": "2026-01-01T00:00:00Z",
    "updated_at": "2026-01-01T00:00:00Z"
}
```

</CodeGroup>

- `400` Bad Request
- `404` Not Found
- `401` Unauthorized

## Response fields

<ParamField body="id" type="string">
Format: `uuid`.
</ParamField>

<ParamField body="first_name" type="string | null">

</ParamField>

<ParamField body="last_name" type="string | null">

</ParamField>

<ParamField body="email" type="string">
Format: `email`.
</ParamField>

<ParamField body="phone" type="string | null">

</ParamField>

<ParamField body="locale" type="string | null">

</ParamField>

<ParamField body="country" type="string | null">

</ParamField>

<ParamField body="region" type="string | null">

</ParamField>

<ParamField body="city" type="string | null">

</ParamField>

<ParamField body="timezone" type="string | null">

</ParamField>

<ParamField body="language" type="string | null">

</ParamField>

<ParamField body="company_id" type="string | null">
Format: `uuid`.
</ParamField>

<ParamField body="avatar_url" type="string | null">
Format: `url`.
</ParamField>

<ParamField body="first_seen_at" type="string | null">
Format: `date-time`.
</ParamField>

<ParamField body="last_seen_at" type="string | null">
Format: `date-time`.
</ParamField>

<ParamField body="created_at" type="string | null">
Format: `date-time`.
</ParamField>

<ParamField body="updated_at" type="string | null">
Format: `date-time`.
</ParamField>

---

This knowledge base is built and hosted on [Weav](https://weav.com).
