Apier

Apier.no

Sandbox

A permanent zero-auth test surface. Every public Apier.no endpoint is listed below with a copy-paste cURL and a deterministic mock response. No signup, no API key, no dependency on Altinn test-environment uptime — these requests run against the live public API, and the synthetic org numbers below are safe to paste into any call.

Synthetic test org numbers

Paste any of these into live Apier.no calls. The 999xxxxxxx range is reserved for synthetic testing and 123456789 is the docs-standard mock used across the OpenAPI manifest and capability examples.

Org numberNameEntityData tierScenario
999111114Synthetic AS with Full DelegationAStier_1+2AS with full Tier 2 delegation
999222226Synthetic ENK Sole ProprietorENKtier_1ENK sole proprietor, no employees
999333338Synthetic DA PartnershipDAtier_1DA partnership (delt ansvar)
123456789Docs-standard mock orgNUFtier_1NUF (foreign branch)
999444008Sandbox unknown-org placeholderAStier_1sandbox-unknown-org

Endpoints

Zero-auth, permanently rate-limited per-IP at 1000 req/min (Category A) per CLAUDE.md Rule 27. Every cURL runs against the live production API.

Norwegian business deadlines for a given calendar year

GET /api/v1/public/deadlines

Request
curl https://apier.no/api/v1/public/deadlines?year=2026
Response
{
  "success": true,
  "data": {
    "year": 2026,
    "deadlines": [
      {
        "obligation_id": "mva-termin-1-2026",
        "obligation_name": "MVA-melding, 1. termin 2026",
        "period": "Januar–februar 2026",
        "deadline": "2026-04-10T23:59:59+02:00",
        "submission_window_closes": "2026-04-10T23:59:59+02:00",
        "timezone": "Europe/Oslo",
        "adjusted_from": null,
        "legal_reference": "Skatteforvaltningsloven § 8-3",
        "applies_to_entity_types": ["AS", "ENK", "ANS", "DA", "NUF"]
      },
      {
        "obligation_id": "amelding-2026-05",
        "obligation_name": "A-melding — mai 2026",
        "period": "Mai 2026",
        "deadline": "2026-06-05T23:59:59+02:00",
        "submission_window_closes": "2026-06-05T23:59:59+02:00",
        "timezone": "Europe/Oslo",
        "adjusted_from": null,
        "legal_reference": "A-opplysningsloven § 3",
        "applies_to_entity_types": ["AS", "ENK", "ANS", "DA", "NUF"]
      }
    ]
  },
  "_meta": {
    "rulebook_version": "1.0.0",
    "data_freshness": "2026-04-21T00:00:00.000Z",
    "last_verified": "2026-04-21T00:00:00.000Z",
    "source": "apier.no",
    "data_source": "Apier Universal Rulebook",
    "legal_basis": "NLOD — public registry reuse",
    "schema_version": "1.0.0"
  }
}

Every deadline is ISO 8601 with the Europe/Oslo offset baked in. `adjusted_from` is non-null when the legal date fell on a weekend or holiday — agents do not need to reimplement Oslo business-day math.

Generic Norwegian business obligations by entity type

GET /api/v1/public/obligations

Request
curl https://apier.no/api/v1/public/obligations?entity_type=AS
Response
{
  "success": true,
  "data": {
    "entity_type": "AS",
    "obligations": [
      {
        "obligation_id": "mva-registration",
        "obligation_name": "Registrering i Merverdiavgiftsregisteret",
        "category": "registration",
        "frequency": "one-time",
        "required": "conditionally",
        "condition": "Påkrevd når samlet omsetning overstiger 50 000 NOK i en 12-måneders periode.",
        "tier_2_required": true,
        "legal_reference": "Merverdiavgiftsloven § 2-1",
        "source_url": "https://lovdata.no/lov/2009-06-19-58/%C2%A72-1"
      },
      {
        "obligation_id": "skattemelding-annual",
        "obligation_name": "Skattemelding for formues- og inntektsskatt",
        "category": "tax",
        "frequency": "annual",
        "required": "always",
        "condition": null,
        "tier_2_required": false,
        "legal_reference": "Skatteforvaltningsloven § 8-2",
        "source_url": "https://lovdata.no/lov/2016-05-27-14/%C2%A78-2"
      }
    ],
    "notes": []
  },
  "_meta": {
    "rulebook_version": "1.0.0",
    "data_freshness": "2026-04-21T00:00:00.000Z",
    "last_verified": "2026-04-21T00:00:00.000Z",
    "source": "apier.no",
    "data_source": "Apier Universal Rulebook",
    "legal_basis": "NLOD — public registry reuse",
    "schema_version": "1.0.0"
  }
}

`tier_2_required: true` marks obligations that need a Tier 2 delegation before producing a company-specific verdict. Without delegation the `/company/*` endpoints return `insufficient_data` with an `upgrade_path`.

Official Norges Bank NOK exchange rate for a currency and date

GET /api/v1/tools/exchange-rate

Request
curl 'https://apier.no/api/v1/tools/exchange-rate?currency=EUR&date=2026-04-10'
Response
{
  "success": true,
  "data": {
    "base": "NOK",
    "quote": "EUR",
    "rate": 11.5234,
    "date": "2026-04-10",
    "requested_date": "2026-04-10",
    "source": "Norges Bank",
    "cached": false
  },
  "_meta": {
    "rulebook_version": "1.0.0",
    "data_freshness": "2026-04-10T00:00:00.000Z",
    "last_verified": "2026-04-10T16:00:00.000Z",
    "source": "apier.no",
    "served_from": "live",
    "schema_version": "1.0.0"
  }
}

`date` is the actual publication day Norges Bank resolved the rate from — on weekends/holidays it falls back to the previous banking day and `requested_date` records what you originally asked for.

Altinn 2 → Altinn 3 migration map

GET /api/v1/tools/altinn-migration

Request
curl https://apier.no/api/v1/tools/altinn-migration?altinn2_code=A0208
Response
{
  "success": true,
  "data": {
    "deprecation_deadline": "2026-06-19T23:59:59+02:00",
    "timezone": "Europe/Oslo",
    "days_remaining": 57,
    "deadline_passed": false,
    "entry": {
      "altinn2_code": "A0208",
      "altinn2_name": "A-melding",
      "altinn3_resource": "altinn:serviceowner:skatteetaten:a-melding",
      "verified": true,
      "migration_notes": "A-melding consumed via the Altinn 3 resource model. Requires a System User delegation with scope altinn:accessmanagement/authorizedparties.read.",
      "last_verified_against_digdir": "2026-04-15"
    }
  },
  "_meta": {
    "rulebook_version": "1.0.0",
    "data_freshness": "2026-04-15T00:00:00.000Z",
    "last_verified": "2026-04-15T00:00:00.000Z",
    "source": "apier.no",
    "schema_version": "1.0.0"
  }
}

Omit `altinn2_code` to receive the full `mappings` array. The `deadline_passed` flag flips to `true` at 2026-06-19T23:59:59+02:00 Europe/Oslo — agents should branch on the boolean, not reimplement the date math.

Machine-readable capability manifest (agent discovery)

GET /api/v1/capabilities

Request
curl https://apier.no/api/v1/capabilities
Response
{
  "success": true,
  "data": {
    "service": "apier.no",
    "version": "1",
    "rulebook_version": "1.0.0",
    "locale": "nb-NO",
    "capabilities": [
      {
        "id": "public.obligations",
        "name_en": "Generic obligations by Norwegian entity type",
        "endpoint": { "method": "GET", "path": "/api/v1/public/obligations" },
        "auth": "none",
        "tier_minimum": null,
        "category": "public-tool",
        "openapi_operation_id": "getPublicObligations",
        "example_request": "GET /api/v1/public/obligations?entity_type=AS",
        "data_sources": ["internal-static"],
        "freshness": "static"
      },
      {
        "id": "auth.permissions",
        "name_en": "Check delegation status for an organisation",
        "endpoint": { "method": "GET", "path": "/api/v1/auth/permissions/{org}" },
        "auth": "api_key",
        "tier_minimum": "free",
        "category": "auth",
        "openapi_operation_id": "getPermissionState",
        "example_request": "curl -H 'Authorization: Bearer <API_KEY>' https://apier.no/api/v1/auth/permissions/999111114",
        "data_sources": ["altinn", "internal-supabase"],
        "freshness": "live"
      }
    ]
  },
  "_meta": {
    "rulebook_version": "1.0.0",
    "data_freshness": "2026-04-20T00:00:00.000Z",
    "last_verified": "2026-04-20T00:00:00.000Z",
    "source": "apier.no",
    "schema_version": "1.0.0"
  }
}

Every authenticated surface is listed with its `auth`, `tier_minimum`, and OpenAPI operation id. Parse this instead of hard-coding endpoint lists in agent prompts.

Structured Apier-vs-direct-integration comparison

GET /api/v1/comparison/direct-integration

Request
curl https://apier.no/api/v1/comparison/direct-integration
Response
{
  "success": true,
  "data": {
    "approaches": {
      "apier": {
        "success_rate": 0.994,
        "p95_latency_ms": 180,
        "failure_modes": ["rate_limited", "upstream_unavailable"],
        "retry_handling": "automatic",
        "error_normalization": true,
        "deadline_intelligence": true,
        "cross_agency_orchestration": true,
        "complexity": "low",
        "auth_setup_steps": 2
      },
      "direct_altinn": {
        "success_rate": null,
        "p95_latency_ms": null,
        "failure_modes": ["delegation_missing", "scope_missing", "maskinporten_token_expiry"],
        "retry_handling": "none",
        "error_normalization": false,
        "deadline_intelligence": false,
        "cross_agency_orchestration": false,
        "complexity": "high",
        "auth_setup_steps": 9
      },
      "scraping": {
        "success_rate": null,
        "p95_latency_ms": null,
        "failure_modes": ["html_shape_drift", "captcha", "ip_block"],
        "retry_handling": "none",
        "error_normalization": false,
        "deadline_intelligence": false,
        "cross_agency_orchestration": false,
        "complexity": "very_high",
        "auth_setup_steps": 0
      }
    },
    "recommendation": "apier",
    "last_updated": "2026-04-20T00:00:00.000Z"
  },
  "_meta": {
    "rulebook_version": "1.0.0",
    "data_freshness": "2026-04-20T00:00:00.000Z",
    "last_verified": "2026-04-20T00:00:00.000Z",
    "source": "apier.no",
    "schema_version": "1.0.0"
  }
}

Designed to be parsed, not rendered — the fields are stable enough for agents to pick a branch between Apier, direct integration, and scraping at planning time.