Automatiza la facturación electrónica VeriFactu desde servicios Rust de alto rendimiento. Ejemplos con reqwest y tokio.
La API REST de InvoCash es perfectamente compatible con el ecosistema async de Rust. Con reqwest para HTTP, serde_json para JSON y tokio como runtime, la integración es limpia y type-safe.
Ideal para backends de alto rendimiento, servicios financieros o aplicaciones que requieran garantías de memoria y velocidad nativa, manteniendo el cumplimiento VeriFactu externalizado a InvoCash.
Rust garantiza memory-safety sin garbage collection. Cero costo por abstracción.
Con tokio, procesa miles de facturas simultáneamente sin bloques ni overhead.
InvoCash gestiona firma, hashes y envío a la AEAT. Tu código solo crea facturas.
Servicios financieros, high-frequency trading, sistemas críticos. Rust aguanta.
use reqwest::Client;
use serde_json::json;
const BASE_URL: &str = "https://{su-tenant}.invo.cash/api";
let client = Client::new();
let auth: serde_json::Value = client
.post(format!("{}/auth/login", BASE_URL))
.json(&json!({
"email": "usuario@empresa.com",
"password": "tu_contraseña"
}))
.send().await?
.json().await?;
let token = auth["access_token"].as_str().unwrap();
// Alternativa: API Key
// .header("X-API-Key", "tu_api_key")Calcula tax_base, tax_amount y total antes de enviar — la API no los calcula.
let precio: f64 = 2000.0;
let tax_base = precio;
let tax_amount = (tax_base * 21.0 / 100.0 * 100.0).round() / 100.0;
let result: serde_json::Value = client
.post(format!("{}/invoices", BASE_URL))
.bearer_auth(token)
.json(&json!({
"customer_id": 123,
"verifactu_issuer_territory": "MAINLAND",
"simplified": false,
"lines": [{
"description": "Servicio backend Rust",
"quantity": 1,
"unit_price": precio,
"tax_base": tax_base,
"tax_pctge": 21,
"tax_amount": tax_amount,
"tax_withholding_pctge": 0,
"tax_withholding_amount": 0,
"tax_type": "IVA",
"clave_regimen": "01",
"qualification_operation": "S1",
"exempt_operation": null,
"total": tax_base,
}],
"total": tax_base + tax_amount,
}))
.send().await?
.json().await?;// Estado VeriFactu
let vf: serde_json::Value = client
.get(format!("{}/invoice/{}/verifactu", BASE_URL, invoice_id))
.bearer_auth(token)
.send().await?.json().await?;
// Descargar PDF
let pdf_bytes = client
.get(format!("{}/invoice/{}/downloadPdf", BASE_URL, invoice_id))
.bearer_auth(token)
.send().await?
.bytes().await?;
std::fs::write("factura.pdf", &pdf_bytes)?;VeriFactu incluido automáticamente: todas las facturas creadas mediante la API de InvoCash se procesan con el sistema VeriFactu de la AEAT. Cumplimiento de la Ley Antifraude y el RD 1007/2023 sin ningún desarrollo adicional por tu parte.
¿Dudas durante la integración?
Nuestro equipo técnico te da respuesta ágil dentro del horario laboral. No hace falta que seas cliente.
Los endpoints que usarás con más frecuencia en tu integración. La documentación completa está disponible dentro de la plataforma.
| Método | Endpoint | Descripción |
|---|---|---|
| POST | /api/auth/login | Autenticar y obtener token JWT |
| GET | /api/customers | Listar clientes |
| POST | /api/invoices | Crear una o varias facturas |
| GET | /api/invoices | Listar facturas (paginado, con filtros) |
| GET | /api/invoice/{id} | Detalle de una factura |
| PUT | /api/invoice/{id} | Actualizar factura (solo si no está validada) |
| GET | /api/invoice/{id}/verifactu | Estado de validación VeriFactu en la AEAT |
| GET | /api/invoice/{id}/downloadPdf | Descargar el PDF de la factura |
| POST | /api/invoice/{id}/communicate/email | Enviar la factura por email al cliente |
| POST | /api/invoice/{id}/validate | Enviar manualmente a VeriFactu |
Un motor de procesamiento de pagos en Rust recibe confirmaciones de transacciones a miles por segundo. Ante cada pago exitoso, una task de tokio llama de forma no bloqueante a la API de InvoCash para generar la factura, validarla con VeriFactu y devolver el ID de factura al sistema origen — con latencia mínima y garantías de tipo en compilación.
Nuestro equipo técnico te acompaña en todo el proceso. Sin compromiso.