Documentation

La documentation 4invoices comporte deux niveaux : le panneau, que vous utilisez sans écrire de code, et l'API publique, par laquelle votre propre système émet des factures et mène le document à travers le circuit national de facturation électronique (en Roumanie : e-Factura de l'ANAF). Cette page est l'entrée du second niveau.

Ouvrir la référence complète de l'API →

Ce que vous pouvez automatiser

L'API publique couvre l'émission de factures et de proformas, les avoirs, les clients avec vérification au registre des entreprises (en Roumanie : registre de l'ANAF), les séries de numérotation et tout le circuit national de facturation électronique (en Roumanie : e-Factura) : contrôle CIUS-RO, dépôt au SPV, suivi du statut, réponse signée et boîte de réception des factures fournisseurs.

https://api.4invoices.net/v1 · 25 endpoints · Spécification OpenAPI (sans clé)

invoices:read · invoices:write · clients:read · clients:write · efactura:read · efactura:submit

Authentification

Avant le premier appelFacturation → Paramètres → Accès API
bash
curl -sS -X POST https://api.4invoices.net/v1/auth/token \
  -H 'Content-Type: application/json' \
  -d '{
    "grant_type": "client_credentials",
    "client_id": "cli_XXXXXXXXXXXX",
    "client_secret": "sec_XXXXXXXXXXXXXXXXXXXX"
  }'

# → {"access_token":"eyJ...","token_type":"Bearer","expires_in":3600,
#    "scope":"invoices:read invoices:write efactura:submit"}
Serveur à serveur uniquement. N'appelez jamais l'API depuis du JavaScript de navigateur : le client_secret serait exposé au visiteur, et CORS bloque de toute façon toute origine.

Votre première facture en 6 étapes

  1. Créez des identifiants dans le panneau, sous Facturation → Paramètres → Accès API, et copiez le client_secret — il n'est affiché qu'une seule fois.
  2. Complétez le profil de l'entreprise et activez au moins une série de type fiscale, sinon l'émission renvoie issuer_profile_incomplete ou no_series_configured.
  3. Échangez les identifiants contre un token : POST /v1/auth/token avec grant_type client_credentials. Le token dure une heure — mettez-le en cache, n'en demandez pas un par requête.
  4. Émettez la facture : POST /v1/invoices avec un en-tête Idempotency-Key et vat_rate en pourcentage (21, pas 0.21).
  5. Pour le marché roumain, lancez le contrôle CIUS-RO avec POST /v1/invoices/{id}/efactura/validate, puis envoyez la facture à l'ANAF avec POST /v1/invoices/{id}/efactura/submit.
  6. Suivez l'état avec GET /v1/efactura/submissions/{id} jusqu'à ce qu'il atteigne accepted ou rejected.
bash
# 1 — token (1 heure, à mettre en cache)
ACCESS_TOKEN=$(curl -sS -X POST https://api.4invoices.net/v1/auth/token \
  -H 'Content-Type: application/json' \
  -d '{"grant_type":"client_credentials","client_id":"cli_XXX","client_secret":"sec_XXX"}' \
  | python3 -c 'import sys,json; print(json.load(sys.stdin)["access_token"])')

# 2 — émettre la facture (Idempotency-Key est OBLIGATOIRE)
curl -sS -X POST https://api.4invoices.net/v1/invoices \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: order-10457-invoice' \
  -d '{"buyer":{"name":"Exemplu Comert SRL","tax_id":"RO12345678","county":"Cluj","city":"Cluj-Napoca","country":"RO"},
       "lines":[{"description":"Abonament SaaS","quantity":1,"unit_price":400,"vat_rate":21}]}'

# 3 — preflight CIUS-RO, then send to ANAF
curl -sS -X POST https://api.4invoices.net/v1/invoices/inv_01J7ABC/efactura/validate \
  -H "Authorization: Bearer $ACCESS_TOKEN"

curl -sS -X POST https://api.4invoices.net/v1/invoices/inv_01J7ABC/efactura/submit \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H 'Idempotency-Key: efactura-inv_01J7ABC-1'

Guides par sujet

Chaque sujet a sa page, avec les endpoints, exemples et erreurs correspondants.

Ouvrir la référence complète de l'API →