Riktig rekkefølge på API-kall – unngå 409 Conflict

Riktig rekkefølge på API-kall – unngå 409 Conflict

Denne siden beskriver riktig rekkefølge på API-kall for å fullføre en Altinn 3-instans. Feil rekkefølge er den vanligste årsaken til at leverandører får HTTP 409 Conflict fra Altinn.

Hvorfor oppstår 409 Conflict?

En 409 Conflict ved kall til process/next betyr at én eller flere valideringer blokkerer videre fremdrift i prosessflowet. Det er tre vanlige årsaker:

Feilkode

Årsak

Løsning

Feilkode

Årsak

Løsning

DataElementFileScanPending

Et eller flere vedlegg er lastet opp, men virusskanning er ikke ferdig

Vent til skanning er fullført – bruk /validate som poll-mekanisme

TooFewDataElementsOfType

Et påkrevd dataelement (f.eks. XML-skjema) er ikke lastet opp. Påkrevde datatyper er konfigurert med minCount > 0. Se Altinn App API – Dataelementer.

Last opp alle påkrevde dataelementer før du kaller process/next.

Validation failed for task

Skjemadata inneholder valideringsfeil som blokkerer innsending

Kall /validate og håndter feil med severity: 1.

To måter å opprette instans på

Leverandører kan opprette en instans på to måter. Begge ender i de samme validerings- og innsendingsstegene.

Alternativ A – Steg-for-steg

Instans, XML og vedlegg lastes opp i separate kall:

POST /instances PUT .../data/{dataGuid} POST .../data?dataType={type}

Alternativ B – Multipart request

Instans, XML og vedlegg sendes samlet i ett kall:

POST /instances (multipart/form-data)

Også ved multipart starter filskanningen asynkront etter at 201-responsen er mottatt. Du er ikke klar til å sende inn umiddelbart.

Felles steg etter opprettelse

Uansett hvilken metode du bruker for å opprette instansen, følger de samme stegene videre.

Steg 1 – Valider instansen (og poll om nødvendig)

GET /instances/{partyId}/{instanceGuid}/validate

Kall validate umiddelbart etter at instansen er opprettet. Bruk dette endepunktet som poll-mekanisme – det sjekker både filskanningstatus og skjemavalidering i ett kall.

Sjekk listen av validationIssues i responsen:

Kode i responsen

Betyr

Handling

Kode i responsen

Betyr

Handling

DataElementFileScanPending

Virusskanning av ett eller flere vedlegg pågår fortsatt

Vent 1–2 sekunder og kall /validate igjen. Gjenta til koden forsvinner.

Feil med severity: 1

Blokkerende feil – vil alltid hindre innsending

Skjemadata må rettes

Advarsel med severity: 2 og noIncrementalUpdates: true

Teknisk advarsel, men blokkerer likevel innsending

Skjemadata må rettes eller feltet må fylles ut

Advarsel med severity: 2 uten noIncrementalUpdates

Ikke-blokkerende advarsel

Kan gå videre til innsending

Ikke kall process/next mens DataElementFileScanPending er til stede. Dette gir HTTP 409 selv om alt annet er i orden. Bruk /validate-responsen til å avgjøre når du er klar.

Steg 2 – Send inn

PUT /instances/{partyId}/{instanceGuid}/process/next

Kall process/next kun når /validate ikke returnerer blokkerende feil. For tjenester med signering skjer dette i to omganger: først signering, deretter endelig innsending.

Oppsummert flyt

Alternativ A (steg-for-steg):

POST /instances PUT .../data/{dataGuid} → XML-skjema(er) POST .../data?dataType=… → Vedlegg GET .../validate → Poll til DataElementFileScanPending forsvinner + sjekk øvrige feil PUT .../process/next

Alternativ B (multipart):

POST /instances (multipart) → Instans + XML + vedlegg i ett kall GET .../validate → Poll til DataElementFileScanPending forsvinner + sjekk øvrige feil PUT .../process/next

Eksempel på 409-respons

Slik ser en typisk feilrespons ut når process/next kalles for tidlig:

{ "title": "Validation failed for task", "status": 409, "detail": "2 validation errors found for task Task_1", "validationIssues": [ { "severity": 1, "dataElementId": "d78c6976-da7e-43d0-931c-6643a0eb59cf", "field": "Utomhusplan", "code": "DataElementFileScanPending", "description": "DataElementFileScanPending", "source": "Altinn.App.Core.Features.Validation.Default.DefaultDataElementValidator-*", "noIncrementalUpdates": true }, { "severity": 2, "dataElementId": "e76776db-211c-4566-b80c-0b3dfb2d907b", "field": "/nabovarsel[1]", "code": "Nabovarsel.DispensasjonOversikt.Dispensasjon.Utfylt", "description": "Du bør oppgi informasjon om dispensasjonen/dispensasjonene du søker om.", "source": "Altinn.App.logic.Validator.DataElement.NVDataElementValidator-NV", "noIncrementalUpdates": true } ] }

To problemer blokkerer innsendingen i dette eksemplet:

  1. DataElementFileScanPending for filen «Utomhusplan» – virusskanning er ikke ferdig ennå. Kall /validate på nytt om noen sekunder.

  2. Manglende dispensasjonsinformasjon i nabovarslet – severity 2, men blokkerende fordi noIncrementalUpdates: true.

Sjekkliste før process/next

  • ☑ Alle påkrevde XML-skjemaelementer er lastet opp

  • ☑ Alle påkrevde vedlegg er lastet opp

  • /validate returnerer ikke DataElementFileScanPending

  • /validate returnerer ingen feil med severity: 1

  • /validate returnerer ingen advarsler med noIncrementalUpdates: true

Relaterte lenker