Datos de la representación impresa de un CFE recibido (JSON)
GET /v1/cfe/recibidos/{id}/representacion-impresa
Devuelve los datos con los que Host Factura arma el PDF del CFE recibido (el mismo objeto que GET /v1/cfe/representacion-impresa/{id} para los emitidos): emisor, receptor, líneas, totales, CAE, referencias, adenda, el QR de DGI como imagen y el código de seguridad.
⚠️ La estructura sigue al payload interno de impresión y no es un contrato estable campo a campo: cambia cuando cambia el Manual de Representación Impresa de DGI. Leé los campos que necesitás y tolerá los que aparezcan. Si lo que buscás son los datos del comprobante para procesarlos (importes, líneas, impuestos), usá GET /v1/cfe/recibidos/{id}, que sí es un contrato estable.
Necesita el XML del comprobante: si no está guardado responde 404 CFE_RECIBIDO_SIN_XML.
Disponible para toda empresa, aunque no emita comprobantes (por ejemplo, una institución que sólo recibe facturas de sus proveedores). Los recibidos son de la empresa, no de una sucursal: una credencial fijada a una sucursal ve todos.
Alcance requerido:
recibidos:leer. Si la credencial no lo tiene, la respuesta es403 API_ALCANCE_INSUFICIENTEcon la lista enerror.requerido. Las credenciales creadas antes del modelo de alcances (alcances: null) conservan acceso total.
Autorizaciones
Sección titulada «Autorizaciones »Parámetros
Sección titulada « Parámetros »Parámetros de path
Sección titulada «Parámetros de path »UUID del CFE recibido (el cfeRecibidoId de los webhooks cfe_recibido.*)
UUID del CFE recibido (el cfeRecibidoId de los webhooks cfe_recibido.*)
Parámetros de header
Sección titulada «Parámetros de header »Ejemplo
0199d1b0-0000-7000-8000-000000000000Sólo para credenciales de cuenta proveedora (revendedor). UUID de la subcuenta de la cartera sobre la que se quiere operar: la cuenta efectiva del request pasa a ser esa.
Una credencial que no es de proveedor, o una subcuenta que no está en su cartera, recibe 403 API_CUENTA_FUERA_DE_CARTERA. Sin la cabecera, la cuenta es siempre la de la credencial.
Respuestas
Sección titulada « Respuestas »Datos de la representación impresa (ejemplo recortado: paramQR y logo son data-URLs base64)
object
Ejemplos
{ "data": { "Parametros": { "paramQR": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA…", "CodSeg": "aB3dE9", "LeyendaVerificacion": "Puede verificar comprobante en www.dgi.gub.uy", "MostrarTipoCambio": false, "Nota": false, "pagina": "1", "totalPaginas": "1", "logo": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA…", "logoSize": 256, "paramHeader": "#F3F3F3", "paramDecimals": "00", "paramLetter": "#000000", "logoLeft": "0", "logoTop": "0", "AdendaSeparada": false }, "Receptor": { "TipoDocRecep": "RUC", "DocRecep": "219999990019", "RznSocRecep": "CLIENTE S.R.L.", "DirRecep": "Rivera 2000", "CiudadRecep": "Montevideo", "DepartamentoRecep": "Montevideo", "CP": "", "Item": "1", "CompraID": "OC-2026-118", "PaisRecep": "Uruguay", "DeptoRecep": "Montevideo", "DocRecepExt": "", "CodPaisRecep": "UY", "InfoAdicionalEmisor": "", "DomicilioUnificado": "Rivera 2000, Montevideo, Montevideo, Uruguay" }, "Emisor": { "RUCEmisor": "212345670019", "NomComercial": "Ejemplo", "RznSoc": "EJEMPLO S.A.", "DomFiscal": "18 de Julio 1234", "Ciudad": "Montevideo", "Departamento": "Montevideo", "CorreoEmisor": "facturacion@ejemplo.com.uy", "TelEmisor": "2900 0000", "InfoAdicionalEmisor": "", "GiroEmis": "", "LeyendaEmisor": "" }, "IdDoc": { "TipoCFE": "e-Factura", "Serie": "A", "Nro": 1042, "FchEmis": "12/09/2026", "FmaPago": "Crédito", "ClauVenta": "AS", "FchVenc": "12/10/2026" }, "CaeData": { "CAE_ID": "90230001234", "DNro": "1", "HNro": "10000", "FecVenc": "31/12/2027" }, "Totales": { "TpoMoneda": "UYU", "MntNoGrv": "0", "MntNetoIvaTasaMin": "0", "MntNetoIVATasaBasica": "1000", "IVATasaMin": "10", "IVATasaBasica": "22", "MntIVATasaMin": "0", "MntIVATasaBasica": "220", "MntTotal": "1220", "CantLinDet": "1", "MntPagar": "1220", "Subtotal": 1000 }, "Referencias": [], "Detalle": [ { "NroLinDet": 1, "NomItem": "Servicio mensual", "Cantidad": "1", "UniMed": "N/A", "IndFact": "3", "PrecioUnitario": "1000", "MontoItem": "1000", "DscItem": "Mantenimiento setiembre", "isNegativo": false } ], "Adenda": "", "esRemito": false, "esResguardo": false, "MediosPago": [ { "GlosaMP": "Crédito", "ValorPago": 1220 } ] }}No autenticado. La API_KEY no fue enviada, no es válida o la credencial está desactivada.
Códigos posibles: API_AUTH_HEADER_MISSING, API_AUTH_HEADER_INVALID, API_ACCESS_INVALID.
object
object
Identificador estable del error en SCREAMING_SNAKE_CASE
Mensaje legible en español. No parsearlo: puede cambiar
object
object
Sólo en 403 API_ALCANCE_INSUFICIENTE: alcances que habilitan la operación
UUID de correlación; mismo valor que el header X-Request-ID
Ejemplos
Falta header Authorization
{ "error": { "code": "API_AUTH_HEADER_MISSING", "message": "Se esperaba la cabecera Authorization con esquema Bearer" }, "requestId": "5b2c7c8a-1f6e-4d29-9a0b-7c3a8d1e2f4c"}Secret key inválida o revocada
{ "error": { "code": "API_ACCESS_INVALID", "message": "Acceso no autorizado" }, "requestId": "5b2c7c8a-1f6e-4d29-9a0b-7c3a8d1e2f4c"}Acceso prohibido. La credencial es válida pero algo del contexto lo impide. Las cinco causas se corrigen de forma distinta y ninguna se arregla reintentando:
| Code | Qué pasó | Cómo se corrige |
|---|---|---|
API_FEATURE_DISABLED | La cuenta no tiene la API habilitada en su plan | Pedir la habilitación a soporte o al proveedor |
API_ALCANCE_INSUFICIENTE | La credencial no tiene el alcance de la operación (va en error.requerido) | Editar la credencial en Integraciones → API |
API_ALCANCE_NO_DISPONIBLE | La credencial tiene el alcance pero la cuenta no lo admite: sin cobros habilitados (pagos:*), sin facturación (cfe:*) o no es cuenta proveedora (webhooks:gestionar). Va en error.details | Pedir la habilitación a soporte o al proveedor |
API_ACCESS_BRANCH_MISMATCH | x-branch-id distinto de la sucursal fijada en la credencial | Quitar la cabecera o usar otra credencial |
API_CUENTA_FUERA_DE_CARTERA | x-cuenta-id apunta a una cuenta que no es de la cartera | Revisar el UUID de la subcuenta |
object
object
Identificador estable del error en SCREAMING_SNAKE_CASE
Mensaje legible en español. No parsearlo: puede cambiar
object
object
Sólo en 403 API_ALCANCE_INSUFICIENTE: alcances que habilitan la operación
UUID de correlación; mismo valor que el header X-Request-ID
Ejemplos
Falta recibidos:leer (cfe:leer no alcanza)
{ "error": { "code": "API_ALCANCE_INSUFICIENTE", "message": "La credencial de API no tiene ninguno de los alcances necesarios para esta operación (recibidos:leer)", "requerido": [ "recibidos:leer" ] }, "requestId": "7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d"}CFE_RECIBIDO_NO_ENCONTRADO: no existe o es de otra empresa (los dos casos responden igual). CFE_RECIBIDO_SIN_XML: existe pero no tiene el XML firmado guardado (xmlDisponible: false en el listado); sin XML no hay QR ni código de seguridad para armar el documento.
object
object
Identificador estable del error en SCREAMING_SNAKE_CASE
Mensaje legible en español. No parsearlo: puede cambiar
object
object
Sólo en 403 API_ALCANCE_INSUFICIENTE: alcances que habilitan la operación
UUID de correlación; mismo valor que el header X-Request-ID
Ejemplos
No existe o es de otra empresa
{ "error": { "code": "CFE_RECIBIDO_NO_ENCONTRADO", "message": "CFE recibido no encontrado (3c1e9f62-8a4b-4d7e-b0c2-5f6a7b8c9d0e)" }, "requestId": "7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d"}El CFE no tiene el XML guardado
{ "error": { "code": "CFE_RECIBIDO_SIN_XML", "message": "El CFE recibido (3c1e9f62-8a4b-4d7e-b0c2-5f6a7b8c9d0e) no tiene el XML firmado guardado" }, "requestId": "7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d"}El id no es un UUID (VALIDATION_ERROR)
object
object
Identificador estable del error en SCREAMING_SNAKE_CASE
Mensaje legible en español. No parsearlo: puede cambiar
object
object
Sólo en 403 API_ALCANCE_INSUFICIENTE: alcances que habilitan la operación
UUID de correlación; mismo valor que el header X-Request-ID
Ejemplos
Id inválido
{ "error": { "code": "VALIDATION_ERROR", "message": "La petición no pasó la validación", "details": [ { "campo": "id", "codigo": "invalid_format", "mensaje": "Invalid UUID" } ] }, "requestId": "7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d"}Rate limit excedido. Esperá los segundos del header Retry-After. La cuota va por credencial: 60 req/min en cuentas estándar, 600 en cuentas proveedor.
object
object
Identificador estable del error en SCREAMING_SNAKE_CASE
Mensaje legible en español. No parsearlo: puede cambiar
object
object
Sólo en 403 API_ALCANCE_INSUFICIENTE: alcances que habilitan la operación
UUID de correlación; mismo valor que el header X-Request-ID
Ejemplos
Excediste el rate limit
{ "error": { "code": "API_RATE_LIMITED", "message": "Se superó el límite de requests para esta API key" }, "requestId": "5b2c7c8a-1f6e-4d29-9a0b-7c3a8d1e2f4c"}Headers
Sección titulada «Headers »Ejemplo
42Segundos hasta que se libera la ventana de rate limit