4invoices API for utviklere

REST over HTTPS, JSON og en offentlig OpenAPI-spesifikasjon. Fakturering, kunder, nummerserier og hele den nasjonale e-faktureringsprosessen (ANAF e-Factura i Romania) — fra ERP-et, nettbutikken eller CRM-et ditt.

Det offentlige 4invoices-API-et sender faktureringsdata fra systemet ditt til 4invoices og fører fakturaen helt frem gjennom det nasjonale e-fakturasystemet (i Romania: ANAFs SPV). Én produksjonsvert, én client_credentials-flyt, idempotente fiskale skrivinger og én feilkonvolutt på alle endepunkter.

https://api.4invoices.net/v1 · OpenAPI-spesifikasjon (ingen nøkkel nødvendig)

Hva 4invoices-API-et er

  • Det offentlige 4invoices-API-et er REST over HTTPS, med JSON inn og JSON ut.
  • Én produksjonsvert: https://api.4invoices.net/v1. Det finnes ingen egen sandkasse-vert.
  • OpenAPI 3.1-spesifikasjonen er offentlig og uten nøkkel — importer den rett inn i Postman eller en klientgenerator.
  • Hvert svar har en X-Request-Id-header; oppgi den når du ber om støtte.
  • Alle fiskale skrivinger er idempotente: et nytt forsøk etter timeout utsteder aldri et nytt dokument.
Kun server-til-server. Kall aldri API-et fra nettleserens JavaScript: client_secret ville nå besøkende, og CORS blokkerer uansett alle opprinnelser.
  • Hele ANAF e-Factura-prosessen (Romania) over API-et: forhåndskontroll, innsending, oppfølging, signert svar og den innkommende innboksen. Ingen rumensk konkurrent eksponerer dette.
  • SmartBill har ingen endepunkter for innsending til det nasjonale e-fakturasystemet (ANAF, i Romania) — sending er kun en kontoinnstilling i grensesnittet — og ingen endepunkt for å liste fakturaer i det hele tatt.
  • Oblio kan bare opprette kunder og produkter som en bieffekt av å utstede et dokument, ikke som førsteklasses ressurser.
  • UBL-XML-generering (CIUS-RO for Romania) uten innsending: du får det juridiske dokumentet som fil uten å røre det nasjonale e-fakturasystemet.
  • Idempotens på fiskale skrivinger: et nytt forsøk etter timeout lager ikke en ekstra faktura og bruker ikke et nytt nummer.
  • En programmatisk lesbar innboks med leverandørfakturaer — grunnlaget for automatisk avstemming.

Din første faktura på 6 steg

Før ditt første kall
  1. Opprett legitimasjon i panelet under Fakturering → Innstillinger → API-tilgang, og kopier client_secret — det vises bare én gang.
  2. Fyll inn firmaprofilen og aktiver minst én serie av typen fiscale, ellers returnerer utstedelse issuer_profile_incomplete eller no_series_configured.
  1. Opprett legitimasjon i panelet under Fakturering → Innstillinger → API-tilgang, og kopier client_secret — det vises bare én gang.
  2. Fyll inn firmaprofilen og aktiver minst én serie av typen fiscale, ellers returnerer utstedelse issuer_profile_incomplete eller no_series_configured.
  3. Bytt legitimasjonen mot et token: POST /v1/auth/token med grant_type client_credentials. Tokenet varer én time — cache det, og lag ikke et nytt per forespørsel.
  4. Utsted fakturaen: POST /v1/invoices med en Idempotency-Key-header og vat_rate som prosent (21, ikke 0.21).
  5. Kjør forhåndskontrollen (CIUS-RO for Romania) med POST /v1/invoices/{id}/efactura/validate, og send den deretter til det nasjonale e-fakturasystemet med POST /v1/invoices/{id}/efactura/submit.
  6. Følg statusen med GET /v1/efactura/submissions/{id} til den når accepted eller rejected.
bash
# 1 — token (1 time, cache det)
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 — utsted fakturaen (Idempotency-Key er PÅKREVD)
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'
javascript
const BASE = "https://api.4invoices.net/v1";

const token = await fetch(`${BASE}/auth/token`, {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    grant_type: "client_credentials",
    client_id: process.env.FOURINVOICES_CLIENT_ID,
    client_secret: process.env.FOURINVOICES_CLIENT_SECRET,
  }),
}).then((r) => r.json()).then((d) => d.access_token);

const invoice = await fetch(`${BASE}/invoices`, {
  method: "POST",
  headers: {
    Authorization: `Bearer ${token}`,
    "Content-Type": "application/json",
    "Idempotency-Key": `order-${orderId}-invoice`,
  },
  body: JSON.stringify({
    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 }],
    currency: "RON",
    metadata: { order_id: String(orderId) },
  }),
}).then((r) => r.json());

console.log(invoice.number, invoice.totals); // "FCT-000123" { net, vat, gross }
python
import os, uuid, requests

BASE = "https://api.4invoices.net/v1"

token = requests.post(f"{BASE}/auth/token", json={
    "grant_type": "client_credentials",
    "client_id": os.environ["FOURINVOICES_CLIENT_ID"],
    "client_secret": os.environ["FOURINVOICES_CLIENT_SECRET"],
}, timeout=30).json()["access_token"]

headers = {
    "Authorization": f"Bearer {token}",
    # Én nøkkel per LOGISK operasjon — bruk den på nytt ved nytt forsøk, generer aldri en ny.
    "Idempotency-Key": f"order-{order_id}-invoice",
}

invoice = requests.post(f"{BASE}/invoices", headers=headers, json={
    "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}],   # prosent, ikke 0.21
    "currency": "RON",
}, timeout=60).json()

print(invoice["number"], invoice["totals"])

Autentisering

  • Flyten er client_credentials: du bytter client_id + client_secret mot et Bearer access_token.
  • Tokenet utløper etter 3600 sekunder. Forny det før utløp, ikke ved hvert kall — POST /auth/token har en egen hastighetsgrense per IP.
  • client_secret lagres kun som hash og kan ikke gjenopprettes. Mister du det, oppretter du ny legitimasjon og tilbakekaller den gamle.
  • Kun server-til-server. Ingen nettleseropprinnelse tillates av CORS: fra sidens JavaScript ville secret lekke til besøkende.
  • Scopes tildeles per legitimasjon. Lag egen legitimasjon for hvert system, og gi hver av dem de minste scopene den trenger.

Fakturering → Innstillinger → API-tilgang

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"}
javascript
// Cache tokenet; ikke lag et nytt per forespørsel.
let cached = { token: "", expiresAt: 0 };

async function getToken() {
  if (cached.token && Date.now() < cached.expiresAt - 60_000) return cached.token;

  const res = await fetch("https://api.4invoices.net/v1/auth/token", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({
      grant_type: "client_credentials",
      client_id: process.env.FOURINVOICES_CLIENT_ID,
      client_secret: process.env.FOURINVOICES_CLIENT_SECRET,
    }),
  });
  if (!res.ok) throw new Error(`token ${res.status}`);

  const data = await res.json();
  cached = { token: data.access_token, expiresAt: Date.now() + data.expires_in * 1000 };
  return cached.token;
}

Mva-satser er prosent

vat_rate: 21 ✓  ·  vat_rate: 0.19 ✗  ·  vat_rate: 1 ✗
  • vat_rate er en PROSENT: 21 betyr 21 %.
  • Verdier i (0, 1] avvises — 0,19 er en brøkdel, og 1 er tvetydig mellom 1 % og 100 %.
  • 0 er gyldig og betyr unntatt for mva eller omvendt avgiftsplikt; skriv den lovpålagte merknaden i notes.
  • unit_price er netto enhetspris når utstederen er mva-pliktig.
  • Trenger du totalene før du bekrefter? POST /v1/invoices/preview-totals kjører samme beregning uten å forbruke et fiskalt nummer.

Idempotens på fiskale skrivinger

  • Headeren Idempotency-Key er PÅKREVD på POST /invoices, POST /invoices/{id}/storno og POST /invoices/{id}/efactura/submit.
  • Nøkler huskes i 24 timer. Gjentakelse av samme nøkkel med samme innhold returnerer det opprinnelige resultatet og setter Idempotency-Replayed: true.
  • Samme nøkkel med annet innhold returnerer 409 idempotency_key_reuse — et allerede utstedt fiskalt dokument blir aldri overskrevet.
  • Én nøkkel per LOGISK operasjon, ikke per HTTP-forsøk: order-10457-invoice, ikke en ny UUID ved hvert nytt forsøk.
  • Begrunnelsen er juridisk, ikke teknisk: et brukt fiskalt nummer og en faktura sendt inn i det nasjonale e-fakturasystemet (i Romania: SPV) kan ikke trekkes tilbake.
bash
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",
      "address": "Str. Fabricii 12",
      "city": "Cluj-Napoca",
      "county": "Cluj",
      "country": "RO",
      "email": "[email protected]"
    },
    "lines": [
      { "description": "Abonament SaaS, iulie", "quantity": 1, "unit_price": 400, "vat_rate": 21, "unit": "buc" },
      { "description": "Implementare", "quantity": 6, "unit_price": 250, "vat_rate": 21, "unit": "ora" }
    ],
    "currency": "RON",
    "document_kind": "factura",
    "due_date": "2026-08-15",
    "metadata": { "order_id": "10457" }
  }'

Alle endepunkter

MetodeEndepunktScopeIdempotency-KeyForespørsler / minutt
POST/auth/token
Bytt legitimasjon mot et tilgangstoken
——120
GET/me
Tenant, scopes og gjeldende grenser
invoices:read—120
POST/invoices
Utsted en faktura eller proformafaktura
invoices:writepåkrevd30
GET/invoices
List fakturaer (cursorpaginering)
invoices:read—120
POST/invoices/preview-totals
Beregn totaler uten å opprette noe
invoices:read—120
GET/invoices/{invoice_id}
Hent én faktura
invoices:read—120
GET/invoices/{invoice_id}/pdf
Last ned fakturaens PDF
invoices:read—120
GET/invoices/{invoice_id}/xml
Last ned UBL-XML (CIUS-RO for Romania)
invoices:read—120
POST/invoices/{invoice_id}/storno
Utsted en kreditnota som reverserer denne fakturaen
invoices:writepåkrevd30
POST/invoices/{invoice_id}/payments
Merk fakturaen som betalt
invoices:write—30
DELETE/invoices/{invoice_id}/payments
Merk fakturaen som ubetalt
invoices:write—30
GET/clients
List kunder
clients:read—120
POST/clients
Opprett eller oppdater en kunde
clients:write—30
GET/lookup/company/{tax_id}
Valider et CUI mot ANAF-registeret (Romania)
clients:read—120
GET/series
List nummerserier
invoices:read—120
POST/invoices/{invoice_id}/efactura/validate
Forhåndskontroll (CIUS-RO for Romania) — valider uten å sende
efactura:read—120
POST/invoices/{invoice_id}/efactura/submit
Send fakturaen til det nasjonale e-fakturasystemet (i Romania: SPV)
efactura:submitpåkrevd10
GET/efactura/submissions
List innsendinger til det nasjonale e-fakturasystemet
efactura:read—120
GET/efactura/submissions/{submission_id}
Hent én innsending
efactura:read—120
POST/efactura/submissions/{submission_id}/refresh
Spør det nasjonale e-fakturasystemet om gjeldende status
efactura:read—10
GET/efactura/submissions/{submission_id}/download
Last ned arkivet med det signerte svaret
efactura:read—120
GET/efactura/inbox
Leverandørfakturaer mottatt via det nasjonale e-fakturasystemet
efactura:read—120
GET/efactura/inbox/{inbound_id}
Hent én innkommende faktura
efactura:read—120
GET/efactura/inbox/{inbound_id}/download
Last ned arkivet for den innkommende fakturaen
efactura:read—120
POST/efactura/inbox/sync
Hent nye meldinger fra det nasjonale e-fakturasystemet til innboksen
efactura:read—10

25 endpoints · https://api.4invoices.net/v1/openapi.json

Scopes

  • invoices:read
  • invoices:write
  • clients:read
  • clients:write
  • efactura:read
  • efactura:submit

Prosessen mot det nasjonale e-fakturasystemet

not_sentvalidatingqueuedsentprocessingacceptedrejectederror
  • Den egentlige forskjellen: hele prosessen mot det nasjonale e-fakturasystemet (i Romania: ANAF e-Factura) kjører via API-et, ikke bare dokumentgenerering.
  • POST /invoices/{id}/efactura/validate kjører forhåndskontrollen (CIUS-RO for Romania) og returnerer de nøyaktige feltene det nasjonale e-fakturasystemet ville avvist, uten å sende noe.
  • GET /invoices/{id}/xml genererer UBL-XML (CIUS-RO for Romania) uten innsending — nyttig for ditt eget arkiv eller en intern revisjon.
  • POST /invoices/{id}/efactura/submit sender den inn i det nasjonale e-fakturasystemet (i Romania: SPV). Dette kan ikke angres: en ny kopi av samme faktura kan ikke trekkes tilbake fra systemet.
  • Livssyklusen er normalisert: not_sent → validating → queued → sent → processing → accepted | rejected | error. accepted betyr lovlig overført; error er en transportfeil på vår side og er trygg å prøve igjen.
  • GET /efactura/submissions/{id}/download henter arkivet med det nasjonale e-fakturasystemets signerte svar (i Romania: ANAF).
  • Den innkommende siden finnes også: POST /efactura/inbox/sync henter nye meldinger fra det nasjonale e-fakturasystemet (i Romania: SPV), og GET /efactura/inbox lister fakturaene leverandørene dine har sendt deg.
bash
# CIUS-RO preflight. Sends NOTHING to ANAF.
curl -sS -X POST "https://api.4invoices.net/v1/invoices/inv_01J7ABC/efactura/validate?include_xml=true" \
  -H "Authorization: Bearer $ACCESS_TOKEN"

# → {"invoice_id":"inv_01J7ABC","valid":false,
#    "errors":["buyer.county is required for RO buyers"],
#    "xml_base64":"PD94bWwg..."}
bash
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'

# → {"submission_id":"sub_01J7XYZ","status":"queued"}
python
import time, requests

BASE = "https://api.4invoices.net/v1"
TERMINAL = {"accepted", "rejected"}
H = {"Authorization": f"Bearer {token}"}

def wait_for_anaf(submission_id, timeout=900):
    deadline = time.time() + timeout
    delay = 15
    while time.time() < deadline:
        r = requests.get(f"{BASE}/efactura/submissions/{submission_id}", headers=H, timeout=30)
        r.raise_for_status()
        status = r.json()["status"]
        if status in TERMINAL:
            return r.json()
        # /refresh asks ANAF directly and shares the 10/min submit bucket.
        requests.post(f"{BASE}/efactura/submissions/{submission_id}/refresh", headers=H, timeout=30)
        time.sleep(delay)
        delay = min(delay * 2, 120)
    raise TimeoutError(submission_id)

Feil

  • Alle 4xx- og 5xx-feil bruker samme konvolutt: { "error": { type, code, message, param?, doc_url, request_id, errors? } }.
  • type er den grove klassen du forgrener på («kan jeg prøve igjen?»), og code er den stabile årsaken du mapper inn i ditt eget system.
  • param er den punktuerte stien til det feilaktige feltet, for eksempel lines.0.vat_rate.
  • errors[] vises når én forespørsel har problemer i flere felt.
  • request_id logges hos oss. Oppgi den i enhver supportsak — den peker ut nøyaktig forespørselen.
  • En 404 returneres også for en id som tilhører en annen tenant: vi bekrefter aldri at andres data finnes.
json
{
  "error": {
    "type": "invalid_request_error",
    "code": "validation_failed",
    "message": "Datele trimise nu sunt valide.",
    "param": "lines.0.vat_rate",
    "doc_url": "https://4invoices.net/ro/api-dezvoltatori#errors",
    "request_id": "req_8a893f2f33d4472da8d6e144",
    "errors": [
      { "param": "lines.0.vat_rate", "message": "VAT rate must be a percent (21), not a fraction", "type": "value_error" }
    ]
  }
}
StatusTypeKode
401authentication_errormissing_bearer_token
401authentication_errorinvalid_client
401authentication_errortoken_expired
401authentication_errorinvalid_token
401authentication_errorunauthorized
403permission_errorinsufficient_scope
403permission_errorforbidden
404not_found_errornot_found
409conflict_erroridempotency_key_reuse
409conflict_erroridempotency_in_progress
409conflict_errorno_series_configured
422invalid_request_errorvalidation_failed
422invalid_request_errorissuer_profile_incomplete
422invalid_request_errorcius_ro_incomplete
422invalid_request_errorcannot_storno_draft
422invalid_request_errornothing_to_storno
422invalid_request_errorinvalid_json_number
429rate_limit_errorrate_limit_exceeded
502upstream_errorupstream_error
503service_unavailable_errorservice_unavailable

Hastighetsgrenser

KvotegruppeForespørsler / minuttBetydning
read120GET *, POST /invoices/preview-totals, POST /invoices/{id}/efactura/validate
write30POST /invoices, POST /invoices/{id}/storno, POST|DELETE /invoices/{id}/payments, POST /clients
submit10POST /invoices/{id}/efactura/submit, POST /efactura/submissions/{id}/refresh, POST /efactura/inbox/sync
  • Grensene gjelder per legitimasjon, per minutt: 120 for lesinger, 30 for skrivinger, 10 for operasjonene mot det nasjonale e-fakturasystemet (submit, refresh, inbox/sync).
  • X-RateLimit-Limit, X-RateLimit-Remaining og X-RateLimit-Reset finnes på ALLE svar, inkludert 429.
  • En 429 har også Retry-After i sekunder. Respekter det; ikke prøv igjen i en stram løkke.
  • Kvoten på 10/min finnes fordi ANAF i Romania selv tillater omtrent ett kall til meldingslisten per minutt per CIF.
  • Sett /efactura/inbox/sync på en cron-jobb, ikke på aggressiv polling.
  • Trenger du høyere tak? Spør via Kontakt med forventet daglig volum.

X-RateLimit-Limit · X-RateLimit-Remaining · X-RateLimit-Reset · Retry-After

http
HTTP/2 429
X-RateLimit-Limit: 30
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1785312000
Retry-After: 17
Content-Type: application/json

{"error":{"type":"rate_limit_error","code":"rate_limit_exceeded",
 "message":"...","doc_url":"https://4invoices.net/ro/api-dezvoltatori#errors",
 "request_id":"req_..."}}
javascript
// Respekter Retry-After; prøv aldri igjen ved en 4xx annet enn 429.
async function call(url, init, attempt = 0) {
  const res = await fetch(url, init);
  if (res.status === 429 || res.status >= 500) {
    if (attempt >= 5) return res;
    const retryAfter = Number(res.headers.get("Retry-After")) || 2 ** attempt;
    await new Promise((r) => setTimeout(r, retryAfter * 1000));
    return call(url, init, attempt + 1);
  }
  return res;
}

// Et nytt forsøk på en skrivning MÅ bruke SAMME Idempotency-Key, ellers utsteder du
// et nytt fiskalt dokument.

Guider etter emne

Hvert emne har sin egen side med de relevante endepunktene, eksemplene og feilene.

Vanlige feil

  • Å sende mva som brøkdel (0.19) eller som 1. Begge avvises; send 19 eller 21.
  • Å utstede et token per forespørsel. Tokenet varer en time; cache det, ellers treffer du token-endepunktets grense per IP.
  • Å generere en ny idempotensnøkkel ved hvert nytt forsøk — akkurat scenarioet som gir dupliserte fakturaer.
  • Å kalle fra nettleserens JavaScript. CORS blokkerer alle opprinnelser, og secret ville uansett blitt eksponert.
  • Å sende inn i det nasjonale e-fakturasystemet uten forhåndskontrollen (CIUS-RO for Romania). En feil innsending kan ikke trekkes tilbake.
  • Å polle /efactura/submissions/{id}/refresh mer enn 10 ganger i minuttet — den kvoten deles med submit.
  • Å utstede før firmaprofilen er komplett og en aktiv fiskal serie finnes.

Spørsmål og svar for utviklere

Hvordan får jeg API-legitimasjon for 4invoices?

I panelet under Fakturering → Innstillinger → API-tilgang. Du får et client_id og et client_secret; secret vises bare én gang og lagres kun som hash.

Hvor lenge er access_token gyldig?

3600 sekunder, altså én time. Cache den og forny før utløp — token-endepunktet har en egen hastighetsgrense per IP.

Hvordan sender jeg mva-satsen?

Som prosent: 21 for 21 %. Verdier i (0, 1] avvises, så både 0,19 og 1 feiler validering.

Hvilke kall krever en Idempotency-Key?

POST /invoices, POST /invoices/{id}/storno og POST /invoices/{id}/efactura/submit. Nøkler huskes i 24 timer, og en gjenavspilling returnerer det opprinnelige dokumentet med Idempotency-Replayed: true.

Kan jeg sende en faktura til det nasjonale e-fakturasystemet direkte fra API-et?

Ja. Kjør forhåndskontrollen (CIUS-RO for Romania) med /efactura/validate, send med /efactura/submit, følg den normaliserte statusen på /efactura/submissions/{id} og last ned systemets signerte svar (i Romania: ANAF).

Hva er hastighetsgrensene?

Per legitimasjon, per minutt: 120 lesinger, 30 skrivinger og 10 operasjoner mot det nasjonale e-fakturasystemet. Hvert svar har X-RateLimit-*-headere, og en 429 legger til Retry-After.

Kan jeg kalle API-et fra frontend-en min?

Nei. Det er kun server-til-server: ingen nettleseropprinnelse slipper gjennom CORS, og et client_secret hører ikke hjemme i kode som når besøkende.

Hvorfor får jeg issuer_profile_incomplete på den første fakturaen min?

Firmaprofilen er ufullstendig, eller det finnes ingen aktiv serie av typen fiscale. Fyll inn begge i panelet; API-et nekter å utstede et ugyldig fiskalt dokument.