SelectwinDOCS
Clientes

Visão geral

O recurso Clientes (customer) representa as pessoas físicas ou jurídicas que compram de você ou interagem com a sua plataforma. Um cliente reúne identidade (nome, documento, e-mail, telefone), seus en

O recurso Clientes (customer) representa as pessoas físicas ou jurídicas que compram de você ou interagem com a sua plataforma. Um cliente reúne identidade (nome, documento, e-mail, telefone), seus endereços e cartões tokenizados, e serve de âncora para transações, assinaturas e relatórios. Esta página explica o modelo do objeto, o ciclo de vida e todas as operações disponíveis; cada operação tem sua própria página detalhada.

O que é um cliente

Em termos práticos, o cliente é o "cadastro" central de quem paga. Você normalmente o cria uma vez (no checkout, no onboarding ou ao importar seu CRM) e o reutiliza em cada cobrança. Guardar o id do cliente (cus_...) no seu sistema permite:

  • Cobrar de novo sem repedir os dados (cartões ficam vinculados ao cliente).
  • Consultar o histórico de transações daquele comprador.
  • Sincronizar seu CRM via externalReference e metadata.

Tokenizar significa substituir um dado sensível (como o número do cartão) por uma referência segura (um token). Os cartões aparecem no cliente apenas como card_... com bandeira e últimos dígitos — nunca o número completo.

O recurso segue as Convenções da API: campos em camelCase, IDs opacos no formato prefixo_valor, datas em ISO 8601 UTC e dinheiro sempre em centavos (inteiro). O prefixo de um cliente é sempre cus_.

Modelo do objeto

O exemplo abaixo é a forma completa retornada por uma leitura (GET /v1/customers/{customerId}). Os comentários explicam cada bloco — repare que transactions[] só aparece na leitura.

{
  "id": "cus_01hqzvabc",                  // ID opaco do cliente (prefixo cus_)
  "firstName": "João",
  "lastName": "Silva",
  "email": "[email protected]",
  "birthdate": "1990-05-15",              // data pura YYYY-MM-DD (sem hora)
  "gender": "male",                       // enum: male | female | other
  "document": {
    "type": "cpf",                        // enum: cpf | cnpj | passport
    "number": "12345678901"               // somente dígitos para cpf/cnpj
  },
  "telephone": {
    "countryCode": "55",
    "areaCode": "11",
    "number": "999999999",
    "line": "5511999999999"               // composto pela API (read-only)
  },
  "available": true,                      // cliente ativo/utilizável
  "delinquent": false,                    // marcado como inadimplente?
  "externalReference": "CRM-98765",       // sua referência no seu sistema
  "additionalEmails": [                   // e-mails extras (máx. 20)
    "[email protected]"
  ],
  "metadata": {                           // pares chave/valor livres (máx. 20)
    "source": "website"
  },
  "geolocation": null,                    // pode vir null
  "transactions": [                       // SÓ na leitura (read) — projeção leve
    {
      "id": "tra_01hqzvabc",
      "amount": 5000,                     // centavos = R$ 50,00
      "originalAmount": 5000,
      "status": "approved",
      "method": "credit",
      "updatedAt": "2026-04-12T17:56:33.000Z",
      "createdAt": "2026-04-12T17:56:33.000Z"
    }
  ],
  "addresses": [                          // endereços vinculados (ver Addresses)
    {
      "id": "addr_01hqzvabc",
      "street": "Av. Paulista",
      "number": "1000",
      "city": "São Paulo",
      "state": "SP",
      "country": "BR",
      "postcode": "01310100",
      "primary": true,
      "updatedAt": "2026-04-12T17:56:33.000Z",
      "createdAt": "2026-04-12T17:56:33.000Z"
    }
  ],
  "cards": [                              // cartões tokenizados (ver 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"
    }
  ],
  "updatedAt": "2026-04-12T17:56:33.000Z",
  "createdAt": "2026-04-10T09:15:25.000Z",
  "merchant": {                           // contexto do lojão dono da chave
    "name": "Seller Name",
    "merchantId": "bus_1234567890",
    "isSubAccount": false
  },
  "_links": { "self": { "href": "...", "method": "GET" } }  // HATEOAS (ver abaixo)
}

Campos principais

CampoTipoDescrição
idstringIdentificador opaco do cliente (cus_...). Trate como string; não faça parsing.
firstNamestringNome. Obrigatório ao criar.
lastNamestringSobrenome. Obrigatório ao criar.
emailstring (email)E-mail principal. Obrigatório ao criar.
birthdatestring (date)Data de nascimento no formato YYYY-MM-DD (sem hora).
genderstring (enum)Um de: male, female, other.
document.typestring (enum)Tipo do documento: cpf, cnpj ou passport.
document.numberstringNúmero do documento; somente dígitos quando o tipo é cpf/cnpj.
telephone.countryCodestringCódigo do país (dígitos), ex.: 55.
telephone.areaCodestringCódigo de área (dígitos), ex.: 11.
telephone.numberstringNúmero (dígitos).
telephone.linestringLinha completa montada pela API (read-only). Não envie na requisição.
availablebooleanIndica se o cliente está ativo/utilizável.
delinquentbooleanMarca de inadimplência derivada do histórico.
externalReferencestringReferência livre para casar com o seu sistema (ex.: ID do CRM).
additionalEmailsarray de stringE-mails secundários (máx. 20).
metadataobjectPares chave/valor livres (máx. 20 chaves; valores curtos, ≤256 chars).
geolocationobject | nullDados de geolocalização (ipAddress, country); pode vir null.
transactionsarrayHistórico resumido. Só presente na leitura (Read).
addressesarrayEndereços do cliente. Veja Addresses.
cardsarrayCartões tokenizados do cliente. Veja Cards.
merchantobjectContexto do lojista dono da SelectKey usada.
_linksobjectLinks HATEOAS para as ações possíveis sobre o recurso.
createdAt / updatedAtstring (date-time)Carimbos ISO 8601 UTC (...Z).

Importante

A forma da resposta varia por operação. Em Read você recebe transactions[] mais addresses[] e cards[] completos. Em Create/Update (PUT) o objeto vem completo, mas sem transactions. Em List cada item é uma projeção leve (campos achatados como documentType e telephone como string). Detalhes na seção de cada operação.

Ciclo de vida

Um cliente não tem uma máquina de estados com muitas transições; o que muda ao longo do tempo são suas flags (available, delinquent) e os recursos vinculados. O fluxo típico é:

  • Criação retorna o objeto já com available: true e delinquent: false.
  • Atualização com PUT substitui o conjunto de campos permitidos; com PATCH atualiza só o que você enviar.
  • delinquent e available são derivados pela plataforma (histórico de pagamentos, regras internas) — você lê esses campos, não os define manualmente.
  • Exclusão remove o cliente e retorna uma confirmação (deleted: true). Avalie as implicações antes — veja a página Excluir.

Operações

OperaçãoMétodo e caminhoResumo
CriarPOST /v1/customersCria um cliente. Retorna objeto completo com addresses[] e cards[] (sem transactions).
ConsultarGET /v1/customers/{customerId}Ficha completa, incluindo transactions[], addresses[] e cards[].
Atualizar (PUT)PUT /v1/customers/{customerId}Substitui o conjunto de campos permitidos de uma vez.
Atualizar (PATCH)PATCH /v1/customers/{customerId}Atualização parcial — só os campos enviados.
ListarGET /v1/customersLista paginada com busca e filtros (itens leves + merchant/_links).
ExcluirDELETE /v1/customers/{customerId}Remove o cliente e retorna confirmação.

Todas as chamadas exigem o cabeçalho de autenticação SelectKey e usam a base https://api.selectwin.io/v1.

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

Em produção a chave começa com sl_live_; em sandbox, com sl_test_. Nunca use Authorization: Bearer/Basic. Veja Autenticação.

Conceitos e relações

Documentos suportados

document.typeDescriçãoConteúdo de number
cpfPessoa física (Brasil)Somente dígitos (11)
cnpjPessoa jurídica (Brasil)Somente dígitos (14)
passportPassaporte (estrangeiros)Alfanumérico

Atenção

Para cpf e cnpj, envie number somente com dígitos (sem pontos, barras ou hífen). Por exemplo, "12345678901", não "123.456.789-01".

Telefone

Você envia o telefone em partes (countryCode, areaCode, number); a API devolve essas partes e o campo composto line (read-only). Não envie line na requisição.

externalReference e metadata

São os dois mecanismos para amarrar o cliente ao seu mundo: use externalReference para o identificador único do cliente no seu sistema (ideal para deduplicação via filtro na listagem) e metadata para anotações estruturadas (máximo 20 chaves; prefira valores curtos).

Cada resposta traz _links com as próximas ações possíveis (self, read, update, delete, list, create) já com href e method prontos. Em vez de montar URLs à mão, prefira seguir esses links. Veja Recursos.

Recursos relacionados

  • Endereços — endereços de cobrança/entrega vinculados ao cliente (addr_...).
  • Cartões — cartões tokenizados do cliente (card_...), reutilizáveis em cobranças.
  • Transações — pagamentos referenciam o cliente; aparecem resumidos em transactions[] na leitura.
  • Webhook Events — notificações em tempo real de mudanças. Reaja a elas em vez de fazer polling (veja Proibição de Polling).

Erros comuns do recurso

Trate sempre pelo error.code (estável), nunca pela message. Estes são os códigos específicos de Clientes; os transversais (401, 403, 422, 429, 500) valem para todos os recursos.

error.codeHTTPQuando ocorre
customerIdIsInvalid400O customerId informado não tem formato válido.
customerParametersInvalid400Parâmetros do cliente inválidos (veja error.params).
customerNotFound / customerIdNotFound404Não existe cliente com esse ID.
customerAlreadyExists409Já existe um cliente com aquele documento/e-mail.
customerCreateNotProcessable422Não foi possível criar o cliente (regra de negócio).
customerReadNotProcessable422Não foi possível ler o cliente.
customerDeleteNotProcessable422Não foi possível excluir o cliente.
unauthorized401SelectKey ausente, inválida ou revogada.
forbidden403Autenticado, mas sem permissão para a operação.
tooManyRequests429Limite de requisições excedido — respeite error.retryAfterMinutes.

Catálogo completo em Códigos de Erro; estrutura do envelope em Tratamento de Erros.

Boas práticas

  • Guarde o id do cliente (cus_...) no seu sistema e trate-o como string opaca; é a chave para cobrar de novo e consultar histórico.
  • Deduplique antes de criar. Antes de um POST, filtre a listagem por email, document ou externalreference para evitar customerAlreadyExists (409).
  • Use externalReference para o ID do seu CRM e metadata para anotações — assim você correlaciona os dois sistemas sem campos paralelos.
  • Envie documentos só com dígitos (cpf/cnpj) e lembre-se do tipo passport para clientes estrangeiros.
  • Não dependa da forma de um endpoint em outro. Se precisa de transactions[], faça o Read; a listagem e o create/update não trazem esse campo.
  • Use X-Idempotency-Key nas criações para evitar clientes duplicados em caso de retentativa de rede (veja Idempotência).
  • Reaja a webhooks para saber de mudanças em vez de ficar relendo o cliente em laço.
  • Resolva concorrência pelo updatedAt. Em atualizações simultâneas, compare o updatedAt antes de sobrescrever para não perder edições.

Veja também

How is this guide?

On this page