Facturació FACe (B2G)
Envia factures FacturaE 3.2.2 a FACe — codis DIR3, XML signat XAdES-EPES, estats de tramitació, anul·lació, simulació en sandbox i l'scope facturae:write.
Facturar a una administració pública espanyola (B2G) és obligatori a través de FACe, el punt general d'entrada de factures electròniques (Ley 25/2013). Factuarea genera l'XML FacturaE 3.2.2 de qualsevol factura emesa, el signa XAdES-EPES amb el certificat de la teva empresa i el presenta al web service de FACe — i després segueix rastrejant l'estat de tramitació que informa FACe fins que la factura es paga (o es rebutja).
El cicle de vida complet el cobreixen les cinc operacions del grup FacturaE de la Referència de l'API:
- Descarregar l'XML FacturaE d'una factura — signat o sense signar, amb FACe o sense.
- Enviar una factura a FACe.
- Llistar els enviaments d'una factura.
- Recuperar un enviament per seguir el seu estat de tramitació.
- Sol·licitar l'anul·lació d'un enviament.
Les lectures usen l'scope facturae:read; enviar i anul·lar requereixen
facturae:write. El mòdul FacturaE està inclòs als plans Empresario i
Enterprise.
Abans d'enviar
Configura els tres codis DIR3 del client. Tot client administració
pública porta tres codis del directori DIR3, cadascun amb el format
^[A-Z][A-Z0-9]{8,9}$ (p. ex. L01280796). Configura'ls en crear o
actualitzar el client:
curl -X PUT https://api.factuarea.com/v1/clients/0197a2a8-4cf0-7a31-9a5e-3f2b8c1d6e42 \
-H "Authorization: Bearer fact_live_3pXnR2VbY7TcA9eFmN5z8KqW" \
-H "Content-Type: application/json" \
-d '{
"dir3_accounting_office": "L01280796",
"dir3_managing_body": "L01280796",
"dir3_processing_unit": "L01280796"
}'| Camp | Rol DIR3 |
|---|---|
dir3_accounting_office | Oficina contable (01) |
dir3_managing_body | Órgano gestor (02) |
dir3_processing_unit | Unidad tramitadora (03) |
L'administració t'indica els tres codis (sovint coincideixen); també pots consultar-los al directori públic DIR3.
Puja un certificat de signatura actiu. FACe només accepta factures
signades, així que l'enviament requereix el certificat FNMT (PKCS#12)
que la teva empresa ja usa per a VeriFactu
(POST /v1/verifactu/certificates). Sense certificat actiu l'enviament
falla amb signing_certificate_required.
Emet la factura. Les factures en esborrany no poden viatjar a FACe —
enviar o emetre abans la factura és el que congela el seu contingut legal.
Els esborranys responen invoice_not_emittable_for_facturae.
Descarregar l'XML FacturaE
Pots descarregar l'XML en qualsevol moment — per a presentació manual, arxiu o validació — sense involucrar FACe:
curl -OJ https://api.factuarea.com/v1/invoices/0197b1c2-89ab-7def-8123-456789abcdef/facturae \
-H "Authorization: Bearer fact_live_3pXnR2VbY7TcA9eFmN5z8KqW"Amb un certificat actiu el cos va signat XAdES-EPES (política de signatura
Facturae v3.1) i el fitxer es diu .xsig; sense, l'XML torna sense signar
com a .xml. El header de resposta X-Facturae-Signed: true|false
distingeix ambdós casos. Consulta la
referència de l'endpoint.
La descàrrega tolera l'absència de certificat (obtens l'XML sense signar); l'enviament a FACe no — FACe exigeix la signatura.
Enviar a FACe
L'operació d'enviament no porta cos de petició: la factura viatja a la ruta i els codis DIR3 es llegeixen del client en el moment de l'enviament (i es capturen a la submission):
curl -X POST https://api.factuarea.com/v1/invoices/0197b1c2-89ab-7def-8123-456789abcdef/face-submissions \
-H "Authorization: Bearer fact_live_3pXnR2VbY7TcA9eFmN5z8KqW" \
-H "Idempotency-Key: $(uuidgen)"Resposta (201):
{
"data": {
"id": "0197c3d4-5e6f-7a8b-9c0d-1e2f3a4b5c6d",
"object": "face_submission",
"invoice_id": "0197b1c2-89ab-7def-8123-456789abcdef",
"status": "submitted",
"registry_number": "202612345678",
"dir3_accounting_office": "L01280796",
"dir3_managing_body": "L01280796",
"dir3_processing_unit": "L01280796",
"error_code": null,
"error_message": null,
"status_updated_at": "2026-06-12T10:15:00Z",
"last_polled_at": null,
"created_at": "2026-06-12T10:15:00Z"
}
}registry_number és l'assentament registral de FACe que acredita la
presentació — conserva'l per a qualsevol disputa amb l'administració.
Seguir l'estat de tramitació
FACe informa de com l'administració tramita la factura. Factuarea consulta FACe periòdicament i actualitza cada enviament — recuperar el detall de l'enviament (o l'historial d'enviaments de la factura) és la manera de seguir el progrés; no hi ha endpoint de refresc a v1:
curl https://api.factuarea.com/v1/face-submissions/0197c3d4-5e6f-7a8b-9c0d-1e2f3a4b5c6d \
-H "Authorization: Bearer fact_live_3pXnR2VbY7TcA9eFmN5z8KqW"status | Significat |
|---|---|
submitted | Presentada a FACe; número de registre assignat. |
registered_rcf | Registrada al RCF (el registre comptable de factures de l'administració). |
accounted | Reconeguda com a obligació comptable per l'administració. |
paid | L'administració informa de la factura com a pagada. |
rejected | Rebutjada per l'administració — consulta el motiu a FACe i emet una factura corregida. |
cancellation_requested | Has sol·licitat l'anul·lació; pendent de confirmació de FACe. |
cancelled | Anul·lació confirmada per FACe. |
error | Error local de transmissió — error_code i error_message porten el detall. |
Prefereixes push a polling? Subscriu-te als
esdeveniments de webhook facturae.face_submitted,
facturae.face_status_changed i facturae.face_cancellation_requested.
Sol·licitar l'anul·lació
Mentre la factura no s'hagi pagat ni rebutjat pots
sol·licitar-ne l'anul·lació
(anul·lació 4200). El reason és obligatori i viatja a FACe:
curl -X POST https://api.factuarea.com/v1/face-submissions/0197c3d4-5e6f-7a8b-9c0d-1e2f3a4b5c6d/cancel \
-H "Authorization: Bearer fact_live_3pXnR2VbY7TcA9eFmN5z8KqW" \
-H "Content-Type: application/json" \
-d '{ "reason": "Factura emitida por error al organismo equivocado." }'L'anul·lació només es permet en un estat anul·lable (submitted,
registered_rcf, accounted); en cas contrari la crida respon
face_submission_not_cancellable. L'enviament passa a
cancellation_requested fins que FACe confirma l'estat final cancelled.
Mode de prova
Amb una clau de prova (fact_test_) tot el flux es simula: cap crida
SOAP arriba a FACe i l'enviament rep un número de registre sintètic amb
prefix FACE-SANDBOX-*. Les validacions de signatura i DIR3 segueixen
aplicant, així que el sandbox exercita els mateixos camins d'error que
producció. Consulta el mode de prova.
Errors
| HTTP | code / subcode | Quan |
|---|---|---|
| 404 | resource_not_found | La factura o l'enviament no existeix o pertany a una altra empresa. |
| 422 | business_rule_violation / invoice_not_emittable_for_facturae | La factura està en esborrany — emet-la primer. |
| 422 | business_rule_violation / client_missing_dir3_codes | Al client li falta un o més codis DIR3. |
| 422 | business_rule_violation / signing_certificate_required | Sense certificat de signatura actiu — puja'n un via POST /v1/verifactu/certificates. |
| 422 | business_rule_violation / face_submission_not_cancellable | L'enviament no està en un estat anul·lable. |
| 409 | resource_already_exists / face_submission_already_exists | Ja existeix un enviament actiu per a la factura. |
| 403 | insufficient_scope | La clau no té l'scope facturae:write. |
| 502 | face_transmission_failed | El web service de FACe està caigut — no es persisteix res; reintenta més tard. |
Esmena de registres VeriFactu
Corregeix i reenvia registres de facturació VeriFactu rebutjats per l'AEAT — quan aplica l'esmena (subsanación), quan necessites una anul·lació o una rectificativa, i el flux exacte de l'API.
Migració des de Holded
Mapeig de recursos Holded → Factuarea, nomenclatura, endpoints equivalents i script en Python.