Ir al contenido

Primeros pasos

Primera factura

La URL base de testing está en Ambientes.

En todos los pasos menos el primero, enviá x-api-key y x-api-secret. Cómo obtenerlos está en Credenciales.

GET /keepAlive no lleva credenciales ni cuerpo. Una respuesta con texto indica que el ambiente está activo.

Ventana de terminal
curl "https://southamerica-east1-fixedtesting-10ce2.cloudfunctions.net/apiFixed/keepAlive"

POST /validarCredenciales no lleva cuerpo. Si el par es válido, codigoError viene vacío y la respuesta trae el RUT y el nombre de la empresa.

Este ejemplo es el caso “venta a consumidor final” de la referencia: una línea en pesos, con IVA incluido, sin cliente. Una venta sin RUT se emite como e-Ticket (código 101).

Generá un UUID y mandalo en idempotencyKey. Si la conexión se corta, reintentá el mismo JSON con la misma clave. El detalle está en Idempotencia.

{
"cliente": null,
"fecha": "23/06/2026",
"moneda": "UYU",
"montoBruto": 1,
"lineasVenta": [
{
"cantidad": 1,
"descripcion": "Pan francés",
"descripcionLarga": "Pan francés artesanal",
"rubro": "Panadería",
"tasaIva": "Basic",
"descuentoMonto": 0,
"precioUnitario": 120
}
],
"observaciones": "",
"totalAPagar": 120,
"redondear": false,
"idempotencyKey": "a1b2c3d4-e5f6-4a1b-9c2d-1234567890ab"
}

totalAPagar tiene que coincidir con el total que calcula Fixed. tasaIva tiene que ser un valor cfeDgi configurado en la empresa, por ejemplo Basic.

Si salió bien, codigoError viene vacío. Guardá idCFE: lo vas a usar para consultar, imprimir o devolver. También guardá serie, numero, tipoCFE y comprobante.

{
"descripcion": "",
"codigoError": "",
"idCFE": "id-generado-por-fixed",
"idVenta": "id-de-la-venta",
"numero": 1523,
"serie": "A",
"tipoCFE": 101,
"comprobante": "e-Ticket A 1523",
"urlA4": "https://testing.fixed.uy/verificarCFEverPDF/...",
"urlTicket": "https://testing.fixed.uy/verificarCFEverTicket/...",
"urlVerificarCFE": "https://testing.fixed.uy/verificarCFE/...",
"htmlTicket": "<html>...</html>",
"pdfBase64": "...",
"xml": "<?xml version=\"1.0\" ...>",
"observaciones": ""
}

Los identificadores, el número y el final de cada URL los completa Fixed. urlA4 es el PDF, urlTicket el ticket térmico y htmlTicket el ticket para mostrar en el navegador.

Si codigoError está vacío pero las URLs vienen vacías, el comprobante igual se emitió. No vuelvas a llamar a ventaCrear. Pedí las URLs con POST /imprimirCFE usando ese idCFE.

El resto de los ejemplos está en Crear una venta. Para pasar a comprobantes reales, seguí Pasar a producción.