Clientes del Merchant
Explora e inspecciona los clientes del Merchant desde el Dashboard, incluyendo sus instrumentos de pago guardados y su historial de pedidos.
Estos endpoints respaldan la pantalla de clientes del Dashboard para un único Merchant: listar pagadores con búsqueda y filtros, abrir uno para ver todo su detalle y actualizar o eliminar un registro.
Un cliente agrupa todo lo que un pagador posee dentro de este Merchant — instrumentos de pago guardados, pedidos y suscripciones. Los clientes nunca cruzan los límites de un Merchant, por lo que la misma persona que compra en dos de tus Merchants son dos registros de cliente independientes.
Estos endpoints impulsan la interfaz del Tokeflow Dashboard. Están autenticados por sesión (JWT bearer) — el token proviene de iniciar sesión en el Dashboard, no de una clave de API sk_/pk_. Las solicitudes también incluyen el header x-merchant-id, que identifica al Merchant en contexto, y el usuario que inició sesión debe ser miembro con acceso a él.
El objeto cliente
Devuelto por los endpoints de listado y recuperación de esta página.
| Campo | Tipo | Descripción |
|---|---|---|
id | string | — |
organization_id | string | — |
merchant_id | string | — |
merchant_name | string | — |
name | string | null | Puede ser null porque la columna lo permite. El servicio de la Organization lo convierte a '' al construir sus literales, pero el Merchant Dashboard devuelve la entidad mediante plainToInstance y, por lo tanto, pasa un null real directamente al cliente — algo que declarar este campo como string ocultaba, y que llegó a la UI como un encabezado de página vacío y una confirmación "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 | Verdadero en cuanto el cliente haya sido eliminado. Los clientes eliminados permanecen legibles para el historial, pero no pueden usarse en nuevas operaciones. |
payment_instruments | array | — |
linked_subscriptions | array | Suscripciones vinculadas (funcionalidad futura). |
linked_orders | array | — |
external_references | array | — |
Endpoints
GET/api/v1/merchant/customers
Auth: Dashboard session (JWT bearer). Se requiere membresía del Merchant.
Lista los clientes del Merchant.
Parámetros de consulta
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
page | number | No | Número de página (indexado desde 1). Predeterminado 1, mín. 1. |
limit | number | No | Número de elementos por página. Predeterminado 20, mín. 1, máx. 100. |
merchant_id | string | No | Filtra por ID de Merchant |
search | string | No | Busca por nombre, correo electrónico o ID de cliente |
start_date | string | No | Fecha de inicio (ISO 8601) |
end_date | string | No | Fecha de fin (ISO 8601) |
Ejemplo de solicitud
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). Se requiere membresía del Merchant.
Elimina permanentemente un cliente. Cancela todas las suscripciones que aún no estén canceladas o vencidas, revoca todos los métodos de pago guardados — eliminando los datos de la tarjeta almacenados — y luego retira al cliente. Esto no se puede deshacer. El cliente sigue siendo recuperable mediante GET /:id, de modo que su historial permanece revisable, pero sale de la lista de clientes y ya no puede usarse para nuevas operaciones, y su correo electrónico vuelve a estar disponible. Ten en cuenta que esto difiere del DELETE en la superficie de clave de API (/customers/:customerId), que en su lugar rechaza con 409 cuando un cliente tiene algún historial.
Parámetros de ruta
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
id | string | Sí | — |
Ejemplo de solicitud
curl -X DELETE https://api.tokeflow.com/api/v1/merchant/customers/obj_1a2b3c4d \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…" \
-H "x-merchant-id: mrc_8a3f12d9"Ejemplo de respuesta — 200
{
"id": "cust_123",
"object": "customer",
"deleted": true
}GET/api/v1/merchant/customers/:id
Auth: Dashboard session (JWT bearer). Se requiere membresía del Merchant.
Obtiene un cliente por ID.
Parámetros de ruta
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
id | string | Sí | — |
Ejemplo de solicitud
curl https://api.tokeflow.com/api/v1/merchant/customers/obj_1a2b3c4d \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9…" \
-H "x-merchant-id: mrc_8a3f12d9"Ejemplo de respuesta — 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). Se requiere membresía del Merchant.
Actualiza un cliente.
Parámetros de ruta
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
id | string | Sí | — |
Campos de la solicitud
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
name | string | No | — |
email | string | No | — |
phone | string | No | — |
document_type | string | No | Uno de cpf, cnpj, passport, tax_id. |
document_number | string | No | — |
Ejemplo de solicitud
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"
}'Ejemplo de respuesta — 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
}Errores
Los errores usan el envoltorio estándar. Los casos más comunes aquí:
| HTTP | Significado |
|---|---|
400 | Parámetros inválidos o un estado que no permite esta operación. |
401 | Token de sesión del Dashboard ausente, expirado o inválido. |
403 | Autenticado, pero el usuario que inició sesión no tiene acceso a esta entidad. |
404 | El registro no existe o no es visible para esta entidad. |