Crear
Crea una automatización recurrente que genera órdenes de cobro periódicamente.
Descripción general
Este endpoint crea una automatización recurrente con las mismas reglas que el formulario de la aplicación: un cliente, una razón social, un concepto, la periodicidad y los conceptos que se cobran en cada orden de cobro. Una solicitud exitosa devuelve 201 con la automatización creada, incluidos sus totales y su next_billing_date.
Si la primera fecha de cobro es hoy (en la zona horaria de la organización), la automatización genera la orden de cobro en ese momento: con estatus issued, fecha de emisión de hoy, vencimiento a grace_period_days días de la emisión y sin CFDI. La ejecución queda en el historial como automated, se actualiza last_execution_at y, si no quedan fechas por cobrar, la automatización pasa a completed. Si esa generación falla, la ejecución queda en el historial con estatus error y la solicitud responde 201 igualmente; puedes reintentarla.
Acepta el header Idempotency-Key para reintentar sin crear automatizaciones duplicadas (ver Idempotencia).
Requiere el permiso Crear en Automatizaciones.
Endpoint
https://app.credonix.mx/api/v1/recurring-automationsAutomatización mensual
Cobra el mismo día de cada mes a partir de start_date. Sin end_date, la automatización no tiene fecha de fin. grace_period_days toma 5 y repeat_every toma 1 por defecto.
En la respuesta, los conceptos traen discount en "0" cuando no se envió descuento, y cada impuesto trae su base calculada.
{
"customer_id": "cmu21fp9g00qiv1dqitkc8c8x",
"legal_entity_id": "cmpydghmk0004v1oyioviuwjs",
"currency": "MXN",
"concept": "Iguala mensual",
"start_date": "2026-11-01",
"interval": "monthly",
"monthly_mode": "day_of_month",
"items": [
{
"product_name": "Servicio de consultoría",
"description": "Consultoría mensual",
"quantity": 1,
"unit_price": "12000",
"product_code": "84111506",
"unit_code": "E48",
"taxes": [
{
"type": "iva",
"category": "transferred",
"rate": "0.16"
}
]
}
]
}Reglas de los campos
| Campo | Tipo | Requerido | Notas |
|---|---|---|---|
customer_id | string | Sí | ID de un cliente de tu organización. |
legal_entity_id | string | Sí | ID de una razón social de tu organización. |
concept | string | Sí | Concepto de las órdenes de cobro. No puede ser vacío. |
description | string | null | No | Descripción. |
currency | MXN | USD | Sí | Moneda de las órdenes de cobro. |
grace_period_days | integer ≥ 0 | No | Por defecto 5. Días entre la emisión y el vencimiento de cada orden de cobro. Se envía como número JSON, no como string. |
start_date | string YYYY-MM-DD | Sí | Fecha de inicio. |
end_date | string YYYY-MM-DD | null | No | Fecha de fin. No puede ser anterior a start_date. |
interval | daily, weekly, monthly, yearly | Sí | Intervalo de repetición. |
repeat_every | integer ≥ 1 | No | Por defecto 1. Cada cuántos intervalos se repite. Se envía como número JSON. |
monthly_mode | day_of_month | weekday_position | null | No | Requerido con interval: monthly. |
weekdays | array de MON, TUE, WED, THU, FRI, SAT, SUN | No | Por defecto []. Requiere al menos un día con interval: weekly. |
items | array | Sí | Conceptos de cada orden de cobro. Al menos uno. |
weekdays y monthly_mode se aceptan y se guardan con cualquier interval. No se aceptan campos adicionales: cualquier campo desconocido responde 400.
Conceptos (items[])
| Campo | Tipo | Requerido | Notas |
|---|---|---|---|
product_id | string | null | No | ID de un producto de tu organización. |
product_name | string | null | No | Se requiere product_name o description. |
description | string | null | No | Se requiere product_name o description. |
quantity | integer | Sí | Número JSON entero, mayor a 0. |
unit_price | string o number ≥ 0 | Sí | Por ejemplo "1234.50". |
discount | string ≥ 0 | null | No | Con percentage es un porcentaje (10 = 10 %); con fixed, un monto. |
discount_type | percentage | fixed | null | No | Tipo de descuento. |
product_code | string | null | No | Clave de producto o servicio del SAT. |
unit_code | string | null | No | Clave de unidad del SAT. |
taxes | array | No | Por defecto []. |
El total de cada concepto (subtotal menos descuento, más impuestos trasladados, menos retenidos) debe ser mayor o igual a 0.
Impuestos (items[].taxes[])
| Campo | Tipo | Requerido | Notas |
|---|---|---|---|
type | string | Sí | iva, isr o ieps en minúsculas. Cualquier otro valor es un impuesto local de hasta 10 caracteres. |
category | transferred | withheld | exempt | Sí | iva: transferred, withheld o exempt. isr: withheld. ieps: transferred o withheld. Los impuestos locales solo pueden ser transferred o withheld. |
rate | string ≥ 0 | Sí | Tasa como fracción: "0.16" para 16 %. |
base | string ≥ 0 | null | No | Si se omite o es 0, se usa el subtotal del concepto menos su descuento. |
Errores
400 — reglas de la automatización
Cuando la automatización no cumple sus reglas, la API responde INVALID_AUTOMATION sin errors; message une todas las reglas que fallaron, separadas por un espacio:
- "La fecha de inicio debe ser menor a la fecha de fin"
- "Por lo menos un producto o servicio debe ser agregado."
- "Todos los productos deben incluir: cantidad y precio unitario."
- "Todos los productos deben contener un total igual o mayor a 0."
- "Al menos un día de la semana debe ser seleccionado."
- "El modo mensual debe ser seleccionado."
400 — producto no encontrado
Un product_id que no pertenece a tu organización:
{
"code": "PRODUCT_NOT_FOUND",
"message": "Ocurrió un error al crear la automatización, por favor intenta nuevamente más tarde o contacta a soporte si el problema persiste.",
"request_id": "b1905913-d742-4c83-8257-4d485721520f"
}| Status | Código | Causa |
|---|---|---|
400 | VALIDATION_ERROR | Falta un campo requerido, un campo tiene formato inválido o se envió un campo desconocido. errors trae el detalle por campo. |
400 | INVALID_AUTOMATION | La automatización no cumple sus reglas (ver arriba). |
400 | CUSTOMER_NOT_FOUND | customer_id no existe en tu organización. |
400 | LEGAL_ENTITY_NOT_FOUND | legal_entity_id no existe en tu organización. |
400 | PRODUCT_NOT_FOUND | Un product_id no existe en tu organización. |
403 | INSUFFICIENT_PERMISSIONS | La API key no tiene el permiso Crear en Automatizaciones. |