How to verify an evidence pack
Call GET /api/v1/company/{org}/evidence-pack to get one signed record of what Apier observed about a Norwegian company, then check its signature against the public key set and each archived record's anchor proof against the published daily roots.
[Cite this as: Apier.no Docs v0.1.0 — last updated 2026-11-02]
An evidence pack is one signed JSON bundle of what Apier observed about one Norwegian company at a date: the check bundle, every archived change event in the window, your own receipts for the company, each archived record with its daily anchor inclusion proof, the coverage window and the licence of every source.
A pack is a record of observation. It is not a verdict on whether anyone may
act, sign or is compliant, and Apier makes no claim that it is admissible in
court. Every pack carries that statement in its statement field.
Step 1 — Call the endpoint and save the response
curl -H "Authorization: Bearer $APIER_API_KEY" \
"https://www.apier.no/api/v1/company/{org}/evidence-pack" -o pack.jsonReplace {org} with the company's 9-digit organisasjonsnummer. The key needs
the read:brreg scope, and the call is billed as one company read.
as_of defaults to today in Europe/Oslo. Historical dates are not available
yet, so any other as_of is refused with 400 VALIDATION_FAILED.
changes_from sets the start of the change window: at most 366 days before
as_of and never after it. A date before the archive start (2026-07-30) is
answered as asked, and coverage states that nothing was observed before it.
The response's data.pack is the signed pack. When data.public_log.status
is logged, data.public_log names the pack's entry in the public receipt
log (kind evidence_pack): the SHA-256 of the pack's signature, never its
content and never the org number. When the status is not_logged, seq is
null and the response does not confirm whether an entry exists.
Step 2 — Open the pack in the viewer
Open the evidence pack viewer and choose pack.json.
The viewer reads the file in your browser and uploads nothing: it fetches the
public key set and the published anchor roots, checks the signature and every
anchor proof with the browser's own cryptography, and shows the pack ready to
print. There is no shareable link. The bokmål viewer is at
/no/evidence-pack/viewer.
The viewer reads the latest 100 published anchors, the most
/api/v1/public/anchors returns (?limit=100, newest first). A record
whose day is older than those cannot be matched against a published root,
in the viewer or through that endpoint, and the viewer says so for that
record. Its inclusion proof still checks against the merkle_root the pack
carries (Step 4), but that root has no public copy to compare with yet.
A pack changed after signing shows "does not match" on the signature line.
Step 3 — Verify the signature yourself
The pack is a verification certificate whose result is the evidence pack,
so it verifies exactly as described in
How to verify an apier certificate: remove
signature, serialise the rest as canonical JSON (keys sorted at every
level), and check the detached JWS against the key with the pack's kid in
/.well-known/jwks.json.
Step 4 — Check each anchor proof
Each entry in archived_records.items with anchor_status anchored carries
merkle_root, leaf_index and proof, an RFC 6962 sibling path. Rebuild the
leaf as the canonical JSON of content_hash, first_observed_at (as an ISO
8601 UTC instant with milliseconds) and org_number, hash it with a 0x00
prefix, combine it with each sibling under a 0x01 prefix in the order
position gives, and compare the result with merkle_root. Then compare
merkle_root with the root for anchor_date at
/api/v1/public/anchors?limit=100, which lists the latest 100 daily roots.
A record newer than the last daily anchor has anchor_status pending and no
proof. A record whose day could not be reproduced has proof_unavailable and
no proof. Neither is ever given an invented proof.
Step 5 — Try it in the sandbox
curl -H "Authorization: Bearer apier_sandbox_test_<uuid>" \
"https://www.apier.no/api/v1/sandbox/company/999999999/evidence-pack" -o sandbox-pack.jsonThe sandbox pack is built from fixtures, signed with the public sandbox key
(verify it against /.well-known/sandbox-jwks.json), never debited and never
written to the public log. The viewer picks the sandbox key set for it.
How to get every check on a Norwegian company in one call
Call GET /api/v1/company/{org}/checks to get registration status, bankruptcy and liquidation flags, VAT, roles, coded signing authority, annual accounts, requirements evidence and the LEI status, each with its own status, source and freshness, and no verdict.
How to read a company's state on a past date and its change history
Call GET /api/v1/company/{org}/as-of for what Brønnøysund's register showed about a Norwegian company at the end of a past day, and GET /api/v1/company/{org}/history for every change Apier observed between two dates or a field-by-field diff.