Emitir
Timbra el CFDI de una orden de cobro existente.
Descripción general
Este endpoint timbra un CFDI para una orden de cobro que ya existe, igual que en la aplicación. El CFDI usa los conceptos guardados, la moneda y la descripción de la orden de cobro, y el cliente de la orden como receptor. Una solicitud exitosa devuelve 201 con el CFDI.
- CFDI real: una orden de cobro solo puede tener un CFDI real emitido o pendiente. Al timbrarlo, la orden de cobro queda con
sat_status: "emitted", su razón social cambia a la delegal_entity_idy los datos fiscales del cliente se vuelven a copiar a la orden. - CFDI de prueba (
"test": true): se pueden emitir varios por orden de cobro y la orden no cambia (ver Modo de prueba).
Antes de timbrar, la API verifica que la razón social esté configurada para timbrar, que el cliente tenga razón social, RFC, régimen fiscal y código postal, y que cada concepto tenga nombre o descripción, product_code y unit_code. No se puede timbrar una orden de cobro cancelada; reactívala primero con Reactivar orden de cobro.
Acepta el header Idempotency-Key (ver Idempotencia). Requiere el permiso Crear en Órdenes de cobro.
Endpoint
https://app.credonix.mx/api/v1/invoices/{invoiceId}/cfdisPath param: invoiceId — el id de la orden de cobro.
Emite un CFDI de prueba
El ejemplo timbra un CFDI de prueba sin issue_date, así que se usa la fecha de hoy en la zona horaria de la organización. La orden de cobro es en MXN: exchange_rate se ignora y el CFDI trae exchange_rate: null. Sin test (o con false), el CFDI es real.
{
"legal_entity_id": "cmpydghmk0004v1oyioviuwjs",
"payment_form": "03",
"payment_method": "PUE",
"cfdi_use": "G03",
"exchange_rate": "17.50",
"test": true
}Reglas de los campos
| Campo | Tipo | Requerido | Notas |
|---|---|---|---|
legal_entity_id | string | Sí | Razón social emisora de tu organización. No se toma de la orden de cobro. |
payment_method | PUE | PPD | Sí | Método de pago. |
payment_form | string | Sí | Clave de forma de pago. Con PPD debe ser 99; con PUE no puede ser 99. |
cfdi_use | string | No | Uso del CFDI. Por defecto G03. |
issue_date | string | No | Fecha de timbrado, YYYY-MM-DD. Por defecto, hoy en la zona horaria de la organización. |
exchange_rate | string | number | null | Si la orden de cobro es en USD | Tipo de cambio, mayor que 0. En órdenes de cobro en MXN se ignora. |
test | boolean | No | Por defecto false. true timbra un CFDI de prueba. |
Las claves válidas de payment_form y cfdi_use están en Crear orden de cobro.
Errores
| Status | Código | Causa |
|---|---|---|
400 | VALIDATION_ERROR | Falla de validación del cuerpo o de los catálogos del SAT. Si faltan datos para timbrar, errors[] trae field: "legal_entity_id" con código not_ready. |
400 | LEGAL_ENTITY_NOT_FOUND | legal_entity_id no existe en tu organización. |
400 | EXCHANGE_RATE_REQUIRED | Orden de cobro en USD con exchange_rate igual a 0. |
400 | CFDI_STAMP_FAILED | No fue posible timbrar: faltan datos de la razón social, del cliente o de los conceptos, o el SAT o el PAC rechazaron el CFDI. message explica la causa. |
400 | LEGAL_ENTITY_NOT_CONFIGURED | Con "test": true, la razón social no está configurada para timbrar CFDI de prueba. |
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 Crear en Órdenes de cobro. |
404 | NOT_FOUND | La orden de cobro no existe en tu organización. |
409 | INVOICE_CANCELED | La orden de cobro está cancelada. |
409 | INVOICE_ALREADY_STAMPED | La orden de cobro ya tiene un CFDI real emitido o pendiente. |
409 | CUSTOMER_REQUIRED | La orden de cobro no tiene un cliente seleccionado. |
409 | CUSTOMER_NOT_FOUND | El cliente de la orden de cobro no fue encontrado. |
500 | INTERNAL_ERROR | Error interno. Si ocurre después de timbrar, el CFDI se cancela. |
400 — validación fallida
{
"code": "VALIDATION_ERROR",
"message": "Ocurrió un error con los datos de la factura. Verifica la información e intenta nuevamente.",
"errors": [
{
"field": "payment_form",
"code": "invalid_value",
"message": "Con el método de pago PPD la forma de pago debe ser 99 (Por definir)."
},
{
"field": "cfdi_use",
"code": "invalid_value",
"message": "El uso de CFDI no existe en el catálogo del SAT."
}
],
"request_id": "9220d5cd-c9ea-4be6-a5ef-6b32ac57d77d"
}