Gestión de beneficiarios
Cómo crear, consultar, editar y eliminar beneficiarios para Dispersiones a terceros vía SPEI
Un beneficiario (payee) es el destinatario de los fondos que quieres dispersar. Antes de poder asociarle una instrucción de dispersión, el beneficiario debe pasar por una validación automática de cuenta.
Agregar API Keys y la versión de API
Necesitas tu API Key Privada. Puedes encontrarla en Panel en el módulo de Desarrolladores. Si requieres más información consulta API Keys — Testing.
Todas las llamadas requieren el header Accept: application/vnd.conekta-v2.3.0+json y tu API Key como Bearer token.
Sandbox vs. producciónLos ejemplos de esta página usan una API Key de prueba (
key_ZLy4...). Usa una API Key de producción solo cuando estés listo para dispersar dinero real — ver API Keys — Production.
Crear un beneficiario
curl --request POST \
--url https://api.conekta.io/payouts/payees \
--header 'Accept: application/vnd.conekta-v2.3.0+json' \
--header 'Authorization: Bearer key_ZLy4TfHN2wM9pXqRkD8jV3sB' \
--header 'Content-Type: application/json' \
--data '{
"alias": "proveedor-norte",
"name": "Juan Pérez García",
"clabe": "646180157034084695",
"rfc": "PEPJ800101AB1",
"email": "[email protected]"
}'Parámetros:
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
alias | String | Sí | Identificador corto, único por negocio. Lo usarás para referenciar al beneficiario en tus instrucciones de dispersión. |
name | String | Sí | Nombre completo del titular de la cuenta. Se contrasta contra el nombre real de la cuenta bancaria durante la validación. |
clabe | String | Sí | CLABE interbancaria a 18 dígitos. |
rfc | String | No | RFC del beneficiario. No se valida su formato — puedes omitirlo si no lo tienes al momento del alta. |
email | String | No | Correo electrónico de contacto. |
Respuesta 201 Created:
{
"id": "payee_xxxxxx",
"object": "external_payee",
"created_at": 1716739200,
"updated_at": 1716739200,
"name": "Juan Pérez García",
"alias": "proveedor-norte",
"clabe": "**************4695",
"bank_code": "646",
"rfc": "PEPJ800101AB1",
"email": "[email protected]",
"validation_status": "pending_validation",
"livemode": false
}
Nota de seguridadLa respuesta real de la API incluye la CLABE completa — Conekta la necesita para operar el SPEI. Este ejemplo la enmascara solo para esta documentación pública; no la registres en logs ni la muestres en interfaces de cliente sin enmascarar.
Validación asíncronaLa respuesta se recibe antes de que termine la validación de la cuenta. El beneficiario nace en
pending_validationy cambia de estado automáticamente al confirmarse (normalmente en menos de dos minutos). Sólo un beneficiario envalidated_activepuede recibir pagos.
Errores:
| Código | Motivo |
|---|---|
422 Unprocessable Entity | Falta un campo requerido, la CLABE tiene un formato o largo inválido, o el alias ya existe. |
Cargar beneficiarios en lote
Si necesitas dar de alta muchos beneficiarios a la vez, puedes subir un archivo CSV. Cada fila se procesa de forma asíncrona.
curl --request POST \
--url https://api.conekta.io/payouts/payees/bulk \
--header 'Accept: application/vnd.conekta-v2.3.0+json' \
--header 'Authorization: Bearer key_ZLy4TfHN2wM9pXqRkD8jV3sB' \
--header 'Content-Type: multipart/form-data' \
--form '[email protected]'Formato del CSV (columnas requeridas: name, alias, clabe; opcionales: rfc, email):
name,alias,clabe,rfc,email
Juan Pérez García,proveedor-norte,646180157034084695,PEPJ800101AB1,[email protected]
María López Ruiz,proveedor-sur,646180157034084712,,El archivo real contiene la CLABE completa de cada beneficiario — trátalo como dato sensible: transmítelo por HTTPS (ya obligatorio en la API), no lo dejes en almacenamiento compartido sin cifrar, y bórralo de tu servidor una vez confirmado el
enqueued.
Respuesta 202 Accepted:
{ "enqueued": 2, "errors": [] }Si alguna fila no pudo encolarse, se incluye en errors con el motivo:
{
"enqueued": 1,
"errors": [
{ "line": 2, "alias": "proveedor-sur", "error": "clabe has already been taken" }
]
}Listar beneficiarios
curl --request GET \
--url 'https://api.conekta.io/payouts/payees?validation_status=validated_active&limit=20' \
--header 'Accept: application/vnd.conekta-v2.3.0+json' \
--header 'Authorization: Bearer key_ZLy4TfHN2wM9pXqRkD8jV3sB'Parámetros de consulta (opcionales):
| Parámetro | Descripción |
|---|---|
validation_status | Filtra por estado. Uno o varios separados por coma: pending_validation, validated_active, validated_inactive, rejected. Devuelve 422 si algún valor no es válido. |
bank_code | Filtra por código de banco SPEI a 3 dígitos. Uno o varios separados por coma. |
page | Número de página. Default 1. |
limit | Registros por página. Default 20, máximo 100. |
Respuesta 200 OK:
{
"data": [
{
"id": "payee_xxxxxx",
"object": "external_payee",
"name": "Juan Pérez García",
"alias": "proveedor-norte",
"clabe": "**************4695",
"bank_code": "646",
"rfc": "PEPJ800101AB1",
"email": "[email protected]",
"validation_status": "validated_active",
"livemode": false
}
],
"pagination": {
"pageIndex": 1,
"totalPages": 3,
"totalItems": 42,
"itemsPerPage": 20,
"hasPreviousPage": false,
"hasNextPage": true
}
}Resumen de estados
Útil para mostrar en un dashboard cuántos beneficiarios tienes en cada estado.
curl --request GET \
--url https://api.conekta.io/payouts/payees/summary \
--header 'Accept: application/vnd.conekta-v2.3.0+json' \
--header 'Authorization: Bearer key_ZLy4TfHN2wM9pXqRkD8jV3sB'{
"validated_active": 12,
"pending_validation": 8,
"validated_inactive": 6,
"rejected": 4
}Obtener un beneficiario
curl --request GET \
--url https://api.conekta.io/payouts/payees/PAYEE_ID \
--header 'Accept: application/vnd.conekta-v2.3.0+json' \
--header 'Authorization: Bearer key_ZLy4TfHN2wM9pXqRkD8jV3sB'Si el beneficiario está rejected, la respuesta incluye validation_rejection_reason con el motivo del rechazo.
Editar o activar/desactivar un beneficiario
Un mismo PATCH soporta dos operaciones independientes, que puedes combinar en el mismo request:
| Operación | Parámetros | Restricción de estado |
|---|---|---|
| Editar metadata | alias, rfc, email | Ninguna — funciona en cualquier validation_status, incluido pending_validation y rejected. |
| Cambiar estado | validation_status | Solo si el estado actual es validated_active o validated_inactive, y el nuevo valor también es uno de esos dos. |
Ninguna de las dos operaciones dispara una nueva validación de cuenta.
curl --request PATCH \
--url https://api.conekta.io/payouts/payees/PAYEE_ID \
--header 'Accept: application/vnd.conekta-v2.3.0+json' \
--header 'Authorization: Bearer key_ZLy4TfHN2wM9pXqRkD8jV3sB' \
--header 'Content-Type: application/json' \
--data '{ "alias": "proveedor-norte-v2", "email": "[email protected]" }'Parámetros (todos opcionales):
| Parámetro | Descripción |
|---|---|
alias | Nuevo identificador. Debe seguir siendo único. |
rfc | RFC del beneficiario. |
email | Correo de contacto. |
validation_status | Solo validated_active o validated_inactive. Te permite pausar o reactivar a un beneficiario sin eliminarlo. |
Desactivar un beneficiarioUn beneficiario
validated_inactivedeja de recibir pagos automáticamente: sus instrucciones de dispersión siguen existiendo pero se omiten en el proceso nocturno. Es la forma recomendada de pausar pagos a alguien sin perder la configuración.
Editar un beneficiariopending_validationorejectedLa restricción de estado solo aplica al cambio de
validation_status. Puedes actualizaralias,rfco
Errores:
| Código | Motivo |
|---|---|
422 Unprocessable Entity | El validation_status actual del beneficiario no es validated_active ni validated_inactive, o el nuevo validation_status enviado no es uno de esos dos valores. Este error solo aplica al cambio de estado — nunca a la edición de alias/rfc/email. |
Eliminar un beneficiario
Elimina (soft delete) al beneficiario. Funciona en cualquier estado, salvo que tenga instrucciones de dispersión activas.
curl --request DELETE \
--url https://api.conekta.io/payouts/payees/PAYEE_ID \
--header 'Accept: application/vnd.conekta-v2.3.0+json' \
--header 'Authorization: Bearer key_ZLy4TfHN2wM9pXqRkD8jV3sB'Errores:
| Código | Motivo |
|---|---|
422 Unprocessable Entity | El beneficiario tiene instrucciones de dispersión activas. Elimina o pausa primero esas instrucciones. |
Un beneficiario
rejectedno admite activarse (no puedes llevarlo avalidated_active/validated_inactivevíavalidation_status), pero sí puedes editar sualias/rfc/aliasqueda liberado para que puedas registrar uno nuevo con el mismo identificador.
Related
- Resumen — Dispersiones a terceros vía SPEI — visión general del flujo completo.
- Tipos de dispersión — cómo asociar una instrucción de dispersión a un beneficiario ya validado.
- Seguimiento de dispersiones — cómo consultar el historial de pagos de un beneficiario.
- API Keys — Testing — cómo obtener tu llave de prueba.
Updated about 22 hours ago

