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
Machine access
- Schema document
registry/dk/motorstyrelsen/tilladelse-til-koersel-med-udenlandsk-registreret-koeretoej/1.0.0/schema.jsonapplication/schema+json- Verification record
registry/dk/motorstyrelsen/tilladelse-til-koersel-med-udenlandsk-registreret-koeretoej/1.0.0/VERIFICATION.mdtext/markdown- 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
-
fullNamestring requiredFull name of the person who will use (drive) the foreign-registered vehicle in Denmark.
length: 1–300classification: pii -
nationalitystring requiredNationality of the vehicle's user.
length: 0–100classification: pii -
personalIdentityNumberOrDateOfBirthstring requiredThe 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 -
dateOfEntryIntoDenmarkdate requiredThe date the vehicle user entered (or expects to enter) Denmark for the stay covered by this application.
-
dateOfDepartureFromDenmarkdate requiredThe date the vehicle user expects to depart Denmark at the end of the stay covered by this application.
-
occupationOrPurposeOfStaystring requiredThe 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 -
previousResidenceDurationInDenmarkstring optionalDuration of any previous residence the applicant has had in Denmark, if any ("evt." — if applicable).
length: 0–200 -
previouslyAppliedForPermitenum requiredWhether the applicant has previously applied for this permit.
enum: Ja/Yes | Nej/No -
previousApplicationReferenceNumberstring optionalReference/case number of the applicant's previous permit application, if one was previously made.
length: 0–100 -
addressInDenmarkstring requiredThe vehicle user's street address in Denmark during the stay.
length: 0–300classification: pii -
postalCodeAndCityInDenmarkstring requiredPostal 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 -
telephonestring requiredContact telephone number of the applicant.
length: 0–50classification: pii -
emailstring requiredContact email address of the applicant.
length: 0–200classification: pii -
typeOfResidenceInDenmarkenum requiredThe 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 -
leaseDurationInDenmarkstring optionalDuration of the lease on the applicant's residence in Denmark, if renting.
length: 0–100 -
addressInHomeCountrystring requiredThe applicant's own address in their home country.
length: 0–300classification: pii -
natureOfDomicileInHomeCountryenum requiredThe 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 -
leaseDurationInHomeCountrystring optionalDuration of the lease on the applicant's domicile in their home country, if renting.
length: 0–100 -
domicileMaintainedDuringStayInDenmarkenum requiredWhether the applicant keeps (maintains) their home-country domicile available during their stay in Denmark.
enum: Ja/Yes | Nej/No -
spouseOrCohabitantNameAndAddressstring optionalName 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 -
childrenNameAndDateOfBirthstring optionalName(s) and date/year of birth of any children living at the applicant's home-country address, if applicable.
length: 0–400classification: pii -
expectedDaysOffInDenmarkstring requiredHow 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 -
expectedDaysOffInHomeCountrystring requiredHow 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 -
vehicleRegistrationNumberstring requiredThe foreign registration (license plate) number of the vehicle.
length: 0–50 -
vehicleRegistrationCountrystring requiredThe country in which the vehicle is registered.
length: 0–100 -
vehicleMakestring requiredThe vehicle's make (manufacturer/brand).
length: 0–100 -
vehicleTypestring requiredThe vehicle's type, e.g. private car, van, etc.
length: 0–100 -
vehicleIdentificationNumberstring requiredThe vehicle's chassis/identification number (VIN).
length: 0–50 -
vehicleOwnerNameAndAddressstring requiredName and address of the vehicle's registered owner (who may or may not be the applicant themself).
length: 0–500classification: pii -
currentMileageinteger requiredThe vehicle's current odometer reading, in kilometers.
range: 0–∞ -
expectedMileageInHomeCountryinteger requiredExpected mileage (in kilometers) the vehicle will travel in the applicant's home country during the coming year.
range: 0–∞ -
expectedMileageInDenmarkinteger requiredExpected mileage (in kilometers) the vehicle will travel in Denmark during the coming year.
range: 0–∞ -
purposeOfUseInHomeCountrystring requiredThe purpose(s) for which the vehicle is used in the applicant's home country.
length: 0–500 -
purposeOfUseInDenmarkstring requiredThe purpose(s) for which the vehicle will be used in Denmark.
length: 0–500 -
frequencyOfUsestring requiredHow often the applicant expects to drive the vehicle.
length: 0–300 -
supplementaryInformationstring optionalAny further supplementary information the applicant wishes to provide.
length: 0–1000 -
signatureDatedate requiredDate 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 code21.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→ 2pdf.getFieldObjects()→ 38 distinct keys (field names)- Per-page
page.getAnnotations()→ 33Widgetannotations on page 1 and 15 on page 2, 48 total — cross-checked againstgetFieldObjects()'s 38 keys; the gap (48 − 38 = 10) is accounted for entirely by 4 genuine PDF radio-button groups (radioButton: true, sharedfieldName, distinctbuttonValueper option, confirmed viagetAnnotations()):pg1-9— 2 options (Ja/Yes,Nej/No) →previouslyAppliedForPermitpg1-15— 5 options (Hus/House,Lejlighed/Apartment,Værelse/Room,Ejet/Owned,Lejet/Rented) →typeOfResidenceInDenmarkpg1-18— the same 5 options →natureOfDomicileInHomeCountrypg1-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
alternativeTextdirectly 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 separategetTextContent()label correlation was needed for those. The 4 radio groups' own option widgets carry noalternativeText(empty string on everyBtnwidget), so their meaning was recovered by extracting each page'sgetTextContent()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, 1Sig(digital-signature) widget, and 4Btnradio groups (14 widgets) forming 4enumfields — 38 distinct fields total, 37 modelled as schemafields[]entries (theSigwidget 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
personalIdentityNumberOrDateOfBirth(pg1-3) is a plainstring, 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.previousApplicationReferenceNumber(pg1-10) isrequiredWhen 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.- The 38th distinct field,
pg2-17(the form's own genuineSigAcroForm field type), is deliberately not modelled as schema data. This is the only widget on the entire form typedSigrather thanTx/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-applicationmodels onlysignatureDate/signaturePlace, never the signature act itself; the sourcing note indk/um/application-for-danish-passport@1.1.0states signature blocks are "not modelled as hand-drawn/image signature fields"). Its accompanying date widget,pg2-16, is modelled assignatureDate. typeOfResidenceInDenmark/natureOfDomicileInHomeCountryeach combine two logically distinct concepts (dwelling type: House/ Apartment/Room, and tenure: Owned/Rented) into a single 5-optionenum. This mirrors the widget structure exactly: both are single PDF radio groups (onefieldNameeach, 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.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:
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.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.employmentOrStudyDocumentation(required: false, norequiredWhen) — "Dokumentation for ansættelses-/studieforholdet herunder varighed bedes vedlagt/Documentation of nature and duration of employment/study must be enclosed", thepg1-7(occupationOrPurposeOfStay) field's own parenthetical. Textually this only applies when the applicant's stated purpose of stay is employment or study, butoccupationOrPurposeOfStayis free text, not a boolean/enum GovSchema'srequiredWhencondition 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 documentednotEquals-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.mjs→ok, 359/359 documents pass (full registry, including this schema)node tools/validate-ajv.mjs→ok, 359/359 validate against the v0.3 meta-schema (full registry, including this schema)
View the raw record (VERIFICATION.md)
Version history
-
1.0.0draftlatestthis pagehas verification recordschema.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.