POSThttps://api.veriko.mx/v1/beneficiaries

Crear un beneficiario

Audiencia
public
Autenticación
API key
Permiso
beneficiaries:create
Guía de uso →

Registra una cuenta beneficiaria nueva. El tipo de cuenta se autodetecta por la longitud, y de eso depende qué campos se envían en la petición:

  • CLABE (18 dígitos): bank_code es opcional, se deriva del prefijo.
  • Tarjeta (16 dígitos): bank_code es opcional, se deriva del BIN.
  • Celular/DiMo (10 dígitos): bank_code es obligatorio en el cuerpo, ya que el número por sí solo no identifica a la institución bancaria.

Si la cuenta a registrar no existe previamente, se registra y responde con un estado HTTP 201.

Si se intenta registrar una cuenta activa, responde con un estado HTTP 422 (con beneficiary_already_registered en el cuerpo).

Si existe pero está archivada, el alta la reactiva y responde con un estado HTTP 200 (con meta.reactivated=true en el cuerpo). Si la petición no trae label, la reactivación conserva el alias que la cuenta ya tenía; si lo trae, lo reemplaza.

Parámetros
ParámetroTipoObligatorioDescripción
account_numberstring (patrón)obligatorio

Número de cuenta. Se aceptan: CLABE (18 dígitos), tarjeta (16 dígitos) o celular/DiMo (10 dígitos). Los separadores, espacios y guiones se eliminan.

p. ej. 012180004412345678
bank_codestring (patrón)opcional

Código SPEI (4 o 5 dígitos). Obligatorio cuando el tipo detectado es phone; ignorado para CLABE y tarjeta.

p. ej. 40012
labelstring (?–100)opcional

Etiqueta opcional con la que la cuenta se identifica en la lista de beneficiarios.

p. ej. Proveedor ABC
Petición
curl -X POST 'https://api.veriko.mx/v1/beneficiaries' \
  -H 'Authorization: Bearer veriko_••••' \
  -H 'Content-Type: application/json' \
  -d '{
    "account_number": "4111111111111111",
    "label": "Tarjeta BBVA nómina"
  }'

Ejemplo en Python — próximamente.

Ejemplo en JavaScript — próximamente.

Ejemplo en PHP — próximamente.

Respuesta 2xxCreateBeneficiaryResponse
CampoTipoDescripción
dataobject

Payload principal de la respuesta. La forma varía según el endpoint (objeto, array, o envelope JSON:API con type, id, attributes).

type*string

Tipo de recurso JSON:API. Siempre beneficiary.

p. ej. beneficiary
id*string

Identificador numérico del beneficiario en el sistema.

p. ej. 42
attributes*object

Datos canónicos del beneficiario: los de la cuenta y los del registro.

account_number*string

Número de cuenta almacenado: CLABE (18 dígitos), tarjeta (16 dígitos) o celular/DiMo (10 dígitos). Use account_type para desambiguar el tipo exacto.

p. ej. 012180004412345678
account_type*string

Tipo de cuenta: clabe (18 dígitos), card (16 dígitos) o phone (10 dígitos).

p. ej. clabe
bank_code*string

Código SPEI (5 dígitos) del banco resuelto. Es la cadena vacía ("") cuando la cuenta no tiene un banco conocido: una tarjeta cuyo BIN no está en el directorio. En ese caso bank_name trae un texto de relleno en el idioma de la petición.

p. ej. 40012
bank_name*string

Nombre oficial del banco, resuelto a partir de su bank_code. Con un bank_code vacío es un texto de relleno («BIN no reconocido (411111)»), que se traduce al idioma de la petición.

p. ej. BBVA MEXICO
labelstring | nullanulable

Etiqueta descriptiva libre del usuario. null cuando no fue asignada.

p. ej. Proveedor ABC
status*string

Estado del beneficiario. inactive si el beneficiario fue archivado. active si está en uso.

p. ej. active
created_at*string (date-time)

Fecha y hora, en ISO 8601 UTC, de creación.

p. ej. 2026-01-15T10:00:00Z
metaobject

Metadatos de la respuesta, incluyendo versión de la API, prefijo de ruta, identificador único de la petición y marca temporal del servidor en UTC.

versionstring

Versión de la API que procesó la petición.

p. ej. 1.47.0
api_versionstring

Versión del prefijo de ruta de la API (ej. v1).

p. ej. v1
request_idstring

Identificador único de la petición (hex).

p. ej. a1b2c3d4e5f66f5e4d3c2b1a
datetimeobject

Descriptor compañero presente en el bloque meta de cada respuesta (y en el meta del cuerpo de los webhooks salientes). Permite a los clientes afirmar el contrato de zona horaria sin releer el spec.

p. ej. {"timezone":"UTC","format":"ISO 8601"}
timezone*string

Siempre UTC: La zona canónica para cada campo datetime del cuerpo.

p. ej. UTC
format*string

Siempre ISO 8601: Sufijo Z explícito en cada datetime.

p. ej. ISO 8601
linksobject

Enlaces de paginación o relacionados, presentes solo cuando el endpoint devuelve una colección paginada.

Códigos de respuestaPOST /v1/beneficiaries
CódigoClaseDescripciónCuerpo
2002xxBeneficiario reactivado (existía en estado archivado para el mismo account_number). Incluye meta.reactivated=true.CreateBeneficiaryResponse
2012xxBeneficiario creado.CreateBeneficiaryResponse
4004xxEl cuerpo de la petición está vacío o no es JSON válido.ErrorResponse
4014xxSe requiere autenticación o las credenciales son inválidasErrorResponse
4034xxPermisos insuficientesErrorResponse
4134xxEl cuerpo de la petición supera el tamaño máximo admitido (body_too_large).ErrorResponse
4224xxLa cuenta no pasó la validación, o el alta chocó con un tope. Los códigos posibles son account_number_required, account_number_invalid_type, label_invalid_type, invalid_account_format, invalid_account_length, invalid_clabe_checksum, invalid_card_luhn, clabe_prefix_not_recognized, bank_code_required_for_phone, invalid_bank_code, max_length_exceeded, beneficiary_already_registered y plan_cap_exceeded. account_number_invalid_type y label_invalid_type aparecen cuando el campo llega con un tipo distinto de cadena de texto. Todo error de campo trae source.pointer.ErrorResponse
Errores de POST /v1/beneficiaries
CódigoClaveEjemplo
400body_empty

El cuerpo de la petición está vacío.

Envelope
meta.request_id
c1d2e3f4a5b66b5a4f3e2d1c
400invalid_json

El cuerpo no es JSON válido.

Envelope
meta.request_id
d2e3f4a5b6c77c6b5a4f3e2d
401unauthorized

Credenciales de autenticación ausentes o inválidas.

Envelope
meta.request_id
c4d5e6f7a8b99b8a7f6e5d4c
403permission_denied

No tienes permiso para acceder a este recurso.

Envelope
meta.request_id
d5e6f7a8b9c00c9b8a7f6e5d
413body_too_large

El cuerpo de la petición es demasiado grande.

Envelope
meta.request_id
1a2b3c4d5e6ff6e5d4c3b2a1
422account_number_invalid_type

El campo account_number debe ser una cadena de texto.

Envelope
source.pointer
/data/attributes/account_number
meta.request_id
a1b2c3d4e5f66f5e4d3c2b1a
422bank_code_required_for_phone

Hace falta un `bank_code` para registrar un beneficiario de tipo celular.

Envelope
source.pointer
/data/attributes/bank_code
meta.request_id
f6a7b8c9d0e11e0d9c8b7a6f
422beneficiary_already_registered

Ya existe un beneficiario con ese número de cuenta.

Envelope
source.pointer
/data/attributes/account_number
meta.request_id
b8c9d0e1f2a33a2f1e0d9c8b
422clabe_prefix_not_recognized

El prefijo de la CLABE no corresponde a ningún participante del SPEI.

Envelope
source.pointer
/data/attributes/account_number
meta.request_id
a7b8c9d0e1f22f1e0d9c8b7a
422plan_cap_exceeded

El plan de la cuenta de usuario no admite más beneficiarios.

Envelope
meta.request_id
f4a5b6c7d8e99e8d7c6b5a4f