Skip to content

Dialog Anatomy

The inbox list item and the details page are both built in as components from @altinn/altinn-components, and Arbeidsflate maps data from Dialogporten data into their props. This page shows which part of each component is filled by which field, for designers and for developers new to the codebase.

The figures are simplified drawings of the real components. Hover a number to see what it points at, and switch to Fields to replace the content with the field that fills it.

Both views take the same route: a GraphQL query through the BFF, a mapper that turns the response into a small view model, and a props builder that feeds the component. They do not share a data shape. The list asks for a light SearchDialog per dialog, and the details page asks for one full Dialog.

flowchart TB
  subgraph details["Details"]
    direction TB
    q2["dialogById (DialogByIdFields)"] --> m2["mapDialogToInboxItem()"] --> v2["DialogByIdDetails"] --> p2["DialogDetailsPage › DialogDetails"] --> c2["DialogLayout › DialogHeader, DialogBody, Timeline"]
  end
  subgraph list["List"]
    direction TB
    q1["searchDialogs (SearchDialogFields)"] --> m1["mapDialogToInboxItems()"] --> v1["InboxItemInput"] --> p1["useGroupedDialogs › formatDialogItem()"] --> c1["DialogList › DialogListItem"]
  end
  lookups["organizations · parties · i18n"] -.-> m1
  lookups -.-> m2

The mappers look up three things the dialog does not carry itself:

  • organizations gives the service owner’s name, logo and contact details, keyed by org. The BFF builds it from altinn-orgs.json and caches it.
  • parties gives the recipient’s name and type, keyed by party. These are the parties the user can act for.
  • i18n picks the language version of each text field and formats dates.

The details page also makes calls of its own:

  • content.mainContentReference, transmission contentReferences and non-GET guiActions go straight from the browser to the service owner, authorised by dialogToken. They do not pass through the BFF. See Embeddable content.
  • notificationLogs and labelAssignmentLog feed the activity log. See The Activity Log and Its Sources.
  • The dialogEvents subscription (SSE) reports changes to the dialog, and the page refetches it. The dialog is also refetched every nine minutes and when the tab regains focus.

DialogListItem, one per dialog in Innboks, Utkast, Sendt, Arkiv, Papirkurv and search results. The whole card links to /inbox/{id}/, except the menu. Its colour follows the recipient: green for a person, blue for an organisation.

DialogListItem
OktoberG
Skattemeldingen for 20251Ulest2

Vi trenger mer dokumentasjon på fradraget for reisekostnader.4

Krever handlingDokumentasjon mangler9. oktober 2026 kl. 14.03212Frist: 30. november 2026 kl. 23.59Arkiv5
OH6
7
Årsregnskapet for 2025 er registrert

Regnskapet er kontrollert og offentliggjort.

Avsluttet2. oktober 2026 kl. 09.15
KN

Top: unread, a person as recipient. Bottom: read, an organisation as recipient, completed.

DialogportenOrganisation registryPartiesDerived in the frontendDashed: only shown when a condition is met
  1. 1
    Title

    content.title. Bold while unread, two lines at most. Search terms are highlighted.

  2. 2
    Unread badge

    Ulest when isContentSeen is false. Otherwise Ulest innhold whenhasUnopenedContent is true, for example a new transmission nobody has opened.

  3. 3
    Sender and recipient

    The sender is content.senderName, falling back to the name of the service owner inorg. The logo comes from organizations and is only shown when the service owner is the sender. The recipient is the name of party, looked up in parties. Sub-units get an outlined avatar.

    When the user has several parties selected, both the recipient's and the sender's avatar are shown.

  4. 4
    Summary

    content.summary, two lines at most.

  5. 5
    Metadata

    Status, extended status, last updated, attachments, sent and received, due date and folder. The rules are in the table below.

  6. 6
    Seen by

    Everyone who has opened the dialog since it last changed: seenSinceLastContentUpdate. The user appears as deg.

  7. 7
    Menu

    Built in the frontend. In bulk mode it is replaced by a checkbox.

    • Velg flere …
    • Marker som ulest, Flytt til arkivet, Flytt til papirkurven, Angre: fromendUserContext.systemLabels and isContentSeen
    • Sett av …: seenSinceLastContentUpdate
    • Om fullmakt og tjeneste
  8. G
    Group

    The month of contentUpdatedAt when every dialog is from this year, otherwise the year. Bankruptcy-estate dialogs (serviceResource isapp_brg_konkursbehandling) always come first. Search results are one group.

ElementPropFieldRule
StatusstatusstatusHidden for NOT_APPLICABLE. DRAFT is dotted, REQUIRES_ATTENTION is filled, every other status is outlined.
Extended statusextendedStatusLabelcontent.extendedStatusFree text from the service owner, outlined.
Last updatedupdatedAt, updatedAtLabelcontentUpdatedAt9. oktober 2026 kl. 14.03. Also the sort key and the group key.
AttachmentsattachmentsCountguiAttachmentCountShown when above 0.
SentsentCountfromPartyTransmissionsCountTransmissions from the user. Shown when above 0.
ReceivedreceivedCountfromServiceOwnerTransmissionsCountTransmissions from the service owner. Shown when above 0.
Due datedueAtdueAt, statusYellow with 14 days or more left. Red with less than 14 days left, or past the date (Frist utgått: …). Neutral outline when the status is COMPLETED or AWAITING.
Archive or binarchivedAtLabel, trashedAtLabelendUserContext.systemLabelsShown when the dialog is in the archive or the bin, for example in a search across folders.

DialogDetails inside DialogLayout, at /inbox/{id}/. The header repeats most of the list item. Below it come the content, attachments, actions and transmissions.

DialogDetails
TilbakeA
Skattemeldingen for 2025Arkiv1
Krever handlingDokumentasjon manglerSist oppdatert: 9. oktober 2026 kl. 14.03212Frist: 30. november 2026 kl. 23.592

Vi trenger mer dokumentasjon på fradraget for reisekostnader. Last opp innen fristen.4

Embedded from the service owner5
Dette må du gjøre
  • Last opp kvitteringer for reiser over 50 km.
  • Dokumentasjonen må gjelde inntektsåret 2025.
2 vedlegg 6
Brev om dokumentasjonPDF
Oversikt over fradragPDFUtløper om 2 måneder
Last opp dokumentasjonBe om utsettelseSlett7
OHSett av 1AktivitetsloggOm fullmakt og tjeneste8
ForespørselVi trenger mer dokumentasjon9
Skatteetaten, 9. oktober 2026 kl. 14.03
InformasjonKvittering for levert skattemelding
Skatteetaten, 2. oktober 2026 kl. 10.12
InnsendingSkattemelding for 2025
Kari Nordmann, 2. oktober 2026 kl. 10.11
Vis mer
Mer informasjon 10

Har du spørsmål om fradrag, kan du lese mer på skatteetaten.no.

Trenger du hjelp? 11
Hjelp meg å forstå meldingen
DialogportenOrganisation registryPartiesDerived in the frontendDashed: only shown when a condition is met
  1. A
    Top bar and menu

    Tilbake returns to the list the user came from and scrolls to the dialog. The page colour follows the recipient's type. The menu holds:

    • Del og gi fullmakt: when the service supports delegation, built from partyand org
    • Videresend på e-post: only when serviceResourceType is CorrespondenceService, behind a feature flag
    • Marker som ulest, Flytt til arkivet, Flytt til papirkurven, Angre:endUserContext.systemLabels
    • Sett av …, Aktivitetslogg, Om fullmakt og tjeneste
  2. 1
    Title

    content.title. Gets an Arkiv or Papirkurv badge when the dialog is in that folder.

  3. 2
    Metadata

    Same rules as the list, with one exception: the attachment count is the number of attachment links actually shown (from attachments), not guiAttachmentCount.

  4. 3
    Sender and recipient

    Same rules as the list. The recipient avatar changes when the party is deleted or has sub-units.

  5. 4
    Summary

    content.summary as plain text.

  6. 5
    Main content

    content.mainContentReference is a URL. The browser fetches it from the service owner with dialogToken and renders it as markdown or HTML. Other media types are ignored.

  7. 6
    Attachments

    One link per URL in attachments[].urls whose consumerTypeis GUI. The label comes from displayName, the icon and file type frommediaType, and the expiry badge from expiresAt. The link is disabled when the attachment has expired or the user has no access to it.

  8. 7
    Actions

    From guiActions:

    • Label from title, style from priority
    • httpMethod GET with no prompt is a plain link. Any other method is sent as a request with dialogToken
    • prompt asks the user to confirm first
    • isAuthorized false disables the button
    • isDeleteDialogAction is only shown while the dialog is in the bin
  9. 8
    Footer

    Sett av from seenSinceLastContentUpdate, plus buttons that open the activity log and the delegation and service information.

  10. 9
    Transmissions

    transmissions as a timeline. The three newest segments are shown beforeVis mer. See the table below.

  11. 10
    More information

    content.additionalInfo as plain text, markdown or HTML. Hidden when empty.

  12. 11
    Help

    A fixed link to the help pages. No data from the dialog.

Each attachment with a GUI URL is a row in an AttachmentList.

StateWhenShown as
AvailableOtherwiseA link with the media type icon. Utløper om … in yellow when expiresAt is set.
ExpiredexpiresAt is in the pastDisabled, with a crossed-out file icon and a neutral Utløpt badge.
No accessThe URL is urn:dialogporten:unauthorizedDisabled, with a padlock and a neutral Ikke tilgang badge. Wins over expired.

A transmission is a message inside the dialog, from the service owner or from the user. Each one is a row in a TransmissionList inside a TimelineSegment.

PartFieldRule
GroupingrelatedTransmissionIdRelated transmissions share a segment. Newest segment first, and newest transmission first within it.
Type badgetypeInformasjon, Forespørsel, Innsending, Rettelse, Godkjent, Avvist, Varsel, Avgjørelse.
Title and summarycontent.title, content.summarySame language rules as the dialog.
Bylinesender, createdAtSkatteetaten, 9. oktober 2026 kl. 14.03. See Sender Name and Service Owner Logo.
UnreadactivitiesUnread until a TransmissionOpened activity exists for it. The user’s own SUBMISSION and CORRECTION are never unread.
Contentcontent.contentReferenceFetched from the service owner when the transmission is expanded. See Embeddable content for no access and errors.
AttachmentsattachmentsSame rules as the dialog’s attachments.
VisibilityisAuthorized, contentHidden, disabled or shown with an empty state. See the visibility table.

Every field we ask Dialogporten for, and where it ends up. ● means the view uses it.

FieldListDetailsBecomes
id●●Link to the details page, key for every action
content.title●●Title, and the browser tab title
content.summary●●Summary
content.senderName●●Sender name. Overrides the service owner’s name, and hides the logo when the two differ
content.extendedStatus●●Extended status badge
content.mainContentReference–●Embedded main content
content.additionalInfo–●Mer informasjon
org●●Service owner name, logo and contact details from organizations. Also used for the delegation link
party●●Recipient name and type from parties. Decides the colour
status●●Status badge and due date colour. DRAFT also puts the dialog in Utkast
dueAt●●Due date badge
contentUpdatedAt●●Sist oppdatert, sorting and month groups
isContentSeen●●Unread badge and bold title. Decides whether the menu offers Marker som ulest
hasUnopenedContent●–Ulest innhold badge
endUserContext.systemLabels●●Folder, folder badge and the move actions in the menu
seenSinceLastContentUpdate●●Sett av avatars and dialog
fromPartyTransmissionsCount●●Sent count
fromServiceOwnerTransmissionsCount●●Received count
guiAttachmentCount●–Attachment count in the list
attachments–●Attachment list, and the attachment count on the details page
guiActions–●Action buttons
transmissions–●Transmissions and the activity log
activities–●Activity log, and unread state of transmissions
dialogToken–●Authorises main content, transmission content, actions and live updates
serviceResource●–Bankruptcy-estate group at the top of the list
serviceResourceType–●Decides whether Videresend på e-post is offered
progress––Fetched, not shown
createdAt––Fetched, not shown
guiActions[].action, guiActions[].authorizationAttribute––Fetched, not used

organizations also carries the service owner’s website, email and phone number. mapDialogToInboxItem turns them into contact buttons, but nothing renders them yet.

  • Language. Text fields are lists with one value per language. We use the user’s language, then nb, then the first value. See getPreferredPropertyByLocale.
  • Dates. Day, month, year and time in the user’s language: 9. oktober 2026 kl. 14.03.
  • Sender, logo and actors. See Sender Name and Service Owner Logo.
  • Folders. ARCHIVE puts a dialog in Arkiv and BIN in Papirkurv, otherwise it is in Innboks. These three exclude each other. A DRAFT status also puts it in Utkast, and a SENT label in Sendt. See How Dialogs Are Organized.
  • Unread. A dialog is unread when isContentSeen is false. The list also flags hasUnopenedContent. A transmission is unread until it has a TransmissionOpened activity.
  • Colour. Green for a person, blue for an organisation. It follows the recipient (party), not the sender.

Note: The example dialogs in the figures are made up. The drawings follow altinn-components but are simplified and not pixel-accurate.