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 |
cod_montos_brutos | Condicional | Indica cómo vienen expresados los montos de las líneas. | Int |
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 |
codigo_tipo_cae | No | Selector funcional del tipo de CAE a usar. No es el identificador del CAE. | Int |
Selección de tipo de CAE
El campo opcional codigo_tipo_cae permite indicar qué tipo de CAE debe usar la creación del comprobante.
Si codigo_tipo_cae viene omitido o null, la API mantiene el flujo actual de selección automática de CAE.
Campo nuevo
| Campo | Requerido | Descripción | Tipo |
|---|---|---|---|
codigo_tipo_cae | No | Selector funcional del tipo de CAE a usar. No es un identificador de libreta o CAE. | Int |
Valores permitidos
| Valor | Comportamiento |
|---|---|
omitido / null | Mantiene el flujo actual de selección automática. |
0 | Fuerza CAE normal. |
1 | Fuerza CAE especial Exonerada. |
2 | Fuerza CAE especial IVA Mínimo. |
3 | Fuerza CAE especial Monotributo. |
4 | Fuerza CAE especial Monotributo MIDES. |
Ejemplo: mantener flujo automático
{
"tipo_comprobante": 111,
"sucursal": 4
}
Comportamiento: usa la lógica anterior, sin cambios.
Ejemplo: forzar CAE normal
{
"tipo_comprobante": 111,
"sucursal": 4,
"codigo_tipo_cae": 0
}
Selecciona solo CAEs normales.
Si no hay CAE normal disponible, la creación falla. No cae automáticamente en un CAE especial.
Ejemplo: forzar CAE exonerado
{
"tipo_comprobante": 111,
"sucursal": 4,
"codigo_tipo_cae": 1
}
Selecciona solo CAEs especiales de tipo Exonerada.
Validación
Valores válidos:
null, 0, 1, 2, 3, 4
Si se envía otro valor, la API devuelve un error de validación.
Ejemplo inválido:
{
"codigo_tipo_cae": 9
}
Si no hay CAE disponible
Si se pide un tipo específico y no hay libreta o CAE compatible, la API responde con el error actual de creación indicando el código solicitado.
Ocurrió un error al intentar obtener serie/número para el comprobante o no se encuentra disponible para el código de tipo de CAE solicitado [1].
codigo_tipo_cae selecciona el tipo funcional de CAE que la API debe usar. No representa el identificador de una libreta o CAE específico.
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",
"cod_montos_brutos": 1,
"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",
"cod_montos_brutos": 1,
"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 |