SelectwinDOCS
Clientes

Consultar um cliente

Recupera a ficha completa de um cliente pelo seu ID público (cus...), incluindo dados pessoais, documento, telefone, e-mails adicionais, metadados e as relações vinculadas (transações recentes, endere

Recupera a ficha completa de um cliente pelo seu ID público (cus_...), incluindo dados pessoais, documento, telefone, e-mails adicionais, metadados e as relações vinculadas (transações recentes, endereços e cartões tokenizados). Use quando precisar exibir um perfil, sincronizar um cliente com o seu CRM ou conferir os dados antes de criar uma cobrança.

GET /v1/customers/{customerId}

Como funciona

Esta é uma operação de leitura: ela não altera nada no servidor, é segura para repetir quantas vezes quiser (idempotente por natureza) e devolve o objeto completo do cliente — diferente da listagem, que retorna uma projeção leve de cada cliente (só os campos principais, sem as relações).

Ao receber a requisição, a API:

  1. Valida o formato do customerId (precisa seguir o padrão prefixo_valor, ex.: cus_01hqzvabc).
  2. Localiza o cliente que pertence à conta dona da SelectKey enviada. Você só enxerga clientes da sua própria conta (ou subconta).
  3. Monta a resposta agregando, no mesmo objeto, as relações do cliente:
    • transactions[] — transações recentes (com amount, originalAmount, status, method);
    • addresses[] — endereços cadastrados, com o endereço principal marcado por primary;
    • cards[] — cartões tokenizados (guardados de forma segura), expostos apenas pelos primeiros e últimos dígitos e por um fingerprint, nunca pelo número completo.
  4. Inclui o bloco merchant (quem é o lojista dono do recurso) e o bloco _links (links HATEOAS — atalhos prontos com a URL e o método de cada próxima ação possível: atualizar, excluir, listar etc.).

Leve vs. completo

Na listagem, cada item de data[] é uma versão enxuta: por exemplo, telephone e document aparecem como string única e as relações (transactions, addresses, cards) não vêm. Quando precisar desses detalhes, faça um GET no cliente individual — é exatamente o que esta página descreve.

Quando usar (e quando não usar)

Use quando você já tem o id do cliente e precisa do registro completo: tela de perfil, atendimento de suporte, conferência de endereço/contato antes do checkout, ou sincronização pontual.

Não use para:

  • Buscar por e-mail, documento, nome ou referência externa — você ainda não tem o id. Para isso use a listagem com filtros (parâmetros email, document, name, externalreference).
  • Varrer todos os clientes em lote — pagine pela listagem.
  • Detectar mudanças de estado (ex.: cliente ficou delinquent) por checagem repetida. A API proíbe polling; assine eventos de webhook para ser notificado. Veja Proibição de Polling.

Requisição

Headers

CabeçalhoObrigatórioValor
SelectKeySimSua chave de API. Produção começa com sl_live_; sandbox com sl_test_. Nunca use Authorization: Bearer/Basic.

Por ser um GET sem corpo, não há Content-Type nem X-Idempotency-Key aqui. Veja Autenticação e Convenções.

Parâmetro de caminho

ParâmetroTipoObrigatórioDescrição
customerIdstringSimID público do cliente, no formato cus_... (ex.: cus_01hqzvabc). Trate-o como opaco: nunca o construa nem faça parsing.

Exemplo curl

curl https://api.selectwin.io/v1/customers/cus_01hqzvabc \
  -H "SelectKey: sl_live_aBcDeFgHiJkLmNoPqRsTuVwXyZ"

Resposta

200 OK — o corpo é o objeto completo do cliente. Valores monetários (ex.: transactions[].amount) são inteiros em centavos (5000 = R$ 50,00) e todos os timestamps são ISO 8601 em UTC (sufixo Z).

{
  "id": "cus_01hqzvabc",
  "firstName": "João",
  "lastName": "Silva",
  "email": "[email protected]",
  "birthdate": "1990-05-15",
  "gender": "male",
  "document": {
    "type": "cpf",
    "number": "12345678901"
  },
  "telephone": {
    "countryCode": "55",
    "areaCode": "11",
    "number": "999999999",
    "line": "5511999999999"
  },
  "available": true,
  "delinquent": false,
  "externalReference": "CRM-98765",
  "additionalEmails": [
    "[email protected]"
  ],
  "metadata": {
    "source": "website"
  },
  "updatedAt": "2026-04-12T17:56:33.000Z",
  "createdAt": "2026-04-10T09:15:25.000Z",
  "geolocation": null,
  "transactions": [
    {
      "id": "tra_01hqzvabc",
      "amount": 5000,
      "originalAmount": 5000,
      "status": "approved",
      "method": "credit",
      "updatedAt": "2026-04-12T17:56:33.000Z",
      "createdAt": "2026-04-12T17:56:33.000Z"
    }
  ],
  "addresses": [
    {
      "id": "addr_01hqzvabc",
      "street": "Av. Paulista",
      "number": "1000",
      "complement": "Sala 1",
      "district": "Bela Vista",
      "city": "São Paulo",
      "state": "SP",
      "country": "BR",
      "postcode": "01310100",
      "latitude": null,
      "longitude": null,
      "line": "Av. Paulista, 1000 - Bela Vista, São Paulo - SP, 01310100",
      "line1": "Av. Paulista, 1000",
      "line2": "Bela Vista",
      "line3": "São Paulo - SP",
      "primary": true,
      "metadata": {},
      "updatedAt": "2026-04-12T17:56:33.000Z",
      "createdAt": "2026-04-12T17:56:33.000Z"
    }
  ],
  "cards": [
    {
      "id": "card_01hqzvabc",
      "holderName": "JOÃO SILVA",
      "brand": "visa",
      "firstDigits": "411111",
      "lastDigits": "1111",
      "fingerprint": "fp_a1b2c3d4",
      "updatedAt": "2026-04-12T17:56:33.000Z",
      "createdAt": "2026-04-12T17:56:33.000Z"
    }
  ],
  "merchant": {
    "name": "Seller Name",
    "merchantId": "bus_1234567890",
    "isSubAccount": false
  },
  "_links": {
    "self": {
      "href": "https://api.selectwin.io/v1/customers/cus_01hqzvabc",
      "method": "GET",
      "description": "Read a customer."
    },
    "create": {
      "href": "https://api.selectwin.io/v1/customers",
      "method": "POST",
      "description": "Create a new customer."
    },
    "update": {
      "href": "https://api.selectwin.io/v1/customers/cus_01hqzvabc",
      "method": "PUT",
      "description": "Update the customer."
    },
    "delete": {
      "href": "https://api.selectwin.io/v1/customers/cus_01hqzvabc",
      "method": "DELETE",
      "description": "Delete the customer."
    },
    "list": {
      "href": "https://api.selectwin.io/v1/customers",
      "method": "GET",
      "description": "List all customers."
    }
  }
}

Campos da resposta

Dados do cliente

CampoTipoDescrição
idstringID público do cliente (cus_...), opaco.
firstName / lastNamestringNome e sobrenome.
emailstringE-mail principal.
birthdatestringData de nascimento no formato YYYY-MM-DD (data, sem hora).
genderstringmale, female ou other.
availablebooleanIndica se o cliente está ativo/utilizável.
delinquentbooleanIndica inadimplência.
externalReferencestringSua referência de integração (ID do cliente no seu sistema).
additionalEmailsarray<string>E-mails adicionais.
metadataobjectPares chave/valor livres que você associou ao cliente.
geolocationobject | nullDados de geolocalização (ex.: ipAddress, country); null quando não há.
createdAt / updatedAtstringTimestamps ISO 8601 UTC de criação e última atualização.

document (objeto)

CampoTipoDescrição
document.typestringcpf, cnpj ou passport.
document.numberstringNúmero do documento (apenas dígitos quando cpf/cnpj).

telephone (objeto)

CampoTipoDescrição
telephone.countryCodestringCódigo do país (ex.: 55).
telephone.areaCodestringDDD (ex.: 11).
telephone.numberstringNúmero do telefone.
telephone.linestringLinha completa concatenada (país + DDD + número), ex.: 5511999999999. Presente na leitura individual.

transactions[] — transações recentes do cliente (projeção leve)

CampoTipoDescrição
transactions[].idstringID da transação (tra_...).
transactions[].amountintegerValor atual, em centavos.
transactions[].originalAmountintegerValor original (antes de capturas/estornos parciais), em centavos.
transactions[].statusstringStatus da transação (ex.: approved).
transactions[].methodstringMétodo de pagamento (ex.: credit).
transactions[].createdAt / updatedAtstringTimestamps ISO 8601 UTC.

addresses[] — endereços do cliente

CampoTipoDescrição
addresses[].idstringID do endereço (addr_...).
addresses[].streetstringLogradouro.
addresses[].numberstringNúmero.
addresses[].complementstringComplemento.
addresses[].districtstringBairro.
addresses[].citystringCidade.
addresses[].statestringEstado/UF.
addresses[].countrystringPaís (código ISO de 2 letras, ex.: BR).
addresses[].postcodestringCEP/código postal.
addresses[].latitude / longitudenumber | nullCoordenadas, quando disponíveis.
addresses[].linestringEndereço completo formatado em uma linha.
addresses[].line1 / line2 / line3stringLinhas formatadas do endereço.
addresses[].primarybooleantrue no endereço principal.
addresses[].metadataobjectMetadados do endereço.
addresses[].createdAt / updatedAtstringTimestamps ISO 8601 UTC.

cards[] — cartões tokenizados do cliente

CampoTipoDescrição
cards[].idstringID do cartão (card_...).
cards[].holderNamestringNome impresso no cartão.
cards[].brandstringBandeira (ex.: visa).
cards[].firstDigitsstring6 primeiros dígitos (BIN).
cards[].lastDigitsstring4 últimos dígitos.
cards[].fingerprintstringImpressão digital estável do cartão — útil para identificar o mesmo cartão sem expor o número.
cards[].createdAt / updatedAtstringTimestamps ISO 8601 UTC.

merchant e _links

CampoTipoDescrição
merchant.namestringNome do lojista dono do recurso.
merchant.merchantIdstringID do lojista (bus_...).
merchant.isSubAccountbooleantrue se o recurso pertence a uma subconta.
_linksobjectLinks HATEOAS (self, create, update, delete, list) com href, method e description.

Por que cards[] nunca traz o número completo

Os cartões são tokenizados: o número real (PAN) é guardado de forma segura e nunca retorna pela API. Você recebe firstDigits + lastDigits (para exibir algo como 4111 11•• •••• 1111) e o fingerprint, que serve para reconhecer o mesmo cartão entre transações sem manusear dados sensíveis.

Erros

A API responde erros com um envelope padrão cujo identificador estável é error.code — sempre trate pelo code, nunca pela message. Veja Tratamento de Erros e o Catálogo de Códigos de Erro.

error.codeHTTPQuando ocorre
customerIdIsInvalid400O customerId não está no formato esperado (cus_...).
unauthorized401SelectKey ausente, inválida ou revogada.
forbidden403Autenticado, mas sem permissão para acessar este cliente.
customerNotFound / customerIdNotFound404Não existe cliente com esse ID na sua conta.
customerReadNotProcessable422A leitura não pôde ser processada por uma regra de negócio.
tooManyRequests429Limite de requisições excedido — respeite error.retryAfterMinutes e use backoff.
serverError500Erro interno — tente novamente; se persistir, contate o suporte.

Exemplo de 404 (cliente inexistente):

{
  "error": {
    "code": "customerNotFound",
    "statusCode": 404,
    "category": "client",
    "message": "Customer not found."
  }
}

ID inválido vs. inexistente

customerIdIsInvalid (400) significa que a string do ID está malformada — você nem chegou a consultar um cliente. customerNotFound (404) significa que o formato é válido, mas nenhum cliente com esse ID existe na sua conta. Trate os dois de formas diferentes na sua aplicação.

Boas práticas

  • Trate o ID como opaco. Guarde a string cus_... inteira; não a construa nem dependa do seu tamanho. Veja Convenções.
  • Não use leitura repetida para detectar mudanças. Para saber quando um cliente muda, assine webhooks — polling é proibido e desperdiça seu limite de requisições.
  • Não dependa da lista para detalhes. A listagem omite transactions, addresses e cards; faça o GET individual quando precisar deles.
  • Converta dinheiro só na exibição. transactions[].amount vem em centavos; divida por 100 apenas para mostrar ao usuário.
  • Mascare dados sensíveis na interface. Ao exibir documento ou cartão, mostre apenas o necessário (ex.: últimos dígitos) e respeite a proteção de dados pessoais (LGPD).
  • Aproveite o fingerprint do cartão para reconhecer o mesmo cartão entre transações sem manipular o número real.
  • Use _links para navegar. Em vez de montar URLs à mão para atualizar ou excluir, siga o href e o method que vêm em _links.
  • Diferencie 400 de 404 no tratamento de erro, conforme o aviso acima.

Veja também

How is this guide?

On this page