Tipos de dispersión
Cómo programar dispersiones puntuales, con fecha específica o recurrentes a un beneficiario
Una instrucción de dispersión (el objeto payout_rule en la API) le dice a Conekta cuánto pagarle a un beneficiario y con qué periodicidad. El beneficiario debe estar validated_active para poder asociarle una.
Tipos de dispersión
rule_type | Comportamiento |
|---|---|
one_time | Instrucción manual. Se ejecuta en el próximo proceso nocturno. Puedes cancelarla mientras siga sin ejecutarse. |
scheduled | Se ejecuta una única vez, en la fecha que indiques (scheduled_date). |
recurrent | Se repite automáticamente según frequency: daily, weekly o monthly. |
Todas las instrucciones de dispersión comparten los mismos campos base (payee_id, amount, priority, name, concept, external_reference) y agregan campos propios según el tipo.
Crear una instrucción de dispersión
curl --request POST \
--url https://api.conekta.io/payout_rules \
--header 'Accept: application/vnd.conekta-v2.3.0+json' \
--header 'Authorization: Bearer key_ZLy4TfHN2wM9pXqRkD8jV3sB' \
--header 'Content-Type: application/json' \
--data '{
"rule_type": "one_time",
"payee_id": "payee_xxx",
"amount": "100.00",
"priority": 1,
"name": "Liquidación proveedor",
"concept": "Pago factura mayo"
}'Parámetros comunes:
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
rule_type | String | Sí | one_time, scheduled o recurrent. |
payee_id | String | Sí | ID de un beneficiario validated_active. |
amount | String | Sí | Monto en MXN (ej. "100.00"), mayor a 0. Nota de unidades: a diferencia de los montos en Seguimiento de dispersiones, aquí el monto va en pesos como string, no en centavos. |
priority | Integer | No | Default 0. Determina el orden en que la instrucción aparece al listarla. No determina el orden de ejecución nocturno — ver Cómo se prioriza la ejecución más abajo. |
name | String | No | Nombre descriptivo, ej. "Nómina quincena 1". |
concept | String | No | Concepto SPEI visible para el beneficiario. Default: "Pago automático Conekta". |
external_reference | String | No | Referencia numérica propia (máx. 7 dígitos, /\A\d{1,7}\z/) que se usa tal cual como referencia SPEI en cada dispersión que resulte de esta instrucción, en vez del valor interno que Conekta deriva por defecto. Útil si necesitas reconciliar contra tus propios sistemas. Si se omite, o si no es numérico de ≤7 dígitos, se sigue generando el valor interno como siempre — un valor inválido devuelve 422. |
Parámetros según rule_type:
| Parámetro | Aplica a | Descripción |
|---|---|---|
scheduled_date | scheduled | Fecha YYYY-MM-DD, hoy o futura. |
frequency | recurrent | daily, weekly o monthly. |
recurrence_day | recurrent | Días de ejecución. weekly: uno o más valores 0–6 (0 = domingo). monthly: uno o más días del mes, ej. [15] o [1,15] para quincenas. |
last_day_of_month | recurrent + monthly | Si es true y no envías recurrence_day, se ejecuta solo el último día del mes. Si lo combinas con recurrence_day: [N] (un solo valor), se ejecuta el día N y además el último día de cada mes — útil para quincenas reales, cubriendo automáticamente meses de 28 a 31 días. No es compatible con 2 o más valores en recurrence_day — la combinación se rechaza con 422. |
start_date / end_date | recurrent | Ventana opcional de vigencia de la instrucción. |
Ejemplos
Pago puntual (próximo proceso nocturno):
{ "rule_type": "one_time", "payee_id": "payee_xxx", "amount": "100.00", "name": "Liquidación proveedor" }Pago en una fecha específica:
{ "rule_type": "scheduled", "payee_id": "payee_xxx", "amount": "500.00", "scheduled_date": "2026-06-15", "name": "Bono anual" }Nómina mensual, día 15:
{ "rule_type": "recurrent", "payee_id": "payee_xxx", "amount": "1500.00", "frequency": "monthly", "recurrence_day": [15], "start_date": "2026-06-01", "name": "Nómina mensual" }Renta el último día de cada mes:
{ "rule_type": "recurrent", "payee_id": "payee_xxx", "amount": "1500.00", "frequency": "monthly", "last_day_of_month": true, "name": "Renta fin de mes" }Nómina quincenal real (día 15 y último día del mes):
{ "rule_type": "recurrent", "payee_id": "payee_xxx", "amount": "2000.00", "frequency": "monthly", "recurrence_day": [15], "last_day_of_month": true, "name": "Nómina quincenal" }Pago semanal (lunes, miércoles y viernes):
{ "rule_type": "recurrent", "payee_id": "payee_xxx", "amount": "800.00", "frequency": "weekly", "recurrence_day": [1,3,5], "name": "Servicios L/M/V" }Pago puntual con referencia propia para reconciliación:
{ "rule_type": "one_time", "payee_id": "payee_xxx", "amount": "100.00", "name": "Liquidación proveedor", "external_reference": "1234567" }
external_referenceen instruccionesrecurrentCada ejecución de una instrucción
recurrentgenera una dispersión distinta, pero si definesexternal_referenceen la instrucción, todas sus ejecuciones lo reenvían igual (a diferencia del valor interno por default, que es único por dispersión). Aún no está confirmado con el banco si reenviar la misma referencia en ejecuciones distintas tiene algún efecto (deduplicación, límites). Si vas a usarexternal_referenceen una instrucciónrecurrent, valida el comportamiento en pruebas antes de habilitarlo en producción.
Respuesta 201 Created:
{
"id": "6a188111ff51790001e279fb",
"object": "payout_rule",
"rule_type": "one_time",
"payee_id": "payee_317roDjGQMta9DYVo",
"amount": "100.0",
"priority": 1,
"status": "scheduled",
"name": "Liquidación proveedor",
"concept": "Pago factura mayo",
"created_at": 1779990801,
"updated_at": 1779990801
}El
statusinicial es"scheduled"para instruccionesone_timeyscheduled, y"active"para instruccionesrecurrent.
Errores:
| Código | Motivo |
|---|---|
422 Unprocessable Entity | El payee_id no corresponde a un beneficiario validated_active, falta un campo requerido para el rule_type elegido, amount no es mayor a 0, recurrence_day trae 2+ valores junto con last_day_of_month: true, o external_reference no es numérico de máximo 7 dígitos. |
Listar instrucciones de dispersión
# Todas las instrucciones del negocio
curl --request GET \
--url https://api.conekta.io/payout_rules \
--header 'Accept: application/vnd.conekta-v2.3.0+json' \
--header 'Authorization: Bearer key_ZLy4TfHN2wM9pXqRkD8jV3sB'
# Solo las instrucciones de un beneficiario
curl --request GET \
--url 'https://api.conekta.io/payout_rules?payee_id=PAYEE_ID' \
--header 'Accept: application/vnd.conekta-v2.3.0+json' \
--header 'Authorization: Bearer key_ZLy4TfHN2wM9pXqRkD8jV3sB'El resultado viene ordenado por priority descendente y luego por antigüedad. Este es el orden de listado — no necesariamente el orden en que se ejecutan las instrucciones cada noche (ver más abajo).
Obtener una instrucción de dispersión
curl --request GET \
--url https://api.conekta.io/payout_rules/RULE_ID \
--header 'Accept: application/vnd.conekta-v2.3.0+json' \
--header 'Authorization: Bearer key_ZLy4TfHN2wM9pXqRkD8jV3sB'Actualizar una instrucción de dispersión
Puedes actualizar amount, priority, payee_id, name, concept, external_reference y los campos propios del tipo (scheduled_date, frequency, recurrence_day, last_day_of_month, start_date, end_date). El rule_type no se puede cambiar una vez creada la instrucción.
curl --request PATCH \
--url https://api.conekta.io/payout_rules/RULE_ID \
--header 'Accept: application/vnd.conekta-v2.3.0+json' \
--header 'Authorization: Bearer key_ZLy4TfHN2wM9pXqRkD8jV3sB' \
--header 'Content-Type: application/json' \
--data '{ "amount": "200.00", "priority": 3 }'Eliminar una instrucción de dispersión
curl --request DELETE \
--url https://api.conekta.io/payout_rules/RULE_ID \
--header 'Accept: application/vnd.conekta-v2.3.0+json' \
--header 'Authorization: Bearer key_ZLy4TfHN2wM9pXqRkD8jV3sB'Respuesta 200 OK:
{ "id": "6a188111ff51790001e279fb", "object": "payout_rule", "rule_type": "one_time", "deleted": true }
Restricción para instruccionesone_timeUna instrucción
one_timesolo puede eliminarse mientras sigue en estadoscheduled(aún no se ejecutó). Si ya se ejecutó (completed) o falló (failed), el endpoint devuelve422. Las instruccionesscheduledyrecurrentno tienen esta restricción.
Cómo se prioriza la ejecución
priorityno determina este ordenEl campo
prioritysolo afecta el orden en que listas tus instrucciones de dispersión — no el orden en que se ejecutan cada noche. Si necesitas garantizar que un pago salga antes que otro cuando el saldo no alcanza para todos, usa el criterio real descrito abajo (tipo de dispersión y monto), nopriority.
Cada noche, Conekta evalúa las instrucciones que aplican para ese día en este orden:
- Instrucciones
scheduled, luegorecurrent, luegoone_time— en ese orden de tipo, no mezcladas entre sí. - Dentro de cada tipo, de menor a mayor monto (
amountascendente) — no porpriority.
Si el saldo disponible no alcanza para todas, las instrucciones se van aplicando en ese orden hasta agotar el saldo; las que no entran quedan pendientes por saldo insuficiente y se reintentan automáticamente en cuanto se recibe un fondeo adicional — no es necesario volver a crear la instrucción.
Orden entre distintos díasLo anterior describe el orden dentro de una misma corrida nocturna. Una instrucción que quedó pendiente por falta de saldo se recoge en la siguiente corrida por antigüedad (la más antigua primero), sin volver a aplicar la jerarquía por tipo frente a las instrucciones nuevas de ese día — por ejemplo, una instrucción
one_timede ayer que quedó pendiente se procesa antes que unascheduledde hoy, simplemente por ser más vieja. Este comportamiento entre días está bajo revisión de producto y puede cambiar; si tu integración depende del orden exacto entre corridas, confirma con tu Ejecutivo de Cuentas antes de construir sobre él.
Related
- Resumen — Dispersiones a terceros vía SPEI — visión general del flujo completo.
- Gestión de beneficiarios — cómo dar de alta al beneficiario que necesitas antes de crear una instrucción de dispersión.
- Seguimiento de dispersiones — cómo ver si una instrucción ya se ejecutó y con qué resultado.
Updated about 22 hours ago

