CredonixDocs
Referencia de la APIÓrdenes de cobro

Editar

Actualiza parcialmente una orden de cobro y, opcionalmente, timbra su CFDI.

Descripción general

Este endpoint actualiza parcialmente una orden de cobro. Todos los campos del cuerpo son opcionales: los que omites conservan su valor guardado. Una solicitud exitosa devuelve 200 con la orden de cobro completa.

Según los campos que envíes, la edición es básica o completa, igual que en la aplicación:

  • Edición básica: solo concept, description, issue_date, due_date, notes y note. Se permite aunque la orden de cobro tenga un CFDI emitido. status se recalcula, salvo en órdenes de cobro canceladas.
  • Edición completa: incluye customer_id, legal_entity_id, currency, items o un objeto cfdi. Si la orden de cobro tiene un CFDI emitido (sat_status: "emitted"), responde 409 con el código INVOICE_HAS_CFDI; cancela primero el CFDI con Cancelar CFDI.

En una edición completa:

  • items reemplaza todos los conceptos. Si omites items, se conservan los conceptos guardados y la base de sus impuestos se recalcula como el subtotal neto de cada concepto.
  • Se recalculan los totales y remaining_amount (saldo pendiente) queda como el nuevo total menos los pagos activos. Si los pagos superan el nuevo total, responde 409 con PAYMENTS_EXCEED_TOTAL.
  • Los datos fiscales del cliente se vuelven a copiar a la orden de cobro.
  • sat_status queda en emitted si la solicitud timbra un CFDI real y en not_required en cualquier otro caso.
  • Con cfdi, la respuesta incluye la llave cfdi con el CFDI timbrado. Si faltan datos para timbrar, responde 400 con CFDI_STAMP_FAILED.

Para timbrar una orden de cobro en USD, usa Emitir CFDI: en este endpoint, cfdi sobre una orden en USD responde 400, con VALIDATION_ERROR si falta cfdi.exchange_rate y con EXCHANGE_RATE_NOT_SUPPORTED si lo envías.

Requiere el permiso Administrar en Órdenes de cobro.

Endpoint

PATCHhttps://app.credonix.mx/api/v1/invoices/{invoiceId}

Path param: invoiceId — el id de la orden de cobro.

Edición básica


Envía solo los datos básicos que quieras cambiar. El ejemplo edita una orden de cobro con un CFDI emitido (sat_status: "emitted").

{ "concept": "Mantenimiento de sistemas septiembre 2026" }

Reemplazar los conceptos


Enviar items hace una edición completa: los conceptos anteriores se reemplazan y los totales se recalculan. note guarda el motivo del cambio en la actividad de la orden de cobro.

{
  "concept": "Consultoría septiembre 2026, alcance ampliado",
  "items": [
    {
      "product_name": "Consultoría administrativa",
      "description": "Servicio mensual de consultoría",
      "quantity": 1,
      "unit_price": "2000",
      "product_code": "84111506",
      "unit_code": "E48",
      "taxes": [
        { "type": "iva", "category": "transferred", "rate": "0.16" }
      ]
    }
  ],
  "note": "Ajuste de precio acordado con el cliente"
}

Editar y timbrar en modo de prueba


Con cfdi, la API aplica la edición y timbra el CFDI con los conceptos resultantes. La respuesta incluye cfdi. Como el ejemplo usa "test": true, el CFDI es de prueba y sat_status queda en not_required. La orden de cobro es en MXN, así que exchange_rate se ignora y el CFDI trae exchange_rate: null.

"cfdi": {
  "payment_form": "03",
  "payment_method": "PUE",
  "cfdi_use": "G03",
  "issue_date": "2026-09-14",
  "exchange_rate": "17.10",
  "test": true
}

Reglas de los campos

CampoTipoRequeridoNotas
conceptstringNoNo vacío.
descriptionstring | nullNonull se guarda como "".
issue_datestringNoYYYY-MM-DD.
due_datestring | nullNoYYYY-MM-DD. No puede ser anterior a issue_date.
notesstring | nullNoNotas internas.
notestringNoMáximo 500 caracteres. Motivo del cambio; se guarda en la actividad de la orden de cobro.
customer_idstringNoEdición completa. Cliente de tu organización.
legal_entity_idstringNoEdición completa. Razón social de tu organización.
currencyMXN | USDNoEdición completa.
itemsarrayNoEdición completa. Reemplaza todos los conceptos. Mismas reglas que en Crear orden de cobro.
cfdiobject | nullNoEdición completa y timbrado. Mismas reglas que en Crear orden de cobro.

Errores

StatusCódigoCausa
400VALIDATION_ERRORFalla de validación del cuerpo, por ejemplo due_date anterior a issue_date. errors[] trae el detalle por campo.
400CUSTOMER_NOT_FOUNDcustomer_id no existe en tu organización.
400LEGAL_ENTITY_NOT_FOUNDlegal_entity_id no existe en tu organización.
400PRODUCT_NOT_FOUNDUn product_id de los conceptos no existe en tu organización.
400EXCHANGE_RATE_NOT_SUPPORTEDSe envió cfdi.exchange_rate en una orden de cobro en USD.
400CFDI_STAMP_FAILEDNo fue posible timbrar. message explica la causa.
400LEGAL_ENTITY_NOT_CONFIGUREDCon "test": true, la razón social no está configurada para timbrar CFDI de prueba.
401MISSING_API_KEY | INVALID_API_KEY | API_KEY_REVOKEDAPI key ausente, inválida o revocada.
403INSUFFICIENT_PERMISSIONSLa API key no tiene el permiso Administrar en Órdenes de cobro.
404NOT_FOUNDLa orden de cobro no existe en tu organización.
409INVOICE_HAS_CFDIEdición completa sobre una orden de cobro con un CFDI emitido.
409PAYMENTS_EXCEED_TOTALLos pagos de la orden de cobro superan el nuevo total.
500INTERNAL_ERRORError interno.

409 — la orden de cobro tiene un CFDI emitido

{
  "code": "INVOICE_HAS_CFDI",
  "message": "Esta orden de cobro cuenta con una factura emitida. Solo es posible modificar información básica de la orden. Para realizar cambios adicionales, primero es necesario cancelar la factura.",
  "request_id": "c8c02cbd-4b5b-414f-a1ba-0075afa708ca"
}

409 — los pagos superan el nuevo total

{
  "code": "PAYMENTS_EXCEED_TOTAL",
  "message": "El total de pagos de esta orden de cobro excede el nuevo monto de la orden de cobro. Ajusta los pagos primero o disminuye el monto de la orden de cobro.",
  "request_id": "0d8d6dfa-dd61-43c6-ac50-85349dcbcc4b"
}
Abrir Credonix