Skip to content
Documentation
English
Open the app

Export the full dossier

Step-by-step use case to download an accounting book as PDF, XLSX or CSV and the complete ZIP archive of a fiscal year, with fingerprint verification.

NovaFisko produces every book and every statement as PDF, XLSX or CSV, as well as a ZIP archive that brings together a whole fiscal year. This guide covers both, then the verification of the SHA-256 fingerprints.

Prerequisites: a token with the read ability, the public_token of the company and the id of the fiscal year (see Read the general ledger).

Step 1: look at the catalogue

curl "https://api.novafisko.com/v1/companies/k3Jd9fPq2LmX/exports?lang=fr" \
  -H "Authorization: Bearer $NOVAFISKO_TOKEN"
{
  "types": ["journals", "purchases", "sales", "financial", "miscellaneous", "general-ledger", "trial-balance"],
  "formats": ["pdf", "xlsx", "csv"],
  "default_format": "csv",
  "full_dossier": "zip",
  "groups": [
    {"code": "books", "label": "Livres"},
    {"code": "statements", "label": "États financiers"},
    {"code": "vat", "label": "TVA"},
    {"code": "third_parties", "label": "Tiers"},
    {"code": "assets", "label": "Immobilisations"},
    {"code": "data", "label": "Données"}
  ],
  "common_params": ["format", "fiscal_year_id", "from", "to", "lang"],
  "catalog": [
    {
      "code": "general-ledger",
      "label": "Grand livre",
      "description": "Mouvements de chaque compte avec solde progressif.",
      "group": "books",
      "group_label": "Livres",
      "formats": ["pdf", "xlsx", "csv"],
      "dated": true,
      "requires_fiscal_year": true,
      "params": [
        {"name": "account_from", "label": "Du compte"},
        {"name": "account_to", "label": "Au compte"}
      ]
    }
  ]
}

The lists are abridged. catalog describes each export: its group, its formats and its own parameters.

Available types

Group Codes
Books journals, purchases, sales, financial, miscellaneous, general-ledger
Financial statements trial-balance, balance-by-period, financial-statements, annual-accounts
VAT vat-summary, vat-declaration, customer-listing, intracom-listing
Third parties third-parties, customer-balance, supplier-balance, aged-customers, aged-suppliers, third-party-ledger
Fixed assets fixed-assets
Data accounts, documents, audit-trail

Step 2: download an export

curl -G "https://api.novafisko.com/v1/companies/k3Jd9fPq2LmX/exports/general-ledger" \
  -H "Authorization: Bearer $NOVAFISKO_TOKEN" \
  -d format=xlsx \
  -d fiscal_year_id=7 \
  -d from=2026-01-01 \
  -d to=2026-09-30 \
  -d lang=fr \
  -D headers.txt \
  -o grand-livre-2026.xlsx

Parameters

Parameter Description
format pdf, xlsx or csv. csv by default
fiscal_year_id Fiscal year. When it is required and absent, the current fiscal year is used
from, to Period, for dated exports
lang fr, nl, en or de. By default, the language of the company
account_from, account_to Range of accounts (general-ledger)
scheme, general_meeting_date abbreviated or micro scheme and general meeting date (annual-accounts)
declaration_id Target return (vat-declaration)
year, period Year and period (intracom-listing)
third_party_id, party_type Third party and type customer or supplier (third-party-ledger)

Response headers

HTTP/1.1 200 OK
Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
Content-Length: 48211
Content-Disposition: attachment; filename="COMPTOIR_general-ledger_2026.xlsx"
X-Export-Fingerprint: 6b1f0c8a9e3d5a7c41f29d0e8b7a6c5d4e3f2a1b0c9d8e7f6a5b4c3d2e1f0a9b

X-Export-Fingerprint is the SHA-256 fingerprint of the exported data set. It is identical whatever the format: a PDF and a CSV of the same statement at the same date carry the same fingerprint. It also appears in the footer of the PDFs.

Note

Generation is synchronous. A large general ledger as PDF can take several tens of seconds: set your client's timeout to 180 seconds. The limit is 30 exports per minute.

PDF preview in a browser

To display an export in a page or an iframe without exposing your token, request a signed URL valid for 15 minutes:

curl "https://api.novafisko.com/v1/companies/k3Jd9fPq2LmX/exports/trial-balance/preview-url?fiscal_year_id=7" \
  -H "Authorization: Bearer $NOVAFISKO_TOKEN"
{
  "url": "https://api.novafisko.com/v1/companies/k3Jd9fPq2LmX/exports/trial-balance/view?fiscal_year_id=7&format=pdf&by=12&expires=1791190900&signature=4c1d...",
  "expires_in": 900,
  "format": "pdf"
}

Step 3: download the full dossier

A single request produces the ZIP archive of the whole fiscal year.

curl "https://api.novafisko.com/v1/companies/k3Jd9fPq2LmX/exports/full-dossier/7?lang=fr" \
  -H "Authorization: Bearer $NOVAFISKO_TOKEN" \
  --max-time 320 \
  -o COMPTOIR_dossier-complet_2026.zip

The response is of type application/zip. Allow a timeout of 5 minutes. The limit is 10 archives per minute.

Content of the archive

Folder Content
00-Dossier-comptable.pdf Cover page: identity, table of contents with fingerprints, integrity statement
01-Livres Journals, general ledger, chart of accounts, audit trail as PDF
02-Etats-financiers Trial balance, balance by period, balance sheet and income statement, annual accounts
03-TVA VAT summary, listings and one PDF return per period
04-Tiers List, balances, aged balances, third-party ledger
05-Immobilisations Schedule of fixed assets and depreciation
06-Donnees-CSV The same statements in CSV format, usable by other software
07-Banque-CODA Original CODA files
08-Pieces Documents uploaded to the importer and index.csv of all the documents of the fiscal year
manifest.json Inventory of the archive with the SHA-256 fingerprint of each file

A statement that cannot be produced, for example annual accounts on a fiscal year without entries, is skipped and reported in the manifest instead of making the archive fail.

Step 4: verify the fingerprints

The manifest.json file lists each file of the archive with its path, its size and its fingerprint.

{
  "application": "NovaFisko",
  "manifest_version": 2,
  "company": {"code": "COMPTOIR", "name": "Le Comptoir Montois SRL", "legal_form": "SRL", "enterprise_number": "0999.900.134", "vat_number": "BE0999900134", "country_pack": "BE"},
  "fiscal_year": {"code": "2026", "starts_on": "2026-01-01", "ends_on": "2026-12-31", "is_closed": false, "closed_at": null, "periods_locked": 9, "periods_total": 12},
  "status": "provisional",
  "generated_at": "2026-10-05T09:14:22+00:00",
  "generated_by": "Claire Dumont",
  "locale": "fr",
  "hash_algorithm": "sha256",
  "files": [
    {"path": "00-Dossier-comptable.pdf", "bytes": 61220, "sha256": "5e2b..."},
    {"path": "01-Livres/COMPTOIR_general-ledger_2026.pdf", "bytes": 512340, "sha256": "a3f1..."},
    {"path": "06-Donnees-CSV/COMPTOIR_general-ledger_2026.csv", "bytes": 188412, "sha256": "9c0e..."}
  ],
  "integrity": {"periods_locked": 9, "periods_total": 12},
  "skipped": [],
  "csv_format": "CSV UTF-8 BOM ; separator \";\" ; decimal \",\""
}

status is final when the fiscal year is closed, provisional otherwise. skipped lists the statements that could not be produced, with the reason. CSV files are in UTF-8 with BOM, semicolon separator and decimal comma.

import hashlib
import json
import zipfile

with zipfile.ZipFile("COMPTOIR_dossier-complet_2026.zip") as archive:
    manifest = json.loads(archive.read("manifest.json"))
    for item in manifest["files"]:
        digest = hashlib.sha256(archive.read(item["path"])).hexdigest()
        # Any mismatch means the file changed after the archive was built
        assert digest == item["sha256"], f"Fingerprint mismatch: {item['path']}"

print(len(manifest["files"]), "files verified")
$zip = new ZipArchive();
$zip->open('COMPTOIR_dossier-complet_2026.zip');
$manifest = json_decode($zip->getFromName('manifest.json'), true);

foreach ($manifest['files'] as $item) {
    if (! hash_equals($item['sha256'], hash('sha256', $zip->getFromName($item['path'])))) {
        throw new RuntimeException('Fingerprint mismatch: '.$item['path']);
    }
}
Tip

Every export is traced in the activity log of the company with its type, its format and its fingerprint. You can therefore prove later that a given file does match what NovaFisko generated.

Common errors

Status Cause Fix
404 Unknown export type, or fiscal year of another company Check the code in the catalogue
422, field format Format other than pdf, xlsx, csv Fix the parameter
422, field fiscal_year_id Fiscal year not part of the company Read GET fiscal-years again
429 Too many exports in one minute Wait Retry-After seconds
Warning

An export produced on an unlocked period carries a provisional document notice. For a final document, lock the periods or close the fiscal year before exporting. See Export compliance.

See also