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

# Atualizar cliente

> Atualiza os dados de um cliente. Só os campos enviados mudam, e o endereço é substituído por inteiro.

`PATCH /customers/:id`

Faz parte do recurso [Clientes](/pt-BR/customers) — o objeto e o que o torna único estão lá.

Todos os campos são opcionais: **só o que você envia muda**, o resto fica como está. A resposta traz
o cliente já atualizado, e o `updatedAt` é sempre reescrito, mesmo que nenhum valor tenha mudado de
fato.

<Note>
  **Apesar do verbo, o corpo é parcial.** Enviar `{ "phone": "..." }` altera só o telefone — nome,
  e-mail e documento continuam intactos. Não existe forma de limpar um campo obrigatório: mandar
  `null` em `name`, `email`, `document`, `documentType`, `phone` ou `type` responde **400**.
</Note>

<Warning>
  **O endereço é substituído por inteiro, não mesclado.** O objeto `address` exige as oito chaves —
  enviar `{ "address": { "city": "Rio de Janeiro" } }` responde **400**, e não uma atualização só da
  cidade. Para mudar uma linha do endereço, envie o bloco completo com os demais valores repetidos;
  as chaves que você não souber vão como `null`.

  Omitir `address` é diferente de enviá-lo: omitido, o endereço atual é preservado.
</Warning>

<Warning>
  **Documento e e-mail continuam únicos na atualização.** Apontar para um valor que já pertence a
  outro cliente da sua conta responde **409**, não `400` — é conflito com um cadastro existente. O
  formato do erro está em [Erros](/pt-BR/erros).
</Warning>

## Exemplo

```bash theme={null}
curl -X PATCH https://api.sandbox.z2pay.com/v1/customers/cust_g5kcy5ueag2hatims8e5qx7g6 \
  -H "x-api-key: SUA_CHAVE_DE_SANDBOX" \
  -H "Content-Type: application/json" \
  -d '{
    "phone": "+5511988887777",
    "address": {
      "street": "Avenida Paulista",
      "number": "1000",
      "complement": null,
      "neighborhood": "Bela Vista",
      "city": "São Paulo",
      "state": "SP",
      "postalCode": "01310100",
      "country": "BR"
    }
  }'
```

```json theme={null}
{
  "id": "cust_g5kcy5ueag2hatims8e5qx7g6",
  "name": "Maria Silva",
  "email": "maria.silva@example.com",
  "type": "individual",
  "documentType": "cpf",
  "document": "12345678909",
  "phone": "+5511988887777",
  "address": {
    "street": "Avenida Paulista",
    "number": "1000",
    "complement": null,
    "neighborhood": "Bela Vista",
    "city": "São Paulo",
    "state": "SP",
    "postalCode": "01310100",
    "country": "BR"
  },
  "createdAt": "2026-06-24T14:30:00.000Z",
  "updatedAt": "2026-08-05T11:02:44.000Z"
}
```


## OpenAPI

````yaml openapi/psp.json PATCH /customers/{id}
openapi: 3.0.3
info:
  title: Z2Pay PSP API
  version: 1.0.0
  description: API pública do PSP — autenticação via API Key (Credential)
servers:
  - url: https://api.sandbox.z2pay.com/v1
    description: Sandbox
  - url: https://api.z2pay.com/v1
    description: Produção
security: []
tags:
  - name: Cards
    description: Cartões salvos de um cliente
  - name: Chargebacks
    description: Gerenciamento de chargebacks
  - name: Customers
    description: Gerenciamento de clientes (compradores)
  - name: Fees
    description: Tabela de taxas da conta (pix, boleto, cartão, saque, refund, chargeback)
  - name: Recipients
    description: Gerenciamento de recebedores (sellers/merchants que recebem repasses)
  - name: Refunds
    description: Gerenciamento de reembolsos e estornos
  - name: Splits
    description: Regras de divisão do valor de uma venda entre recebedores
  - name: Transactions
    description: Gerenciamento de transações e payments
  - name: Wallets
    description: Saldo, extrato e resumo da carteira de um recebedor, agrupados por moeda
  - name: Webhooks
    description: Configuração, gerenciamento e histórico de entregas de webhooks
  - name: Withdrawals
    description: Solicitação e acompanhamento de saques (payouts) por recipient
paths:
  /customers/{id}:
    patch:
      tags:
        - Customers
      summary: Atualizar cliente
      description: Atualiza os dados de um cliente. Só os campos enviados mudam.
      operationId: CustomerController_update
      parameters:
        - name: id
          in: path
          required: true
          description: ID do cliente
          schema:
            type: string
        - name: Idempotency-Key
          in: header
          required: false
          description: Chave única para garantir idempotência da requisição
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  minLength: 2
                email:
                  type: string
                  format: email
                type:
                  type: string
                  enum:
                    - individual
                    - company
                document:
                  type: string
                  minLength: 6
                documentType:
                  type: string
                  enum:
                    - cpf
                    - cnpj
                    - passport
                  description: >-
                    Tipo do documento: `cpf`, `cnpj` ou `passport`. Obrigatório
                    quando `type` é `company`; em `individual`, omitir assume
                    `cpf`.
                phone:
                  type: string
                  minLength: 1
                address:
                  type: object
                  properties:
                    street:
                      type: string
                      nullable: true
                      description: Logradouro (rua, avenida).
                    number:
                      type: string
                      nullable: true
                      description: Número do endereço.
                    complement:
                      type: string
                      nullable: true
                      description: Complemento do endereço (apartamento, bloco, sala).
                    neighborhood:
                      type: string
                      nullable: true
                      description: Bairro.
                    city:
                      type: string
                      nullable: true
                      description: Cidade.
                    state:
                      type: string
                      nullable: true
                      description: 'Estado ou UF (ex.: SP).'
                    postalCode:
                      type: string
                      nullable: true
                      description: CEP / código postal (somente dígitos).
                    country:
                      type: string
                      nullable: true
                      description: 'País (código ISO 3166-1 alfa-2, ex.: BR).'
                  required:
                    - street
                    - number
                    - complement
                    - neighborhood
                    - city
                    - state
                    - postalCode
                    - country
      responses:
        '200':
          description: Cliente atualizado
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: string
                    description: Identificador único do registro.
                  name:
                    type: string
                    description: Nome do registro.
                  email:
                    type: string
                    description: E-mail de contato.
                  type:
                    type: string
                    description: >-
                      Tipo de lançamento (sale, refund, chargeback, withdrawal,
                      fee, etc)
                  document:
                    type: string
                    description: Documento (CPF ou CNPJ) do titular.
                  documentType:
                    type: string
                    description: 'Tipo de documento: cpf ou cnpj.'
                  phone:
                    type: string
                    description: Telefone de contato.
                  address:
                    type: object
                    nullable: true
                    properties:
                      street:
                        type: string
                        nullable: true
                        description: Logradouro (rua, avenida).
                      number:
                        type: string
                        nullable: true
                        description: Número do endereço.
                      complement:
                        type: string
                        nullable: true
                        description: Complemento do endereço (apartamento, bloco, sala).
                      neighborhood:
                        type: string
                        nullable: true
                        description: Bairro.
                      city:
                        type: string
                        nullable: true
                        description: Cidade.
                      state:
                        type: string
                        nullable: true
                        description: 'Estado ou UF (ex.: SP).'
                      postalCode:
                        type: string
                        nullable: true
                        description: CEP / código postal (somente dígitos).
                      country:
                        type: string
                        nullable: true
                        description: 'País (código ISO 3166-1 alfa-2, ex.: BR).'
                    description: Endereço do cliente.
                  createdAt:
                    type: string
                    format: date-time
                    description: Data e hora de criação do registro (ISO 8601).
                  updatedAt:
                    type: string
                    format: date-time
                    description: Data e hora da última atualização do registro (ISO 8601).
              example:
                id: cust_kyz6cwnbm55aax1lhxewn01o4
                name: Maria Oliveira
                email: maria.oliveira@example.com
                type: individual
                document: '12345678909'
                documentType: cpf
                phone: '+5511987654321'
                address:
                  street: Av. Paulista
                  number: '1578'
                  complement: Apto 142
                  neighborhood: Bela Vista
                  city: São Paulo
                  state: SP
                  postalCode: 01310-200
                  country: BR
                createdAt: '2025-06-29T13:45:30.000Z'
                updatedAt: '2025-06-29T13:45:30.000Z'
        '400':
          description: >-
            Requisição inválida — algum parâmetro ou campo do corpo não passou
            na validação
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        description: >-
                          Identificador estável do erro. É por ele que você deve
                          ramificar, não pela mensagem.
                      message:
                        type: string
                        description: >-
                          Descrição legível. Pode mudar sem aviso e não deve ser
                          usada em condicional.
                      issues:
                        type: array
                        description: >-
                          Um item por campo rejeitado. Nunca vem vazio: se há
                          400 de validação, há pelo menos um.
                        items:
                          type: object
                          properties:
                            path:
                              type: string
                              description: >-
                                Campo que falhou. Vem vazio quando o erro é do
                                corpo como um todo.
                            message:
                              type: string
                              description: O que há de errado com esse campo.
              example:
                error:
                  code: VALIDATION_ERROR
                  message: Validation failed
                  issues:
                    - path: status
                      message: >-
                        Status inválido. Valores aceitos: pending,
                        waiting_payment, paid, refused, canceled, refunded
                    - path: startDate
                      message: >-
                        Data deve ser ISO 8601 com timezone (ex.:
                        2026-06-24T00:00:00Z)
        '401':
          description: Chave de API ausente, malformada ou inválida
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        description: >-
                          Identificador estável do erro. É por ele que você deve
                          ramificar, não pela mensagem.
                      message:
                        type: string
                        description: >-
                          Descrição legível. Pode mudar sem aviso e não deve ser
                          usada em condicional.
              example:
                error:
                  code: UNAUTHORIZED
                  message: Invalid API key
        '404':
          description: Cliente não encontrado
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        description: >-
                          Identificador estável do erro. É por ele que você deve
                          ramificar, não pela mensagem.
                      message:
                        type: string
                        description: >-
                          Descrição legível. Pode mudar sem aviso e não deve ser
                          usada em condicional.
              example:
                error:
                  code: NOT_FOUND
                  message: Customer not found
        '409':
          description: >-
            Documento ou e-mail já cadastrado nesta conta (`error.code`), ou
            requisição concorrente com a mesma Idempotency-Key (`error` como
            texto)
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    description: >-
                      Mensagem do conflito de idempotência. Aqui `error` é
                      texto, não objeto — ramifique pelo status HTTP.
              example:
                error: A request with this idempotency key is already being processed
        '422':
          description: >-
            Idempotency-Key já usada com um corpo diferente. Use uma chave nova
            para uma operação diferente
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    description: >-
                      Mensagem do conflito de idempotência. Aqui `error` é
                      texto, não objeto — ramifique pelo status HTTP.
              example:
                error: Idempotency key already used with a different request body
      security:
        - apiKey: []
components:
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: x-api-key
      description: API Key da Credential (gerada no Backoffice)

````