Customers
INGALCA Pay maneja una capa de customers delgada y deliberadamente no-CRM. Sirve para:
- Evitar colisiones cross-tenant en los sandboxes compartidos de los proveedores.
- Tener una vista por cliente en el dashboard (cards, pagos asociados, último contacto).
- Filtrar pagos y webhooks por cliente.
No reemplaza tu CRM — los datos canónicos de tus clientes viven en tu app.
Cómo se identifica un customer
| ID | Quién lo conoce | Para qué |
|---|---|---|
external_id | Vos | Tu identificador del cliente en tu app (ej. user_42). String libre. |
public_id | INGALCA Pay y proveedores | cust_xxxxxxxx. Nuestro ID interno; lo mandamos a Dinelco/Bancard. |
id numérico | Solo nuestro DB | No expuesto. |
Cuando pasás customer.customerId al crear un pago o tarjeta, ese es tu external_id. Nosotros resolvemos el public_id correspondiente y se lo mandamos al proveedor.
Auto-create
No hay endpoint para crear customers explícitamente. Se crean automáticamente cuando:
- Hacés
POST /v1/paymentsconcustomer.customerId. - Hacés
POST /v1/cardsconcustomer.customerId.
La primera vez que mandás un external_id nuevo, se crea el customer. Las veces siguientes, se reutiliza y se actualizan los campos last_seen_* (último nombre, email, teléfono que mandaste).
Scoping por entorno
El UNIQUE es (tenant_id, environment, external_id). Esto significa:
- Podés tener
user_42en test yuser_42en live como customers distintos. - Otros tenants pueden usar
user_42sin colisionar con vos.
Endpoints
GET /v1/customers — listar (cursor pagination, filtro por external_id)GET /v1/customers/{public_id} — detalleNO hay POST ni PATCH ni DELETE. Los customers son read-only desde la API; los datos se mantienen actualizados automáticamente al crear pagos/cards.
Por qué mandamos public_id a los proveedores
Imaginá: dos comercios distintos del gateway, ambos con un cliente identificado como user_1 en sus respectivos sistemas. Si le mandáramos a Dinelco directamente user_1 como customerId, ambos comercios estarían pisándose en el mismo namespace de Dinelco. Dinelco vería un solo “cliente” con dos historiales mezclados.
Mandando cust_xxxxxxxx (único globalmente), cada cliente de cada comercio tiene su identidad limpia en Dinelco, sin importar qué external_id use el comercio.
Dashboard
En el dashboard tenés:
- Sección
/customerscon listado y búsqueda. - Drawer del customer con tabs Pagos y Cards asociados.
- Filtro por customer en
/payments,/webhooksy/cards.
El customer aparece con un hint persistente recordando que es capa referencial, no CRM.