Listar clientes
Recupera uma coleção paginada de clientes cadastrados na sua conta, com busca, filtros e ordenação. É o ponto de partida para telas administrativas, sincronização de CRM, relatórios e para encontrar o
Recupera uma coleção paginada de clientes cadastrados na sua conta, com busca, filtros e ordenação. É o ponto de partida para telas administrativas, sincronização de CRM, relatórios e para encontrar o id de um cliente quando você só conhece o e-mail, o documento ou a sua referência externa.
GET /v1/customers
Como funciona
O endpoint devolve um objeto paginado: em vez de despejar todos os clientes de uma vez, a API retorna uma "fatia" controlada por limit (tamanho da página) e offset (quantos registros pular). Junto vêm metadados de navegação (total, hasMore, page) e links HATEOAS (_links) para a próxima ação possível.
Pontos importantes do mecanismo:
- Projeção leve. Cada item em
data[]é uma versão resumida do cliente — só os campos mais usados para listar (nome, e-mail, documento, telefone, situação e timestamps). Campos pesados como endereços, cartões e transações não vêm na listagem. Para a ficha completa, use Consultar cliente com oidretornado aqui. - Filtros combinam com E (AND). Se você enviar
emailedocumentao mesmo tempo, só voltam clientes que casem com ambos. - Filtros de data. A família
daterange*filtra pelo campo de data do cliente (data de cadastro).daterangeisola um único dia; os sufixosgt/gte/lt/ltedefinem limites inferiores/superiores, exclusivos ou inclusivos. - Operação somente-leitura. Listar não altera nada, não consome idempotência e pode ser repetida à vontade (respeitando os limites de uso).
Quando usar (e quando não)
Use para encontrar clientes por critério (e-mail, documento, nome, referência externa), para alimentar listagens administrativas e para sincronização incremental por intervalo de datas.
Evite usar a listagem como banco de dados espelho: percorrer toda a base página a página em tempo real é caro e lento. Se você já tem o id, vá direto em Consultar cliente. Se você sincroniza um sistema externo, prefira filtrar por daterangegte a partir do último ponto sincronizado, em vez de varrer tudo.
Nota
Mudanças de estado dos recursos devem chegar até você por webhooks, não por varredura repetida desta lista. Veja a Proibição de polling.
Requisição
Headers
Resumo das Convenções:
| Cabeçalho | Uso |
|---|---|
SelectKey | Obrigatório — sua chave de API. Produção começa com sl_live_; sandbox com sl_test_. Veja Autenticação. |
Não há corpo de requisição neste endpoint, então Content-Type é dispensável.
Atenção
A autenticação é sempre pelo header SelectKey. Nunca use Authorization: Bearer ou Basic — não são aceitos.
Parâmetros de consulta (query)
Todos opcionais. Sem filtros, a API retorna a primeira página de todos os clientes.
| Parâmetro | Tipo | Descrição | Exemplo |
|---|---|---|---|
limit | integer (1–100) | Quantidade máxima de itens na página. | 20 |
offset | integer (≥ 0) | Quantos registros pular antes de começar a página. | 0 |
sort | string (ascending | descending) | Ordem dos resultados. | descending |
id | string (^[a-z]+_[A-Za-z0-9]+$) | Filtra por um id de cliente específico. | cus_01hqzvabc |
email | string | Filtra pelo e-mail do cliente. | [email protected] |
name | string | Busca pelo nome (parcial). | João |
telephoneline | string (apenas dígitos) | Filtra pela linha de telefone, só números, sem formatação. | 11999999999 |
document | string (apenas dígitos) | Filtra pelo número do documento, só dígitos. | 12345678901 |
externalreference | string | Filtra pela sua referência externa (externalReference). | CRM-REF-1 |
daterange | string (ISO 8601) | Isola um único dia: a API expande o valor para o início e o fim daquele dia. | 2026-01-01T00:00:00Z |
daterangegt | string (ISO 8601) | Limite inferior exclusivo: somente registros estritamente após o valor. | 2026-01-01T00:00:00Z |
daterangegte | string (ISO 8601) | Limite inferior inclusivo: registros no valor ou depois dele. | 2026-01-01T00:00:00Z |
daterangelt | string (ISO 8601) | Limite superior exclusivo: registros estritamente antes do valor. | 2026-01-01T00:00:00Z |
daterangelte | string (ISO 8601) | Limite superior inclusivo: registros no valor ou antes dele. | 2026-01-01T00:00:00Z |
Os nomes de filtro são minúsculos sem separador (
telephoneline,externalreference), mesmo que o campo correspondente no objeto seja camelCase (telephone.line,externalReference).
Exemplos curl
Primeira página, 20 itens, mais recentes primeiro:
curl "https://api.selectwin.io/v1/customers?limit=20&offset=0&sort=descending" \
-H "SelectKey: sl_live_aBcDeFgHiJkLmNoPqRsTuVwXyZ"Buscar por documento (encontrar o id a partir do CPF):
curl "https://api.selectwin.io/v1/customers?document=12345678901" \
-H "SelectKey: sl_live_aBcDeFgHiJkLmNoPqRsTuVwXyZ"Sincronização incremental: clientes cadastrados a partir de uma data:
curl "https://api.selectwin.io/v1/customers?daterangegte=2026-04-01T00:00:00Z&limit=100" \
-H "SelectKey: sl_live_aBcDeFgHiJkLmNoPqRsTuVwXyZ"Resposta
200 OK — objeto paginado. Cada item em data[] é uma projeção leve do cliente.
{
"offset": 0,
"limit": 20,
"total": 142,
"hasMore": true,
"page": {
"current": 1,
"total": 8,
"offset": { "first": 0, "prev": null, "next": 20, "last": 140 }
},
"data": [
{
"id": "cus_01hqzvabc",
"firstName": "João",
"lastName": "Silva",
"document": "12345678900",
"documentType": "cpf",
"email": "[email protected]",
"telephone": "5511987654321",
"delinquent": false,
"available": true,
"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",
"method": "GET",
"description": "List all customers."
},
"create": {
"href": "https://api.selectwin.io/v1/customers",
"method": "POST",
"description": "Create a new customer."
}
}
}Campos da página
| Campo | Tipo | Descrição |
|---|---|---|
offset | integer | Posição inicial usada nesta resposta. |
limit | integer | Tamanho máximo da página aplicado. |
total | integer | Total de registros que casam com os filtros. |
hasMore | boolean | true se ainda existem registros além desta página. |
page.current | integer | Número da página atual. |
page.total | integer | Total de páginas para os filtros atuais. |
page.offset.first / .prev / .next / .last | integer | null | Offsets prontos para navegar (prev/next podem ser null nos extremos). |
data | array | Clientes em projeção leve (campos abaixo). |
merchant | object | Identificação da conta (name, merchantId, isSubAccount). |
_links | object | Links HATEOAS (self, create). Veja Recursos. |
Campos de cada item em data[]
| Campo | Tipo | Descrição |
|---|---|---|
id | string | Identificador opaco do cliente (cus_…). Use-o nos demais endpoints. |
firstName | string | Nome. |
lastName | string | Sobrenome. |
document | string | Número do documento (somente dígitos). |
documentType | string | Tipo do documento (cpf, cnpj ou passport). |
email | string | E-mail principal. |
telephone | string | Linha de telefone completa (código do país + DDD + número). |
delinquent | boolean | Indica se o cliente está marcado como inadimplente. |
available | boolean | Indica se o cadastro está ativo/disponível. |
createdAt | string | Data de criação, ISO 8601 UTC. |
updatedAt | string | Data da última atualização, ISO 8601 UTC. |
Importante
Na listagem, document vem como string (só o número) e o tipo fica em documentType separado. Já na ficha completa (Read) o documento aparece como objeto aninhado (document.type, document.number). Endereços, cartões e transações não vêm na listagem — busque a ficha individual para tê-los.
Como paginar
- Comece com
offset=0e umlimit(ex.:100). - Processe
data[]. - Se
hasMorefortrue, façaoffset += limite repita; ou usepage.offset.nextdiretamente. - Pare quando
hasMoreforfalse.
Detalhes e exemplos em Paginação.
Erros
A resposta de erro usa o envelope padrão com error.code estável — trate sempre pelo code, nunca pela message. Veja Tratamento de erros e o Catálogo de códigos de erro.
error.code | HTTP | Quando ocorre |
|---|---|---|
invalidParameters | 400 | Parâmetro de query inválido (ex.: limit fora de 1–100, sort desconhecido, data malformada). Veja error.params. |
customerIdIsInvalid | 400 | Valor de id fora do formato esperado de ID de cliente. |
customerParametersInvalid | 400 | Combinação de filtros inválida para a busca de clientes. |
unauthorized | 401 | SelectKey ausente, inválida ou revogada. |
forbidden | 403 | Autenticado, mas sem permissão para listar clientes. |
customerReadNotProcessable | 422 | A consulta não pôde ser processada por 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 400 por limit inválido:
{
"error": {
"code": "invalidParameters",
"statusCode": 400,
"category": "validation",
"message": "Validation errors occurred.",
"params": [{ "limit": "limit must be an integer between 1 and 100" }]
}
}Boas práticas
- Filtre antes de paginar. Em bases grandes, sempre restrinja com
email,document,externalreferenceou um intervalo de datas — varrer tudo é lento e custa cota de requisições. - Use
daterangegtepara sincronizar. Guarde oupdatedAt/createdAtmais recente já processado e, na próxima rodada, filtre a partir dele, em vez de reler a coleção inteira. - Trate
data[]como resumo. Não tente extrair endereço, cartões ou transações daqui; busque a ficha individual em Read quando precisar dos detalhes. - IDs são opacos. Armazene a string
idinteira; não interprete o prefixo nem o comprimento. Veja Convenções. - Pagine com
hasMore/page.offset.next, não com cálculos próprios de "última página". - Respeite os limites de uso. Em
429, aplique backoff honrandoerror.retryAfterMinutes(veja API Limits). - Datas em UTC. Envie os filtros
daterange*em ISO 8601 com sufixoZ; converta para o fuso do usuário só na exibição.
Veja também
- Visão geral de Clientes — o objeto, seus estados e todas as operações.
- Criar cliente — cadastrar um novo cliente.
- Consultar cliente — a ficha completa a partir do
idencontrado aqui. - Atualizar cliente — alterar dados de um cliente da lista.
- Excluir cliente — remover um cliente.
- Paginação · Convenções · Autenticação · Catálogo de códigos de erro
How is this guide?