Editar
Actualiza parcialmente una automatización por plan de proyecto.
Descripción general
Este endpoint actualiza parcialmente una automatización por plan de proyecto. Todos los campos del cuerpo son opcionales y siguen las mismas reglas que en Crear plan de proyecto:
- Omitido → el campo no cambia.
nullendescription→ la descripción se limpia.legal_entity_idno aceptanull.items→ reemplaza todos los conceptos.remaining_amountse recalcula como el nuevo total menos lo ya cobrado, sin bajar de 0.milestones→ reemplaza los hitos. Si lo omites, los hitos guardados se validan contra el plan actualizado: en modofixed, si cambiasitems, envía también hitos que sumen el nuevo total.
Los hitos enviados se emparejan por id:
idde un hito pendiente → actualizadescription,due_date,order_indexyvalue.idde un hito completado → actualiza solodescription,due_dateyorder_index. Los hitos completados conservan su valor: enviar otrovaluerespondeMILESTONE_ALREADY_COMPLETED, salvo conauto_even_split.- Sin
id, o con unidque no existe → se crea un hito nuevo. - Los hitos pendientes que no envías se eliminan; los completados que no envías se conservan.
Las sumas de 100 % o del total incluyen los hitos completados, aunque no los envíes. Con auto_even_split y hitos completados, solo se reparte entre los pendientes lo que falta por cobrar.
billing_mode no se puede cambiar si el plan tiene hitos completados. Al cambiarlo, envía también milestones con los valores en las unidades del nuevo modo. En modo fixed, el nuevo total no puede ser menor que lo ya cobrado en hitos completados (TOTAL_BELOW_BILLED). Un plan completed que queda con hitos pendientes pasa a active.
Puedes enviar note para dejar una nota en la actividad de la automatización. Una solicitud exitosa devuelve 200 con la automatización completa.
Requiere el permiso Administrar en Automatizaciones.
Endpoint
https://app.credonix.mx/api/v1/project-plan-automations/{automationId}Path param: automationId — el id de la automatización.
Actualización mínima
Envía solo los campos que quieras cambiar. Los conceptos, los hitos y lo ya cobrado quedan igual.
{
"concept": "Implementación de ERP y capacitación"
}Cambiar los conceptos
El plan valía 1160.00 y ya se había cobrado el anticipo de 348.00. Con el precio en 2000, el total sube a 2320.00 y remaining_amount queda en 1972.00: el nuevo total menos lo ya cobrado. En modo percentage los hitos siguen sumando 100 %, así que no hace falta enviarlos.
{
"items": [
{
"product_name": "Servicio de consultoría",
"description": "Consultoría especializada",
"quantity": 1,
"unit_price": "2000",
"product_code": "84111506",
"unit_code": "E48",
"taxes": [
{
"type": "iva",
"category": "transferred",
"rate": "0.16"
}
]
}
]
}Editar hitos con un hito completado
El cuerpo envía solo el hito pendiente "Entrega", con su id. El hito completado "Anticipo" no se envía y se conserva, y su 30 % cuenta para la suma de 100 %. Como no se envió order_index, "Entrega" toma su posición en el arreglo enviado (0).
{
"milestones": [
{
"id": "cmu21apfn00mpv1dqrw9ko5s4",
"description": "Entrega",
"value": "70"
}
]
}Reglas de los campos
| Campo | Tipo | Requerido | Notas |
|---|---|---|---|
customer_id | string | No | id de un cliente de tu organización. |
legal_entity_id | string | No | id de una razón social de tu organización. No acepta null. |
concept | string | No | No puede estar vacío. |
description | string | null | No | null limpia la descripción. |
currency | string | No | MXN o USD. |
grace_period_days | integer | No | Número JSON entero, mayor o igual a 0. |
billing_mode | string | No | percentage o fixed. No se puede cambiar con hitos completados. |
auto_even_split | boolean | No | Divide entre los hitos pendientes lo que falta por cobrar. |
items | array | No | Todos los conceptos, con las mismas reglas que en Crear plan de proyecto. |
milestones | array | No | Todos los hitos, con las mismas reglas que en Crear plan de proyecto. id identifica un hito existente. |
note | string | No | Nota para la actividad de la automatización. Máximo 500 caracteres. |
No se aceptan otros campos: cualquier campo desconocido responde 400 con VALIDATION_ERROR.
Errores
| Status | Código | Causa |
|---|---|---|
400 | VALIDATION_ERROR | Un campo no cumple sus reglas. errors indica el campo y el motivo. |
400 | INVALID_AUTOMATION | Los conceptos o los hitos no cumplen las reglas del plan. |
400 | CUSTOMER_NOT_FOUND | customer_id no es un cliente de tu organización. |
400 | MILESTONE_ALREADY_COMPLETED | Se cambió billing_mode con hitos completados, o se envió otro value para un hito completado. |
400 | TOTAL_BELOW_BILLED | En modo fixed, el nuevo total es menor que lo ya cobrado en hitos completados. La respuesta incluye "message": "El total de la automatización no puede ser menor a lo ya cobrado en hitos completados.". |
400 | LEGAL_ENTITY_NOT_FOUND | legal_entity_id no es una razón social de tu organización. |
400 | PRODUCT_NOT_FOUND | Un product_id no es un producto de tu organización. |
401 | MISSING_API_KEY, INVALID_API_KEY, API_KEY_REVOKED | API key ausente, inválida o revocada. |
403 | INSUFFICIENT_PERMISSIONS | La API key no tiene el permiso Administrar en Automatizaciones. |
404 | NOT_FOUND | La automatización no existe en tu organización o es de otro tipo. La respuesta incluye "message": "La automatización no fue encontrada.". |
400 — cambio de modo con hitos completados
Al enviar billing_mode: "fixed" en un plan con el anticipo ya completado:
{
"code": "MILESTONE_ALREADY_COMPLETED",
"message": "No es posible cambiar el modo de cobro porque la automatización tiene hitos completados.",
"errors": [
{
"field": "milestones",
"code": "milestone_already_completed",
"message": "No es posible cambiar el modo de cobro porque la automatización tiene hitos completados."
}
],
"request_id": "3374871e-a7d2-411e-86f5-ac1a7fd4dd97"
}