- Hva integrasjonen gjør
- I klartekst — forklart uten sjargong
- Liten ordliste
- Digdir / Maskinporten: klient, JWT-grant og scopes
- Systembruker: System Register, request og BankID-godkjenning
- Tilgangspakker vs. rettigheter (rights)
- Tokens: Maskinporten-token og Altinn-token-utveksling
- Per tjeneste: skattekort, MVA, a-melding, årsregnskap, næringsspesifikasjon, skattemelding
- Fallgruver verdt å unngå
- Vanlige spørsmål (FAQ)
- Hva en kunde må gjøre (BankID-godkjenning)
Hva integrasjonen gjør
Ikke teknisk? Hopp rett til «I klartekst — forklart uten sjargong» lenger ned, så slipper du fagspråket og får hele bildet med hverdagsord.
Macct sender inn til det offentlige på vegne av kunden, uten at kunden deler passord eller logger inn manuelt. Følgende går maskinelt:
- Skattekort til arbeidsgiver — henter fra Skatteetaten hvor mye skatt som skal trekkes av de ansattes lønn.
- MVA-melding — momsoppgaven; leveres via en Altinn 3-app hos Skatteetaten.
- Næringsspesifikasjon + skattemelding (AS) — tallgrunnlaget (tidligere kalt RF-1167) og selve skattemeldingen for aksjeselskapet.
- Årsregnskap — sendes som skjema RR0002 til Regnskapsregisteret i Brønnøysund via Altinn.
- A-melding — den månedlige lønns- og skatterapporten; leveres som JSON direkte til Skatteetatens innrapporterings-API (den gamle Altinn 2-kanalen stengte 15. juni 2026).
- Aksjonærregisteroppgave — oversikten over hvem som eier aksjene i selskapet. RF-1086 bygges i Skatteetatens offisielle skjemaformat og sendes til det nye aksjonærregister-API-et i en 3-stegs flyt (hovedskjema → ett underskjema per aksjonær → bekreft).
Tre byggeklosser gjør dette mulig: Maskinporten (et slags ID-kort som lar én datamaskin bevise hvem den er overfor en annen — driftet av staten ved Digdir), en systembruker (fullmakten du gir Macct, godkjent med BankID i Altinn), og Altinn / Skatteetaten (der innsendingen faktisk leveres). Organisasjonsregisteret hos Brønnøysundregistrene brukes til å sjekke organisasjonsnummeret, rollen din og at selskapet er i orden når du registrerer deg. Alle tre er forklart nærmere rett under.
I klartekst — forklart uten sjargong
Det meste av siden er teknisk. Her er det samme forklart på vanlig norsk, med et bilde du kjenner igjen fra hverdagen.
Tenk på det offentlige — Skatteetaten, Brønnøysund — som en samling låste kontorer der du leverer papirer. Til vanlig går du dit selv, logger inn med BankID og leverer. Macct gjør den jobben for deg. Men for at en datamaskin skal få slippe inn og levere på dine vegne, må tre ting være på plass:
- 1. Et legitimasjonskort for maskiner (Maskinporten). Akkurat som du viser BankID, må Macct-maskinen bevise hvem den er. Maskinporten — en statlig tjeneste fra Digdir — gir Macct et digitalt «ID-kort» som fornyes automatisk. Ingen mennesker logger inn; det er maskin-snakker-med-maskin.
- 2. En fullmakt fra deg (systembruker). ID-kortet sier bare «dette er Macct». Det sier ikke at Macct får handle for nettopp ditt selskap. Derfor signerer du én gang med BankID en fullmakt: «Macct får levere MVA, årsregnskap og lignende for selskapet mitt.» Denne fullmakten kalles en systembruker. Den er avgrenset til akkurat det som står i den, den er sporbar, og du kan trekke den tilbake når som helst.
- 3. Selve leveringsluka (Altinn / Skatteetatens API-er). Med ID-kort og fullmakt i hånd går Macct til riktig «luke» hos det offentlige, leverer dokumentet og får en kvittering tilbake.
Kort oppsummert: Maskinporten = hvem maskinen er. Systembruker = hva den får lov til, og for hvem. Altinn = hvor den leverer. Resten av siden er detaljene bak hver av disse tre.
Hva merker du som kunde? Nesten ingenting. Du godkjenner én lenke med BankID den aller første gangen. Etterpå fører Macct regnskapet og forbereder innsendingene, og du trykker «send» når du selv er klar. Ingenting går automatisk — verken til Skatteetaten eller Brønnøysund — uten at du har godkjent det.
Liten ordliste
Resten av siden bruker disse ordene om og om igjen. Har du dem, leser du alt annet uten å stoppe opp.
| Ord | Betyr |
|---|---|
| Token | Et tidsbegrenset digitalt adgangskort. Maskinen viser det i hvert API-kall i stedet for brukernavn og passord. |
| Scope | Hva et token gir lov til — f.eks. «hente skattekort» eller «skrive til Altinn-instanser». Et token har bare de scopene klienten har fått tildelt på forhånd. |
| Systembruker | Fullmakten et selskap gir et fagsystem i Altinn, godkjent med BankID. Den sier hvem systemet får handle for. |
| Tilgangspakke | En rollebasert «bunt» av tilganger i Altinn (f.eks. «merverdiavgift») som enkelte apper krever i tillegg til konkrete rettigheter. |
| Instans | Én konkret innsending i en Altinn 3-app — en «mappe» som får opplastede dokumenter og drives gjennom prosess-steg til kvittering. |
| Konvolutt | XML-innpakningen rundt selve skattemeldingen ved innsending: hvem den gjelder, hvilket år, og referansen til Skatteetatens eget utkast. |
| Partsnummer | Skatteetatens interne nummer på en skattepliktig part. Ligner et organisasjonsnummer, men er det ikke — det hentes fra API-et deres. |
Digdir / Maskinporten: klient, JWT-grant og scopes
Kort fortalt: Macct ber staten om et midlertidig adgangskort ved å vise et signert digitalt «stempel». Kortet gjelder bare de oppgavene Macct har fått godkjent på forhånd — kalt scopes — for eksempel å hente skattekort eller levere MVA.
Tre ting å vite om Maskinporten:
- Én klient per miljø. Test og produksjon er helt adskilte verdener med hver sin klient, hver sin nøkkel og hver sin scope-tildeling.
- Autentisering med signert nøkkel. Klienten beviser hvem den er med en nøkkel registrert i Digdirs Samarbeidsportal — ingen passord noe sted.
- Token per behov. Klienten signerer en kort JWT («her er jeg, og jeg vil ha disse scopene») og bytter den mot et access token som varer i noen minutter.
POST https://maskinporten.no/token
grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&
assertion=<signert JWT: iss=clientId, aud=maskinporten, scope=...>
Scopene vi bruker
| Scope | Til hva |
|---|---|
skatteetaten:skattekorttilarbeidsgiver | Hente elektronisk skattekort |
skatteetaten:mvameldingvalidering | Forhåndsvalidering av MVA-melding (se fallgruve) |
skatteetaten:mvameldinginnsending | Innsending av MVA-melding (Skatteetatens scope-krav, i tillegg til Altinn-appen) |
skatteetaten:innrapporteringamelding | Sende a-melding og hente tilbakemelding (Skatteetatens innrapporterings-API) |
skatteetaten:innrapporteringaksjonaerregisteroppgave | Sende aksjonærregisteroppgaven (RF-1086, 3-stegs flyt) |
skatteetaten:formueinntekt/skattemelding | Hente gjeldende skattemelding/utkast — kreves for konvolutt-referansen ved innsending av skattemeldingen (se per tjeneste-seksjonen) |
altinn:instances.write | Opprette/skrive Altinn 3-app-instanser (MVA, skattemelding, årsregnskap) |
altinn:authentication/systemregister.write | Registrere/oppdatere systemet i System Register |
altinn:authentication/systemuser.request.read / .write | Opprette og lese systembruker-forespørsler |
skatteetaten:skattekorttilarbeidsgiver — et lite avvik gir
invalid_scope og null forklaring. Maskinporten avviser dessuten
hele token-forespørselen hvis bare ett scope i settet mangler tildeling,
så test- og prod-klienten bør ha hvert sitt scope-sett (prod-klienten har
f.eks. innsendings-scopene for MVA og a-melding som test-klienten ennå ikke
har fått delegert).
skatteetaten:formueinntekt/skattemelding og
altinn:instances.read i produksjon — kan ikke legges til selv i
Samarbeidsportalen; de må tildeles av scope-eieren (Skatteetaten/Digdir) etter
forespørsel. Frem til tildelingen er på plass svarer Maskinporten
invalid_scope på token-forespørselen. Planlegg dette tidlig: selve
tildelingen er rask, men den skjer per miljø — og det er lett å tro at «begge er
satt» når bare det ene miljøet faktisk fikk den.
Systembruker: System Register, request og BankID-godkjenning
Kort fortalt: Dette er selve fullmakten din, og den settes opp i tre steg: Macct registrerer seg som «system» hos Altinn (gjøres bare én gang), lager så en forespørsel for ditt selskap, og til slutt godkjenner du den med BankID. Først da kan Macct levere på vegne av deg.
En systembruker er kundens fullmakt til fagsystemet i Altinn. Flyten er tre steg:
1. Registrer systemet (én gang per miljø)
Fagsystemet registreres i Altinns System Register med en systID på formen
<leverandør-orgnr>_macct, klient-ID-en(e) fra Maskinporten, og
hvilke rettigheter og tilgangspakker systemet forvalter.
POST {altinn}/authentication/api/v1/systemregister/vendor
{ "id": "<orgnr>_macct", "vendor": { "ID": "0192:<orgnr>" },
"clientId": ["..."], "rights": [...], "accessPackages": [...],
"allowedRedirectUrls": ["https://macct.no/altinn/callback"] }
2. Opprett en systembruker-forespørsel per kunde
POST {altinn}/authentication/api/v1/systemuser/request/vendor
{ "systemId": "<orgnr>_macct",
"partyOrgNo": "<kundens orgnr>",
"externalRef": "selskap-123",
"rights": [ { "resource": [ { "id": "urn:altinn:resource", "value": "app_skd_formueinntekt-skattemelding-v2" } ] }, ... ],
"accessPackages": [ { "urn": "urn:altinn:accesspackage:merverdiavgift" }, ... ],
"redirectUrl": "https://macct.no/altinn/callback" }
→ svar inneholder en confirmUrl (am.ui.altinn.no/.../systemuser/request?id=...)
3. Kunden godkjenner med BankID
Kunden åpner confirmUrl og godkjenner i Altinn. Etter godkjenning
slås den faktiske systembrukeren opp («bysystem»-listen), og en
systemUserId lagres på kunden. Den brukes ikke direkte i tokenet —
selve fullmakten bæres av externalRef + kundens orgnr (under).
externalRef må være unik per
systembruker. Skal en kunde få en ny systembruker (f.eks. ved utvidet
tilgang) uten å miste den gamle, må den nye opprettes med en annen
externalRef — ellers svarer Altinn at det allerede finnes en
systembruker for system-ID-en. En ryddig konvensjon (selskap-123,
selskap-123-mva) holder dette oversiktlig.
Tilgangspakker vs. rettigheter (rights)
Kort fortalt: Altinn krever to slags tilgang samtidig — en bred «rolle-pakke» (at Macct får jobbe med regnskap og MVA i det hele tatt) og en konkret «nøkkel» til hver enkelt tjeneste. Mangler én av de to, blir leveringen avvist. Macct setter opp begge for deg.
Altinn 3 skiller mellom to fullmaktstyper, og innsending krever ofte begge:
- Rettigheter (rights) — peker på en konkret ressurs/app, f.eks.
app_skd_formueinntekt-skattemelding-v2(skattemelding),app_brg_aarsregnskap-vanlig-202406(årsregnskap),ske-innrapportering-amelding(a-melding). - Tilgangspakker (access packages) — rollebaserte «bunter» som
Altinns policy-motor (PDP) krever for å instansiere enkelte apper. Vi bruker
urn:altinn:accesspackage:regnskap-okonomi-rapportogurn:altinn:accesspackage:merverdiavgift.
AUTH-00063 «accesspackage is not found in the
referenced system». System Register er miljødelt, så pakker lagt i test må
også legges i prod. Bare rettigheter (uten tilgangspakke) gir gjerne 403 fra PDP-en
når appen skal instansieres.
Tokens: Maskinporten-token og Altinn-token-utveksling
Kort fortalt: Adgangskortet fra Maskinporten byttes inn i et «hus-spesifikt» kort hos Altinn, og knyttes til fullmakten din slik at leveringen havner på riktig selskap. Test-selskap og ekte selskap bruker hvert sitt system — de må aldri blandes, ellers finner ikke Altinn fullmakten.
For å handle på vegne av en annen virksomhet enn klient-eieren binder vi tokenet
til systembrukeren via authorization_details (RAR-typen
urn:altinn:systemuser):
authorization_details = [{
"type": "urn:altinn:systemuser",
"systemuser_org": { "authority": "iso6523-actorid-upis", "ID": "0192:<kundens orgnr>" },
"externalRef": "selskap-123"
}]
Maskinporten-tokenet byttes deretter mot et Altinn-token for å nå Storage/App-API-ene:
GET {altinn}/authentication/api/v1/exchange/maskinporten
Authorization: Bearer <maskinporten-token med altinn:instances.write>
→ Altinn-JWT brukt mot app-instanser
Hvilket token mot hvilket API?
Den vanligste feilkilden i praksis er å bruke feil type token mot feil API. Regelen er enkel når man først ser den:
| API | Riktig token |
|---|---|
| Altinn 3-app-instanser (MVA-melding, skattemelding, årsregnskap) | Altinn-token — Maskinporten-tokenet vekslet hos Altinn (kallet over) |
| Skatteetatens direkte API-er (skattekort, a-melding, aksjonærregister, hentSkattemelding) | Rått Maskinporten-token, systembruker-bundet — uten Altinn-veksling |
«None of the configured JWK keys match the received JWT token» —
Skatteetaten validerer mot Maskinportens nøkler og kjenner ikke Altinns signatur.
Og motsatt: et rått Maskinporten-token når ikke Altinns app-API-er. Tokenet er
aldri «litt riktig» — det er riktig utsteder for riktig mottaker.
maskinporten.no + platform.altinn.no,
test/demo mot test.maskinporten.no + platform.tt02.altinn.no.
Blandes miljøene, resolver ikke systembrukeren (404 / MP-303). Vi velger miljø per
selskap, ikke globalt.
Per tjeneste: API-kall og parametere
Skattekort til arbeidsgiver
Direkte mot Skatteetatens «Skattekort for arbeidsgivere» (v3, forskudd-API) med et
systembruker-bundet Maskinporten-token og scope
skatteetaten:skattekorttilarbeidsgiver. Vert:
api.skatteetaten.no (prod) / api-test.sits.no (test).
Parametere: inntektsår, arbeidsgivers orgnr og den ansattes fødselsnummer. Svar:
trekktype (tabell/prosent), tabellnummer og trekkprosent — som skrives på den
ansatte og brukes i lønnskjøringen.
MVA-melding
Leveres via Altinn 3-appen mva-melding-innsending-v1 (instances.write +
systembruker), ikke det avviklede direkte-API-et. To XML-dokumenter bygges:
selve meldingen (mvamelding, namespace
skattemeldingformerverdiavgift) og en innsendings-wrapper
(mvameldinginnsending). Flyt:
1) POST .../instances (opprett instans, instanceOwner = kundens orgnr)
2) PUT/POST data: mvamelding + wrapper (erstatt auto-opprettet element)
3) PUT .../process/next (data → confirmation → feedback)
→ kvittering: instanceOwnerPartyId/instanceGuid
Meldingen inneholder bl.a. skattleggingsperiode (to-måneders termin +
år), fastsattMerverdiavgift, mvaSpesifikasjonslinje[],
meldingskategori=alminnelig og skattepliktig>organisasjonsnummer.
Valgfri forhåndsvalidering finnes på
/api/mva/grensesnittstoette/mva-melding/valider.
A-melding
Leveres som JSON direkte til Skatteetatens innrapporterings-API — den gamle
Altinn 2-kanalen (A02) stengte 15. juni 2026. Macct bygger det offisielle
Leveranse-objektet fra lønnskjøringen: inntekter per mottaker,
forskuddstrekk og utleggstrekk (negative per mottaker, positive summer i
betalingsinformasjon) og arbeidsgiveravgift per sone — med
OTP-premien som egen grunnlagslinje (tilskuddOgPremieTilPensjon),
slik kodeverket krever. Tokenet er systembruker-bundet med scope
skatteetaten:innrapporteringamelding.
POST /v1/innsending/{periode}/{opplysningspliktig} (Leveranse-JSON + idempotencyKey-header)
GET /v1/forsendelser/{forsendelseId} (tilbakemelding når den er klar)
Tilbakemeldingen brukes til avstemming: Skatteetatens beregnede forskuddstrekk og arbeidsgiveravgift, KID/kontonummer og forfallsdato, pluss eventuelle avvik med alvorlighetsgrad. Som alt annet sendes a-meldingen aldri automatisk — den valideres først, og et menneske trykker «send».
Aksjonærregisteroppgave (RF-1086)
Leveres til Skatteetatens aksjonærregister-API i en 3-stegs flyt, i det
offisielle skjemaformatet (hovedskjema 890/RF-1086 + ett underskjema
923/RF-1086-U per aksjonær, validert mot Skatteetatens XSD-er). Tokenet er
systembruker-bundet med scope
skatteetaten:innrapporteringaksjonaerregisteroppgave; hvert
kall har påkrevd idempotencyKey.
1) POST /{aar}/1086H → hovedskjemaid
2) POST /{aar}/{hovedskjemaid}/1086U (ett kall per aksjonær)
3) POST /{aar}/{hovedskjemaid}/bekreft?antall_underskjema=N → forsendelseId
Oppgaven følger samme godkjenningsløp som skattemeldingen (utkast → gjennomgang → godkjenn → send, med SHA-256-integritetskontroll) og sendes aldri automatisk. VPS-registrerte selskap blokkeres (VPS rapporterer for dem); selskap med flere aksjeklasser eller hendelser som fusjon/fisjon/ spleis henvises inntil videre til skatteetaten.no.
Årsregnskap (RR0002)
Leveres til Regnskapsregisteret via Altinn-appen
app_brg_aarsregnskap-vanlig-202406:
- To dokumenter lastes opp:
Hovedskjema(RR0002H_M — metadata) ogUnderskjema(RR0002U_M — resultat/balanse med detaljlinjer). - Signeringen krever en person. Systemet fører prosessen frem til signeringssteget, men selve signeringen kan ikke utføres av en systembruker — Regnskapsregisteret krever av juridiske hensyn at en person signerer med ID-porten i Altinn (systembruker-signering avvises med 403). Fagsystemet klargjør og låser alt, personen signerer, og systemet fanger opp fullført prosess ved å polle instansen etterpå.
- Om app-navnet: suffikset
-202406er en versjonsdato Brønnøysund kan rullere ved nye årganger — navnet er derfor konfigurerbart hos oss, ikke fastspikret.
Næringsspesifikasjon og skattemelding (AS)
Skattemeldingen for AS er den mest sammensatte flyten. Den har tre deler:
- Bygg og godkjenn. Næringsspesifikasjonen (RF-1167-grunnlaget)
bygges og godkjennes først; deretter genereres selve skattemeldingen
(v2-format, pakket i
skattemeldingOgNaeringsspesifikasjonRequestmed base64-kodede deldokumenter). Innsending er aldri automatisk — status-løpet erDRAFT → READY_FOR_REVIEW → APPROVED → SUBMITTED, med SHA-256-integritetskontroll mellom stegene (en Macct-kontroll, ikke et offentlig krav) og en obligatorisk preflight-sjekk før noe sendes. - Lever via Altinn-appen. Dokumentene lastes opp på en instans i
app_skd_formueinntekt-skattemelding-v2og prosessen drives frem til bekreftelses-steget. - Personen bekrefter. Bekreftelses-steget (Task_2) må utføres av
en person med ID-porten — se personkravet under.
SUBMITTEDsettes først når Skatteetatens tilbakemelding faktisk siervalidertOK, aldri bare fordi prosess-steget er passert.
Konvolutten må referere Skatteetatens eget utkast
Dette er lett å gå glipp av, og feilen viser seg først etter at personen
har bekreftet: Skatteetaten har allerede et utkast til skattemelding for selskapet
liggende, og innsendings-konvolutten må inneholde en referanse til akkurat det
dokumentet (dokumentreferanseTilGjeldendeDokument) pluss Skatteetatens
eget partsnummer for selskapet. Begge hentes fra
hentSkattemelding-API-et rett før innsending:
GET https://api.skatteetaten.no/api/skattemelding/v2/{inntektsår}/{orgnr}
Authorization: Bearer <systembruker-bundet Maskinporten-token,
scope skatteetaten:formueinntekt/skattemelding>
Accept: application/xml
→ svar: dokumentid (f.eks. SKI:755:14847), dokumenttype
(skattemeldingUpersonligUtkast) og partsnummer (10 sifre — IKKE orgnr)
→ begge legges inn i konvolutten før opplasting
Tre detaljer som må være riktige samtidig:
- Uten referansen avvises innsendingen med
konvoluttIkkeRiktigFormaterti tilbakemeldingen. Kravet står i Skatteetatens API-dokumentasjon, men håndheves ikke av XSD-ene — XML-en kan altså validere grønt lokalt og likevel bli avvist. Det samme gjelder hvis organisasjonsnummeret brukes der partsnummeret skulle stått. - Systembruker-bindingen er selve representasjonen. Et token
med riktig scope, men uten systembruker i
authorization_details, avvises med «Pålogget bruker har ikke nødvendige rettigheter i Altinn til å representere skattepliktig». - Hent referansen ferskt per innsending. Utkastet hos Skatteetaten kan erstattes; en gammel dokumentid peker da på feil versjon.
Personkravet i siste ledd
Som for årsregnskapet krever Skatteetaten spor til en person bak
innsendingen: fullføres bekreftelses-steget maskinelt med systembruker, leverer
prosessen tilsynelatende — men tilbakemeldingen blir validertMedFeil /
innkommendeForespoerselManglerSporTilUtfoerende. Riktig design er
derfor at fagsystemet klargjør og låser innsendingen og stopper ved bekreftelsen,
og at personen fullfører med ID-porten — i Altinn-portalen eller direkte i
fagsystemet (sluttbruker-flyten under).
Personlig bekreftelse fra eget system (ID-porten sluttbruker-flyt)
Personen trenger ikke sendes til Altinn-portalen for bekreftelses-steget: et
sluttbrukersystem kan la personen logge inn med ID-porten i systemets egen flyt
og utføre bekreftelsen via API — samme mønster som Altinn dokumenterer for
sluttbrukersystemer, og slik de store fagsystemene leverer. Registrer en
«API-klient» i Digdirs Samarbeidsportal (grant authorization_code +
PKCE S256; klientautentisering client_secret_post eller
private_key_jwt), be om scope
openid altinn:instances.write, og veksle personens access-token til
et personlig Altinn-token:
GET {altinn}/authentication/api/v1/exchange/id-porten (prod)
GET {altinn}/authentication/api/v1/exchange/id-porten?test=true (TT02)
Authorization: Bearer <idporten-access-token>
→ PUT {app}/instances/{instans}/process/next body: {"action":"confirm"}
Authorization: Bearer <personlig-altinn-token>
Detaljer som er greie å vite om på forhånd:
- Samtykkesiden: ID-porten viser en «Godta / Avvis»-side for
datadelings-scopene. Velger brukeren «Avvis», utstedes tokenet med kun
openid/profile— og vekslingen svarer 403 uten body, fordi den krever minst ettaltinn:-scope i tokenet. Samtykket huskes etter første «Godta». - Lese-scopet er ikke selvbetjent i prod:
altinn:instances.readlar seg ikke legge til selv i Samarbeidsportalens produksjonsmiljø. Be kun omaltinn:instances.write— bekreftelsen er en skriveoperasjon, og vekslingen trenger bare ett altinn:-scope. ?test=true: TT02-vekslingen krever parameteren for tokens fratest.idporten.no(403 uten); i produksjon skal den ikke med.private_key_jwt: velges nøkkel i stedet for client secret, skalaudi client_assertion være ID-portens issuer (ikke token-endepunktet), ogkid-en fra Samarbeidsportalen er påkrevd i JWT-headeren.- Rask sanity-test: et token-kall med en dummy-kode skiller
klientoppsettet fra resten av flyten —
invalid_clientbetyr feil klientautentisering,invalid_grantbetyr at klienten er riktig satt opp (koden var jo ugyldig med vilje).
Bekreftelsen bærer da spor til personen (kravet over), brukeren er aldri innom
Skatteetatens visningsklient (se SMEVB-005 under fallgruvene), og statusregelen
er uendret: «innsendt» settes først ved validertOK i
tilbakemeldingen.
BigDecimal med to
desimaler, og fremmedvaluta omregnes med Norges Banks kurs på transaksjonsdato.
Ingen innsending skjer uten at den er trigget og godkjent — systemet er bygd for å
aldri sende noe «av seg selv».
-202406 bærer
flere av navnene en versjons- eller datomarkør — -v2 for skattemeldingen,
-v1 for MVA-appen, v3 for skattekort-API-et — som
Skatteetaten og Brønnøysund kan oppgradere over tid. Alle er konfigurerbare i Macct,
så den faktiske integrasjonen følger gjeldende versjon selv om navnene i teksten her
skulle henge etter.
Fallgruver verdt å unngå
Punktene under er de som typisk koster mest tid. Macct er bygd for å håndtere disse situasjonene automatisk der det er mulig, slik at de i praksis sjelden er noe du trenger å tenke på.
api.skatteetaten.no. Verten
idporten.api.skatteetaten.no validerer ID-porten-nøkler og svarer 401
på et Maskinporten-token — riktig vert er avgjørende.- Ingen avsluttende skråstrek i URL-en —
…/v2/2025/<orgnr>/gir 404 uten forklaring;…/v2/2025/<orgnr>treffer. - Accept må være nøyaktig
application/xml— API-et leverer kunapplication/xml;charset=UTF-8og svarer 406 på alt annet (ogsåtext/xml). Sjekk spesielt at HTTP-klienten din ikke har en interceptor som overskriver Accept-headeren globalt — en JSON-default et helt annet sted i koden kan være hele feilen. - Riktig scope, systembruker-bundet — uten scopet stopper det
allerede hos Maskinporten (
invalid_scope); med scope men uten systembruker svarer API-et «ikke nødvendige rettigheter … til å representere skattepliktig».
dokumentreferanseTilGjeldendeDokument) og bruke deres
partsnummer — ikke organisasjonsnummeret. XSD-ene har begge feltene som valgfrie,
så lokal skjemavalidering blir grønn uansett; avvisningen kommer først i
tilbakemeldingen etter at personen har bekreftet. Kravet står kun i
API-dokumentasjonens fritekst. Hent referansen fra hentSkattemelding-API-et rett
før hver innsending (se per tjeneste-seksjonen).applicationmetadata — f.eks.
årsregnskapets hoveddokument heter Hovedskjema (ikke «Skjema»), og MVA-
appen heter mva-melding-innsending-v1.norskIdentifikator skal pakke en
<organisasjonsnummer>, ikke ren tekst. Manglende obligatoriske felt
(som skattepliktig>organisasjonsnummer) gir interne app-feil i
prosess-steget snarere enn en tydelig valideringsfeil.AUTH-00063 ellers).AUTH-00004; bruk en distinkt referanse for nye/utvidede systembrukere.app_skd_formueinntekt-skattemelding-v2 kan bekreftelses-steget
(Task_2) ikke fullføres av en systembruker: prosessen leverer tilsynelatende, men
tilbakemeldingen blir validertMedFeil med årsak
innkommendeForespoerselManglerSporTilUtfoerende — Skatteetaten krever
spor til en person bak innsendingen. Tilsvarende svarer Altinn 403 når en
systembruker forsøker å signere årsregnskapet. Design flyten slik at systemet
klargjør og stopper, og personen bekrefter/signerer med ID-porten — og sett aldri
«innsendt»-status uten å ha lest tilbakemeldingen (validertOK).skatt.skatteetaten.no/web/skattemelding-visning), som
personen sendes til for «Se opplysninger og send inn», kan feile med «Det skjedde
en teknisk feil … SMEVB-005» — observert i både testmiljøet og produksjon
(per juli 2026), og rammer flere sluttbrukersystemer. Systematisk testing viser
at klientens eneste datakall
(GET /api/skattemelding-visning/skattemelding-altinn3) svarer
HTTP 500 med koden for alt gyldig upersonlig SBS-innhold — også en
minimal konvolutt — uavhengig av prosess-steg, mens tomme/ødelagte instanser gir
SMEVB-002. Feilen ligger altså server-side hos Skatteetaten og er meldt dem
(ta vare på korrelasjonsid-headeren fra feilsvaret til
supportsaken). Instansen med den opplastede skattemeldingen ligger trygt låst i
Altinn imens — det er et blokkert siste klikk, ikke tapte data. Den robuste
veien utenom er ID-porten sluttbruker-flyten beskrevet over: personen bekrefter
da i fagsystemet og er aldri innom visningsklienten.Vanlige spørsmål (FAQ)
Hva er en systembruker?
En systembruker er en fullmakt et selskap gir til et fagsystem (som Macct) i Altinn, slik at systemet kan rapportere til det offentlige på selskapets vegne. Den godkjennes med BankID, er avgrenset til bestemte tjenester, er sporbar og kan trekkes tilbake når som helst.
Hva er Maskinporten?
Maskinporten er en statlig OAuth2-tjeneste fra Digdir for maskin-til-maskin- kommunikasjon. Den gir et fagsystem et tidsbegrenset «ID-kort» (access token) som beviser hvilken virksomhet systemet opptrer som, uten at et menneske logger inn.
Hva er forskjellen på Maskinporten og ID-porten?
ID-porten brukes når en person logger inn (for eksempel med BankID) for å bruke en offentlig tjeneste. Maskinporten brukes når en datamaskin / et system autentiserer seg uten en person til stede. Noen API-er (som MVA-forhåndsvalidering) ser ut til å kreve ID-porten; selve innsendingen går via Maskinporten og Altinn.
Hva er forskjellen på systembruker og Maskinporten?
Maskinporten beviser hvem maskinen er. En systembruker sier hva maskinen har lov til, og for hvem — altså fullmakten fra et bestemt selskap. Begge trengs: Maskinporten-tokenet bindes til systembrukeren for å rapportere på vegne av selskapet.
Hvordan fungerer Altinn 3 for regnskapssystemer?
Altinn 3 tilbyr «apper» (for eksempel for MVA-melding og årsregnskap) som et fagsystem oppretter instanser i via API. Systemet bytter Maskinporten-token mot et Altinn-token, oppretter en instans for kundens organisasjonsnummer, laster opp dataene og fører prosessen frem til kvittering.
Hvordan sender et regnskapssystem MVA-melding?
Via Altinn 3-appen for MVA-melding: systemet bygger XML-meldingen, oppretter en instans hos Altinn med kundens organisasjonsnummer som eier, laster opp meldingen og en innsendings-wrapper, og fører prosessen frem til kvittering. Innsending skjer aldri uten at brukeren har godkjent.
Hvordan fungerer skattekort-API-et?
Macct henter elektronisk skattekort direkte fra Skatteetatens API «Skattekort for arbeidsgivere» med et systembruker-bundet Maskinporten-token. Svaret (trekktype, tabellnummer og trekkprosent) skrives på den ansatte og brukes i lønnskjøringen.
Hvorfor avvises skattemeldingen med «konvoluttIkkeRiktigFormatert»?
Innsendings-konvolutten mangler referansen til Skatteetatens gjeldende skattemelding
(dokumentreferanseTilGjeldendeDokument), eller bruker organisasjonsnummer
der Skatteetatens partsnummer skulle stått. Begge hentes fra hentSkattemelding-API-et
rett før innsending. Kravet står i Skatteetatens API-dokumentasjon, men håndheves ikke
av XSD-ene — XML-en kan derfor validere grønt lokalt og likevel bli avvist.
Hva en Macct-kunde må gjøre
For at Macct skal kunne sende inn MVA-melding, årsregnskap, skattemelding m.m. på vegne av selskapet ditt, trenger vi én engangsgodkjenning fra deg:
- Du får en lenke til Altinn (
am.ui.altinn.no) fra Macct. - Du logger inn med BankID og godkjenner systembruker-forespørselen — du må ha en rolle på selskapet (typisk daglig leder eller styreleder, eller en delegert rolle) i Brønnøysund/Altinn.
- Godkjenningen gir Macct en systembruker med nøyaktig de tilgangspakkene og rettighetene som står i forespørselen — verken mer eller mindre.
Du deler aldri passord, BankID-koder eller API-nøkler. Fullmakten er avgrenset, sporbar, og du kan når som helst trekke den tilbake i Altinn under Tilgangsstyring → Systemtilgang. Og selv med fullmakt på plass sender Macct aldri noe inn uten at det er utløst og godkjent — innsending krever alltid et eksplisitt menneskelig «send».
Macct fører regnskapet og forbereder innsendingene — du godkjenner én gang og trykker «send» når du er klar.
Prøv gratis i 30 dager Se Altinn-statusen