Registry entry

Denmark Application for Permit to Drive a Foreign-Registered Motor Vehicle for Private Purposes in Denmark — Ansøgning om tilladelse til kørsel i Danmark med udenlandsk registreret køretøj (form 21.059)

Denmark's Motorstyrelsen (the Danish Motor Vehicle Agency, part of the Danish Customs and Tax Administration) form 21.059, "Ansøgning om tilladelse til kørsel i Danmark med udenlandsk registreret køretøj" (Application for permit to drive a foreign-registered motor vehicle for private purposes in Denmark). A person residing in or staying in Denmark who wishes to privately drive a motor vehicle registered in another country on Danish roads generally needs this permit, since Danish rules otherwise require a vehicle used in Denmark to itself carry a Danish registration. The form captures the applicant's own residence and travel history (dates of entry/departure, any prior residence in Denmark, current and prior domicile in Denmark and in their home country, and ties retained abroad such as a spouse/cohabitant or children living at home), the vehicle to be driven (registration number and country, make, type, VIN, registered owner, current and expected mileage at home and in Denmark), and the intended use of the vehicle both in Denmark and in the applicant's home country. This schema models the form's own two-page applicant-facing content in full, including its bilingual (Danish/English) field labels and its own document/payment attachment instructions (a copy of the vehicle's registration certificate, a receipt for the DKK 400 processing fee, and documentation of the duration of the applicant's employment or study in Denmark where applicable). It does not model the form's own physical/electronic signature widget itself (Underskrift/Signature), consistent with this registry's convention of not modelling ink/e-signature acts as schema data (see dk/siri/work-permit-application and dk/um/application-for-danish-passport precedent); only the accompanying signature date is modelled. It does not submit the application; the live source (motorst.dk / Motorstyrelsen) is always authoritative. GovSchema is independent and is not affiliated with, endorsed by, or operated by the Kingdom of Denmark or Motorstyrelsen.

Registry entry

dk/motorstyrelsen/tilladelse-til-koersel-med-udenlandsk-registreret-koeretoej

Jurisdiction
Denmark · national
Version
1.0.0
Verification
draft

Authoritative source Form 21.059 DA EN (edition 2018.07), "Ansøgning om tilladelse til kørsel i Danmark med udenlandsk registreret køretøj" / "Application for permit to drive a foreign-registered motor vehicle for private purposes in Denmark", a 2-page fillable AcroForm PDF published unauthenticated directly on Motorstyrelsen's own site (motorst.dk), submitted by post to Motorstyrelsen, Nykøbingvej 76, Bygning 45, 4990 Sakskøbing.

Machine access

Registry catalog
registry/index.jsonone record per schema id

Field reference

37 fields, read from the published schema.json, with names, types, requiredness, and validation as the document states them. The live government form remains the authoritative source.

Fields

  • fullName string required

    Full name of the person who will use (drive) the foreign-registered vehicle in Denmark.

    length: 1–300classification: pii
  • nationality string required

    Nationality of the vehicle's user.

    length: 0–100classification: pii
  • personalIdentityNumberOrDateOfBirth string required

    The vehicle user's 10-digit Danish personnummer (CPR number) if already assigned one, or otherwise their date and year of birth. Modelled as a plain string rather than this registry's usual ^[0-9]{10}$ personnummer pattern because the form's own label offers this as an explicit alternative for applicants without a Danish personnummer.

    length: 0–50classification: sensitive-pii
  • dateOfEntryIntoDenmark date required

    The date the vehicle user entered (or expects to enter) Denmark for the stay covered by this application.

  • dateOfDepartureFromDenmark date required

    The date the vehicle user expects to depart Denmark at the end of the stay covered by this application.

  • occupationOrPurposeOfStay string required

    The purpose/occupation of the applicant's stay in Denmark (e.g. employment or study). The form's own parenthetical asks that documentation of the nature and duration of the employment/study be enclosed — modelled as the employmentOrStudyDocumentation entry in documents[].

    length: 0–500
  • previousResidenceDurationInDenmark string optional

    Duration of any previous residence the applicant has had in Denmark, if any ("evt." — if applicable).

    length: 0–200
  • previouslyAppliedForPermit enum required

    Whether the applicant has previously applied for this permit.

    enum: Ja/Yes | Nej/No
  • previousApplicationReferenceNumber string optional

    Reference/case number of the applicant's previous permit application, if one was previously made.

    length: 0–100
  • addressInDenmark string required

    The vehicle user's street address in Denmark during the stay.

    length: 0–300classification: pii
  • postalCodeAndCityInDenmark string required

    Postal code and city of the applicant's address in Denmark, entered as a single combined value on the source form's own single widget.

    length: 0–150
  • telephone string required

    Contact telephone number of the applicant.

    length: 0–50classification: pii
  • email string required

    Contact email address of the applicant.

    length: 0–200classification: pii
  • typeOfResidenceInDenmark enum required

    The type and tenure of the applicant's residence in Denmark. The source form implements this as a single 5-option radio group (mutually exclusive), covering both dwelling type (House/Apartment/Room) and tenure (Owned/Rented) as one choice — modelled here exactly as the widget structure dictates, not split into two independent fields.

    enum: Hus/House | Lejlighed/Apartment | Værelse/Room | Ejet/Owned | Lejet/Rented
  • leaseDurationInDenmark string optional

    Duration of the lease on the applicant's residence in Denmark, if renting.

    length: 0–100
  • addressInHomeCountry string required

    The applicant's own address in their home country.

    length: 0–300classification: pii
  • natureOfDomicileInHomeCountry enum required

    The type and tenure of the applicant's domicile in their home country, the same 5-option radio-group structure used for typeOfResidenceInDenmark.

    enum: Hus/House | Lejlighed/Apartment | Værelse/Room | Ejet/Owned | Lejet/Rented
  • leaseDurationInHomeCountry string optional

    Duration of the lease on the applicant's domicile in their home country, if renting.

    length: 0–100
  • domicileMaintainedDuringStayInDenmark enum required

    Whether the applicant keeps (maintains) their home-country domicile available during their stay in Denmark.

    enum: Ja/Yes | Nej/No
  • spouseOrCohabitantNameAndAddress string optional

    Name and address of the applicant's spouse or cohabitant, if applicable, kept in the applicant's home country as a tie retained there.

    length: 0–400classification: pii
  • childrenNameAndDateOfBirth string optional

    Name(s) and date/year of birth of any children living at the applicant's home-country address, if applicable.

    length: 0–400classification: pii
  • expectedDaysOffInDenmark string required

    How many weekends, holidays (including public holidays) and other days off the applicant expects to spend in Denmark during the period applied for.

    length: 0–300
  • expectedDaysOffInHomeCountry string required

    How many weekends, holidays (including public holidays) and other days off the applicant expects to spend in their home country during the period applied for.

    length: 0–300
  • vehicleRegistrationNumber string required

    The foreign registration (license plate) number of the vehicle.

    length: 0–50
  • vehicleRegistrationCountry string required

    The country in which the vehicle is registered.

    length: 0–100
  • vehicleMake string required

    The vehicle's make (manufacturer/brand).

    length: 0–100
  • vehicleType string required

    The vehicle's type, e.g. private car, van, etc.

    length: 0–100
  • vehicleIdentificationNumber string required

    The vehicle's chassis/identification number (VIN).

    length: 0–50
  • vehicleOwnerNameAndAddress string required

    Name and address of the vehicle's registered owner (who may or may not be the applicant themself).

    length: 0–500classification: pii
  • currentMileage integer required

    The vehicle's current odometer reading, in kilometers.

    range: 0–∞
  • expectedMileageInHomeCountry integer required

    Expected mileage (in kilometers) the vehicle will travel in the applicant's home country during the coming year.

    range: 0–∞
  • expectedMileageInDenmark integer required

    Expected mileage (in kilometers) the vehicle will travel in Denmark during the coming year.

    range: 0–∞
  • purposeOfUseInHomeCountry string required

    The purpose(s) for which the vehicle is used in the applicant's home country.

    length: 0–500
  • purposeOfUseInDenmark string required

    The purpose(s) for which the vehicle will be used in Denmark.

    length: 0–500
  • frequencyOfUse string required

    How often the applicant expects to drive the vehicle.

    length: 0–300
  • supplementaryInformation string optional

    Any further supplementary information the applicant wishes to provide.

    length: 0–1000
  • signatureDate date required

    Date the application is signed. The form's own accompanying signature widget (Underskrift/Signature) is not itself modelled as schema data, per this registry's convention for ink/e-signature acts.

Verification record

Why this candidate (GOV-2355, "GovSchema Standard Research")

The task brief for this issue framed form 21.059 as closing Denmark's DMV vertical (its last open vertical, bringing Denmark to 6/6). By the time this authoring pass started, a concurrent cycle (GOV-2346) had already merged dk/fstyr/samtykkeerklaering-koerekort-under-18 (form P23T, the under-18 driving-licence consent declaration) and closed Denmark's DMV vertical to 6/6 — confirmed by fetching origin/main fresh (commit 90d18fa) and reading CATALOG.md's own Executive Summary before doing any extraction work here. Rather than discard the pre-scouted, independently-confirmed candidate (38 distinct AcroForm fields / 48 widgets, per this issue's own brief), this schema authors form 21.059 anyway as a second, genuinely distinct DMV sub-process for Denmark: it is not a duplicate of P23T (a narrow parent/guardian consent declaration for minor licence applicants) or of either DMV candidate P23/Motorstyrelsen-re-registration screened and rejected by the prior GOV-2253 cycle (P23 is a shared, multi-party 397-field record card; the Motorstyrelsen re-registration flow is MitID-gated with no static fallback) — 21.059 is a standalone, unauthenticated, citizen-facing intake form for an entirely different real-world process (a temporary permit letting a resident privately drive a foreign-registered vehicle on Danish roads). This is expanding Denmark's real-world DMV coverage, not re-closing a vertical count that is already closed.

Source fetch

  • URL: https://motorst.dk/media/gbplxzah/21059_en_ns_t.pdf
  • HTTP status: 200 (direct fetch from motorst.dk; no login/CAPTCHA/WAF gate encountered)
  • Byte size: 1,222,437 bytes
  • File header: %PDF-1.6
  • SHA-256 of the fetched bytes: 3acae2e99c97c234f6326fc2ac83b3dd31a1ce9d01d49aee806d886624a26147 (recorded here for future re-verification cycles to diff against)
  • Form edition marker printed in the PDF's own footer: 2018.07; form code 21.059 DA EN, matching the DA/EN bilingual filename itself.

Independent field extraction

Performed fresh with pdfjs-dist@3.11.174 (legacy/build/pdf.js), not trusted from this issue's own pre-authoring scouting numbers:

  • pdf.numPages → 2
  • pdf.getFieldObjects()38 distinct keys (field names)
  • Per-page page.getAnnotations()33 Widget annotations on page 1 and 15 on page 2, 48 total — cross-checked against getFieldObjects()'s 38 keys; the gap (48 − 38 = 10) is accounted for entirely by 4 genuine PDF radio-button groups (radioButton: true, shared fieldName, distinct buttonValue per option, confirmed via getAnnotations()):
    • pg1-9 — 2 options (Ja/Yes, Nej/No) → previouslyAppliedForPermit
    • pg1-15 — 5 options (Hus/House, Lejlighed/Apartment, Værelse/Room, Ejet/Owned, Lejet/Rented) → typeOfResidenceInDenmark
    • pg1-18 — the same 5 options → natureOfDomicileInHomeCountry
    • pg1-20 — 2 options (Ja/Yes, Nej/No) → domicileMaintainedDuringStayInDenmark
    • Widget count check: 2+5+5+2 = 14 widgets across 4 fields; 48 − 14 = 34 single-widget fields; 34 + 4 = 38, matching getFieldObjects() exactly.
  • Every non-radio widget's own alternativeText directly names its section and label bilingually (e.g. "Oplysninger om den, som skal anvende køretøjet i Danmark/Information about the user of the vehicle in Denmark: Navn/Full name"), so no separate getTextContent() label correlation was needed for those. The 4 radio groups' own option widgets carry no alternativeText (empty string on every Btn widget), so their meaning was recovered by extracting each page's getTextContent() with y-coordinates and matching each radio group's own printed section heading directly above it (e.g. pg1-9's heading, printed at y=529.9/520.9, reads "Er der tidligere søgt om tilladelse?/Former applications for permit").
  • Field type breakdown: 34 Tx (text) widgets forming 34 single-widget fields, 1 Sig (digital-signature) widget, and 4 Btn radio groups (14 widgets) forming 4 enum fields — 38 distinct fields total, 37 modelled as schema fields[] entries (the Sig widget is deliberately excluded; see below).

Raw field list (internal PDF field name → this schema's field name):

| PDF field name | Page | Type | Schema field | |---|---|---|---| | pg1-1 | 1 | Tx | fullName | | pg1-2 | 1 | Tx | nationality | | pg1-3 | 1 | Tx | personalIdentityNumberOrDateOfBirth | | pg1-4 | 1 | Tx | dateOfEntryIntoDenmark | | pg1-5 | 1 | Tx | dateOfDepartureFromDenmark | | (pg1-6 absent — no widget of this name exists on the specimen; form's own numbering simply skips it) | — | — | — | | pg1-7 | 1 | Tx | occupationOrPurposeOfStay | | pg1-8 | 1 | Tx | previousResidenceDurationInDenmark | | pg1-9 | 1 | Btn (radio, 2 opt) | previouslyAppliedForPermit | | pg1-10 | 1 | Tx | previousApplicationReferenceNumber | | pg1-11 | 1 | Tx | addressInDenmark | | pg1-12 | 1 | Tx | postalCodeAndCityInDenmark | | pg1-13 | 1 | Tx | telephone | | pg1-14 | 1 | Tx | email | | pg1-15 | 1 | Btn (radio, 5 opt) | typeOfResidenceInDenmark | | pg1-16 | 1 | Tx | leaseDurationInDenmark | | pg1-17 | 1 | Tx | addressInHomeCountry | | pg1-18 | 1 | Btn (radio, 5 opt) | natureOfDomicileInHomeCountry | | pg1-19 | 1 | Tx | leaseDurationInHomeCountry | | pg1-20 | 1 | Btn (radio, 2 opt) | domicileMaintainedDuringStayInDenmark | | pg1-21 | 1 | Tx | spouseOrCohabitantNameAndAddress | | pg1-22 | 1 | Tx | childrenNameAndDateOfBirth | | pg1-23 | 1 | Tx | expectedDaysOffInDenmark | | pg1-24 | 1 | Tx | expectedDaysOffInHomeCountry | | pg2-1 | 2 | Tx | vehicleRegistrationNumber | | pg2-2 | 2 | Tx | vehicleRegistrationCountry | | pg2-3 | 2 | Tx | vehicleMake | | pg2-4 | 2 | Tx | vehicleType | | pg2-5 | 2 | Tx | vehicleIdentificationNumber | | pg2-6 | 2 | Tx | vehicleOwnerNameAndAddress | | pg2-7 | 2 | Tx | currentMileage | | pg2-8 | 2 | Tx | expectedMileageInHomeCountry | | pg2-9 | 2 | Tx | expectedMileageInDenmark | | pg2-10 | 2 | Tx | purposeOfUseInHomeCountry | | pg2-11 | 2 | Tx | purposeOfUseInDenmark | | pg2-12 | 2 | Tx | frequencyOfUse | | pg2-13 | 2 | Tx | supplementaryInformation | | (pg2-14, pg2-15 absent — no widgets of these names exist on the specimen) | — | — | — | | pg2-16 | 2 | Tx | signatureDate | | pg2-17 | 2 | Sig | (not modelled — see below) |

38 distinct PDF fields → 37 schema fields[] entries (1 field, the Sig widget, deliberately excluded), a fully accounted-for mapping with no unexplained merging, splitting, or exclusion.

Disclosed judgment calls

  1. personalIdentityNumberOrDateOfBirth (pg1-3) is a plain string, not this registry's usual ^[0-9]{10}$ personnummer pattern. The widget's own bilingual label reads "Dansk personnummer eller fødselsdato og -år/Danish civil registration number or date and year of birth" — the form itself offers an explicit non-personnummer alternative for applicants (typically foreign residents, the entire population this form targets) who do not yet hold a Danish personnummer. Constraining to the 10-digit pattern would reject a legitimate value the source form itself invites.
  2. previousApplicationReferenceNumber (pg1-10) is requiredWhen previouslyAppliedForPermit equals "Ja/Yes". The field's own label ("Evt. journalnummer/Reference number, if any") and its physical placement directly beside the "Former applications for permit" yes/no radio group tie its relevance to a "yes" answer there, not to unconditional optionality with no linkage.
  3. The 38th distinct field, pg2-17 (the form's own genuine Sig AcroForm field type), is deliberately not modelled as schema data. This is the only widget on the entire form typed Sig rather than Tx/Btn — a true interactive digital-signature field, not a text box. Consistent with this registry's existing precedent of not modelling ink/e-signature acts as schema data (dk/siri/work-permit-application models only signatureDate/ signaturePlace, never the signature act itself; the sourcing note in dk/um/application-for-danish-passport@1.1.0 states signature blocks are "not modelled as hand-drawn/image signature fields"). Its accompanying date widget, pg2-16, is modelled as signatureDate.
  4. typeOfResidenceInDenmark / natureOfDomicileInHomeCountry each combine two logically distinct concepts (dwelling type: House/ Apartment/Room, and tenure: Owned/Rented) into a single 5-option enum. This mirrors the widget structure exactly: both are single PDF radio groups (one fieldName each, mutually exclusive by construction), not two independent groups — modelled as the source form actually constrains input, not split into what might seem like a cleaner two-axis model the form itself does not offer.
  5. postalCodeAndCityInDenmark (pg1-12) combines postal code and city into one field, matching the single combined widget ("Postnummer og by/Postal code and city") rather than this registry's more common split-postal-code convention used elsewhere, because this specimen genuinely has only one widget here.

documents[]

Three document/attachment requirements, each directly quoting the form's own printed instructions rather than inferred:

  1. vehicleRegistrationCertificateCopy (required: true) — "Kopi af køretøjets registreringsattest vedlægges/Enclose copy of the vehicle registration certificate", printed on both the page-1 header and again near the top of page 2.
  2. processingFeeReceipt (required: true) — "(Det koster 400 kr. at få behandlet ansøgningen, vedlæg kvittering for indbetaling)/(The price for applying for a permit is DKK 400, enclose receipt for payment)", the page-1 subtitle.
  3. employmentOrStudyDocumentation (required: false, no requiredWhen) — "Dokumentation for ansættelses-/studieforholdet herunder varighed bedes vedlagt/Documentation of nature and duration of employment/study must be enclosed", the pg1-7 (occupationOrPurposeOfStay) field's own parenthetical. Textually this only applies when the applicant's stated purpose of stay is employment or study, but occupationOrPurposeOfStay is free text, not a boolean/enum GovSchema's requiredWhen condition grammar can gate on precisely — gating on an exact-string match (e.g. equals: "employment") would be unreliable rather than a genuine reflection of the source form's own conditionality (per this registry's own documented notEquals-against-free-text pitfall). Modelled as unconditionally optional and disclosed here rather than guessed at.

Conformance verification

A one-off checker script (not committed — ad hoc per this registry's convention, mirroring prior cycles, e.g. dk/fstyr and dk/skattestyrelsen) was written to evaluate every fixture in conformance/dk/motorstyrelsen/ tilladelse-til-koersel-med-udenlandsk-registreret-koeretoej/1.0.0/ against this schema's fields[] (required/requiredWhen/validation.enum/ pattern/minLength/maxLength/minimum) and documents[] (required/requiredWhen) rules. Results:

| Fixture | Errors | Expected | |---|---|---| | application-packet-foreign-worker-fixed-term.json | 0 | 0 | | application-packet-returning-student.json | 0 | 0 | | mutation-control-missing-static-required.json | 1 (fullName missing) | 1 | | mutation-control-requiredwhen-violation.json | 1 (previousApplicationReferenceNumber requiredWhen violated) | 1 | | mutation-control-enum-violation.json | 1 (typeOfResidenceInDenmark invalid enum value) | 1 | | mutation-control-missing-required-document.json | 1 (processingFeeReceipt document missing) | 1 |

All 6 fixtures produced exactly the expected error count. The two valid scenarios (a foreign worker on a fixed-term Danish work assignment driving their own home-country-registered car; a returning exchange student who previously held this same permit) exercise both branches of the previouslyAppliedForPermit/previousApplicationReferenceNumber gating logic, and each mutation control isolates exactly one rule type (required, requiredWhen, enum, documents[].required) by construction — every mutation fixture is otherwise a fully valid, complete submission with exactly one deliberate defect introduced, so no fixture can pass by accidentally satisfying an unrelated rule. documents[] requiredness was explicitly exercised (not left an untested blind spot, per this registry's own documented documents[]-coverage pitfall).

Registry validation

  • node tools/validate.mjsok, 359/359 documents pass (full registry, including this schema)
  • node tools/validate-ajv.mjsok, 359/359 validate against the v0.3 meta-schema (full registry, including this schema)

View the raw record (VERIFICATION.md)

Version history

  • 1.0.0 draft latest this page has verification record schema.json

Independent and non-affiliated

GovSchema is an independent, open-source project. This reference is not produced, reviewed, or endorsed by Motorstyrelsen (the Danish Motor Vehicle Agency) or any government. The authoritative source is always the live government form and its official instructions.