Sandbox

Public sandbox approval-token mint (zero-auth, IP rate-limited)

Unauthenticated. Per-IP rate limit 100 requests / hour. POST body capped at 32768 bytes (32 KiB) — larger bodies return 413 PUBLIC_SANDBOX_BODY_TOO_LARGE; the streaming readBodyAsTextWithLimit enforces the cap during consumption (lying-Content-Length attackers get aborted at the byte budget, never buffered to memory). Org 999999999 only. Same HMAC derivation as the internal sandbox approval-token endpoint — same input → same 49-char sandbox-approval-{32 hex} token. PROVENANCE EXEMPT. Unknown query parameters return 400 VALIDATION_FAILED (the only accepted keys are simulate_error and the parameters documented on this operation). A 200 carries X-RateLimit-Limit / -Remaining / -Reset for the per-IP clock-hour bucket; a 429 states the same 100-per-clock-hour limit, resetting at the top of the hour.

post/api/v1/sandbox/public/auth/approval-token

Request

  • Base URL: https://www.apier.no
  • URL: https://www.apier.no/api/v1/sandbox/public/auth/approval-token
  • Auth: none required

Query parameters

simulate_error'missing_delegation' | 'invalid_token' | 'validation_error' | 'scope_missing' | 'altinn_timeout' | 'invalid_certificate' | 'malformed_payload' | 'upstream_5xx' | 'AUTH_MISSING_DELEGATION' | 'AUTH_EXPIRED_TOKEN' | 'VALIDATION_FAILED' | 'SCOPE_MISSING'

Force the sandbox to return a structured error response. tokens (Apier-edge failures) — missing_delegation → 403 AUTH_MISSING_DELEGATION; invalid_token → 401 AUTH_EXPIRED_TOKEN; validation_error → 400 VALIDATION_FAILED; scope_missing → 403 SCOPE_MISSING. upstream-failure tokens — altinn_timeout → 504 EXECUTION_DEADLINE_EXCEEDED (Altinn 3 instances endpoint timed out, response body carries the Altinn RFC 7807 envelope); invalid_certificate → 502 MASKINPORTEN_AUTH_FAILED (Maskinporten OAuth2 error_object — invalid_client); malformed_payload → 422 GOVERNMENT_VALIDATION_REJECTED (Skatteetaten validation errors with nested path[] arrays); upstream_5xx → 502 GOVERNMENT_UNAVAILABLE (generic government 5xx). The 500 INTERNAL_ERROR path is reserved for unexpected internal failures. Accepts BOTH lowercase public tokens (primary contract) AND uppercase internal explainer codes (back-compat). Wins precedence over reserved-org defaults.

Headers

X-Correlation-IDstring uuid

Optional request-scope UUID v4 that the client can set to thread its own trace across multiple requests. A valid UUID v4 is reused verbatim on the server; anything malformed or absent is replaced with a fresh crypto.randomUUID(). The canonical value is echoed back on the X-Correlation-ID response header AND persisted on every matching audit_log row — so a forensic query can reconstruct "every row from request X" without timestamp-based correlation. Accepted on every /api/v1/* operation via the proxy middleware; no per-operation opt-in required. The header is also emitted on every /api/v1/* response — see the X-Correlation-ID response-header component.

Request body

org_numberstring required

9-digit Norwegian organisation number. The runtime accepts any value matching this regex at the SCHEMA layer; non-999999999 values still 400 with PUBLIC_SANDBOX_ORG_NOT_PERMITTED at the runtime org-gate. Documenting the broader regex keeps the 400 branch reachable for generated clients.

action'mva_melding' | 'a_melding' required

Response

Token minted. Same envelope shape as the internal /api/v1/sandbox/auth/approval-token success response.

successunknown required

Changes

No recorded changes to this operation across all 2 revisions of this API.