Crear CFE
Emite un CFE de cualquier tipo soportado por DGI. Si la creación es exitosa, la API devuelve los datos internos del comprobante, CAE, hash y URL para el código QR.
Endpoint
POST https://api-test.facturaelectronica.com.uy/comprobantes/crear
Authorization: Bearer ACCESS_TOKEN
Content-Type: application/json
X-Emisor: 219999830019
Campos principales del request
| Campo | Requerido | Descripción | Tipo |
|---|---|---|---|
sucursal | Sí | Número de sucursal DGI del emisor. Debe ser mayor a 0. | Int |
giro_emisor | No | Giro o actividad comercial del emisor que se informa en el comprobante. | String |
tipo_comprobante | Sí | Código de CFE según tabla DGI. Ej.: 101 eTicket, 111 eFactura. | Int |
forma_pago | Condicional | 1 contado, 2 crédito. | Int |
moneda | Sí, excepto e-remito | Código ISO 4217. Ej.: UYU, USD, EUR. | String |
tipo_cambio | No | Si se omite, se usa cierre BCU del día anterior a fecha_comprobante. | Decimal |
fecha_comprobante | No | Por defecto, hoy. Formato AAAA-MM-DD. | Date |
fecha_vencimiento | No | Fecha de vencimiento del comprobante. | Date |
cliente | Condicional | Obligatorio para eFactura, eBoleta de entrada y tickets mayores a 5.000 UI. | Obj |
items | Sí | Líneas del comprobante. | Array de objetos |
referencias | Condicional | Obligatorio para comprobantes de corrección, como notas de crédito o débito. | Array de objetos |
descuentos_recargos | No | Descuentos o recargos globales aplicados al comprobante completo. | Array de objetos |
adenda | No | Texto adicional u observaciones que se agregan al comprobante. | Obj |
id_externo | No | Token de idempotencia. Si se repite con los mismos datos, devuelve el resultado original. | String |
Objeto cliente
| Campo | Requerido | Descripción | Tipo |
|---|---|---|---|
cliente.tipo_doc | Sí | Tipo de documento. Ej.: 2 RUT, 3 CI. | Int |
cliente.cod_pais_doc | Sí | Código país ISO 3166-1 alfa-2. Para Uruguay: UY. | String |
cliente.nro_doc | Sí | Documento sin puntos ni guiones. | String |
cliente.denominacion | Sí | Nombre o razón social. Máximo 150 caracteres. | String |
cliente.correo_electronico | No | Correo para envío de PDF. Puede contener varios separados por coma. | String |
cliente.direccion | Condicional | Obligatorio para eFactura de exportación. | String |
cliente.ciudad | Condicional | Obligatorio para eFactura de exportación. | String |
cliente.dep_prov_estado | Condicional | Departamento, provincia o estado del receptor. | String |
cliente.pais | Condicional | Obligatorio para eFactura de exportación. | String |
Array items
| Campo | Requerido | Descripción | Tipo |
|---|---|---|---|
cantidad | Sí | Cantidad mayor a 0. | Decimal |
concepto | Sí | Nombre del producto o servicio. Máximo 80 caracteres. | String |
precio | Sí | Precio unitario mayor a 0. Hasta 6 decimales. | Decimal |
unidad | Sí | Unidad de medida. Si no corresponde, usar N/A. | String |
indicador_facturacion | Sí | Código de tratamiento fiscal del ítem. | Int |
descuento | No | Descuento porcentual. | Decimal |
recargo | No | Recargo porcentual. | Decimal |
descuento_mnt | No | Descuento en monto. | Decimal |
recargo_mnt | No | Recargo en monto. | Decimal |
Descuentos y recargos globales
El array descuentos_recargos permite informar descuentos o recargos aplicados al comprobante completo, no a una línea específica.
Los campos descuento, recargo, descuento_mnt y recargo_mnt dentro de items afectan una línea puntual. En cambio, descuentos_recargos afecta el comprobante a nivel global.
| Campo | Requerido | Descripción | Tipo |
|---|---|---|---|
indicador_facturacion | Sí | Código de tratamiento fiscal al que aplica el descuento o recargo. | Int |
tipo_movimiento | Sí | D para descuento, R para recargo. | String |
tipo_desc_rec | Sí | Tipo de valor informado: 1 monto fijo, 2 porcentaje. | Int |
codigo | No | Código asociado al descuento o recargo. Si se informa, debe estar entre 1 y 999. | Int |
glosa | Sí | Texto descriptivo del descuento o recargo. Máximo 50 caracteres. | String |
valor | Sí | Importe o porcentaje del descuento/recargo, según tipo_desc_rec. Hasta 15 enteros y 2 decimales. | Decimal |
Valores de tipo_desc_rec
| Valor | Significado |
|---|---|
1 | Monto fijo |
2 | Porcentaje |
Ejemplo:
"descuentos_recargos": [
{
"indicador_facturacion": 3,
"tipo_movimiento": "D",
"tipo_desc_rec": 2,
"codigo": null,
"glosa": "Un descuento porcentual",
"valor": 10
},
{
"indicador_facturacion": 3,
"tipo_movimiento": "R",
"tipo_desc_rec": 1,
"codigo": 123,
"glosa": "Un recargo fijo",
"valor": 8
}
]
Adenda
El objeto adenda permite agregar texto adicional al comprobante. No modifica los totales ni el cálculo fiscal.
| Campo | Requerido | Descripción | Tipo |
|---|---|---|---|
adenda.texto | No | Observaciones, mensajes comerciales, referencias internas u otro texto complementario. | String |
Ejemplo:
"adenda": {
"texto": "Gracias por su compra"
}
Ejemplo: emitir eTicket consumidor final
{
"giro_emisor": "SOFTWARE",
"sucursal": 1,
"tipo_comprobante": 101,
"forma_pago": 1,
"moneda": "UYU",
"fecha_comprobante": "2019-02-18",
"items": [
{
"cantidad": 1,
"concepto": "Joystick Ergonomico",
"precio": 1356.3,
"indicador_facturacion": 3,
"unidad": "Un"
}
],
"adenda": {
"texto": "Gracias por su compra"
}
}
Ejemplo: emitir eFactura con receptor
{
"sucursal": 1,
"tipo_comprobante": 111,
"forma_pago": 1,
"moneda": "UYU",
"fecha_comprobante": "2019-02-18",
"cliente": {
"tipo_doc": 2,
"cod_pais_doc": "UY",
"nro_doc": "219999830019",
"denominacion": "ACME S.A.",
"direccion": "RUTA 3",
"ciudad": "SAN JOSE DE MAYO",
"dep_prov_estado": "SAN JOSE",
"pais": "URUGUAY"
},
"items": [
{
"cantidad": 1,
"concepto": "Joystick Ergonomico",
"precio": 1356.3,
"indicador_facturacion": 3,
"unidad": "Un"
}
]
}
Respuesta de creación
{
"id": 488751,
"comprobante_tipo": 111,
"serie": "A",
"numero": 2209,
"importe_total": 1356.3,
"hash": "m9May0sG7BBzXWMPLdSrxOOGL6E=",
"cae_numero": 90180421560,
"cae_rango_inicio": 2001,
"cae_rango_final": 90000,
"cae_vencimiento": "2030-03-03T00:00:00",
"url": "https://www.efactura.dgi.gub.uy/consultaQR/cfe?..."
}
| Campo | Descripción | Tipo |
|---|---|---|
id | Identificador interno del comprobante en FEU. | Int64 |
comprobante_tipo | Tipo de CFE emitido. | Int |
serie | Serie asignada al comprobante. | String |
numero | Número fiscal asignado dentro de la serie. | Int |
importe_total | Importe total del comprobante emitido. | Decimal |
hash | Hash de seguridad del comprobante. | String |
cae_numero | Número de CAE utilizado. | Int64 |
cae_rango_inicio | Inicio del rango autorizado por el CAE. | Int |
cae_rango_final | Fin del rango autorizado por el CAE. | Int |
cae_vencimiento | Fecha y hora de vencimiento del CAE. | DateTime |
url | URL del QR o consulta asociada al comprobante. | URL |
Empresa suspendida
La creación de nuevos comprobantes requiere que la empresa emisora indicada en X-Emisor no esté suspendida. Si está suspendida, la API devuelve HTTP 400 con el motivo en detalle. El rechazo no crea un comprobante ni consume numeración.
La suspensión puede deberse a distintos motivos; por ejemplo, falta de pago del servicio. El mensaje en detalle informa el motivo o las indicaciones de contacto correspondientes.
Si id_externo corresponde a un comprobante ya existente de la misma empresa emisora, se devuelve el resultado existente, sin crear otro comprobante, incluso si la empresa está suspendida. Las consultas de comprobantes existentes siguen disponibles.
Consultá el formato de respuesta y las acciones sugeridas.