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:
- Valida o formato do
customerId(precisa seguir o padrãoprefixo_valor, ex.:cus_01hqzvabc). - Localiza o cliente que pertence à conta dona da
SelectKeyenviada. Você só enxerga clientes da sua própria conta (ou subconta). - Monta a resposta agregando, no mesmo objeto, as relações do cliente:
transactions[]— transações recentes (comamount,originalAmount,status,method);addresses[]— endereços cadastrados, com o endereço principal marcado porprimary;cards[]— cartões tokenizados (guardados de forma segura), expostos apenas pelos primeiros e últimos dígitos e por umfingerprint, nunca pelo número completo.
- 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âmetrosemail,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çalho | Obrigatório | Valor |
|---|---|---|
SelectKey | Sim | Sua 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âmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
customerId | string | Sim | ID 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
| Campo | Tipo | Descrição |
|---|---|---|
id | string | ID público do cliente (cus_...), opaco. |
firstName / lastName | string | Nome e sobrenome. |
email | string | E-mail principal. |
birthdate | string | Data de nascimento no formato YYYY-MM-DD (data, sem hora). |
gender | string | male, female ou other. |
available | boolean | Indica se o cliente está ativo/utilizável. |
delinquent | boolean | Indica inadimplência. |
externalReference | string | Sua referência de integração (ID do cliente no seu sistema). |
additionalEmails | array<string> | E-mails adicionais. |
metadata | object | Pares chave/valor livres que você associou ao cliente. |
geolocation | object | null | Dados de geolocalização (ex.: ipAddress, country); null quando não há. |
createdAt / updatedAt | string | Timestamps ISO 8601 UTC de criação e última atualização. |
document (objeto)
| Campo | Tipo | Descrição |
|---|---|---|
document.type | string | cpf, cnpj ou passport. |
document.number | string | Número do documento (apenas dígitos quando cpf/cnpj). |
telephone (objeto)
| Campo | Tipo | Descrição |
|---|---|---|
telephone.countryCode | string | Código do país (ex.: 55). |
telephone.areaCode | string | DDD (ex.: 11). |
telephone.number | string | Número do telefone. |
telephone.line | string | Linha completa concatenada (país + DDD + número), ex.: 5511999999999. Presente na leitura individual. |
transactions[] — transações recentes do cliente (projeção leve)
| Campo | Tipo | Descrição |
|---|---|---|
transactions[].id | string | ID da transação (tra_...). |
transactions[].amount | integer | Valor atual, em centavos. |
transactions[].originalAmount | integer | Valor original (antes de capturas/estornos parciais), em centavos. |
transactions[].status | string | Status da transação (ex.: approved). |
transactions[].method | string | Método de pagamento (ex.: credit). |
transactions[].createdAt / updatedAt | string | Timestamps ISO 8601 UTC. |
addresses[] — endereços do cliente
| Campo | Tipo | Descrição |
|---|---|---|
addresses[].id | string | ID do endereço (addr_...). |
addresses[].street | string | Logradouro. |
addresses[].number | string | Número. |
addresses[].complement | string | Complemento. |
addresses[].district | string | Bairro. |
addresses[].city | string | Cidade. |
addresses[].state | string | Estado/UF. |
addresses[].country | string | País (código ISO de 2 letras, ex.: BR). |
addresses[].postcode | string | CEP/código postal. |
addresses[].latitude / longitude | number | null | Coordenadas, quando disponíveis. |
addresses[].line | string | Endereço completo formatado em uma linha. |
addresses[].line1 / line2 / line3 | string | Linhas formatadas do endereço. |
addresses[].primary | boolean | true no endereço principal. |
addresses[].metadata | object | Metadados do endereço. |
addresses[].createdAt / updatedAt | string | Timestamps ISO 8601 UTC. |
cards[] — cartões tokenizados do cliente
| Campo | Tipo | Descrição |
|---|---|---|
cards[].id | string | ID do cartão (card_...). |
cards[].holderName | string | Nome impresso no cartão. |
cards[].brand | string | Bandeira (ex.: visa). |
cards[].firstDigits | string | 6 primeiros dígitos (BIN). |
cards[].lastDigits | string | 4 últimos dígitos. |
cards[].fingerprint | string | Impressão digital estável do cartão — útil para identificar o mesmo cartão sem expor o número. |
cards[].createdAt / updatedAt | string | Timestamps ISO 8601 UTC. |
merchant e _links
| Campo | Tipo | Descrição |
|---|---|---|
merchant.name | string | Nome do lojista dono do recurso. |
merchant.merchantId | string | ID do lojista (bus_...). |
merchant.isSubAccount | boolean | true se o recurso pertence a uma subconta. |
_links | object | Links 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.code | HTTP | Quando ocorre |
|---|---|---|
customerIdIsInvalid | 400 | O customerId não está no formato esperado (cus_...). |
unauthorized | 401 | SelectKey ausente, inválida ou revogada. |
forbidden | 403 | Autenticado, mas sem permissão para acessar este cliente. |
customerNotFound / customerIdNotFound | 404 | Não existe cliente com esse ID na sua conta. |
customerReadNotProcessable | 422 | A leitura não pôde ser processada por uma regra de negócio. |
tooManyRequests | 429 | Limite de requisições excedido — respeite error.retryAfterMinutes e use backoff. |
serverError | 500 | Erro 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,addressesecards; faça oGETindividual quando precisar deles. - Converta dinheiro só na exibição.
transactions[].amountvem 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
fingerprintdo cartão para reconhecer o mesmo cartão entre transações sem manipular o número real. - Use
_linkspara navegar. Em vez de montar URLs à mão para atualizar ou excluir, siga ohrefe omethodque vêm em_links. - Diferencie 400 de 404 no tratamento de erro, conforme o aviso acima.
Veja também
- Visão geral de Clientes — o modelo do objeto e o ciclo de vida do recurso.
- Listar clientes — busca por e-mail, documento, nome e referência externa, com paginação.
- Criar cliente e Atualizar cliente — operações de escrita.
- Excluir cliente — remoção do recurso.
- Convenções · Autenticação · Tratamento de Erros · Proibição de Polling
How is this guide?