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.
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']);
}
}
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 |
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.