---
title: "Update a customer"
method: PATCH
path: "/customers/{customer_id}"
tags: ["Customers"]
---

# Update a customer

`PATCH /customers/{customer_id}`

## Request

- Base URL: `https://sandbox-api.paddle.com`
- URL: `https://sandbox-api.paddle.com/customers/{customer_id}`
- Auth: HTTP bearer

Updates a customer using its ID.

If successful, your response includes a copy of the updated customer entity.

## Path parameters

- `customer_id` string, required: Unique Paddle ID for this customer entity, prefixed with `ctm_`.

## Request body

- CustomerUpdate: Represents a customer entity when updating customers.
  - `name` string: Full name.
  - `email` string, email: Email address for this entity.
  - `marketing_consent` boolean: Whether this customer opted into marketing from you. `false` unless customers check the marketing consent box when using Paddle Checkout. Set automatically by Paddle.
  - `status` 'active' | 'archived': Whether this entity can be used in Paddle.
  - `custom_data` CustomData: Your own structured key-value data.
  - `locale` string: Valid IETF BCP 47 short form locale tag.
  - `import_meta` object, nullable: Import information for this entity. `null` if this entity is not imported.
    - `external_id` string: Reference or identifier for this entity from the provider where it was imported from.
    - `imported_from` string, required: Name of the platform or provider where this entity was imported from.

## Response `200`

The request has succeeded.

- object
  - `data` Customer, required: Represents a customer entity.
    - `id` string, required: Unique Paddle ID for this customer entity, prefixed with `ctm_`.
    - `name` string, required: Full name.
    - `email` string, email, required: Email address for this entity.
    - `marketing_consent` boolean, required: Whether this customer opted into marketing from you. `false` unless customers check the marketing consent box when using Paddle Checkout. Set automatically by Paddle.
    - `status` 'active' | 'archived', required: Whether this entity can be used in Paddle.
    - `custom_data` CustomData, required: Your own structured key-value data.
    - `locale` string, required: Valid IETF BCP 47 short form locale tag. If omitted, defaults to `en`.
    - `created_at` string, date-time, required: RFC 3339 datetime string of when this entity was created. Set automatically by Paddle.
    - `updated_at` string, date-time, required: RFC 3339 datetime string of when this entity was updated. Set automatically by Paddle.
    - `import_meta` object, nullable, required: Import information for this entity. `null` if this entity is not imported.
      - `external_id` string: Reference or identifier for this entity from the provider where it was imported from.
      - `imported_from` string, required: Name of the platform or provider where this entity was imported from.
  - `meta` Meta, required: Information about this response.
    - `request_id` string, required: Unique ID for the request relating to this response. Provide this when contacting Paddle support about a specific request.

## Other responses

- `default`: An unexpected error response.

## Changes

- **2026-07-09** (v1) `e1ac347eb3c5`: 1 breaking
  - added the pattern `^ctm_[a-z\d]{26}$` to the `path` request parameter `customer_id`
- **2026-02-02** (v1) `9ba8be0f2006`: 19 breaking, 1 warning, 35 info
  - added the new path request parameter `customer_id`
  - request body became required
  - added `#/components/schemas/Email` to the `email` request property `allOf` list
  - removed `#/components/schemas/custom_data, subschema #2` from the `custom_data` request property `oneOf` list
  - …51 more
- **2025-04-25** (v1) `c4b1322e66ca`: 2 breaking
  - the `email` request property's maxLength was decreased to `320`
  - the `email` request property's minLength was increased from `0` to `1`
- **2025-03-07** (v1) `a3359d7731fd`: 7 breaking, 5 info
  - the request property `import_meta/oneOf[subschema #1: ImportMeta]/external_id` became not nullable
  - the `import_meta/oneOf[subschema #1: ImportMeta]/external_id` request property type changed from `string, null` to no type
  - the `data/import_meta/oneOf[subschema #1: ImportMeta]/external_id` response property's maxLength was unset from `200` for the response status `200`
  - the `data/import_meta/oneOf[subschema #1: ImportMeta]/external_id` response property's minLength was decreased from `1` to `0` for the response status `200`
  - …8 more
- …earlier changes not shown

[Operation history](https://skmtc.dev/paddlehq/apis/paddle-api/changes/customers/:customer_id/patch.md)

---

[API](https://skmtc.dev/paddlehq/apis/paddle-api.md) - [All operations](https://skmtc.dev/paddlehq/apis/paddle-api/llms.txt) - [OpenAPI document](https://skmtc.dev/paddlehq/apis/paddle-api/revisions/bbc0c72039c8?raw)
