Clientes do Merchant
Navegue e inspecione os clientes do Merchant a partir do Dashboard, incluindo seus instrumentos de pagamento salvos e histórico de pedidos.
Esses endpoints dão suporte à tela de clientes do Dashboard para um único Merchant: listar pagadores com busca e filtros, abrir um deles para ver todos os detalhes e atualizar ou remover um registro.
Um cliente agrupa tudo o que um pagador possui dentro deste Merchant — instrumentos de pagamento salvos, pedidos e assinaturas. Os clientes nunca cruzam os limites de um Merchant, então a mesma pessoa comprando em dois dos seus Merchants é dois registros de cliente separados.
Esses endpoints alimentam a interface do Tokeflow Dashboard. Eles são autenticados por sessão (JWT bearer) — o token vem do login no Dashboard, não de uma chave de API sk_/pk_. As solicitações também carregam o header x-merchant-id, identificando o Merchant em contexto, e o usuário autenticado deve ser membro com acesso a ele.
O objeto cliente
Retornado pelos endpoints de listagem e recuperação desta página.
| Campo | Tipo | Descrição |
|---|---|---|
id | string | — |
organization_id | string | — |
merchant_id | string | — |
merchant_name | string | — |
name | string | null | Aceita null porque a coluna aceita. O serviço da Organization converte para '' ao montar seus literais, mas o Merchant Dashboard retorna a entidade via plainToInstance e, por isso, repassa um null real diretamente ao cliente — o que declarar este campo como string escondia, e que chegou à UI como um título de página vazio e uma confirmação "Deleting null". |
email | string | — |
phone | string | null | — |
document_type | string | null | — |
document_number | string | null | — |
metadata | object | null | — |
created_at | string | (ISO 8601 UTC). |
updated_at | string | (ISO 8601 UTC). |
deleted | boolean | Verdadeiro assim que o cliente tiver sido excluído. Clientes excluídos permanecem legíveis para fins de histórico, mas não podem ser usados em novas operações. |
payment_instruments | array | — |
linked_subscriptions | array | Assinaturas vinculadas (funcionalidade futura). |
linked_orders | array | — |
external_references | array | — |
Endpoints
GET/api/v1/merchant/customers
Auth: Dashboard session (JWT bearer). É necessário ser membro do Merchant.
Lista os clientes do Merchant.
Parâmetros de consulta
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
page | number | Não | Número da página (indexado a partir de 1). Padrão 1, mín. 1. |
limit | number | Não | Número de itens por página. Padrão 20, mín. 1, máx. 100. |
merchant_id | string | Não | Filtra por ID do Merchant |
search | string | Não | Busca por nome, e-mail ou ID do cliente |
start_date | string | Não | Data de início (ISO 8601) |
end_date | string | Não | Data de término (ISO 8601) |
Exemplo de solicitação
curl -G https://api.tokeflow.com/api/v1/merchant/customers \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…" \
-H "x-merchant-id: mrc_8a3f12d9" \
--data-urlencode "page=1" \
--data-urlencode "limit=20" \
--data-urlencode "merchant_id=mrc_8a3f12d9" \
--data-urlencode "search=string"DELETE/api/v1/merchant/customers/:id
Auth: Dashboard session (JWT bearer). É necessário ser membro do Merchant.
Exclui permanentemente um cliente. Cancela todas as assinaturas que ainda não estejam canceladas ou expiradas, revoga todos os métodos de pagamento salvos — removendo os dados do cartão armazenados — e então desativa o cliente. Isso não pode ser desfeito. O cliente continua disponível para consulta via GET /:id, de modo que seu histórico permanece revisável, mas ele sai da lista de clientes e não pode mais ser usado em novas operações, e seu e-mail volta a ficar disponível. Note que isso difere do DELETE na superfície de chave de API (/customers/:customerId), que em vez disso recusa com 409 quando um cliente tem qualquer histórico.
Parâmetros de caminho
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id | string | Sim | — |
Exemplo de solicitação
curl -X DELETE https://api.tokeflow.com/api/v1/merchant/customers/obj_1a2b3c4d \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…" \
-H "x-merchant-id: mrc_8a3f12d9"Exemplo de resposta — 200
{
"id": "cust_123",
"object": "customer",
"deleted": true
}GET/api/v1/merchant/customers/:id
Auth: Dashboard session (JWT bearer). É necessário ser membro do Merchant.
Obtém um cliente por ID.
Parâmetros de caminho
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id | string | Sim | — |
Exemplo de solicitação
curl https://api.tokeflow.com/api/v1/merchant/customers/obj_1a2b3c4d \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…" \
-H "x-merchant-id: mrc_8a3f12d9"Exemplo de resposta — 200
{
"id": "obj_1a2b3c4d",
"organization_id": "org_4b21e7c3",
"merchant_id": "mrc_8a3f12d9",
"merchant_name": "Acme Store",
"name": "Jane Buyer",
"email": "jane@example.com",
"phone": "+5511987654321",
"document_type": "12345678909",
"document_number": "12345678909",
"metadata": {},
"created_at": "2026-01-15T12:30:00.000Z",
"updated_at": "2026-01-15T12:30:00.000Z",
"deleted": false,
"payment_instruments": [
{
"id": "obj_1a2b3c4d",
"instrument_type": "standard",
"last4": "string",
"brand": "string",
"card_type": "standard",
"exp_month": 1,
"exp_year": 1,
"external_wallet_id": "string",
"status": "active",
"is_default": true,
"created_at": "2026-01-15T12:30:00.000Z"
}
],
"linked_subscriptions": [
{}
],
"linked_orders": [
{
"id": "obj_1a2b3c4d",
"status": "active",
"total_amount": 15000,
"currency": "BRL",
"created_at": "2026-01-15T12:30:00.000Z"
}
],
"external_references": [
{
"source_type": "standard",
"connector_name": "Acme Store",
"external_id": "string"
}
]
}PATCH/api/v1/merchant/customers/:id
Auth: Dashboard session (JWT bearer). É necessário ser membro do Merchant.
Atualiza um cliente.
Parâmetros de caminho
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id | string | Sim | — |
Campos da solicitação
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name | string | Não | — |
email | string | Não | — |
phone | string | Não | — |
document_type | string | Não | Um dos valores cpf, cnpj, passport, tax_id. |
document_number | string | Não | — |
Exemplo de solicitação
curl -X PATCH https://api.tokeflow.com/api/v1/merchant/customers/obj_1a2b3c4d \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…" \
-H "x-merchant-id: mrc_8a3f12d9" \
-H "Content-Type: application/json" \
-d '{
"name": "Acme Store",
"email": "jane@example.com",
"phone": "+5511987654321",
"document_type": "cpf",
"document_number": "12345678909"
}'Exemplo de resposta — 200
{
"id": "obj_1a2b3c4d",
"organization_id": "org_4b21e7c3",
"merchant_id": "mrc_8a3f12d9",
"merchant_name": "Acme Store",
"name": "Jane Buyer",
"email": "jane@example.com",
"phone": "+5511987654321",
"document_type": "12345678909",
"document_number": "12345678909",
"metadata": {},
"created_at": "2026-01-15T12:30:00.000Z",
"updated_at": "2026-01-15T12:30:00.000Z",
"deleted": false
}Erros
Os erros usam o envelope padrão. Os casos mais comuns aqui:
| HTTP | Significado |
|---|---|
400 | Parâmetros inválidos ou um estado que não permite esta operação. |
401 | Token de sessão do Dashboard ausente, expirado ou inválido. |
403 | Autenticado, mas o usuário autenticado não tem acesso a esta entidade. |
404 | O registro não existe ou não é visível para esta entidade. |