CredonixDocs
Referencia de la APIPlan de proyecto

Crear

Crea una automatización por plan de proyecto con sus hitos.

Descripción general

Este endpoint crea una automatización por plan de proyecto: los conceptos (items) definen el total del proyecto y los hitos (milestones) lo dividen. Al completar un hito se genera una orden de cobro por la parte de ese hito. Una solicitud exitosa devuelve 201 con la automatización creada, con la misma forma que Consultar plan de proyecto.

billing_mode define qué significa el value de cada hito:

  • percentage → un porcentaje del total: "30" es 30 %. Los hitos deben sumar exactamente 100.
  • fixed → un monto. Los hitos deben sumar exactamente el total de los conceptos, con impuestos.

Con auto_even_split: true, la API divide el total en partes iguales e ignora el value de cada hito, que sigue siendo obligatorio. En percentage cada hito vale lo mismo; en fixed el total se reparte en centavos y la diferencia queda en el último hito.

Crear el plan no genera órdenes de cobro. remaining_amount empieza igual al total.

Acepta el header Idempotency-Key para reintentar sin duplicar la automatización.

Requiere el permiso Crear en Automatizaciones.

Endpoint

POSThttps://app.credonix.mx/api/v1/project-plan-automations

Hitos por porcentaje


Con billing_mode: "percentage", cada hito es un porcentaje del total de los conceptos: 30 % de anticipo y 70 % a la entrega. La respuesta devuelve los hitos en porcentaje, con completed: false, y remaining_amount igual a total_amount.

{
  "customer_id": "cmu21fp9g00qiv1dqitkc8c8x",
  "legal_entity_id": "cmpydghmk0004v1oyioviuwjs",
  "currency": "MXN",
  "concept": "Implementación de sistema",
  "billing_mode": "percentage",
  "milestones": [
    {
      "description": "Anticipo",
      "value": "30"
    },
    {
      "description": "Entrega",
      "value": "70"
    }
  ],
  "items": [
    {
      "product_name": "Servicio de consultoría",
      "description": "Consultoría mensual",
      "quantity": 1,
      "unit_price": "100000",
      "product_code": "84111506",
      "unit_code": "E48",
      "taxes": [
        {
          "type": "iva",
          "category": "transferred",
          "rate": "0.16"
        }
      ]
    }
  ]
}

Hitos por monto fijo


Con billing_mode: "fixed", cada hito es un monto y la suma debe ser igual al total con impuestos: 348 + 812 = 1160.00. La respuesta devuelve los montos con dos decimales.

{
  "customer_id": "cmu21ahvu00juv1dqayw8ba2r",
  "legal_entity_id": "cmpydghmk0004v1oyioviuwjs",
  "currency": "MXN",
  "concept": "Desarrollo de sitio web",
  "billing_mode": "fixed",
  "milestones": [
    {
      "description": "Fase 1",
      "value": "348"
    },
    {
      "description": "Fase 2",
      "value": "812"
    }
  ],
  "items": [
    {
      "product_name": "Servicio de consultoría",
      "description": "Consultoría especializada",
      "quantity": 1,
      "unit_price": "1000",
      "product_code": "84111506",
      "unit_code": "E48",
      "taxes": [
        {
          "type": "iva",
          "category": "transferred",
          "rate": "0.16"
        }
      ]
    }
  ]
}

Reglas de los campos

CampoTipoRequeridoNotas
customer_idstringid de un cliente de tu organización.
legal_entity_idstringid de una razón social de tu organización.
conceptstringConcepto de las órdenes de cobro. No puede estar vacío.
descriptionstring | nullNoTexto libre.
currencystringMXN o USD.
grace_period_daysintegerNoDías entre la emisión y el vencimiento de cada orden. Número JSON entero, mayor o igual a 0. Por defecto 5.
billing_modestringpercentage o fixed.
auto_even_splitbooleanNoDivide el total en partes iguales entre los hitos. Por defecto false.
itemsarrayConceptos del proyecto. Ver abajo.
milestonesarrayHitos. Al menos uno. Ver abajo.

No se aceptan otros campos: cualquier campo desconocido responde 400 con VALIDATION_ERROR.

milestones[]

CampoTipoRequeridoNotas
idstringNoSe ignora al crear.
descriptionstringDescripción del hito. No puede estar vacía.
due_datestring | nullNoFecha estimada del hito, con el formato YYYY-MM-DD.
valuestring | numberPorcentaje (percentage) o monto (fixed). Acepta texto numérico o número, mayor o igual a 1. Obligatorio aun con auto_even_split.
order_indexintegerNoOrden del hito, mayor o igual a 0. Por defecto, su posición en el arreglo.

items[]

CampoTipoRequeridoNotas
product_idstring | nullNoid de un producto de tu organización.
product_namestring | nullNoNombre del concepto. Cada concepto requiere product_name o description.
descriptionstring | nullNoDescripción del concepto.
quantityintegerCantidad, como número JSON entero.
unit_pricestring | numberPrecio unitario mayor o igual a 0, por ejemplo "1234.50".
discountstring | nullNoCon discount_type: "percentage" es un porcentaje (10 es 10 %); con fixed, un monto.
discount_typestring | nullNopercentage o fixed.
product_codestring | nullNoClave de producto o servicio del SAT.
unit_codestring | nullNoClave de unidad del SAT.
taxesarrayNoImpuestos del concepto. Por defecto [].

taxes[]

CampoTipoRequeridoNotas
typestringiva, isr o ieps. Cualquier otro valor es un impuesto local de hasta 10 caracteres.
categorystringtransferred (trasladado), withheld (retenido) o exempt (exento). IVA acepta los tres; ISR solo withheld; IEPS acepta transferred o withheld. Los impuestos locales no aceptan exempt.
ratestringTasa como fracción: "0.16" es 16 %. Mayor o igual a 0.
basestring | nullNoBase del impuesto. Si la omites, la respuesta devuelve el subtotal del concepto menos su descuento.

Reglas del plan

Estas reglas responden 400 con INVALID_AUTOMATION. Si fallan varias, message las incluye todas:

  • "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."
  • "Todos los hitos deben incluir: descripción y valor."
  • "Los hitos deben sumar 100%." (percentage sin auto_even_split)
  • "Los hitos deben sumar el total de la orden de cobro." (fixed sin auto_even_split)

Errores

StatusCódigoCausa
400VALIDATION_ERRORUn campo no cumple sus reglas. errors indica el campo y el motivo.
400INVALID_AUTOMATIONLos conceptos o los hitos no cumplen las reglas del plan.
400CUSTOMER_NOT_FOUNDcustomer_id no es un cliente de tu organización.
400LEGAL_ENTITY_NOT_FOUNDlegal_entity_id no es una razón social de tu organización.
400PRODUCT_NOT_FOUNDUn product_id no es un producto de tu organización.
401MISSING_API_KEY, INVALID_API_KEY, API_KEY_REVOKEDAPI key ausente, inválida o revocada.
403INSUFFICIENT_PERMISSIONSLa API key no tiene el permiso Crear en Automatizaciones.

400 — los hitos no suman 100 %

Con dos hitos de "30" en modo percentage:

{
  "code": "INVALID_AUTOMATION",
  "message": "Los hitos deben sumar 100%.",
  "request_id": "711b255c-85ff-4f5d-a697-3691799f57cf"
}
Abrir Credonix