Skip to content

Clientes (API)

Un cliente representa a la persona a la que cobrarás dentro del proyecto. La forma habitual de crear un cliente es capturando su tarjeta con un : Zelta Pay tokeniza la tarjeta y crea el cliente automáticamente, emitiendo el webhook customer.created. También puedes crear clientes directamente por API y adjuntarles una tarjeta vaulteada.

Un cliente vaulteado es aquel que tiene una tarjeta almacenada de forma segura por el procesador activo de la cuenta (NMI o Emetec). El token registra qué procesador la guardó, de modo que todos los cobros posteriores se enrutan a ese mismo procesador. Solo los clientes vaulteados pueden ser cobrados con o suscritos con .

Todos los endpoints requieren tu API key de proyecto en el header X-API-Key.

Clientes de un proyecto con tarjeta en bóveda

El objeto cliente

Todos los endpoints de clientes devuelven el objeto cliente completo (crear, obtener y adjuntar vault bajo data.customer; listar bajo data.customers como arreglo, junto con total). Los campos ligados a la tarjeta (paymentProvider, customerVaultId, card*) son null hasta que el cliente queda vaulteado.

json
{
  "success": true,
  "data": {
    "customer": {
      "id": "1234567890",
      "projectId": "prj_1234567890abcdef",
      "name": "John Doe",
      "email": "[email protected]",
      "phone": "+50760000000",
      "status": "active",
      "paymentProvider": "nmi",
      "customerVaultId": "nmi_vault_abc123",
      "cardLast4": "1111",
      "cardBrand": "visa",
      "cardBin": "411111",
      "cardExp": "1028",
      "createdAt": "2026-06-04T00:00:00.000Z",
      "updatedAt": "2026-06-04T00:00:00.000Z"
    }
  },
  "message": "Customer created"
}
CampoTipoDescripción
idstringIdentificador único del cliente
projectIdstringProyecto al que pertenece el cliente
namestringNombre del cliente
emailstringCorreo del cliente
phonestring | nullTeléfono del cliente (null si no se envió)
statusstringactive o inactive
paymentProviderstring | nullProcesador que almacenó la tarjeta (nmi o emetec); null si aún no está vaulteado
customerVaultIdstring | nullId de la bóveda del procesador; null si aún no está vaulteado
cardLast4string | nullÚltimos 4 dígitos de la tarjeta (solo para mostrar)
cardBrandstring | nullMarca de la tarjeta (solo para mostrar)
cardBinstring | nullBIN de la tarjeta (solo para mostrar)
cardExpstring | nullVencimiento MMYY (solo para mostrar)
createdAtstringFecha de creación (ISO 8601)
updatedAtstringFecha de última actualización (ISO 8601)

Cobros vs. datos de tarjeta

Los campos card* son metadata de facturación solo para mostrar (para que tu software los almacene y los muestre al usuario). Los cobros siempre usan la referencia de la bóveda (customerVaultId), nunca los dígitos de la tarjeta.

Listar clientes

http
GET /v1/customers

Parámetros de consulta: paginación estándar (lim, off) más un filtro opcional status (active, inactive).

bash
curl "https://api-pay.zelta.dev/v1/customers?lim=10" \
  -H "X-API-Key: tu-api-key-de-proyecto"

Crear un cliente

http
POST /v1/customers

Cuerpo de la solicitud:

CampoTipoRequeridoDescripción
namestringNombre del cliente (1-120 caracteres)
emailstringCorreo del cliente (formato de email válido)
phonestringNoTeléfono del cliente (máx. 40 caracteres)
bash
curl -X POST https://api-pay.zelta.dev/v1/customers \
  -H "X-API-Key: tu-api-key-de-proyecto" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "John Doe",
    "email": "[email protected]",
    "phone": "+50760000000"
  }'

Un cliente creado así aún no tiene tarjeta almacenada. Para poder cobrarle debes adjuntarle una tarjeta vaulteada (ver abajo) o capturarla con un .

Obtener un cliente

http
GET /v1/customers/:id
bash
curl "https://api-pay.zelta.dev/v1/customers/1234567890" \
  -H "X-API-Key: tu-api-key-de-proyecto"

Adjuntar una tarjeta vaulteada

Asocia al cliente una tarjeta ya tokenizada por el procesador indicado, pasando el id de la bóveda (customerVaultId) que ese procesador devolvió al tokenizarla. Esto convierte al cliente en vaulteado y habilita cobros y suscripciones.

http
POST /v1/customers/:id/vault

Cuerpo de la solicitud:

CampoTipoRequeridoDescripción
customerVaultIdstringId de la bóveda que devolvió el procesador al tokenizar la tarjeta
paymentProviderstringNoProcesador que almacenó la tarjeta: nmi o emetec. Por defecto nmi
cardLast4stringNoÚltimos 4 dígitos de la tarjeta (solo para mostrar)
cardBrandstringNoMarca de la tarjeta (máx. 40 caracteres, solo para mostrar)
cardBinstringNoBIN de la tarjeta (6-8 dígitos, solo para mostrar)
cardExpstringNoVencimiento en formato MMYY (solo para mostrar)

Los campos card* son metadata de facturación solo para mostrar: los cobros siempre usan la referencia de la bóveda, nunca estos valores.

bash
curl -X POST https://api-pay.zelta.dev/v1/customers/1234567890/vault \
  -H "X-API-Key: tu-api-key-de-proyecto" \
  -H "Content-Type: application/json" \
  -d '{
    "paymentProvider": "nmi",
    "customerVaultId": "nmi_vault_abc123",
    "cardLast4": "1111",
    "cardBrand": "visa",
    "cardBin": "411111",
    "cardExp": "1028"
  }'

Las colecciones son solo tarjeta

El vaulteo solo aplica a tarjetas (NMI o Emetec). Yappy no puede almacenar una credencial, por lo que no puede usarse para crear clientes vaulteados.

Siguientes pasos

  • — captura la tarjeta y crea el cliente en un solo paso
  • — cobra a un cliente vaulteado
  • — suscribe a un cliente vaulteado a un plan
  • — el evento customer.created

Documentación oficial de Zelta