Integrar VeriFactu en Python y Django

· Equipo Factuneo

Emite facturas VeriFactu desde Python/Django con requests: alta del emisor, emisión con idempotencia y webhook de estado. Ejemplos listos para copiar.

Integra VeriFactu en Python/Django con una simple petición HTTP. Nada de XML, huellas ni SOAP a mano.

1. API key

Guarda tu API key en una variable de entorno (FACTUNEO_API_KEY), no en un settings.py versionado.

2. Cliente mínimo con requests

import os, requests

BASE = "https://factuneo.es/api/v1"
HEADERS = {"x-api-key": os.environ["FACTUNEO_API_KEY"]}

# Alta de emisor
requests.post(f"{BASE}/emisores", headers=HEADERS, json={
    "nif": "B12345678",
    "nombreRazon": "Mi Empresa SL",
    "certMode": "PROPIO",
})

3. Emitir factura

r = requests.post(f"{BASE}/invoices",
    headers={**HEADERS, "Idempotency-Key": "FAC-2026-0001"},
    json={
        "emisorNif": "B12345678",
        "numeroSerie": "FAC-2026-0001",
        "fechaExpedicion": "2026-06-08",
        "tipoFactura": "F1",
        "nombreRazonEmisor": "Mi Empresa SL",
        "descripcionOperacion": "Servicios",
        "baseImponible": 100.00,
        "cuotaIva": 21.00,
        "importeTotal": 121.00,
        "destinatarios": [{"nombreRazon": "Cliente SA", "nif": "A28000024"}],
        "desglose": [{
            "claveRegimen": "01",
            "calificacionOperacion": "S1",
            "tipoImpositivo": 21,
            "baseImponible": 100.00,
            "cuotaRepercutida": 21.00,
        }],
    })
factura = r.json()  # huella, qr y estado en la respuesta

4. Webhook en Django

import json
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
def factuneo_webhook(request):
    # verifica la firma HMAC-SHA256 con el secreto de tu cuenta
    estado = json.loads(request.body)["estado"]
    return HttpResponse(status=204)

La documentación tiene la referencia completa. Compara con otras opciones en la comparativa.

← Volver al blog · Factuneo