Facturas directas
Una conexion API puede emitir facturas directamente cuando su propietario completa en Factulit el asistente Activar facturacion con VeriFactu. Crear la conexion tecnica o sincronizar pedidos no habilita este endpoint.
POST /api/v1/invoice es una operacion de emision, no de borrador. Una peticion correcta asigna atomicamente la serie API-* vigente de la conexion y su numero, crea el registro VeriFactu de ALTA y lo deja pendiente de remision a la AEAT. Las facturas emitidas no se pueden actualizar mediante PUT.
Idempotencia
Elige un external_id estable en tu sistema:
- La primera peticion responde HTTP
201. - El mismo
external_idcon el mismo payload normalizado devuelve el resultado existente con HTTP200yreplayed: true. - El mismo
external_idcon un payload diferente responde HTTP409yerror_code: idempotency_conflict.
Ejemplo
curl -X POST https://api.factulit.es/api/v1/invoice \
-H "X-API-KEY: factulit_example_key" \
-H "Content-Type: application/json" \
-H "X-Request-Id: 019ffae4-example" \
-d '{
"external_id": "invoice-2026-0001",
"invoice_type": "F1",
"description": "Venta online",
"currency": "EUR",
"recipient": {
"company": "Ejemplo SL",
"vat_number": "B00000000",
"country": "ES",
"address1": "Calle Mayor 1",
"postcode": "28001",
"city": "Madrid"
},
"lines": [{
"description": "Producto",
"quantity": 1,
"price_unit": 100,
"tax_rate": 21,
"regime": "01",
"qualification": "S1",
"type_tax": "01"
}]
}'Usa GET /api/v1/invoice/{external_id} para recuperar el resultado. Una peticion en moneda distinta de EUR debe incluir exchange_rate y exchange_rate_date.
El régimen documental (art6_full o art7_simplified) es independiente del código AEAT. Los cruces excepcionales exigen la marca estructurada correspondiente: qualified_simplified_art_7_2_3 para F1 simplificada cualificada o no_recipient_article_6_1_d para F2 completa sin identificación. El umbral automático general de la simplificada es 400 EUR. Para solicitar art7_simplified por encima de 400 EUR debes aportar simplified_attestation con base legal, rol del comprador y acreditación exacta de todas las líneas mediante su line_id. La base article_4_2 conserva el techo de 3.000 EUR; aeat_authorisation exige además un número y límite que coincidan con la autorización vigente configurada en Factulit. Si falta o hay una línea ambigua, profesional o no elegible, la API devuelve un error fiscal accionable; nunca presume la ampliación.
Antes del consentimiento se pueden sincronizar clientes, estados y pedidos; sus efectos fiscales quedan diferidos y la factura directa responde 409 invoicing_not_enabled.