Machine-verifiable Norwegian company authority: status, roles and coded signing authority.
Call this server's tools from your browser. Nothing to install.
Apier API key in the form: Bearer <api_key>. REQUIRED for company-data, authority, and action tools; OPTIONAL for the six keyless public tools: the five public reads (get_public_obligations, get_public_deadlines, explain_compliance_error, get_exchange_rate, get_pricing) answer with no credential at all, and redeem_issuance_token needs no API key but requires a one-time owner-issued issuance token in its arguments. All keyless calls are per-IP rate-limited. Discovery needs no key at all: GET /api/mcp and the JSON-RPC handshake methods (initialize, tools/list) are keyless — only tools/call is keyed. Provision a free key at https://www.apier.no/docs/authentication
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Keyless. Resolve a structured Apier compliance error code into a Norwegian-bokmål Explanation envelope: summary, bokmål why, ordered fix_steps, optional documentation link + legal_basis, and an optional handover block (who / where / what / why) for errors a human must resolve (e.g. AUTH_INSUFFICIENT_ROLE, AUTH_NO_DELEGATION, SCOPE_MISSING) — agent-resolvable errors ship `handover: null`. Accepts any code from the closed EXPLAINER_ERROR_CODES catalogue. Optional flat context_org_number / context_scope / context_role / context_field / context_upstream_system strings carry placeholder values interpolated into the bokmål text; missing values fall back to 'ukjent <noun>'. Failure modes: VALIDATION_FAILED on an unknown code; a credential without `read:rulebook` can't see the tool; a call returns unknown tool (-32602). For a company's live obligations rather than an error explanation, use get_company_obligations instead. Docs: https://www.apier.no/docs/guides/error-handling
An Apier error code from an error envelope. Full list: apier://tools/explain_compliance_error/guide
Role code interpolated into the explanation.
Field name interpolated into the explanation.
Scope token interpolated into the bokmål explanation.
Organisation the error relates to (9 digits).
Upstream system name interpolated into the explanation.
Keyless. Resolve a structured Apier compliance error code into a Norwegian-bokmål Explanation envelope: summary, bokmål why, ordered fix_steps, optional documentation link + legal_basis, and an optional handover block (who / where / what / why) for errors a human must resolve (e.g. AUTH_INSUFFICIENT_ROLE, AUTH_NO_DELEGATION, SCOPE_MISSING) — agent-resolvable errors ship `handover: null`. Accepts any code from the closed EXPLAINER_ERROR_CODES catalogue. Optional flat context_org_number / context_scope / context_role / context_field / context_upstream_system strings carry placeholder values interpolated into the bokmål text; missing values fall back to 'ukjent <noun>'. Failure modes: VALIDATION_FAILED on an unknown code; a credential without `read:rulebook` can't see the tool; a call returns unknown tool (-32602). For a company's live obligations rather than an error explanation, use get_company_obligations instead. Docs: https://www.apier.no/docs/guides/error-handling
| Argument | Type | Description |
|---|---|---|
| error_code* | string | An Apier error code from an error envelope. Full list: apier://tools/explain_compliance_error/guide |
| context_role | string | Role code interpolated into the explanation. |
| context_field | string | Field name interpolated into the explanation. |
| context_scope | string | Scope token interpolated into the bokmål explanation. |
| context_org_number | string | Organisation the error relates to (9 digits). |
| context_upstream_system | string | Upstream system name interpolated into the explanation. |
{
"type": "object",
"required": [
"error_code"
],
"properties": {
"error_code": {
"type": "string",
"examples": [
"VALIDATION_FAILED",
"AUTH_NO_DELEGATION"
],
"minLength": 1,
"description": "An Apier error code from an error envelope. Full list: apier://tools/explain_compliance_error/guide"
},
"context_role": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Role code interpolated into the explanation."
},
"context_field": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Field name interpolated into the explanation."
},
"context_scope": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Scope token interpolated into the bokmål explanation."
},
"context_org_number": {
"type": "string",
"pattern": "^\\d{9}$",
"description": "Organisation the error relates to (9 digits)."
},
"context_upstream_system": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Upstream system name interpolated into the explanation."
}
},
"additionalProperties": false
}Discover the Altinn 3 equivalent of an Altinn 2 service or role code. The 19 June 2026 Altinn 2 deprecation deadline has passed, so this serves remediation for integrations still on Altinn 2. Pass { altinn2_code } (alphanumeric, 1–10 chars, e.g. A0208) for one mapping, or omit it for the whole map. Every response carries the deprecation status computed in Europe/Oslo (deprecation_deadline, days_remaining, deadline_passed). Each entry ships a `verified` flag: gate any production migration on `verified === true`; unverified entries are hints. Deterministic static map (Digdir-sourced); no government system is contacted. Zero-auth REST twin: GET /api/v1/tools/altinn-migration. Failure modes: NOT_FOUND for a code not in the map, VALIDATION_FAILED (INVALID_CODE). Keyless: callable with no API key at all (per-IP limited); a credential without `read:digdir` can't see the tool (-32602). No sandbox mirror; a sandbox bearer runs this keyless path. Docs: https://www.apier.no/docs/guides/altinn-system-users
| Argument | Type | Description |
|---|---|---|
| altinn2_code | string | An Altinn 2 service or role code to resolve (alphanumeric, 1–10 chars, e.g. A0208). Omit to get the entire migration map. |
{
"type": "object",
"properties": {
"altinn2_code": {
"type": "string",
"pattern": "^[A-Za-z0-9]+$",
"examples": [
"A0208"
],
"maxLength": 10,
"minLength": 1,
"description": "An Altinn 2 service or role code to resolve (alphanumeric, 1–10 chars, e.g. A0208). Omit to get the entire migration map."
}
},
"additionalProperties": false
}A current snapshot of a Norwegian company's annual accounts (årsregnskap) from the OPEN Regnskapsregisteret tier: `has_filed_annual_accounts` (null = unknown, never a fabricated false), `last_accounts_year` and that year's minimal `key_figures` (currency always surfaced, presentation basis, totals). No multi-year history. An unknown org_number returns 200 with `null`, not a 404. Failure modes: VALIDATION_FAILED; a credential without `read:brreg` can't see the tool; a call returns unknown tool (-32602). For a go/no-go verdict, use get_company_verification; for identity, use get_company_context. No API key? Use Bearer apier_sandbox_test_<suffix> (a fresh suffix) to get fixtures; valid orgs are the 818, 99966 and 99977 series and 999000002 (see GET /api/v1/sandbox/fixtures). Cost: 50 øre (NOK 0.50) per call, prepaid (prices: the get_pricing tool or GET /api/v1/pricing; a shortfall returns INSUFFICIENT_CREDITS with top_up_url). Docs: https://www.apier.no/docs/guides/norwegian-company-annual-accounts
| Argument | Type | Description |
|---|---|---|
| org_number* | string | 9-digit Norwegian organisasjonsnummer (Brønnøysund ID); MOD-11-checked up-front — a failing value is rejected as VALIDATION_FAILED, so correct the number rather than retrying it. |
{
"type": "object",
"required": [
"org_number"
],
"properties": {
"org_number": {
"type": "string",
"pattern": "^\\d{9}$",
"examples": [
"999999999"
],
"description": "9-digit Norwegian organisasjonsnummer (Brønnøysund ID); MOD-11-checked up-front — a failing value is rejected as VALIDATION_FAILED, so correct the number rather than retrying it."
}
},
"additionalProperties": false
}Who can legally sign for this Norwegian company, and how? Call get_company_verification first; this ignores bankruptcy and dissolution. The class (sole, joint, by_role, prokura_only, no_authority, unknown) comes from Fullmakttjenesten and the role holders; `coded_authority` (absent in sandbox) adds coded clauses and stamps. Statutory authority only. UPSTREAM_UNAVAILABLE, VALIDATION_FAILED; a credential without `read:brreg` can't see the tool; a call returns unknown tool (-32602). Altinn rights are not read (withdrawn); for roles use get_company_context, for a verdict use get_company_verification. No API key? Use Bearer apier_sandbox_test_<suffix> (a fresh suffix) to get fixtures; valid orgs are the 818, 99966 and 99977 series and 999000002 (see GET /api/v1/sandbox/fixtures). Cost: 50 øre (NOK 0.50) per call, prepaid (prices: the get_pricing tool or GET /api/v1/pricing; a shortfall returns INSUFFICIENT_CREDITS with top_up_url). Docs: https://www.apier.no/docs/guides/signature-rights-norwegian-company
| Argument | Type | Description |
|---|---|---|
| org_number* | string | 9-digit Norwegian organisasjonsnummer (Brønnøysund ID); MOD-11-checked up-front — a failing value is rejected as VALIDATION_FAILED, so correct the number rather than retrying it. |
{
"type": "object",
"required": [
"org_number"
],
"properties": {
"org_number": {
"type": "string",
"pattern": "^\\d{9}$",
"examples": [
"999999999"
],
"description": "9-digit Norwegian organisasjonsnummer (Brønnøysund ID); MOD-11-checked up-front — a failing value is rejected as VALIDATION_FAILED, so correct the number rather than retrying it."
}
},
"additionalProperties": false
}Brønnøysund identity slice for a Norwegian organisation: legal name, form of organisation, NACE codes, addresses, the dates it was formed or dissolved, and the signaturrett / prokura role-code summary (never personal identifiers). Identity ONLY, no verdict on obligations; add get_company_obligations or get_company_deadlines for the regulatory layer. Failure modes: NOT_FOUND, UPSTREAM_TIMEOUT, VALIDATION_FAILED; a credential without `read:brreg` can't see the tool; a call returns unknown tool (-32602). For an obligations verdict, use get_company_summary instead; for NACE descriptions, use get_company_profile instead. No API key? Use Bearer apier_sandbox_test_<suffix> (a fresh suffix) to get fixtures; valid orgs are the 818, 99966 and 99977 series and 999000002 (see GET /api/v1/sandbox/fixtures). Cost: 50 øre (NOK 0.50) per call, prepaid (prices: the get_pricing tool or GET /api/v1/pricing; a shortfall returns INSUFFICIENT_CREDITS with top_up_url). Docs: https://www.apier.no/docs/guides/company-snapshot
| Argument | Type | Description |
|---|---|---|
| org_number* | string | 9-digit Norwegian organisasjonsnummer (Brønnøysund ID); MOD-11-checked up-front — a failing value is rejected as VALIDATION_FAILED, so correct the number rather than retrying it. |
{
"type": "object",
"required": [
"org_number"
],
"properties": {
"org_number": {
"type": "string",
"pattern": "^\\d{9}$",
"examples": [
"818000006"
],
"description": "9-digit Norwegian organisasjonsnummer (Brønnøysund ID); MOD-11-checked up-front — a failing value is rejected as VALIDATION_FAILED, so correct the number rather than retrying it."
}
},
"additionalProperties": false
}The upcoming filing calendar for one organisation, horizon_months ahead. One entry per obligation and period: obligation_id (the rule_id of get_company_obligations; the public calendar uses other ids), period_label, due_at, adjusted_for with original_due_at, and filing_status. In the sandbox the dates are fixed and far ahead, and horizon_months is ignored; for a real window use get_public_deadlines. Failure modes: NOT_FOUND, VALIDATION_FAILED; a credential without `read:brreg` can't see the tool; a call returns unknown tool (-32602). For the verdict per obligation, use get_company_obligations instead. No API key? Use Bearer apier_sandbox_test_<suffix> (a fresh suffix) to get fixtures; valid orgs are the 818, 99966 and 99977 series and 999000002 (see GET /api/v1/sandbox/fixtures). Cost: 50 øre (NOK 0.50) per call, prepaid (prices: the get_pricing tool or GET /api/v1/pricing; a shortfall returns INSUFFICIENT_CREDITS with top_up_url). Docs: https://www.apier.no/docs/guides/norway-corporate-tax-return-deadline
| Argument | Type | Description |
|---|---|---|
| org_number* | string | 9-digit Norwegian organisasjonsnummer (Brønnøysund ID); MOD-11-checked up-front — a failing value is rejected as VALIDATION_FAILED, so correct the number rather than retrying it. |
| horizon_months | integer | Look-ahead window in months (1–60). Omitted → the endpoint's default horizon (12). |
{
"type": "object",
"required": [
"org_number"
],
"properties": {
"org_number": {
"type": "string",
"pattern": "^\\d{9}$",
"examples": [
"818000006"
],
"description": "9-digit Norwegian organisasjonsnummer (Brønnøysund ID); MOD-11-checked up-front — a failing value is rejected as VALIDATION_FAILED, so correct the number rather than retrying it."
},
"horizon_months": {
"type": "integer",
"maximum": 60,
"minimum": 1,
"examples": [
12
],
"description": "Look-ahead window in months (1–60). Omitted → the endpoint's default horizon (12)."
}
},
"additionalProperties": false
}Evaluate the Apier Rulebook for a Norwegian organisation: one entry per rule with rule_id, obligation_name, evaluation_result (applicable, not_applicable or insufficient_data), a reason, the legal_reference, frequency, data_tier_required and the bokmål description, which is inherited byte for byte (never re-translate it). Failure modes: NOT_FOUND, VALIDATION_FAILED; a credential without `read:brreg` can't see the tool; a call returns unknown tool (-32602). For the calendar alone, use get_company_deadlines instead; for the entity-type set that needs no org number or key, use get_public_obligations instead. No API key? Use Bearer apier_sandbox_test_<suffix> (a fresh suffix) to get fixtures; valid orgs are the 818, 99966 and 99977 series and 999000002 (see GET /api/v1/sandbox/fixtures). Cost: 50 øre (NOK 0.50) per call, prepaid (prices: the get_pricing tool or GET /api/v1/pricing; a shortfall returns INSUFFICIENT_CREDITS with top_up_url). Docs: https://www.apier.no/docs/guides/norwegian-company-obligations
| Argument | Type | Description |
|---|---|---|
| org_number* | string | 9-digit Norwegian organisasjonsnummer (Brønnøysund ID); MOD-11-checked up-front — a failing value is rejected as VALIDATION_FAILED, so correct the number rather than retrying it. |
{
"type": "object",
"required": [
"org_number"
],
"properties": {
"org_number": {
"type": "string",
"pattern": "^\\d{9}$",
"examples": [
"818000006"
],
"description": "9-digit Norwegian organisasjonsnummer (Brønnøysund ID); MOD-11-checked up-front — a failing value is rejected as VALIDATION_FAILED, so correct the number rather than retrying it."
}
},
"additionalProperties": false
}Resolve a Norwegian organisasjonsnummer (9 digits) into a structured company profile from Brønnøysund Enhetsregisteret: display name, form of organisation, NACE codes with descriptions, addresses, the dates of registration and dissolution, the `active` / `dissolved` status enum, the MVA-registered flag, and the role CODES of persons — never personal identifiers. The backing REST route is POST /api/v1/brreg/company-profile. For deadlines and filing status, use get_company_summary instead; for the signaturrett / prokura role-code summary, use get_company_context instead. No sandbox mirror; it returns SANDBOX_TOOL_UNAVAILABLE under a sandbox bearer. Failure modes: NOT_FOUND, VALIDATION_FAILED; a credential without `read:brreg` can't see the tool; a call returns unknown tool (-32602). Cost: 50 øre (NOK 0.50) per call, prepaid (prices: the get_pricing tool or GET /api/v1/pricing; a shortfall returns INSUFFICIENT_CREDITS with top_up_url). Docs: https://www.apier.no/docs/guides/norwegian-company-register-search
| Argument | Type | Description |
|---|---|---|
| org_number* | string | 9-digit Norwegian organisasjonsnummer (Brønnøysund Enhetsregisteret ID). Unlike the get_company_* tools, this input schema does NOT run the MOD-11 control-digit check — MOD-11 is enforced by the backing route, which returns ORG_NUMBER_INVALID_CHECKSUM (HTTP 400) when a well-formed 9-digit value fails it; correct the number rather than retrying the same one. |
{
"type": "object",
"required": [
"org_number"
],
"properties": {
"org_number": {
"type": "string",
"pattern": "^\\d{9}$",
"examples": [
"999999999"
],
"description": "9-digit Norwegian organisasjonsnummer (Brønnøysund Enhetsregisteret ID). Unlike the get_company_* tools, this input schema does NOT run the MOD-11 control-digit check — MOD-11 is enforced by the backing route, which returns ORG_NUMBER_INVALID_CHECKSUM (HTTP 400) when a well-formed 9-digit value fails it; correct the number rather than retrying the same one."
}
},
"additionalProperties": false
}A one-shot summary of obligations and deadlines for a Norwegian organisation: your FIRST call when you orient against a company. One call gives you entity_type, nace_codes, mva_registered, data_tier, obligations[] and deadlines[] (tier_2 adds filing_status), all from one version of the rules. It is not the identity from the registry: use get_company_context instead; for a drill down call get_company_obligations; to set a horizon_months call get_company_deadlines. Failure modes: NOT_FOUND, UPSTREAM_TIMEOUT, VALIDATION_FAILED; a credential without `read:brreg` can't see the tool; a call returns unknown tool (-32602). No API key? Use Bearer apier_sandbox_test_<suffix> (a fresh suffix) to get fixtures; valid orgs are the 818, 99966 and 99977 series and 999000002 (see GET /api/v1/sandbox/fixtures). Cost: 50 øre (NOK 0.50) per call, prepaid (prices: the get_pricing tool or GET /api/v1/pricing; a shortfall returns INSUFFICIENT_CREDITS with top_up_url). Docs: https://www.apier.no/docs/guides/company-snapshot
| Argument | Type | Description |
|---|---|---|
| org_number* | string | 9-digit Norwegian organisasjonsnummer (Brønnøysund ID); MOD-11-checked up-front — a failing value is rejected as VALIDATION_FAILED, so correct the number rather than retrying it. |
{
"type": "object",
"required": [
"org_number"
],
"properties": {
"org_number": {
"type": "string",
"pattern": "^\\d{9}$",
"examples": [
"818000006"
],
"description": "9-digit Norwegian organisasjonsnummer (Brønnøysund ID); MOD-11-checked up-front — a failing value is rejected as VALIDATION_FAILED, so correct the number rather than retrying it."
}
},
"additionalProperties": false
}Fast go / no-go trust check before you act for a Norwegian organisation. It keys ONLY off entity activity and visible signing authority. `verification_status` is `pass` (active and signing authority visible), `fail` (not active: konkurs, avvikling or oppløst) or `unknown` (not determinable; never a claimed absence). `signing_authority_summary` lists roles, not the joint rule; for that use get_company_authority. Fails with NOT_FOUND, UPSTREAM_UNAVAILABLE or VALIDATION_FAILED; a credential without `read:brreg` can't see the tool; a call returns unknown tool (-32602). For identity call get_company_context. No API key? Use Bearer apier_sandbox_test_<suffix> (a fresh suffix) to get fixtures; valid orgs are the 818, 99966 and 99977 series and 999000002 (see GET /api/v1/sandbox/fixtures). Cost: 50 øre (NOK 0.50) per call, prepaid (prices: the get_pricing tool or GET /api/v1/pricing; a shortfall returns INSUFFICIENT_CREDITS with top_up_url). Docs: https://www.apier.no/docs/guides/norwegian-company-register-search
| Argument | Type | Description |
|---|---|---|
| org_number* | string | 9-digit Norwegian organisasjonsnummer (Brønnøysund ID); MOD-11-checked up-front — a failing value is rejected as VALIDATION_FAILED, so correct the number rather than retrying it. |
{
"type": "object",
"required": [
"org_number"
],
"properties": {
"org_number": {
"type": "string",
"pattern": "^\\d{9}$",
"examples": [
"818000006"
],
"description": "9-digit Norwegian organisasjonsnummer (Brønnøysund ID); MOD-11-checked up-front — a failing value is rejected as VALIDATION_FAILED, so correct the number rather than retrying it."
}
},
"additionalProperties": false
}Call this BEFORE a batch of metered calls to confirm the calling key's prepaid credit balance covers it, and AFTER a 402 INSUFFICIENT_CREDITS + human top-up to verify the funds landed. The balance is ALWAYS the authenticated key's own — no parameters, so reading another key's balance is structurally impossible. Returns api_key_id, balance_ore (whole øre, always an integer), currency (NOK), updated_at (null = never topped up = balance 0), and top_up_url (hand it to a human). Affordability: cost_ore from get_pricing times planned calls versus balance_ore. Free, zero side effects. Failure modes: 401 without a key (NOT keyless: use get_pricing for keyless price discovery); a credential without `read:credits` (or `read:*`) can't see the tool; a call returns unknown tool (-32602); CREDIT_BALANCE_UNAVAILABLE (503, retryable; a money read is never fabricated). Under a sandbox bearer it returns SANDBOX_TOOL_UNAVAILABLE. Docs: https://www.apier.no/docs/guides/agent-payments
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}Keyless. Norges Bank reference exchange rate for a currency against NOK — the benchmark Norwegian tax and accounting rules accept for foreign-currency obligations. No Norwegian-company input. Input: { base, quote, date? } — ISO 4217 codes, NOK-anchored: exactly one side MUST be 'NOK'. The response is always base NOK and quote = the other currency, whatever order you sent; rate = NOK per 1 unit of quote; date = the day the rate is valid for (weekends and holidays fall back to the prior business day, so it can differ from requested_date). A pair without a NOK side is rejected client-side as UNSUPPORTED_CURRENCY_PAIR: derive cross rates from two NOK legs. Failure modes: VALIDATION_FAILED, UNSUPPORTED_CURRENCY_PAIR, INVALID_DATE, UPSTREAM_TIMEOUT, NO_RATE_AVAILABLE; a credential without `read:norgesbank` can't see the tool; a call returns unknown tool (-32602). For obligations or deadlines rather than a rate, use get_company_summary instead. Docs: https://www.apier.no/docs/mcp
| Argument | Type | Description |
|---|---|---|
| base* | string | Base currency — ISO 4217 three-letter code (case-insensitive). Exactly one of base/quote must be 'NOK'. |
| date | string | Optional ISO 8601 date (YYYY-MM-DD); omit for the latest published rate. Non-business days fall back to the prior business day. |
| quote* | string | Quote currency — ISO 4217 three-letter code (case-insensitive). Exactly one of base/quote must be 'NOK'. |
{
"type": "object",
"required": [
"base",
"quote"
],
"properties": {
"base": {
"type": "string",
"pattern": "^[A-Za-z]{3}$",
"examples": [
"EUR",
"USD"
],
"description": "Base currency — ISO 4217 three-letter code (case-insensitive). Exactly one of base/quote must be 'NOK'."
},
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"examples": [
"2026-04-10"
],
"description": "Optional ISO 8601 date (YYYY-MM-DD); omit for the latest published rate. Non-business days fall back to the prior business day."
},
"quote": {
"type": "string",
"pattern": "^[A-Za-z]{3}$",
"examples": [
"NOK"
],
"description": "Quote currency — ISO 4217 three-letter code (case-insensitive). Exactly one of base/quote must be 'NOK'."
}
},
"additionalProperties": false
}Call this BEFORE metered work to check per-call cost and whether billing enforcement is live. Keyless: executes WITHOUT an API key, so an agent can price a workflow before it holds any credential. Returns the machine-readable price list: every credit-metered REST endpoint with its MCP tool name and cost in whole øre (always an integer), the enforcement.live flag (while false nothing is debited and a 402 is impossible), the 402 INSUFFICIENT_CREDITS recovery-contract field list, the top-up bounds with top_up_url, and the how_to_pay_guide URL. Prices derive from the SAME configuration the 402 meter debits, so this surface cannot drift from enforcement. Input: none — call with {}. Failure modes: per-IP rate limiting and transient errors only. For the calling key's own balance, use get_credit_balance (Bearer key required) instead. Docs: https://www.apier.no/docs/guides/billing
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}Keyless. The universal Norwegian filing calendar: the deadlines for every Norwegian business in the covered categories (MVA, A-melding, Skattemelding, Årsregnskap), which do not depend on any one organisation. One entry per obligation and period for a single Europe/Oslo calendar year: a per-period obligation_id (such as `mva-termin-4-2026`; the company tools use rule ids such as `MVA_FILING_BIMONTHLY` instead), period, deadline (Europe/Oslo), submission_window_closes, adjusted_from (the legal date before a shift, else null), legal_reference and applies_to_entity_types. The output is deterministic for a given rulebook_version. The only input is an optional `year` (2020–2100; defaults to the current Oslo year). Failure modes: VALIDATION_FAILED on year shape; a credential without `read:rulebook` can't see the tool; a call returns unknown tool (-32602). For a specific company's calendar, use get_company_deadlines instead. Docs: https://www.apier.no/docs/guides/norway-corporate-tax-return-deadline
| Argument | Type | Description |
|---|---|---|
| year | integer | Europe/Oslo calendar year the calendar should cover (2020–2100). Omitted → the current Oslo year at the endpoint. |
{
"type": "object",
"properties": {
"year": {
"type": "integer",
"maximum": 2100,
"minimum": 2020,
"examples": [
2026
],
"description": "Europe/Oslo calendar year the calendar should cover (2020–2100). Omitted → the current Oslo year at the endpoint."
}
},
"additionalProperties": false
}Keyless. Retrieve the universal obligation set for a Norwegian entity type — every regulatory obligation that applies by virtue of BEING that organisational form, before per-company Tier-2 data is layered on. Use it for 'what does an AS owe?' or 'what are the baseline filings for an Enkeltpersonforetak?' without naming a company. Each obligation carries tier_2_required: true means the rule engine needs commercial data to decide for a SPECIFIC company, false means it applies unconditionally. Input: { entity_type } from the closed enum AS / ENK / ANS / DA / NUF (no 'OTHER' fallback). Failure modes: VALIDATION_FAILED, UPSTREAM_TIMEOUT; a credential without `read:rulebook` can't see the tool; a call returns unknown tool (-32602). For a specific company's evaluated obligations, call get_company_obligations; for the universal calendar, use get_public_deadlines. Docs: https://www.apier.no/docs/guides/norwegian-company-obligations
| Argument | Type | Description |
|---|---|---|
| entity_type* | string | Norwegian organisational form (closed enum): AS / ENK / ANS / DA / NUF. |
{
"type": "object",
"required": [
"entity_type"
],
"properties": {
"entity_type": {
"enum": [
"AS",
"ENK",
"ANS",
"DA",
"NUF"
],
"type": "string",
"examples": [
"AS"
],
"description": "Norwegian organisational form (closed enum): AS / ENK / ANS / DA / NUF."
}
},
"additionalProperties": false
}Read Apier's cross-source change archive — created / updated / deleted events detected across the upstreams Apier polls (Brønnøysund, Norges Bank, NAV, Skatteetaten Tier-2; the Digdir and Altinn schema pollers are retired, so `digdir` and `altinn` are valid but empty filters). Filter by { source, entity_type, entity_id, change_type } and a { from }–{ to } detected_at range. Queries WITHOUT entity_id withhold personal-field rows by design (`personal_fields_withheld: true`); the org-scoped form returns everything. Keyset-paginated newest-first: pass { limit } (1–500, default 50) and carry `next_cursor` back verbatim (HMAC-signed; an edited one is CURSOR_INVALID: start over without a cursor). Failure modes: VALIDATION_FAILED, CURSOR_INVALID; a credential without `read:changes` can't see the tool; a call returns unknown tool (-32602). No sandbox mirror; returns SANDBOX_TOOL_UNAVAILABLE under a sandbox bearer. Docs: https://www.apier.no/docs/guides/webhooks
| Argument | Type | Description |
|---|---|---|
| to | string | Upper bound on detected_at; must be ≥ from. |
| from | string | Lower bound on detected_at (ISO 8601 with timezone offset). |
| limit | integer | Page size 1–500 (route default 50). |
| cursor | string | Opaque signed cursor from a previous `next_cursor` — pass back verbatim. |
| source | string | Filter to one upstream source (e.g. brreg / altinn / digdir / norges_bank). Omit for all sources. |
Convert an owner-issued key-issuance token into your own API key — the headless onboarding step for an agent that holds no credential yet. Keyless: the one-time token IS the credential. Minting and revocation are dashboard-only, so an agent can never self-issue authority. Redemption is strictly SINGLE-USE and atomic: on success (201) the token is consumed and the result carries {id, name, scopes, created_at, plaintext_key} — returned EXACTLY ONCE; store it immediately. Failure modes: an expired / used / revoked / unknown token yields ONE uniform ISSUANCE_TOKEN_INVALID failure (ask the owner for a fresh token, never retry); MAX_KEYS_REACHED (409) means 3 active keys — the token was NOT consumed, retry with the SAME token after the owner revokes a key. After onboarding, use get_pricing to price metered work and get_credit_balance (with your new key) for the balance. No sandbox mirror; returns SANDBOX_TOOL_UNAVAILABLE under a sandbox bearer. Docs: https://www.apier.no/docs/authentication
| Argument | Type | Description |
|---|---|---|
| token* | string | The one-time key-issuance token the account owner minted in the Apier dashboard (Agent issuance tokens) and handed to you out-of-band. Single-use: it is consumed atomically on success. Never logged by Apier. |
{
"type": "object",
"required": [
"token"
],
"properties": {
"token": {
"type": "string",
"examples": [
"apr_issue_<token_from_the_account_owner>"
],
"maxLength": 256,
"minLength": 1,
"description": "The one-time key-issuance token the account owner minted in the Apier dashboard (Agent issuance tokens) and handed to you out-of-band. Single-use: it is consumed atomically on success. Never logged by Apier."
}
},
"additionalProperties": false
}Resolve a Norwegian company NAME to its 9-digit organisasjonsnummer. Use this as your FIRST call whenever you have a company's name but NOT its org_number — every other company tool needs the number; guessing one risks the wrong company. Searches Brønnøysund's public Enhetsregisteret and returns up to ten candidates with five fields each (name, org_number, org_form, municipality, registry status). Then call get_company_summary or get_company_context with the chosen org_number. Input: { name } (2–100 chars, æ/ø/å supported). On NOT_FOUND, broaden the name and drop the legal form — never loop on the same name. Failure modes: VALIDATION_FAILED, NOT_FOUND, UPSTREAM_TIMEOUT / UPSTREAM_UNAVAILABLE; a credential without `read:brreg` can't see the tool; a call returns unknown tool (-32602). No sandbox mirror — the sandbox fixtures catalogue already lists every synthetic org. Docs: https://www.apier.no/docs/guides/norwegian-company-register-search
| Argument | Type | Description |
|---|---|---|
| name* | string | Company name to search for (2–100 characters, trimmed). Free-text; matched against Brønnøysund's registered `navn` field. Omit the legal form for a broader match (search `Nordic Widgets`, not `Nordic Widgets AS`) — a too-specific or misspelled name returns a NOT_FOUND you must broaden. Norwegian characters (æ/ø/å) are supported. |
{
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"examples": [
"Nordic Widgets",
"Equinor"
],
"maxLength": 100,
"minLength": 2,
"description": "Company name to search for (2–100 characters, trimmed). Free-text; matched against Brønnøysund's registered `navn` field. Omit the legal form for a broader match (search `Nordic Widgets`, not `Nordic Widgets AS`) — a too-specific or misspelled name returns a NOT_FOUND you must broaden. Norwegian characters (æ/ø/å) are supported."
}
},
"additionalProperties": false
}| entity_id |
| string |
| Filter to one entity's change stream (e.g. a 9-digit org number). |
| change_type | string | Filter to created / updated / deleted events. |
| entity_type | string | Filter to one entity type (e.g. annual_accounts, company). |
{
"type": "object",
"properties": {
"to": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
"description": "Upper bound on detected_at; must be ≥ from."
},
"from": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
"examples": [
"2026-01-01T00:00:00Z"
],
"description": "Lower bound on detected_at (ISO 8601 with timezone offset)."
},
"limit": {
"type": "integer",
"maximum": 500,
"minimum": 1,
"examples": [
50
],
"description": "Page size 1–500 (route default 50)."
},
"cursor": {
"type": "string",
"minLength": 1,
"description": "Opaque signed cursor from a previous `next_cursor` — pass back verbatim."
},
"source": {
"enum": [
"brreg",
"altinn",
"digdir",
"norges_bank",
"nav",
"skatteetaten"
],
"type": "string",
"description": "Filter to one upstream source (e.g. brreg / altinn / digdir / norges_bank). Omit for all sources."
},
"entity_id": {
"type": "string",
"examples": [
"999999999"
],
"maxLength": 100,
"minLength": 1,
"description": "Filter to one entity's change stream (e.g. a 9-digit org number)."
},
"change_type": {
"enum": [
"created",
"updated",
"deleted"
],
"type": "string",
"description": "Filter to created / updated / deleted events."
},
"entity_type": {
"type": "string",
"maxLength": 50,
"minLength": 1,
"description": "Filter to one entity type (e.g. annual_accounts, company)."
}
},
"additionalProperties": false
}