Skip to content
Apier.no
Guides

How to check an agent's claims about a Norwegian company against the register

POST up to 20 claims about one company to /api/v1/company/{org}/claim-check and get, for each claim, matches, differs or not_found with the registered value, its source, the retrieval time and a check status. Never an overall verdict.

[Cite this as: Apier.no Docs v0.1.0 — last updated 2026-11-04]

An agent often holds facts about a company that came from somewhere else: an invoice, an email, a web page, another model. Before it acts on them, POST /api/v1/company/{org}/claim-check compares each claim with what the register shows, field by field.

Each claim is answered on its own. There is no overall result, no score and no fraud wording: the answer is a record of the register, and the agent decides what to do with it.

Step 1 — Send the claims

curl -X POST -H "Authorization: Bearer $APIER_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: claims-2026-11-04-001" \
  -d '{"claims":[
        {"field":"name","value":"Nordic Widgets AS"},
        {"field":"address","value":"Storgata 1, 0155 Oslo"},
        {"field":"status","value":"active"},
        {"field":"vat_registered","value":true},
        {"field":"role","role_type":"board_chair","name":"Kari Nordmann"},
        {"field":"signing_rule","clause":"signatur","value":"Styrets leder alene."}
      ]}' \
  "https://www.apier.no/api/v1/company/999999999/claim-check"

Send 1 to 20 claims. Each claim names one field of a closed set:

  • name, address: a string value;
  • status: one of active, deleted, bankrupt, forced_liquidation, liquidating;
  • vat_registered: true or false;
  • role: a role_type (board_chair, deputy_chair, board_member, deputy_board_member, proprietor, signatory, procuration_holder) and the person's name as written;
  • signing_rule: the clause column (signatur or prokura) and the claimed wording as value.

Any other field, an unknown key or a value of the wrong type is refused with 400 VALIDATION_FAILED.

Step 2 — Read each result

data.results holds one entry per claim, in the order you sent them, each with its index. With ?certificate=true the answer is wrapped in a VerifyCertificate, so the entries are at data.result.results:

  • comparison: matches, differs or not_found (the register holds no value for the field). It is null when the source could not be read or does not cover the claim; check_status then says unavailable or not_checked. An unreadable source is never reported as a failed comparison.
  • registered_value: what the register shows. A name comes back as {name}, an address as {postal_code, postal_place} only (never the street lines), a status as {status} and VAT as {vat_registered}.
  • source, retrieved_at and check_status for every claim.

Step 3 — Roles and signing rules

A role claim is compared only against Apier's mirror of the register. The answer never names a person: a match returns the registered role_label, and otherwise you get how many holders that role type has and which other role types the named person holds, if any. A company outside the mirror answers not_checked for role claims.

A signing_rule claim returns the register's coded signing rules for the company and the verbatim clause, exactly as GET /api/v1/company/{org}/authority serves them. matches means the claimed wording is the registered wording once case and punctuation are ignored. The answer is never a verdict on authority; it is the rule as registered.

Rules, privacy and billing

  • Claimed values are used for the comparison only. They are never echoed in the answer or logged. The idempotency replay keeps the answer and a hash of the request; the answer holds register values only, so a matching name, for example, is kept as the registered name.
  • A 200 is billed as one company read, except a 200 where no claim could be compared (every claim unavailable or not_checked), which is refunded. A 404, a 403 and a server error are refunded; a 400 validation error stays charged, as on the other metered company reads (see agent payments). Send an Idempotency-Key so a retry after a lost response is answered from the first response and never debited twice. See pricing.
  • ?certificate=true returns the answer signed as a VerifyCertificate.
  • An unknown org number is 404 COMPANY_NOT_FOUND once Brønnøysund has answered. While Brønnøysund cannot be reached the answer is a 200 whose register claims are unavailable, which does not show that the company exists.
  • The endpoint needs an API key with the read:brreg scope. The sandbox mirror is POST /api/v1/sandbox/company/{org}/claim-check.
Building with an LLM? Read llms.txt for agent-oriented integration guidance.