Saltearse al contenido

Consulta un CFE emitido por su UUID

GET
/v1/cfe/info/{id}

Devuelve el detalle completo de un CFE emitido por la cuenta autenticada.

data.cliente trae los datos del receptor tomados del XML enviado a DGI (documento, denominación, dirección), aunque el CFE se haya emitido sin registrar un Cliente (clienteId en null). Es null solo si el CFE no tiene Receptor (p.ej. algunos e-Ticket). Este campo se hidrata en este endpoint; en POST /v1/cfe/emitir y en GET /v1/cfe/listar-emitidos viene null.

data.metadata incluye los metadatos personalizados capturados al emitir ({} si la cuenta no tiene campos configurados o no se enviaron valores). Ver Metadatos personalizados.

Para obtener el PDF, usá GET /v1/cfe/pdf/{id} con el mismo UUID.

Alcance requerido: cfe:leer. Si la credencial no lo tiene, la respuesta es 403 API_ALCANCE_INSUFICIENTE con la lista en error.requerido. Las credenciales creadas antes del modelo de alcances (alcances: null) conservan acceso total.

id
required

Identificador único del recurso (UUID v4)

string format: uuid

Identificador único del recurso (UUID v4)

x-cuenta-id
string format: uuid
Ejemplo
0199d1b0-0000-7000-8000-000000000000

Só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.

x-branch-id
string format: uuid

Sucursal contra la que operar, cuando la credencial es global. Si la credencial está fijada a una sucursal y esta cabecera indica otra, la respuesta es 403 API_ACCESS_BRANCH_MISMATCH. Sin la cabecera se asume la casa central.

x-point-id
string format: uuid

Punto de emisión dentro de la sucursal resuelta. Obligatorio cuando la sucursal tiene 2 o más puntos activos (400 PUNTO_EMISION_REQUERIDO si falta); con uno solo se selecciona automáticamente.

Detalle del CFE

object
Ejemplos

CFE emitido y aceptado por DGI

{
"data": {
"id": "8a7b6c5d-4e3f-2a1b-9c8d-7e6f5a4b3c2d",
"tipo": 111,
"tipoDescripcion": "e-Factura",
"serie": "A",
"numero": 1234,
"rutEmisor": "210000000000",
"moneda": "UYU",
"tipoCambio": 1,
"subtotal": 12500,
"iva": 2750,
"total": 15250,
"adenda": "Forma de pago: transferencia BROU 001-1234567-89",
"compraId": "OC-2026-00845",
"retenciones": null,
"mntTotRetenido": null,
"mntTotCredFisc": null,
"anulado": false,
"estado": "aceptado",
"estadoDgi": "A",
"fechaEstadoDgi": "2026-05-17T13:42:11.000Z",
"motivoRechazo": null,
"codigoRespuesta": "00",
"codigoSucursalDgi": 1,
"clienteId": null,
"cliente": {
"tipoDocumento": "RUC",
"documento": "219999830019",
"denominacion": "EMPRESA EJEMPLO S.A.",
"direccion": null,
"ciudad": null,
"departamento": null,
"pais": "UY"
},
"cuentaId": "1d2e3f4a-5b6c-7d8e-9f0a-1b2c3d4e5f6a",
"sucursalId": null,
"puntoEmisionId": null,
"referenciaId": null,
"uuidReferencia": "9b8a7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d",
"sobreId": "2a3b4c5d-6e7f-8a9b-0c1d-2e3f4a5b6c7d",
"reporteDiarioId": null,
"cfeRecurrenteId": null,
"origen": "api_v1",
"requestId": "5b2c7c8a-1f6e-4d29-9a0b-7c3a8d1e2f4c",
"fechaCreacion": "2026-05-17T13:42:10.000Z",
"fechaActualizacion": "2026-05-17T13:42:11.000Z",
"metadata": {}
}
}

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
error
required
object
code
required

Identificador estable del error en SCREAMING_SNAKE_CASE

string
message
required

Mensaje legible en español. No parsearlo: puede cambiar

string
details
Any of:
object
requerido

Sólo en 403 API_ALCANCE_INSUFICIENTE: alcances que habilitan la operación

Array<string>
Allowed values: cfe:emitir cfe:leer recibidos:leer consultas clientes:leer clientes:escribir pagos:leer pagos:cobrar pagos:tarjetas pagos:suscripciones pagos:configurar webhooks:gestionar
requestId

UUID de correlación; mismo valor que el header X-Request-ID

string format: uuid
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"
}

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:

CodeQué pasóCómo se corrige
API_FEATURE_DISABLEDLa cuenta no tiene la API habilitada en su planPedir la habilitación a soporte o al proveedor
API_ALCANCE_INSUFICIENTELa credencial no tiene el alcance de la operación (va en error.requerido)Editar la credencial en Integraciones → API
API_ALCANCE_NO_DISPONIBLELa 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.detailsPedir la habilitación a soporte o al proveedor
API_ACCESS_BRANCH_MISMATCHx-branch-id distinto de la sucursal fijada en la credencialQuitar la cabecera o usar otra credencial
API_CUENTA_FUERA_DE_CARTERAx-cuenta-id apunta a una cuenta que no es de la carteraRevisar el UUID de la subcuenta
object
error
required
object
code
required

Identificador estable del error en SCREAMING_SNAKE_CASE

string
message
required

Mensaje legible en español. No parsearlo: puede cambiar

string
details
Any of:
object
requerido

Sólo en 403 API_ALCANCE_INSUFICIENTE: alcances que habilitan la operación

Array<string>
Allowed values: cfe:emitir cfe:leer recibidos:leer consultas clientes:leer clientes:escribir pagos:leer pagos:cobrar pagos:tarjetas pagos:suscripciones pagos:configurar webhooks:gestionar
requestId

UUID de correlación; mismo valor que el header X-Request-ID

string format: uuid
Ejemplos

Falta el alcance

{
"error": {
"code": "API_ALCANCE_INSUFICIENTE",
"message": "La credencial de API no tiene ninguno de los alcances necesarios para esta operación (pagos:cobrar)",
"requerido": [
"pagos:cobrar"
]
},
"requestId": "3f6b1c2e-9a4d-4f80-bc11-7e2d5a8f0c31"
}

CFE no encontrado o pertenece a otra cuenta

object
error
required
object
code
required

Identificador estable del error en SCREAMING_SNAKE_CASE

string
message
required

Mensaje legible en español. No parsearlo: puede cambiar

string
details
Any of:
object
requerido

Sólo en 403 API_ALCANCE_INSUFICIENTE: alcances que habilitan la operación

Array<string>
Allowed values: cfe:emitir cfe:leer recibidos:leer consultas clientes:leer clientes:escribir pagos:leer pagos:cobrar pagos:tarjetas pagos:suscripciones pagos:configurar webhooks:gestionar
requestId

UUID de correlación; mismo valor que el header X-Request-ID

string format: uuid
Ejemplos

CFE no encontrado

{
"error": {
"code": "CFE_EMITIDO_NO_ENCONTRADO",
"message": "CFE no encontrado (uuid)"
},
"requestId": "5b2c7c8a-1f6e-4d29-9a0b-7c3a8d1e2f4c"
}

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
error
required
object
code
required

Identificador estable del error en SCREAMING_SNAKE_CASE

string
message
required

Mensaje legible en español. No parsearlo: puede cambiar

string
details
Any of:
object
requerido

Sólo en 403 API_ALCANCE_INSUFICIENTE: alcances que habilitan la operación

Array<string>
Allowed values: cfe:emitir cfe:leer recibidos:leer consultas clientes:leer clientes:escribir pagos:leer pagos:cobrar pagos:tarjetas pagos:suscripciones pagos:configurar webhooks:gestionar
requestId

UUID de correlación; mismo valor que el header X-Request-ID

string format: uuid
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"
}
Retry-After
integer
Ejemplo
42

Segundos hasta que se libera la ventana de rate limit