> ## Documentation Index
> Fetch the complete documentation index at: https://docs.invopop.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Denmark

> Send and receive OIOUBL invoices over Denmark's NemHandel network.

<Tabs>
  <Tab title="Description">
    <Columns cols="2">
      <div class="flex flex-col grow items-center justify-center">
        <Card title="Register suppliers" icon="https://assets.invopop.com/flags/dk.svg" href="/guides/dk-nemhandel-supplier" horizontal>
          Supplier registration guide ›
        </Card>

        <Card title="Issue invoices" icon="https://assets.invopop.com/flags/dk.svg" href="/guides/dk-nemhandel" horizontal>
          Issuing guide ›
        </Card>

        <Card title="Receive invoices" icon="https://assets.invopop.com/flags/dk.svg" href="/guides/dk-nemhandel-receiving" horizontal>
          Receiving guide ›
        </Card>
      </div>

      |           |                                |
      | --------- | ------------------------------ |
      | Developer | [Invopop](https://invopop.com) |
      | Category  | Government                     |
      | Scope     | B2B, B2G                       |
      | System    | NemHandel (Erhvervsstyrelsen)  |
      | Country   | [Denmark](/compliance/denmark) |
    </Columns>

    **NemHandel** is Denmark's national e-invoicing network, run by the Danish Business Authority (*Erhvervsstyrelsen*). Denmark was the first country in Europe to mandate B2G e-invoicing, back in 2005: public authorities only accept electronic invoices, delivered over NemHandel or Peppol, and the Digital Bookkeeping Act now requires nearly every Danish business to be able to send and receive e-invoices as well.

    Documents travel on NemHandel as **OIOUBL 2.1**, Denmark's national UBL dialect. This app owns the full journey in both directions: it converts GOBL invoices and credit notes to OIOUBL, validates them against the official schematron before anything is sent, delivers them over the network, and imports the documents your parties receive back into GOBL.

    Invopop has partnered with [eCourier](https://ecourier.dk), a Danish NemHandel access point, to transmit documents and onboard suppliers onto the network. Registering a supplier includes a signing step: the supplier's representative signs an authorisation agreement through a hosted wizard (or your own UI over the API), and the app completes the network registration once it's signed.

    #### Key features

    * **Workflow automation:** Register parties, issue invoices, and import received ones as steps in your workflows.
    * **OIOUBL 2.1 both ways:** GOBL → OIOUBL conversion for sending and OIOUBL → GOBL for received documents, including embedded attachments.
    * **Schematron validation up front:** Every generated document is validated against the official OIOUBL schematron (v1.17) before it leaves the platform.
    * **Delivery confirmation:** The send step waits until the network confirms delivery — submission alone doesn't complete the job, and duplicates are never resubmitted.
    * **Hosted supplier onboarding:** The authorisation agreement is signed through a hosted wizard, with API endpoints for integrators building their own onboarding UI.
    * **Push reception:** Inbound documents are delivered by webhook the moment they arrive and handed to your import workflow.

    Check out the guides below to get started:

    * [Supplier registration](/guides/dk-nemhandel-supplier) · [Issuing invoices](/guides/dk-nemhandel) · [Receiving invoices](/guides/dk-nemhandel-receiving)

    ## FAQ

    Invoicing questions

    <AccordionGroup>
      <Accordion title="What documents can I send over NemHandel with the Denmark app?">
        Invoices and credit notes, as **OIOUBL 2.1** documents. Declare the [`dk-oioubl-v2` addon](https://docs.gobl.org/addons/dk-oioubl-v2) in `$addons` on the GOBL invoice: it layers the OIOUBL rules on top of the European EN 16931 baseline and rejects documents that would fail on the network before anything is sent. Reminders and invoice responses (OIOUBL ApplicationResponse) are not supported yet — they are planned for a follow-up release.
      </Accordion>

      <Accordion title="How do I know an invoice was actually delivered?">
        The send step doesn't report success on submission — it submits the OIOUBL document and then **waits until the network confirms delivery**. The job stays queued, re-checking the document's status when eCourier reports a change (and every few minutes on its own), and only completes when the document is delivered. If delivery fails, the job fails and your workflow's rescue steps run.
      </Accordion>

      <Accordion title="Can I issue a VAT-exempt invoice?">
        Not as "exempt". OIOUBL's tax category codelist supports standard-rated, zero-rated, and reverse-charge VAT, but has **no exempt category** on the wire. The `dk-oioubl-v2` addon rejects an exempt VAT key up front rather than silently relabelling it — state the supply as **zero-rated** instead.
      </Accordion>

      <Accordion title="What happens if I run the send workflow twice on the same invoice?">
        Nothing bad. A later run that finds the entry already delivered skips with a `Duplicated Invoice` result instead of resubmitting, so the receiver never gets the document twice.
      </Accordion>

      <Accordion title="Can I generate the OIOUBL file without sending it?">
        Yes. The convert step works on its own: it converts the GOBL invoice to OIOUBL 2.1, validates it against the official schematron, and stores the XML as an attachment on the silo entry under the `oioubl` file key. A workflow that only converts lets you inspect or download the file without submitting anything to the network.
      </Accordion>
    </AccordionGroup>

    Registering supplier questions

    <AccordionGroup>
      <Accordion title="Why does registration involve signing an agreement?">
        NemHandel registration runs through Invopop's partner **eCourier**, which requires a signed authorisation agreement from the supplier before it can create the supplier's NemHandel participant. That's why the registration workflow has three steps: publish the agreement for signing, wait until the supplier's representative signs it, and only then register the participant.
      </Accordion>

      <Accordion title="Who signs the agreement, and how?">
        A representative of the supplier — typically a director or other authorized signatory. The registration workflow publishes a **public signing link** on the party's silo entry; share it with the representative and they complete a short hosted wizard: confirm their details, review the agreement, and sign. If the party's `people` list carries a person with a name and role, the wizard prefills them as the signer. Integrators building their own onboarding UI can drive the same flow [over the API](/guides/dk-nemhandel-supplier#sign-the-agreement-via-the-api).
      </Accordion>

      <Accordion title="What identifier is the party registered under?">
        Its NemHandel participant identifier: the party's first GOBL `endpoints` entry if it has one (for example a `GLN:` number), otherwise the **`DK:CVR`** identifier derived from the party's Danish tax ID. NemHandel uses symbolic schemes (`DK:CVR`, `DK:SE`, `GLN`) rather than Peppol's numeric ISO 6523 codes.
      </Accordion>

      <Accordion title="Why was my registration refused with “registered on NemHandel by a different workspace”?">
        Each NemHandel participant can only be held by one Invopop workspace. If another workspace has already registered the same identifier, registration is refused — which workspace holds it is not disclosed. Re-running registration for a party your own workspace already registered is fine: it's treated as a retry, not an error.
      </Accordion>

      <Accordion title="Can I unregister a party?">
        Yes. Run the unregister workflow on the party's silo entry: it releases the NemHandel registration, removing the participant and the routing that delivered inbound documents to your workspace. To send or receive on behalf of that party again, you'll need to register it again.
      </Accordion>
    </AccordionGroup>

    Receiving questions

    <AccordionGroup>
      <Accordion title="How do received invoices arrive?">
        By push, not polling. When a document addressed to one of your registered parties lands on the network, eCourier notifies Invopop by webhook, and the Denmark app starts your configured import workflow for it. The import step fetches the document, parses the OIOUBL, converts it to a GOBL invoice, and creates a silo entry carrying the GOBL document, the original XML, and any binary attachments embedded in it.
      </Accordion>

      <Accordion title="Which workflow processes inbound documents?">
        The one you select in the Denmark app's configuration (**Configuration** → **Apps** → **Denmark** → **Configure**). Every inbound document is handed to that workflow, so create it before registering any party — its first step must be the app's import action, and everything after it is yours to shape: setting a state, filing into a folder, or any other processing.
      </Accordion>

      <Accordion title="What happens to document types Invopop cannot process?">
        The current release imports invoices and credit notes. If something else arrives — an OIOUBL ApplicationResponse or a Reminder — the app acknowledges it on the network once and fails the import job with a message naming the document type that arrived and the participant it was addressed to, so it's visible rather than silently retried forever. Support for these document types is planned for a follow-up release.
      </Accordion>

      <Accordion title="Can a document be delivered twice?">
        The network redelivers its webhook until it is acknowledged, but the import step only acknowledges a document after it has been fully processed — and a document that was already imported isn't imported again. A failure partway through leaves the document ready to retry rather than lost.
      </Accordion>
    </AccordionGroup>

    More answers in our [Denmark FAQ](/faq/denmark) section
  </Tab>

  <Tab title="Limitations">
    | Capability           | Status                                       | Notes                                                                 |
    | -------------------- | -------------------------------------------- | --------------------------------------------------------------------- |
    | Party registration   | <Badge color="green">Available</Badge>       | Includes the hosted agreement-signing wizard                          |
    | Invoice delivery     | <Badge color="green">Available</Badge>       | OIOUBL 2.1 invoices and credit notes, delivery-confirmed              |
    | Invoice reception    | <Badge color="green">Available</Badge>       | Webhook push into your import workflow                                |
    | Party deregistration | <Badge color="green">Available</Badge>       | Releases the participant and its inbound routing                      |
    | Reminders            | <Badge color="yellow">In development</Badge> | OIOUBL Reminder documents are planned for a follow-up release         |
    | Invoice responses    | <Badge color="yellow">In development</Badge> | The OIOUBL ApplicationResponse leg is planned for a follow-up release |
  </Tab>

  <Tab title="Actions">
    The following workflow actions will be available once you install and enable this app:

    Invoicing

    <Card title="Generate OIOUBL" icon="https://assets.invopop.com/flags/dk.svg" horizontal>
      Convert a GOBL invoice or credit note to OIOUBL 2.1, validate it against the official schematron, and attach the XML to the entry under the `oioubl` file key.
    </Card>

    <Card title="Send to NemHandel" icon="https://assets.invopop.com/flags/dk.svg" horizontal>
      Submit the attached OIOUBL document to the network and queue until delivery is confirmed. Requires a preceding Generate OIOUBL step.
    </Card>

    Registration

    <Card title="Sign NemHandel Agreement" icon="https://assets.invopop.com/flags/dk.svg" horizontal>
      Publish the authorisation agreement for the supplier's representative to sign, adding a public signing link to the party's entry.
    </Card>

    <Card title="Wait for NemHandel Agreement" icon="https://assets.invopop.com/flags/dk.svg" horizontal>
      Pause the workflow until the agreement is signed, then upload it to the network partner.
    </Card>

    <Card title="Register on NemHandel" icon="https://assets.invopop.com/flags/dk.svg" horizontal>
      Create the party's NemHandel participant and record the routing that delivers its inbound documents to your workspace.
    </Card>

    <Card title="Unregister from NemHandel" icon="https://assets.invopop.com/flags/dk.svg" horizontal>
      Release the registration, removing the participant and its inbound routing.
    </Card>

    Reception

    <Card title="Load from NemHandel" icon="https://assets.invopop.com/flags/dk.svg" horizontal>
      Fetch one received document, parse the OIOUBL, and create a GOBL silo entry with the original XML and its embedded attachments.
    </Card>
  </Tab>

  <Tab title="Workflows">
    Invoice workflows

    <AccordionGroup>
      <Accordion title="Send NemHandel invoice">
        [Add to my workspace →](https://console.invopop.com/redirect/workflows/new?template=dk-send)

        ```json Example Send NemHandel invoice workflow theme={"system"}
        {
            "name": "Send NemHandel invoice",
            "description": "Convert an invoice to OIOUBL and send it over the NemHandel network",
            "schema": "bill/invoice",
            "steps": [
                {
                    "id": "e3ad87b2-88d1-11f1-8000-920007eb4d91",
                    "name": "Set State",
                    "provider": "silo.state",
                    "summary": "Set state to `processing`{.state .processing}",
                    "config": {
                        "state": "processing"
                    }
                },
                {
                    "id": "e3add26c-88d1-11f1-8000-920007eb4d91",
                    "name": "Add Sequential Code",
                    "provider": "sequence.enumerate",
                    "summary": "Dynamic · NemHandel · 000001",
                    "config": {
                        "name": "NemHandel",
                        "padding": 6,
                        "start": 1
                    }
                },
                {
                    "id": "e3ae403a-88d1-11f1-8000-920007eb4d91",
                    "name": "Sign Envelope",
                    "provider": "silo.close"
                },
                {
                    "id": "e3afc3a6-88d1-11f1-8000-920007eb4d91",
                    "name": "Generate OIOUBL",
                    "provider": "gov-dk.convert",
                    "summary": "OIOUBL 2.1 Invoice/CreditNote"
                },
                {
                    "id": "e3aea606-88d1-11f1-8000-920007eb4d91",
                    "name": "Send to NemHandel",
                    "provider": "gov-dk.send",
                    "summary": "Submits and queues until eCourier confirms delivery"
                },
                {
                    "id": "e3af29be-88d1-11f1-8000-920007eb4d91",
                    "name": "Set State",
                    "provider": "silo.state",
                    "summary": "Set state to `sent`{.state .sent}",
                    "config": {
                        "state": "sent"
                    }
                }
            ],
            "rescue": [
                {
                    "id": "e3af4e58-88d1-11f1-8000-920007eb4d91",
                    "name": "Set State",
                    "provider": "silo.state",
                    "summary": "Set state to `error`{.state .error}",
                    "config": {
                        "state": "error"
                    }
                }
            ]
        }
        ```
      </Accordion>
    </AccordionGroup>

    Party workflows

    <AccordionGroup>
      <Accordion title="Register on NemHandel">
        [Add to my workspace →](https://console.invopop.com/redirect/workflows/new?template=dk-register)

        ```json Example Register on NemHandel workflow theme={"system"}
        {
            "name": "Register on NemHandel",
            "description": "",
            "schema": "org/party",
            "steps": [
                {
                    "id": "c3e2b400-4f6a-11f1-9c2d-0242ac120012",
                    "name": "Set State",
                    "provider": "silo.state",
                    "summary": "Set state to `processing`{.state .processing}",
                    "config": {
                        "state": "processing"
                    }
                },
                {
                    "id": "e3af78f6-88d1-11f1-8000-920007eb4d91",
                    "name": "Sign NemHandel Agreement",
                    "provider": "gov-dk.sign"
                },
                {
                    "id": "e3af9d5e-88d1-11f1-8000-920007eb4d91",
                    "name": "Wait for NemHandel Agreement",
                    "provider": "gov-dk.wait.approval"
                },
                {
                    "id": "c3e2b401-4f6a-11f1-9c2d-0242ac120012",
                    "name": "Register on NemHandel",
                    "provider": "gov-dk.register"
                },
                {
                    "id": "c3e2b402-4f6a-11f1-9c2d-0242ac120012",
                    "name": "Set State",
                    "provider": "silo.state",
                    "summary": "Set state to `registered`{.state .registered}",
                    "config": {
                        "state": "registered"
                    }
                }
            ],
            "rescue": []
        }
        ```
      </Accordion>

      <Accordion title="Unregister from NemHandel">
        [Add to my workspace →](https://console.invopop.com/redirect/workflows/new?template=dk-unregister)

        ```json Example Unregister from NemHandel workflow theme={"system"}
        {
            "name": "Unregister from NemHandel",
            "description": "Release a party's NemHandel registration so it no longer sends or receives",
            "schema": "org/party",
            "steps": [
                {
                    "id": "b0ebea5e-8907-11f1-8000-920007eb4d91",
                    "name": "Set State",
                    "provider": "silo.state",
                    "summary": "Set state to `processing`{.state .processing}",
                    "config": {
                        "state": "processing"
                    }
                },
                {
                    "id": "b0ec50f2-8907-11f1-8000-920007eb4d91",
                    "name": "Unregister from NemHandel",
                    "provider": "gov-dk.unregister"
                },
                {
                    "id": "b0ecc1fe-8907-11f1-8000-920007eb4d91",
                    "name": "Set State",
                    "provider": "silo.state",
                    "summary": "Set state to `void`{.state .void}",
                    "config": {
                        "state": "void"
                    }
                }
            ],
            "rescue": [
                {
                    "id": "b0ed13f2-8907-11f1-8000-920007eb4d91",
                    "name": "Set State",
                    "provider": "silo.state",
                    "summary": "Set state to `error`{.state .error}",
                    "config": {
                        "state": "error"
                    }
                }
            ]
        }
        ```
      </Accordion>
    </AccordionGroup>

    Reception workflows

    <AccordionGroup>
      <Accordion title="Import NemHandel invoice">
        [Add to my workspace →](https://console.invopop.com/redirect/workflows/new?template=dk-import)

        ```json Example Import NemHandel invoice workflow theme={"system"}
        {
            "name": "Import NemHandel invoice",
            "description": "Import a received OIOUBL document delivered via NemHandel",
            "schema": "bill/invoice",
            "steps": [
                {
                    "id": "a1c0f2df-4f6a-11f1-9c2d-0242ac120010",
                    "name": "Load from NemHandel",
                    "provider": "gov-dk.import",
                    "summary": "Fetches, parses OIOUBL, and converts to GOBL in one step"
                },
                {
                    "id": "a1c0f2e2-4f6a-11f1-9c2d-0242ac120010",
                    "name": "Set State",
                    "provider": "silo.state",
                    "summary": "Set state to `received`{.state .received}",
                    "config": {
                        "state": "received"
                    }
                }
            ],
            "rescue": [
                {
                    "id": "a1c0f2e3-4f6a-11f1-9c2d-0242ac120010",
                    "name": "Set State",
                    "provider": "silo.state",
                    "summary": "Set state to `error`{.state .error}",
                    "config": {
                        "state": "error"
                    }
                }
            ]
        }
        ```
      </Accordion>
    </AccordionGroup>
  </Tab>

  <Tab title="Documents">
    <AccordionGroup>
      <Accordion title="Denmark supplier">
        A Danish company with its CVR number as the tax ID and a contact person with a name and role — the prefilled signer for the registration agreement. The `DK:CVR` endpoint is derived from the tax ID automatically.

        ```json Denmark supplier example expandable theme={"system"}
        {
            "$schema": "https://gobl.org/draft-0/org/party",
            "name": "Nordlys Software ApS",
            "tax_id": {
                "country": "DK",
                "code": "16356700"
            },
            "people": [
                {
                    "name": {
                        "given": "Mette",
                        "surname": "Kristensen"
                    },
                    "role": "Director"
                }
            ],
            "addresses": [
                {
                    "num": "24",
                    "street": "Vesterbrogade",
                    "locality": "København V",
                    "code": "1620",
                    "country": "DK"
                }
            ],
            "emails": [
                {
                    "addr": "faktura@nordlys.dk"
                }
            ]
        }
        ```
      </Accordion>

      <Accordion title="Denmark customer">
        A Danish public institution identified by its EAN/GLN number as an endpoint (`GLN:…`), the identifier public entities carry in the NemHandelsregisteret. Business customers can carry just their CVR tax ID instead.

        ```json Denmark customer example expandable theme={"system"}
        {
            "$schema": "https://gobl.org/draft-0/org/party",
            "name": "Den Lille Skole",
            "endpoints": [
                {
                    "uri": "GLN:5798009883735"
                }
            ],
            "addresses": [
                {
                    "num": "10",
                    "street": "Fredericiavej",
                    "locality": "Helsingør",
                    "code": "3000",
                    "country": "DK"
                }
            ],
            "emails": [
                {
                    "addr": "faktura@dls.dk"
                }
            ]
        }
        ```
      </Accordion>
    </AccordionGroup>

    <AccordionGroup>
      <Accordion title="Example B2G invoice">
        In this example, we're invoicing a Danish public institution, the segment where e-invoicing is mandatory.

        Notice:

        * the `$addons` field is set to `dk-oioubl-v2`, which layers the OIOUBL 2.1 rules on top of the European EN 16931 baseline,
        * the customer carries its **EAN/GLN number** as an endpoint (`GLN:5798009883735`) — this is how public entities are identified in the NemHandelsregisteret,
        * the supplier declares no endpoint: the addon derives its `DK:CVR` endpoint automatically from the Danish tax ID,
        * the `ordering.purchases` block carries the order reference the receiving institution asked for,
        * the payment instructions use a SEPA credit transfer with an IBAN, and,
        * there are no calculations in some fields; these will be made automatically when uploading.

        <CodeGroup>
          ````json Denmark B2G invoice theme={"system"}
          {
            "$schema": "https://gobl.org/draft-0/bill/invoice",
            "$addons": [
              "dk-oioubl-v2"
            ],
            "type": "standard",
            "series": "SAMPLE",
            "code": "0042",
            "issue_date": "2026-08-01",
            "currency": "DKK",
            "supplier": {
              "name": "Nordlys Software ApS",
              "tax_id": {
                "country": "DK",
                "code": "16356700"
              },
              "people": [
                {
                  "name": {
                    "given": "Mette",
                    "surname": "Kristensen"
                  },
                  "role": "Director"
                }
              ],
              "addresses": [
                {
                  "num": "24",
                  "street": "Vesterbrogade",
                  "locality": "København V",
                  "code": "1620",
                  "country": "DK"
                }
              ],
              "emails": [
                {
                  "addr": "faktura@nordlys.dk"
                }
              ]
            },
            "customer": {
              "name": "Den Lille Skole",
              "endpoints": [
                {
                  "uri": "GLN:5798009883735"
                }
              ],
              "addresses": [
                {
                  "num": "10",
                  "street": "Fredericiavej",
                  "locality": "Helsingør",
                  "code": "3000",
                  "country": "DK"
                }
              ]
            },
            "ordering": {
              "purchases": [
                {
                  "code": "5002701"
                }
              ]
            },
            "lines": [
              {
                "quantity": 20,
                "item": {
                  "name": "Software licence",
                  "price": "150.00",
                  "unit": "item"
                },
                "taxes": [
                  {
                    "cat": "VAT",
                    "rate": "standard"
                  }
                ]
              }
            ],
            "payment": {
              "terms": {
                "due_dates": [
                  {
                    "date": "2026-08-31",
                    "percent": "100%"
                  }
                ]
              },
              "instructions": {
                "key": "credit-transfer+sepa",
                "credit_transfer": [
                  {
                    "iban": "DK5000400440116243"
                  }
                ],
                "ext": {
                  "untdid-payment-means": "58"
                }
              }
            }
          }```
          ````

          ```json Built version theme={"system"}
          {
          	"$schema": "https://gobl.org/draft-0/bill/invoice",
          	"$regime": "DK",
          	"$addons": [
          		"eu-en16931-v2017",
          		"dk-oioubl-v2"
          	],
          	"type": "standard",
          	"series": "SAMPLE",
          	"code": "0042",
          	"issue_date": "2026-08-01",
          	"currency": "DKK",
          	"tax": {
          		"rounding": "currency",
          		"ext": {
          			"untdid-document-type": "380"
          		}
          	},
          	"supplier": {
          		"name": "Nordlys Software ApS",
          		"tax_id": {
          			"country": "DK",
          			"code": "16356700"
          		},
          		"identities": [
          			{
          				"scope": "legal",
          				"code": "16356700"
          			}
          		],
          		"people": [
          			{
          				"name": {
          					"given": "Mette",
          					"surname": "Kristensen"
          				},
          				"role": "Director"
          			}
          		],
          		"endpoints": [
          			{
          				"uri": "DK:CVR:16356700"
          			}
          		],
          		"addresses": [
          			{
          				"num": "24",
          				"street": "Vesterbrogade",
          				"locality": "København V",
          				"code": "1620",
          				"country": "DK"
          			}
          		],
          		"emails": [
          			{
          				"addr": "faktura@nordlys.dk"
          			}
          		]
          	},
          	"customer": {
          		"name": "Den Lille Skole",
          		"endpoints": [
          			{
          				"uri": "GLN:5798009883735"
          			}
          		],
          		"addresses": [
          			{
          				"num": "10",
          				"street": "Fredericiavej",
          				"locality": "Helsingør",
          				"code": "3000",
          				"country": "DK"
          			}
          		]
          	},
          	"lines": [
          		{
          			"i": 1,
          			"quantity": "20",
          			"item": {
          				"name": "Software licence",
          				"price": "150.00",
          				"unit": "item"
          			},
          			"sum": "3000.00",
          			"taxes": [
          				{
          					"cat": "VAT",
          					"key": "standard",
          					"rate": "general",
          					"percent": "25.0%"
          				}
          			],
          			"total": "3000.00"
          		}
          	],
          	"ordering": {
          		"purchases": [
          			{
          				"code": "5002701"
          			}
          		]
          	},
          	"payment": {
          		"terms": {
          			"due_dates": [
          				{
          					"date": "2026-08-31",
          					"amount": "3750.00",
          					"percent": "100%"
          				}
          			]
          		},
          		"instructions": {
          			"key": "credit-transfer+sepa",
          			"credit_transfer": [
          				{
          					"iban": "DK5000400440116243"
          				}
          			],
          			"ext": {
          				"untdid-payment-means": "58"
          			}
          		}
          	},
          	"totals": {
          		"sum": "3000.00",
          		"total": "3000.00",
          		"taxes": {
          			"categories": [
          				{
          					"code": "VAT",
          					"rates": [
          						{
          							"key": "standard",
          							"base": "3000.00",
          							"percent": "25.0%",
          							"amount": "750.00"
          						}
          					],
          					"amount": "750.00"
          				}
          			],
          			"sum": "750.00"
          		},
          		"tax": "750.00",
          		"total_with_tax": "3750.00",
          		"payable": "3750.00"
          	}
          }
          ```
        </CodeGroup>
      </Accordion>

      <Accordion title="Example B2B invoice">
        In this example, we're issuing a B2B invoice from a Danish supplier to another Danish business.

        Notice:

        * both parties are identified by their **CVR number** as the GOBL `tax_id.code`; the addon derives each party's `DK:CVR` endpoint from it,
        * the payment instructions describe a Danish domestic bank transfer (UNTDID payment means `42`): the account number plus the four-digit bank registration (clearing) code the OIOUBL rules require, and,
        * there are no calculations in some fields; these will be made automatically when uploading.

        <CodeGroup>
          ```json Denmark B2B invoice theme={"system"}
          {
            "$schema": "https://gobl.org/draft-0/bill/invoice",
            "$addons": ["dk-oioubl-v2"],
            "type": "standard",
            "series": "SAMPLE",
            "code": "0043",
            "issue_date": "2026-08-01",
            "currency": "DKK",
            "supplier": {
              "name": "Nordlys Software ApS",
              "tax_id": {
                "country": "DK",
                "code": "16356700"
              },
              "addresses": [
                {
                  "num": "24",
                  "street": "Vesterbrogade",
                  "locality": "København V",
                  "code": "1620",
                  "country": "DK"
                }
              ],
              "emails": [
                {
                  "addr": "faktura@nordlys.dk"
                }
              ]
            },
            "customer": {
              "name": "Havnens Byggemarked A/S",
              "tax_id": {
                "country": "DK",
                "code": "12345674"
              },
              "addresses": [
                {
                  "num": "3",
                  "street": "Havnegade",
                  "locality": "Aarhus C",
                  "code": "8000",
                  "country": "DK"
                }
              ]
            },
            "lines": [
              {
                "quantity": 10,
                "item": {
                  "name": "Consulting services",
                  "price": "800.00",
                  "unit": "h"
                },
                "taxes": [
                  {
                    "cat": "VAT",
                    "rate": "standard"
                  }
                ]
              }
            ],
            "payment": {
              "terms": {
                "due_dates": [
                  {
                    "date": "2026-08-31",
                    "percent": "100%"
                  }
                ]
              },
              "instructions": {
                "key": "other",
                "ext": {
                  "untdid-payment-means": "42"
                },
                "credit_transfer": [
                  {
                    "number": "1234567890",
                    "clearing": "1234"
                  }
                ]
              }
            }
          }
          ```

          ```json Built version theme={"system"}
          {
          	"$schema": "https://gobl.org/draft-0/bill/invoice",
          	"$regime": "DK",
          	"$addons": [
          		"eu-en16931-v2017",
          		"dk-oioubl-v2"
          	],
          	"type": "standard",
          	"series": "SAMPLE",
          	"code": "0043",
          	"issue_date": "2026-08-01",
          	"currency": "DKK",
          	"tax": {
          		"rounding": "currency",
          		"ext": {
          			"untdid-document-type": "380"
          		}
          	},
          	"supplier": {
          		"name": "Nordlys Software ApS",
          		"tax_id": {
          			"country": "DK",
          			"code": "16356700"
          		},
          		"identities": [
          			{
          				"scope": "legal",
          				"code": "16356700"
          			}
          		],
          		"endpoints": [
          			{
          				"uri": "DK:CVR:16356700"
          			}
          		],
          		"addresses": [
          			{
          				"num": "24",
          				"street": "Vesterbrogade",
          				"locality": "København V",
          				"code": "1620",
          				"country": "DK"
          			}
          		],
          		"emails": [
          			{
          				"addr": "faktura@nordlys.dk"
          			}
          		]
          	},
          	"customer": {
          		"name": "Havnens Byggemarked A/S",
          		"tax_id": {
          			"country": "DK",
          			"code": "12345674"
          		},
          		"identities": [
          			{
          				"scope": "legal",
          				"code": "12345674"
          			}
          		],
          		"endpoints": [
          			{
          				"uri": "DK:CVR:12345674"
          			}
          		],
          		"addresses": [
          			{
          				"num": "3",
          				"street": "Havnegade",
          				"locality": "Aarhus C",
          				"code": "8000",
          				"country": "DK"
          			}
          		]
          	},
          	"lines": [
          		{
          			"i": 1,
          			"quantity": "10",
          			"item": {
          				"name": "Consulting services",
          				"price": "800.00",
          				"unit": "h"
          			},
          			"sum": "8000.00",
          			"taxes": [
          				{
          					"cat": "VAT",
          					"key": "standard",
          					"rate": "general",
          					"percent": "25.0%"
          				}
          			],
          			"total": "8000.00"
          		}
          	],
          	"payment": {
          		"terms": {
          			"due_dates": [
          				{
          					"date": "2026-08-31",
          					"amount": "10000.00",
          					"percent": "100%"
          				}
          			]
          		},
          		"instructions": {
          			"key": "other",
          			"credit_transfer": [
          				{
          					"number": "1234567890",
          					"clearing": "1234"
          				}
          			],
          			"ext": {
          				"untdid-payment-means": "42"
          			}
          		}
          	},
          	"totals": {
          		"sum": "8000.00",
          		"total": "8000.00",
          		"taxes": {
          			"categories": [
          				{
          					"code": "VAT",
          					"rates": [
          						{
          							"key": "standard",
          							"base": "8000.00",
          							"percent": "25.0%",
          							"amount": "2000.00"
          						}
          					],
          					"amount": "2000.00"
          				}
          			],
          			"sum": "2000.00"
          		},
          		"tax": "2000.00",
          		"total_with_tax": "10000.00",
          		"payable": "10000.00"
          	}
          }
          ```
        </CodeGroup>
      </Accordion>

      <Accordion title="Example zero-rated invoice">
        In this example, we're issuing a domestic invoice for a zero-rated supply — newspapers, one of the few zero-rated categories under Momslovens §34.

        Notice:

        * the line's tax uses the `zero` VAT key: the supply is taxable at 0% with input VAT recovery, unlike an exempt supply,
        * OIOUBL has **no exempt category** on the wire, so genuinely exempt supplies (healthcare, education, financial services) cannot be invoiced through NemHandel as "exempt" — the addon rejects the `exempt` key and zero-rated is the closest the format supports, and,
        * everything else works exactly like the standard B2B invoice.

        <CodeGroup>
          ````json Denmark zero rate invoice theme={"system"}
          {
            "$schema": "https://gobl.org/draft-0/bill/invoice",
            "$addons": [
              "dk-oioubl-v2"
            ],
            "type": "standard",
            "series": "SAMPLE",
            "code": "0045",
            "issue_date": "2026-08-01",
            "currency": "DKK",
            "supplier": {
              "name": "Nordlys Software ApS",
              "tax_id": {
                "country": "DK",
                "code": "16356700"
              },
              "addresses": [
                {
                  "num": "24",
                  "street": "Vesterbrogade",
                  "locality": "København V",
                  "code": "1620",
                  "country": "DK"
                }
              ],
              "emails": [
                {
                  "addr": "faktura@nordlys.dk"
                }
              ]
            },
            "customer": {
              "name": "Havnens Byggemarked A/S",
              "tax_id": {
                "country": "DK",
                "code": "12345674"
              },
              "addresses": [
                {
                  "num": "3",
                  "street": "Havnegade",
                  "locality": "Aarhus C",
                  "code": "8000",
                  "country": "DK"
                }
              ]
            },
            "lines": [
              {
                "quantity": 250,
                "item": {
                  "name": "Morgenavisen daily newspaper",
                  "price": "12.00",
                  "unit": "item"
                },
                "taxes": [
                  {
                    "cat": "VAT",
                    "key": "zero"
                  }
                ]
              }
            ],
            "payment": {
              "terms": {
                "due_dates": [
                  {
                    "date": "2026-08-31",
                    "percent": "100%"
                  }
                ]
              },
              "instructions": {
                "key": "credit-transfer+sepa",
                "credit_transfer": [
                  {
                    "iban": "DK5000400440116243"
                  }
                ]
              }
            }
          }```
          ````

          ```json Built version theme={"system"}
          {
          	"$schema": "https://gobl.org/draft-0/bill/invoice",
          	"$regime": "DK",
          	"$addons": [
          		"eu-en16931-v2017",
          		"dk-oioubl-v2"
          	],
          	"type": "standard",
          	"series": "SAMPLE",
          	"code": "0045",
          	"issue_date": "2026-08-01",
          	"currency": "DKK",
          	"tax": {
          		"rounding": "currency",
          		"ext": {
          			"untdid-document-type": "380"
          		}
          	},
          	"supplier": {
          		"name": "Nordlys Software ApS",
          		"tax_id": {
          			"country": "DK",
          			"code": "16356700"
          		},
          		"identities": [
          			{
          				"scope": "legal",
          				"code": "16356700"
          			}
          		],
          		"endpoints": [
          			{
          				"uri": "DK:CVR:16356700"
          			}
          		],
          		"addresses": [
          			{
          				"num": "24",
          				"street": "Vesterbrogade",
          				"locality": "København V",
          				"code": "1620",
          				"country": "DK"
          			}
          		],
          		"emails": [
          			{
          				"addr": "faktura@nordlys.dk"
          			}
          		]
          	},
          	"customer": {
          		"name": "Havnens Byggemarked A/S",
          		"tax_id": {
          			"country": "DK",
          			"code": "12345674"
          		},
          		"identities": [
          			{
          				"scope": "legal",
          				"code": "12345674"
          			}
          		],
          		"endpoints": [
          			{
          				"uri": "DK:CVR:12345674"
          			}
          		],
          		"addresses": [
          			{
          				"num": "3",
          				"street": "Havnegade",
          				"locality": "Aarhus C",
          				"code": "8000",
          				"country": "DK"
          			}
          		]
          	},
          	"lines": [
          		{
          			"i": 1,
          			"quantity": "250",
          			"item": {
          				"name": "Morgenavisen daily newspaper",
          				"price": "12.00",
          				"unit": "item"
          			},
          			"sum": "3000.00",
          			"taxes": [
          				{
          					"cat": "VAT",
          					"key": "zero",
          					"percent": "0%"
          				}
          			],
          			"total": "3000.00"
          		}
          	],
          	"payment": {
          		"terms": {
          			"due_dates": [
          				{
          					"date": "2026-08-31",
          					"amount": "3000.00",
          					"percent": "100%"
          				}
          			]
          		},
          		"instructions": {
          			"key": "credit-transfer+sepa",
          			"credit_transfer": [
          				{
          					"iban": "DK5000400440116243"
          				}
          			],
          			"ext": {
          				"untdid-payment-means": "58"
          			}
          		}
          	},
          	"totals": {
          		"sum": "3000.00",
          		"total": "3000.00",
          		"taxes": {
          			"categories": [
          				{
          					"code": "VAT",
          					"rates": [
          						{
          							"key": "zero",
          							"base": "3000.00",
          							"percent": "0%",
          							"amount": "0.00"
          						}
          					],
          					"amount": "0.00"
          				}
          			],
          			"sum": "0.00"
          		},
          		"tax": "0.00",
          		"total_with_tax": "3000.00",
          		"payable": "3000.00"
          	}
          }
          ```
        </CodeGroup>
      </Accordion>

      <Accordion title="Example reverse charge invoice">
        In this example, we're issuing a domestic reverse charge invoice for copper scrap — one of the supplies (along with certain metals and electronics) where Denmark shifts the VAT liability to the buyer.

        Notice:

        * the line's tax uses the `reverse-charge` VAT key, so no VAT is charged and the customer accounts for it instead,
        * the `cef-vatex` extension carries the exemption reason code `VATEX-EU-AE` (reverse charge), which OIOUBL maps to its reverse-charge tax category, and,
        * both parties are Danish businesses identified by their CVR numbers.

        <CodeGroup>
          ````json Denmark reverse charge invoice theme={"system"}
          {
            "$schema": "https://gobl.org/draft-0/bill/invoice",
            "$addons": [
              "dk-oioubl-v2"
            ],
            "type": "standard",
            "series": "SAMPLE",
            "code": "0046",
            "issue_date": "2026-08-01",
            "currency": "DKK",
            "supplier": {
              "name": "Nordlys Software ApS",
              "tax_id": {
                "country": "DK",
                "code": "16356700"
              },
              "addresses": [
                {
                  "num": "24",
                  "street": "Vesterbrogade",
                  "locality": "København V",
                  "code": "1620",
                  "country": "DK"
                }
              ],
              "emails": [
                {
                  "addr": "faktura@nordlys.dk"
                }
              ]
            },
            "customer": {
              "name": "Havnens Byggemarked A/S",
              "tax_id": {
                "country": "DK",
                "code": "12345674"
              },
              "addresses": [
                {
                  "num": "3",
                  "street": "Havnegade",
                  "locality": "Aarhus C",
                  "code": "8000",
                  "country": "DK"
                }
              ]
            },
            "lines": [
              {
                "quantity": 500,
                "item": {
                  "name": "Copper scrap",
                  "price": "45.00",
                  "unit": "kg"
                },
                "taxes": [
                  {
                    "cat": "VAT",
                    "key": "reverse-charge",
                    "ext": {
                      "cef-vatex": "VATEX-EU-AE"
                    }
                  }
                ]
              }
            ],
            "payment": {
              "terms": {
                "due_dates": [
                  {
                    "date": "2026-08-31",
                    "percent": "100%"
                  }
                ]
              },
              "instructions": {
                "key": "credit-transfer+sepa",
                "credit_transfer": [
                  {
                    "iban": "DK5000400440116243"
                  }
                ]
              }
            }
          }```
          ````

          ```json Built version theme={"system"}
          {
          	"$schema": "https://gobl.org/draft-0/bill/invoice",
          	"$regime": "DK",
          	"$addons": [
          		"eu-en16931-v2017",
          		"dk-oioubl-v2"
          	],
          	"type": "standard",
          	"series": "SAMPLE",
          	"code": "0046",
          	"issue_date": "2026-08-01",
          	"currency": "DKK",
          	"tax": {
          		"rounding": "currency",
          		"ext": {
          			"untdid-document-type": "380"
          		}
          	},
          	"supplier": {
          		"name": "Nordlys Software ApS",
          		"tax_id": {
          			"country": "DK",
          			"code": "16356700"
          		},
          		"identities": [
          			{
          				"scope": "legal",
          				"code": "16356700"
          			}
          		],
          		"endpoints": [
          			{
          				"uri": "DK:CVR:16356700"
          			}
          		],
          		"addresses": [
          			{
          				"num": "24",
          				"street": "Vesterbrogade",
          				"locality": "København V",
          				"code": "1620",
          				"country": "DK"
          			}
          		],
          		"emails": [
          			{
          				"addr": "faktura@nordlys.dk"
          			}
          		]
          	},
          	"customer": {
          		"name": "Havnens Byggemarked A/S",
          		"tax_id": {
          			"country": "DK",
          			"code": "12345674"
          		},
          		"identities": [
          			{
          				"scope": "legal",
          				"code": "12345674"
          			}
          		],
          		"endpoints": [
          			{
          				"uri": "DK:CVR:12345674"
          			}
          		],
          		"addresses": [
          			{
          				"num": "3",
          				"street": "Havnegade",
          				"locality": "Aarhus C",
          				"code": "8000",
          				"country": "DK"
          			}
          		]
          	},
          	"lines": [
          		{
          			"i": 1,
          			"quantity": "500",
          			"item": {
          				"name": "Copper scrap",
          				"price": "45.00",
          				"unit": "kg"
          			},
          			"sum": "22500.00",
          			"taxes": [
          				{
          					"cat": "VAT",
          					"key": "reverse-charge",
          					"ext": {
          						"cef-vatex": "VATEX-EU-AE"
          					}
          				}
          			],
          			"total": "22500.00"
          		}
          	],
          	"payment": {
          		"terms": {
          			"due_dates": [
          				{
          					"date": "2026-08-31",
          					"amount": "22500.00",
          					"percent": "100%"
          				}
          			]
          		},
          		"instructions": {
          			"key": "credit-transfer+sepa",
          			"credit_transfer": [
          				{
          					"iban": "DK5000400440116243"
          				}
          			],
          			"ext": {
          				"untdid-payment-means": "58"
          			}
          		}
          	},
          	"totals": {
          		"sum": "22500.00",
          		"total": "22500.00",
          		"taxes": {
          			"categories": [
          				{
          					"code": "VAT",
          					"rates": [
          						{
          							"key": "reverse-charge",
          							"ext": {
          								"cef-vatex": "VATEX-EU-AE"
          							},
          							"base": "22500.00",
          							"amount": "0.00"
          						}
          					],
          					"amount": "0.00"
          				}
          			],
          			"sum": "0.00"
          		},
          		"tax": "0.00",
          		"total_with_tax": "22500.00",
          		"payable": "22500.00"
          	}
          }
          ```
        </CodeGroup>
      </Accordion>

      <Accordion title="Example intra-community invoice">
        In this example, we're invoicing a VAT-registered business in another EU member state — an intra-Community supply of goods, zero-rated under Momslovens §34.

        Notice:

        * the line's tax uses the `intra-community` VAT key with the `VATEX-EU-IC` exemption reason code,
        * the customer carries its own country's tax ID (a German VAT number here) and a **GLN endpoint** so NemHandel can route the document, and,
        * no Danish VAT is charged; the customer self-accounts for the acquisition in their own country.

        <CodeGroup>
          ````json Denmark intra-community invoice theme={"system"}
          {
            "$schema": "https://gobl.org/draft-0/bill/invoice",
            "$addons": [
              "dk-oioubl-v2"
            ],
            "type": "standard",
            "series": "SAMPLE",
            "code": "0047",
            "issue_date": "2026-08-01",
            "currency": "DKK",
            "supplier": {
              "name": "Nordlys Software ApS",
              "tax_id": {
                "country": "DK",
                "code": "16356700"
              },
              "addresses": [
                {
                  "num": "24",
                  "street": "Vesterbrogade",
                  "locality": "København V",
                  "code": "1620",
                  "country": "DK"
                }
              ],
              "emails": [
                {
                  "addr": "faktura@nordlys.dk"
                }
              ]
            },
            "customer": {
              "name": "Rheinwerk Handel GmbH",
              "tax_id": {
                "country": "DE",
                "code": "111111125"
              },
              "endpoints": [
                {
                  "uri": "GLN:4304984000008"
                }
              ],
              "addresses": [
                {
                  "num": "18",
                  "street": "Speditionstraße",
                  "locality": "Düsseldorf",
                  "code": "40221",
                  "country": "DE"
                }
              ]
            },
            "lines": [
              {
                "quantity": 40,
                "item": {
                  "name": "Industrial valves",
                  "price": "320.00",
                  "unit": "item"
                },
                "taxes": [
                  {
                    "cat": "VAT",
                    "key": "intra-community",
                    "ext": {
                      "cef-vatex": "VATEX-EU-IC"
                    }
                  }
                ]
              }
            ],
            "payment": {
              "terms": {
                "due_dates": [
                  {
                    "date": "2026-08-31",
                    "percent": "100%"
                  }
                ]
              },
              "instructions": {
                "key": "credit-transfer+sepa",
                "credit_transfer": [
                  {
                    "iban": "DK5000400440116243"
                  }
                ]
              }
            }
          }```
          ````

          ```json Built version theme={"system"}
          {
          	"$schema": "https://gobl.org/draft-0/bill/invoice",
          	"$regime": "DK",
          	"$addons": [
          		"eu-en16931-v2017",
          		"dk-oioubl-v2"
          	],
          	"type": "standard",
          	"series": "SAMPLE",
          	"code": "0047",
          	"issue_date": "2026-08-01",
          	"currency": "DKK",
          	"tax": {
          		"rounding": "currency",
          		"ext": {
          			"untdid-document-type": "380"
          		}
          	},
          	"supplier": {
          		"name": "Nordlys Software ApS",
          		"tax_id": {
          			"country": "DK",
          			"code": "16356700"
          		},
          		"identities": [
          			{
          				"scope": "legal",
          				"code": "16356700"
          			}
          		],
          		"endpoints": [
          			{
          				"uri": "DK:CVR:16356700"
          			}
          		],
          		"addresses": [
          			{
          				"num": "24",
          				"street": "Vesterbrogade",
          				"locality": "København V",
          				"code": "1620",
          				"country": "DK"
          			}
          		],
          		"emails": [
          			{
          				"addr": "faktura@nordlys.dk"
          			}
          		]
          	},
          	"customer": {
          		"name": "Rheinwerk Handel GmbH",
          		"tax_id": {
          			"country": "DE",
          			"code": "111111125"
          		},
          		"endpoints": [
          			{
          				"uri": "GLN:4304984000008"
          			}
          		],
          		"addresses": [
          			{
          				"num": "18",
          				"street": "Speditionstraße",
          				"locality": "Düsseldorf",
          				"code": "40221",
          				"country": "DE"
          			}
          		]
          	},
          	"lines": [
          		{
          			"i": 1,
          			"quantity": "40",
          			"item": {
          				"name": "Industrial valves",
          				"price": "320.00",
          				"unit": "item"
          			},
          			"sum": "12800.00",
          			"taxes": [
          				{
          					"cat": "VAT",
          					"key": "intra-community",
          					"ext": {
          						"cef-vatex": "VATEX-EU-IC"
          					}
          				}
          			],
          			"total": "12800.00"
          		}
          	],
          	"payment": {
          		"terms": {
          			"due_dates": [
          				{
          					"date": "2026-08-31",
          					"amount": "12800.00",
          					"percent": "100%"
          				}
          			]
          		},
          		"instructions": {
          			"key": "credit-transfer+sepa",
          			"credit_transfer": [
          				{
          					"iban": "DK5000400440116243"
          				}
          			],
          			"ext": {
          				"untdid-payment-means": "58"
          			}
          		}
          	},
          	"totals": {
          		"sum": "12800.00",
          		"total": "12800.00",
          		"taxes": {
          			"categories": [
          				{
          					"code": "VAT",
          					"rates": [
          						{
          							"key": "intra-community",
          							"ext": {
          								"cef-vatex": "VATEX-EU-IC"
          							},
          							"base": "12800.00",
          							"amount": "0.00"
          						}
          					],
          					"amount": "0.00"
          				}
          			],
          			"sum": "0.00"
          		},
          		"tax": "0.00",
          		"total_with_tax": "12800.00",
          		"payable": "12800.00"
          	}
          }
          ```
        </CodeGroup>
      </Accordion>

      <Accordion title="Example export invoice">
        In this example, we're invoicing a customer outside the EU — an export of goods, zero-rated under Momslovens §34.

        Notice:

        * the line's tax uses the `export` VAT key with the `VATEX-EU-G` exemption reason code,
        * the customer is a Norwegian business with its organisation number as tax ID and a GLN endpoint for routing, and,
        * no Danish VAT is charged on exports outside the EU.

        <CodeGroup>
          ````json Denmark export invoice theme={"system"}
          {
            "$schema": "https://gobl.org/draft-0/bill/invoice",
            "$addons": [
              "dk-oioubl-v2"
            ],
            "type": "standard",
            "series": "SAMPLE",
            "code": "0048",
            "issue_date": "2026-08-01",
            "currency": "DKK",
            "supplier": {
              "name": "Nordlys Software ApS",
              "tax_id": {
                "country": "DK",
                "code": "16356700"
              },
              "addresses": [
                {
                  "num": "24",
                  "street": "Vesterbrogade",
                  "locality": "København V",
                  "code": "1620",
                  "country": "DK"
                }
              ],
              "emails": [
                {
                  "addr": "faktura@nordlys.dk"
                }
              ]
            },
            "customer": {
              "name": "Fjellvann Utstyr AS",
              "tax_id": {
                "country": "NO",
                "code": "987654325"
              },
              "endpoints": [
                {
                  "uri": "GLN:7080000000000"
                }
              ],
              "addresses": [
                {
                  "num": "7",
                  "street": "Storgata",
                  "locality": "Oslo",
                  "code": "0155",
                  "country": "NO"
                }
              ]
            },
            "lines": [
              {
                "quantity": 40,
                "item": {
                  "name": "Industrial valves",
                  "price": "320.00",
                  "unit": "item"
                },
                "taxes": [
                  {
                    "cat": "VAT",
                    "key": "export",
                    "ext": {
                      "cef-vatex": "VATEX-EU-G"
                    }
                  }
                ]
              }
            ],
            "payment": {
              "terms": {
                "due_dates": [
                  {
                    "date": "2026-08-31",
                    "percent": "100%"
                  }
                ]
              },
              "instructions": {
                "key": "credit-transfer+sepa",
                "credit_transfer": [
                  {
                    "iban": "DK5000400440116243"
                  }
                ]
              }
            }
          }```
          ````

          ```json Built version theme={"system"}
          {
          	"$schema": "https://gobl.org/draft-0/bill/invoice",
          	"$regime": "DK",
          	"$addons": [
          		"eu-en16931-v2017",
          		"dk-oioubl-v2"
          	],
          	"type": "standard",
          	"series": "SAMPLE",
          	"code": "0048",
          	"issue_date": "2026-08-01",
          	"currency": "DKK",
          	"tax": {
          		"rounding": "currency",
          		"ext": {
          			"untdid-document-type": "380"
          		}
          	},
          	"supplier": {
          		"name": "Nordlys Software ApS",
          		"tax_id": {
          			"country": "DK",
          			"code": "16356700"
          		},
          		"identities": [
          			{
          				"scope": "legal",
          				"code": "16356700"
          			}
          		],
          		"endpoints": [
          			{
          				"uri": "DK:CVR:16356700"
          			}
          		],
          		"addresses": [
          			{
          				"num": "24",
          				"street": "Vesterbrogade",
          				"locality": "København V",
          				"code": "1620",
          				"country": "DK"
          			}
          		],
          		"emails": [
          			{
          				"addr": "faktura@nordlys.dk"
          			}
          		]
          	},
          	"customer": {
          		"name": "Fjellvann Utstyr AS",
          		"tax_id": {
          			"country": "NO",
          			"code": "987654325MVA"
          		},
          		"endpoints": [
          			{
          				"uri": "GLN:7080000000000"
          			}
          		],
          		"addresses": [
          			{
          				"num": "7",
          				"street": "Storgata",
          				"locality": "Oslo",
          				"code": "0155",
          				"country": "NO"
          			}
          		]
          	},
          	"lines": [
          		{
          			"i": 1,
          			"quantity": "40",
          			"item": {
          				"name": "Industrial valves",
          				"price": "320.00",
          				"unit": "item"
          			},
          			"sum": "12800.00",
          			"taxes": [
          				{
          					"cat": "VAT",
          					"key": "export",
          					"ext": {
          						"cef-vatex": "VATEX-EU-G"
          					}
          				}
          			],
          			"total": "12800.00"
          		}
          	],
          	"payment": {
          		"terms": {
          			"due_dates": [
          				{
          					"date": "2026-08-31",
          					"amount": "12800.00",
          					"percent": "100%"
          				}
          			]
          		},
          		"instructions": {
          			"key": "credit-transfer+sepa",
          			"credit_transfer": [
          				{
          					"iban": "DK5000400440116243"
          				}
          			],
          			"ext": {
          				"untdid-payment-means": "58"
          			}
          		}
          	},
          	"totals": {
          		"sum": "12800.00",
          		"total": "12800.00",
          		"taxes": {
          			"categories": [
          				{
          					"code": "VAT",
          					"rates": [
          						{
          							"key": "export",
          							"ext": {
          								"cef-vatex": "VATEX-EU-G"
          							},
          							"base": "12800.00",
          							"amount": "0.00"
          						}
          					],
          					"amount": "0.00"
          				}
          			],
          			"sum": "0.00"
          		},
          		"tax": "0.00",
          		"total_with_tax": "12800.00",
          		"payable": "12800.00"
          	}
          }
          ```
        </CodeGroup>
      </Accordion>

      <Accordion title="Example credit note">
        In this example, we're issuing a credit note that corrects a previously issued invoice.

        Notice:

        * the `type` is set to `credit-note`, which OIOUBL maps to its own CreditNote document (type code `381`),
        * the `preceding` array references the original invoice by its `series`, `code`, and `issue_date`, along with a `reason`, and,
        * there are no calculations in some fields; these will be made automatically when uploading.

        <CodeGroup>
          ```json Denmark credit note theme={"system"}
          {
            "$schema": "https://gobl.org/draft-0/bill/invoice",
            "$addons": ["dk-oioubl-v2"],
            "type": "credit-note",
            "series": "SAMPLE",
            "code": "0044",
            "issue_date": "2026-08-10",
            "currency": "DKK",
            "preceding": [
              {
                "series": "SAMPLE",
                "code": "0043",
                "issue_date": "2026-08-01",
                "reason": "Ordered quantity reduced"
              }
            ],
            "supplier": {
              "name": "Nordlys Software ApS",
              "tax_id": {
                "country": "DK",
                "code": "16356700"
              },
              "addresses": [
                {
                  "num": "24",
                  "street": "Vesterbrogade",
                  "locality": "København V",
                  "code": "1620",
                  "country": "DK"
                }
              ],
              "emails": [
                {
                  "addr": "faktura@nordlys.dk"
                }
              ]
            },
            "customer": {
              "name": "Havnens Byggemarked A/S",
              "tax_id": {
                "country": "DK",
                "code": "12345674"
              },
              "addresses": [
                {
                  "num": "3",
                  "street": "Havnegade",
                  "locality": "Aarhus C",
                  "code": "8000",
                  "country": "DK"
                }
              ]
            },
            "lines": [
              {
                "quantity": 2,
                "item": {
                  "name": "Consulting services",
                  "price": "800.00",
                  "unit": "h"
                },
                "taxes": [
                  {
                    "cat": "VAT",
                    "rate": "standard"
                  }
                ]
              }
            ]
          }
          ```

          ```json Built version theme={"system"}
          {
          	"$schema": "https://gobl.org/draft-0/bill/invoice",
          	"$regime": "DK",
          	"$addons": [
          		"eu-en16931-v2017",
          		"dk-oioubl-v2"
          	],
          	"type": "credit-note",
          	"series": "SAMPLE",
          	"code": "0044",
          	"issue_date": "2026-08-10",
          	"currency": "DKK",
          	"preceding": [
          		{
          			"issue_date": "2026-08-01",
          			"series": "SAMPLE",
          			"code": "0043",
          			"reason": "Ordered quantity reduced"
          		}
          	],
          	"tax": {
          		"rounding": "currency",
          		"ext": {
          			"untdid-document-type": "381"
          		}
          	},
          	"supplier": {
          		"name": "Nordlys Software ApS",
          		"tax_id": {
          			"country": "DK",
          			"code": "16356700"
          		},
          		"identities": [
          			{
          				"scope": "legal",
          				"code": "16356700"
          			}
          		],
          		"endpoints": [
          			{
          				"uri": "DK:CVR:16356700"
          			}
          		],
          		"addresses": [
          			{
          				"num": "24",
          				"street": "Vesterbrogade",
          				"locality": "København V",
          				"code": "1620",
          				"country": "DK"
          			}
          		],
          		"emails": [
          			{
          				"addr": "faktura@nordlys.dk"
          			}
          		]
          	},
          	"customer": {
          		"name": "Havnens Byggemarked A/S",
          		"tax_id": {
          			"country": "DK",
          			"code": "12345674"
          		},
          		"identities": [
          			{
          				"scope": "legal",
          				"code": "12345674"
          			}
          		],
          		"endpoints": [
          			{
          				"uri": "DK:CVR:12345674"
          			}
          		],
          		"addresses": [
          			{
          				"num": "3",
          				"street": "Havnegade",
          				"locality": "Aarhus C",
          				"code": "8000",
          				"country": "DK"
          			}
          		]
          	},
          	"lines": [
          		{
          			"i": 1,
          			"quantity": "2",
          			"item": {
          				"name": "Consulting services",
          				"price": "800.00",
          				"unit": "h"
          			},
          			"sum": "1600.00",
          			"taxes": [
          				{
          					"cat": "VAT",
          					"key": "standard",
          					"rate": "general",
          					"percent": "25.0%"
          				}
          			],
          			"total": "1600.00"
          		}
          	],
          	"totals": {
          		"sum": "1600.00",
          		"total": "1600.00",
          		"taxes": {
          			"categories": [
          				{
          					"code": "VAT",
          					"rates": [
          						{
          							"key": "standard",
          							"base": "1600.00",
          							"percent": "25.0%",
          							"amount": "400.00"
          						}
          					],
          					"amount": "400.00"
          				}
          			],
          			"sum": "400.00"
          		},
          		"tax": "400.00",
          		"total_with_tax": "2000.00",
          		"payable": "2000.00"
          	}
          }
          ```
        </CodeGroup>
      </Accordion>
    </AccordionGroup>

    Copy and paste these documents into the [GOBL builder](https://build.gobl.org) in order to preview and verify them.
  </Tab>
</Tabs>

***

<AccordionGroup>
  <Accordion title="🇩🇰 Invopop resources for Denmark">
    |            |                                                                                                                                                                                                                                                                                                                                                                                          |
    | ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
    | Compliance | <Icon icon="https://assets.invopop.com/flags/dk.svg" /> [Invoicing compliance in Denmark](/compliance/denmark)<br /> <Icon icon="timeline" /> [Compliance timeline](/timelines/denmark)                                                                                                                                                                                                  |
    | Apps       | <Icon icon="https://assets.invopop.com/flags/dk.svg" /> [Denmark](/apps/denmark)<br /> <Icon icon="https://assets.invopop.com/apps/peppol/icon.svg" /> [Peppol](/apps/peppol)                                                                                                                                                                                                            |
    | Guides     | <Icon icon="book" /> [Supplier registration guide](/guides/dk-nemhandel-supplier)<br /> <Icon icon="book" /> [Issuing invoices guide](/guides/dk-nemhandel)<br /> <Icon icon="book" /> [Receiving invoices guide](/guides/dk-nemhandel-receiving)<br /> <Icon icon="book" /> [Peppol guide](/guides/peppol)<br /> <Icon icon="book" /> [Chargebee guide](/guides/cb-denmark)             |
    | FAQ        | <Icon icon="square-question" /> [Denmark FAQ](/faq/denmark)                                                                                                                                                                                                                                                                                                                              |
    | GOBL       | <Icon icon="https://assets.invopop.com/icons/gobl.svg" /> [Danish OIOUBL 2.1 Addon](https://docs.gobl.org/addons/dk-oioubl-v2)<br /> <Icon icon="https://assets.invopop.com/icons/gobl.svg" /> [Denmark Tax Regime](https://docs.gobl.org/regimes/dk)<br /> <Icon icon="https://assets.invopop.com/icons/gobl.svg" /> [EU EN 16931 Addon](https://docs.gobl.org/addons/eu-en16931-v2017) |
    | GitHub     | <Icon icon="github" /> [gobl.dk.oioubl](https://github.com/invopop/gobl.dk.oioubl)<br /> <Icon icon="github" /> [gobl.ubl](https://github.com/invopop/gobl.ubl)                                                                                                                                                                                                                          |
  </Accordion>
</AccordionGroup>

<Card title="Participate in our community" icon="forumbee" href="https://community.invopop.com" arrow="true" horizontal>
  Ask and answer questions about the Denmark app →
</Card>
