Registry entry
Denmark Work Permit Application — Sideline Employment or Accompanying Family (Form AR8)
Denmark's Styrelsen for International Rekruttering og Integration (SIRI, the Danish Agency for International Recruitment and Integration) application form AR8, used to apply for a work permit (not a residence permit) on one of two specific grounds — (a) sideline employment, a second job alongside an existing residence-and-work permit, or (b) a work permit for a family member accompanying a sponsor who already holds Danish residence — or for an extension of either. This is a genuinely narrower scope than a first-time primary work-permit application: SIRI's own primary route (form AR1, or its employer-submitted twin AR6) is a MitID-authenticated online case-management wizard (forms.nyidanmark.dk) with no unauthenticated static-form fallback, and commuters who reside abroad while working in Denmark cannot use AR8 at all (the source form directs them to AR1/AR3/AR6/AR7 instead) — see VERIFICATION.md for the full sourcing record and the screening that ruled out AR1/AR3/AR6/AR7 as candidates. AR8 is a genuine, current, unauthenticated fill-by-hand PDF (no AcroForm widget layer — 0 widgets confirmed across all 14 pages) published directly by SIRI at newtodenmark.dk, with an official parallel English version used as this schema's primary source. The form is completed in two parts by two distinct parties: Part 1 by the applicant (the foreign national), and Part 2 by their employer in Denmark, each independently declaring the correctness of their own part and signing separately. GovSchema is independent and is not affiliated with, endorsed by, or operated by the Kingdom of Denmark, the Danish Agency for International Recruitment and Integration (SIRI), or the Ministry of Immigration and Integration.
Registry entry
dk/siri/work-permit-application
Machine access
- Schema document
registry/dk/siri/work-permit-application/1.0.0/schema.jsonapplication/schema+json- Verification record
registry/dk/siri/work-permit-application/1.0.0/VERIFICATION.mdtext/markdown- Registry catalog
registry/index.jsonone record per schema id
Field reference
104 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
-
applicationTypeenum requiredType of application
enum: new-work-permit | extension -
employmentBasisenum required'Sideline employment' is a second job alongside the applicant's existing residence-and-work permit. 'Work permit for accompanying family' is for a family member of a sponsor who already holds a Danish residence permit, offered a job at the sponsor's own company or a closely related one.
enum: sideline-employment | accompanying-family -
surnamestring requiredSurname
length: 1–200classification: pii -
firstNamesstring requiredFirst name(s)
length: 1–200classification: pii -
nationalitystring requiredNationality
length: 1–100classification: pii -
dateOfBirthdate requiredDate of birth
classification: sensitive-pii -
cprNumberstring optionalDanish Civil Registration (CPR) number, if the applicant already has one (e.g. from a prior stay in Denmark). Not marked mandatory on the source, since a first-time entrant may not yet have been assigned one.
patternclassification: sensitive-pii -
personIdstring optionalPerson ID
length: 0–50 -
addressInDenmarkStreetAndNumberstring optionalAddress in Denmark (street and number)
length: 0–300classification: pii -
addressInDenmarkPostcodeAndCitystring optionalPostcode and city (address in Denmark)
length: 0–200classification: pii -
phoneNumberstring requiredPhone number
length: 1–50classification: pii -
emailstring requiredEmail
length: 1–200classification: pii -
passportNumberstring requiredPassport number
length: 1–50classification: sensitive-pii -
sidelineRelatedToPrimaryJobboolean optionalIs your sideline employment naturally related to the job forming the basis of your residence and work permit?
-
sidelineRelatedElaborationstring optionalElaboration on the relation between the sideline employment and the primary job
length: 0–1000 -
danishAuthorisationRequiredboolean requiredIf true, the source form's own instruction states the applicant does not need to complete sections 7 (education) and 8 (previous employment) — modelled here via each of those sections' own 'visibleWhen'.
-
completedRelevantEducationboolean optionalHave you completed an education that is relevant to the job offered?
-
completedEducationTitlestring optionalTitle of completed education
length: 0–300 -
completedEducationTypestring optionalType of completed education
length: 0–300 -
completedEducationDatedate optionalDate of completion of education
-
currentlyEnrolledRelevantEducationboolean optionalAre you currently enrolled at an education that is relevant to the job offered?
-
currentEducationTitlestring optionalTitle of education currently enrolled in
length: 0–300 -
currentEducationTypestring optionalType of education currently enrolled in
length: 0–300 -
currentEducationExpectedCompletionDatedate optionalExpected date of completion of current education
-
hadRelevantPreviousEmploymentboolean optionalHave you had any previous employment that is relevant to the job offered?
-
previousEmployment1CompanyNamestring optionalName of company (previous relevant employment A)
length: 0–300 -
previousEmployment1PeriodFromdate optionalPeriod from (previous relevant employment A)
-
previousEmployment1PeriodTodate optionalPeriod to (previous relevant employment A)
-
previousEmployment1Addressstring optionalAddress (previous relevant employment A)
length: 0–300 -
previousEmployment1WorkTasksstring optionalWork tasks, short description (previous relevant employment A)
length: 0–500 -
previousEmployment1JobTitlestring optionalJob title (previous relevant employment A)
length: 0–200 -
previousEmployment2CompanyNamestring optionalName of company (previous relevant employment B)
length: 0–300 -
previousEmployment2PeriodFromdate optionalPeriod from (previous relevant employment B)
-
previousEmployment2PeriodTodate optionalPeriod to (previous relevant employment B)
-
previousEmployment2Addressstring optionalAddress (previous relevant employment B)
length: 0–300 -
previousEmployment2WorkTasksstring optionalWork tasks, short description (previous relevant employment B)
length: 0–500 -
previousEmployment2JobTitlestring optionalJob title (previous relevant employment B)
length: 0–200 -
previousEmployment3CompanyNamestring optionalName of company (previous relevant employment C)
length: 0–300 -
previousEmployment3PeriodFromdate optionalPeriod from (previous relevant employment C)
-
previousEmployment3PeriodTodate optionalPeriod to (previous relevant employment C)
-
previousEmployment3Addressstring optionalAddress (previous relevant employment C)
length: 0–300 -
previousEmployment3WorkTasksstring optionalWork tasks, short description (previous relevant employment C)
length: 0–500 -
previousEmployment3JobTitlestring optionalJob title (previous relevant employment C)
length: 0–200 -
otherRelevantQualificationsstring optionalOther qualifications, thesis or the like, relevant to the job offered
length: 0–1000 -
commentsstring optionalComments
length: 0–2000 -
thirdPartyCvrNumberstring optionalCVR number of third party
pattern -
thirdPartyNamestring optionalName of third party
length: 0–300classification: pii -
thirdPartyAddressstring optionalAddress of third party (street and number)
length: 0–300 -
thirdPartyPostcodeAndCitystring optionalPostcode and city of third party
length: 0–200 -
thirdPartyContactPersonstring optionalContact person at third party
length: 0–200classification: pii -
thirdPartyPhoneNumberstring optionalPhone number of third party
length: 0–50 -
thirdPartyEmailstring optionalEmail of third party
length: 0–200 -
consentToShareInformationWithEmployerboolean optionalOptional per the source's own prose: withholding consent does not block the application, but may lengthen processing since SIRI will then obtain information from the applicant directly rather than the employer.
-
signaturePlacestring requiredPlace of signature (applicant)
length: 0–200 -
signatureDatedate requiredDate of signature (applicant)
-
employerCompanyNamestring requiredName of company (employer)
length: 1–300 -
employerCvrNumberstring requiredCVR number (employer)
pattern -
employerDepartmentNamestring optionalName of department/institute (if applicable)
length: 0–300 -
employerAddressstring requiredAddress (street and number) (employer)
length: 1–300 -
employerPostcodeAndCitystring requiredPostcode and city (employer)
length: 1–200 -
employerContactPersonNamestring requiredContact person (employer)
length: 1–200classification: pii -
employerContactPersonPhonestring requiredDirect phone number of contact person (employer)
length: 1–50classification: pii -
employerContactPersonEmailstring requiredEmail of contact person (employer)
length: 1–200classification: pii -
employerCoveredByCollectiveBargainingViaAssociationboolean requiredIs the employer covered by a collective bargaining agreement via a membership to an employers' association?
-
employerAssociationNamestring optionalName of the employers' association
length: 0–300 -
employerCoveredByCollectiveBargainingOtherWayboolean optionalIf not via an association, is the employer covered by a collective bargaining agreement in another way?
-
employerCollectiveBargainingOtherWayDescriptionstring optionalDescription of the other way the employer is covered by a collective bargaining agreement
length: 0–500 -
jobTitleInDenmarkstring requiredApplicant's job title in Denmark
length: 1–200 -
jobDescriptionstring requiredJob description (work tasks and roles)
length: 1–1000 -
disco08Codestring requiredPosition's classification code (DISCO-08 code)
length: 1–20 -
disco08JobFunctionstring requiredJob function related to the DISCO-08 code
length: 1–300 -
employmentStartDatedate requiredStart date of employment
-
employmentIndefiniteboolean requiredIs the employment indefinite?
-
employmentEndDatedate optionalEnd date of the employment
-
weeklyWorkingHoursnumber requiredWeekly working hours
range: 0–168 -
termsResultOfCollectiveBargainingAgreementboolean requiredAre the terms of employment the result of a collective bargaining agreement?
-
collectiveBargainingAgreementNamestring optionalName of the collective bargaining agreement governing the employment terms
length: 0–300 -
entitledToHolidayUnderHolidayActboolean requiredIs the applicant entitled to holiday under the Danish Holiday Act (ferieloven)?
-
holidayEntitlementsDescriptionstring optionalDescription of the employment's holiday entitlements
length: 0–500 -
terminationCompliesWithSalariedEmployeesActboolean requiredDo the terms of termination comply with the Danish Salaried Employees Act (funktionærloven)?
-
terminationTermsDescriptionstring optionalDescription of the employment's terms of termination
length: 0–500 -
overtimeConditionsstring optionalApplicable conditions in case of overtime
length: 0–500 -
baseSalaryOrHourlyWagenumber requiredGross figure, i.e. actual payroll cost before tax, in DKK, per the source's own instruction.
range: 0–∞classification: financial -
fixedAllowancesnumber optionalFixed allowances, gross, in DKK, if any
range: 0–∞classification: financial -
employerPaidPensionSharenumber optionalEmployer-paid share of pension, gross, in DKK, if any
range: 0–∞classification: financial -
otherEmployerPaidBenefit1string optionalThe source repeats this same row three times with no distinguishing sub-label; modelled as three independent optional entries.
length: 0–300classification: financial -
otherEmployerPaidBenefit2string optionalOther employer-paid benefit, if any — state which one (2)
length: 0–300classification: financial -
otherEmployerPaidBenefit3string optionalOther employer-paid benefit, if any — state which one (3)
length: 0–300classification: financial -
totalGrossSalaryPerHournumber optionalThe source prints both a 'per hour' and a 'per month' total-gross-salary cell; an employer states whichever matches the wage basis (hourly vs. salaried) — neither is independently marked mandatory.
range: 0–∞classification: financial -
totalGrossSalaryPerMonthnumber optionalTotal gross salary per month, in DKK
range: 0–∞classification: financial -
employeeSurnameStatedByEmployerstring requiredApplicant's surname, as stated by the employer
length: 1–200classification: pii -
employeeFirstNamesStatedByEmployerstring requiredApplicant's first name(s), as stated by the employer
length: 1–200classification: pii -
employeeDateOfBirthStatedByEmployerdate requiredApplicant's date of birth, as stated by the employer
classification: sensitive-pii -
employeeNationalityStatedByEmployerstring requiredApplicant's nationality, as stated by the employer
length: 1–100classification: pii -
employerThirdPartyCvrNumberstring optionalCVR number of third party (employer's part)
pattern -
employerThirdPartyNamestring optionalName of third party (employer's part)
length: 0–300classification: pii -
employerThirdPartyAddressstring optionalAddress of third party (employer's part, street and number)
length: 0–300 -
employerThirdPartyPostcodeAndCitystring optionalPostcode and city of third party (employer's part)
length: 0–200 -
employerThirdPartyContactPersonstring optionalContact person at third party (employer's part)
length: 0–200classification: pii -
employerThirdPartyPhoneNumberstring optionalPhone number of third party (employer's part)
length: 0–50 -
employerThirdPartyEmailstring optionalEmail of third party (employer's part)
length: 0–200 -
employerCommentsstring optionalComments (employer)
length: 0–2000 -
employerSignaturePlacestring requiredPlace of signature (employer)
length: 0–200 -
employerSignatureDatedate requiredDate of signature (employer)
Verification record
Candidate selection
Denmark stood at 4 of its 6 verticals before this cycle (Passport GOV-2244, Taxes GOV-2253, National ID GOV-2260, Business Formation GOV-2268). Each of those prior cycles' own screening passes had already flagged SIRI's AR8 form as a genuine, unauthenticated, fill-by-hand PDF candidate for Denmark's Visa vertical, while noting SIRI's other Schengen-visa route (applyvisa.um.dk) would be a confirmed duplicate of the Annex I template already modelled under several other jurisdictions (e.g. fr/france-visas/schengen-visa-application, at/bmeia/schengen-visa-application).
Before authoring AR8 directly, this cycle re-screened whether a stronger, less narrowly-scoped candidate existed: SIRI's own primary/first-time work-permit route is form AR1 (or its employer-submitted twin AR6), covering the Pay Limit Scheme, Positive Lists, Researcher, and Fast-track pathways — a much closer match to "an employed person applying for a work permit," the pattern this registry's fi/migri/residence-permit-employed-person schema already established for Finland's Visa vertical. That re-screen found AR1/AR3/AR6/AR7 are not modellable from an unauthenticated static source: SIRI's own application-forms index page (nyidanmark.dk/en-GB/Words-and-concepts/SIRI/Application-forms---SIRI) links all four only to newtodenmark.dk/AR1, which 302-redirects to forms.nyidanmark.dk/siri/Login/LoginMitId — a MitID-authenticated case-management wizard with no downloadable AcroForm or fill-by-hand specimen anywhere in its own domain. The only first-party PDFs adjacent to AR1 are a sworn-declaration signature-substitute (Declarations/Sworn-declaration-AR1.pdf) and a GDPR/data-processing prose sheet (Declarations/Engelsk-AR1-online.pdf, confirmed via a fresh pdfjs-dist extraction to carry 0 AcroForm fields) — both boilerplate attached to the online wizard, not the application's own data-entry fields. Third-party mirrors of an older AR1 layout exist (e.g. a stale, now-404 vfsglobal.com copy) but fail this registry's source-fidelity bar (not a first-party, currently-hosted source).
AR8 was authored instead, with its narrower real-world scope — sideline employment, work permits for accompanying family, and extensions of either, explicitly not covering first-time primary/commuter work permits — kept plainly disclosed in the schema's own title and description rather than characterized as a general "work permit for an employed person" schema.
Source
- Primary (English):
https://www.nyidanmark.dk/-/media/Files/SIRI/Application-forms/Work-permit-only/AR8_en.pdf— confirmed by two independentcurlfetches with a browser User-Agent, taken minutes apart: both HTTP 200,content-type: application/pdf, exactly 855,022 bytes, SHA-256-identical (75268736ea08dccec838790d5bc06d9e60906b71474baad4f07db21055bdff60).Last-Modified: Fri, 30 Jan 2026 13:11:46 GMT, matching the form-code footer printed on the PDF itself (AR8_en_30012026). - Danish-language sibling:
.../AR8_da.pdf(421,369 bytes) — the same form; the English version was used as this schema's primary source since it is SIRI's own official parallel-language specimen, avoiding a translation step. - Authority/index page:
https://www.nyidanmark.dk/en-GB/Words-and-concepts/SIRI/Application-forms---SIRI— HTTP 200, SIRI's own index of every downloadable application form by category, confirming AR8's placement under "Work" → "Work permit only" and its relationship to the sibling AR1/AR3/AR6/AR7/AR9 forms.
Extraction technique
Fetched the PDF and processed it with pdfjs-dist (v3.11.174, legacy CommonJS build, installed fresh into a scratch directory — this registry's established technique for numbered/non-fillable specimens, e.g. at/bmeia/schengen-visa-application, is/skatturinn):
getDocument(...).numPages→ 14.doc.getFieldObjects()→null;page.getAnnotations()on every one of the 14 pages → 0Widget-subtype annotations on any page. This is therefore a genuine fill-by-hand specimen with no AcroForm layer, consistent with CATALOG.md's prior characterization of this candidate.- All page text was extracted with
getTextContent(), clustered into lines by y-coordinate, and cross-walked against the source's own section numbering (Part 1: sections 1-12; Part 2: sections 1-8) to build the field list. For the salary table specifically (Part 2, Section 3, pages 9-10), raw x/y item positions were inspected directly — not just the clustered line text — to confirm each row (Base salary/Hourly wage,Fixed allowances, if any, the three repeatedOther employer paid benefitsrows,Total gross salary — per hour/per month) is a single label with one blank value cell, i.e. there is no separate printed "amount" column to split into a label/value field pair.
Field model
104 fields, split across the form's own two parts (Part 1, completed by the applicant; Part 2, completed by the employer in Denmark), plus 8 documents[] entries and 5 crossFieldValidation rules.
Two disclosed judgment calls, since this source carries no asterisk/required-marking convention at all (unlike this registry's AT Schengen-visa precedent) and no printed yes/no checkbox for whether a third party is acting on the applicant's/employer's behalf:
- Required-field determination is editorial. Fields necessary to identify the applicant/employer and process the application (name, date of birth, nationality, passport number, CVR number, salary, job details, signatures) are modelled
required: true; supplementary fields (CPR number — a first-time entrant may not yet have one; education/previous employment detail beyond the first entry; third-party contact details) are modelledrequired: false, disclosed here rather than presented as a structural fact the source itself states. - Power-of-attorney documents are
required: falsewith an explanatory label, not gated by an invented synthetic boolean. The source's own text ("If the application is submitted by a third party...") describes a real-world condition with no corresponding checkbox anywhere on the form to hang arequiredWhenon — inventing one purely to gate a document would be a synthetic field with no backing source construct, unlike this registry's precedent forapplicantIsMinorondk/um/application-for-danish-passport(which gates a printed section header's own stated age condition, not an absent yes/no checkbox for an arbitrary third-party scenario). The condition is instead disclosed in the document entry's ownlabel.
Conditional visibility. The source's own printed instruction under Section 6 ("About authorisation") states that if the offered job requires a Danish authorisation, the applicant does not need to complete Sections 7 (education) and 8 (previous employment) — modelled via visibleWhen: {field: danishAuthorisationRequired, equals: false} on each section's fields, rather than silently dropping the sections or leaving them unconditionally required.
Bounded repeating group. Section 8's "previous relevant employment" block repeats three times on the source (A/B/C, identical field layout each time) — modelled with the registry's established previousEmploymentN... bounded-flattening convention (e.g. dk/cpr/notification-of-entry's entrantN... pattern), not an open-ended array.
crossFieldValidation (5 rules). Part 2, Section 4 ("About the employee") asks the employer to restate the applicant's own surname, first name(s), date of birth, and nationality for cross-referencing — modelled as four equals comparisons against the applicant's own Part 1 fields (e.g. employeeSurnameStatedByEmployer must equal surname), the first use of an equals-operator crossFieldValidation rule in this registry (prior uses, e.g. at/bmeia/schengen-visa-application, were date-ordering greaterThanOrEqual comparisons only — one such date-ordering rule is also included here, employmentEndDate must be on/after employmentStartDate).
Mock conformance test run
Two scenarios were built under conformance/dk/siri/work-permit-application/1.0.0/ and checked against this schema's own required/requiredWhen/visibleWhen/validation/ documents[]/crossFieldValidation grammar with a disposable checker script (/tmp/pdfextract/conformance-check.mjs, not committed):
application-packet-minimal-sideline-employment.json: Anna Mueller, a German national already resident in Denmark, applying for a new work permit on the sideline-employment ground (not related to her primary job), no Danish authorisation required, no education/previous-employment detail, no third party. 0 errors.application-packet-full-accompanying-family-with-representative.json: Maria Clara Santos, a Brazilian nurse accompanying her spouse-sponsor, applying for an extension, with completed education, two previous employment entries, salary/benefits detail, a third-party representative on both the applicant's and employer's side (CVR-matched), and full employer-side cross-check fields matching the applicant's own identity data. 0 errors.- Six mutation/negative controls, each derived from the minimal scenario with exactly one defect introduced, each correctly raising exactly one error (confirming the checker is not vacuously passing):
- Removing the required
employerCvrNumber→required but missing. - Setting
employmentBasisto an out-of-enum value →enumviolation (and, as a side effect, the now-orphanedsidelineRelatedToPrimaryJobcorrectly flags as "present but not visible", confirmingvisibleWhenis enforced against the mutated state, not the original). - Setting
sidelineRelatedToPrimaryJobtotruewithout providingsidelineRelatedElaboration→requiredWhenconditional-required violation. - Setting
employmentIndefinitetofalsewith anemploymentEndDatebeforeemploymentStartDate→crossFieldValidationemploymentEndDateAfterStartDateviolation. - Changing
employeeSurnameStatedByEmployerto a value that no longer matches the applicant's ownsurname→crossFieldValidationemployeeSurnameMatchesApplicantviolation — confirming the new identity cross-check rules actually fire. - Setting
employerCvrNumberto a non-numeric value →patternviolation (^[0-9]{8}$).
- Removing the required
documents[]requiredness was checked independently (not by the packet checker, which only exercisesfields[]/crossFieldValidation): everyrequiredWhen.fieldreference was confirmed to resolve to a real field name, and the conditional gate onauthorisationDocumentation(danishAuthorisationRequired: true) was confirmed to evaluate correctly against both conformance scenarios (falsein both, so the document correctly does not become required in either).
The schema was also validated against the GovSchema v0.3 meta-schema with node tools/validate.mjs and node tools/validate-ajv.mjs (both pass), and against node tools/verify-sources.mjs registry/dk/siri/work-permit-application/1.0.0 (0 warnings, 3 URLs checked, 0 allowlisted, all clear).
Pre-PR re-verification
Immediately before finalizing this record, the primary source PDF was re-fetched live a second time in this same session: HTTP 200, content-type: application/pdf, exactly 855,022 bytes, SHA-256-identical to the first fetch. The authority/index page was re-checked live and returns HTTP 200. node tools/verify-sources.mjs registry/dk/siri/work-permit-application/1.0.0 reports all clear (0 warnings) on this same re-verification pass.
Path to a verified claim (next step)
To advance from status: draft to status: verified, a future reviewer would: confirm the DISCO-08 job-classification code's actual format constraints against SIRI's own published code list (this schema deliberately leaves disco08Code as an unconstrained string, since the source form states no format rule of its own beyond "state the position's classification code"); and consider whether SIRI's own downloadable AR9/ESS1/JS1/MF4 forms (each confirmed to carry official PDF+Word downloads on the same index page) are a stronger DMV-adjacent or family-permit candidate for a future cycle, alongside re-attempting the AR1/AR6 MitID-gated wizard via a genuinely different technique (e.g. a leaked or third-party-republished specimen with real field labels, which was not found this cycle).
Scope and jurisdiction notes
Gives Denmark (GovSchema's 33rd jurisdiction) its 5th of 6 verticals (Passport, Taxes, National ID, Business Formation, Visa); DMV remains Denmark's only open vertical, previously screened and set aside as a poor candidate (GOV-2253: Færdselsstyrelsen's P23 is a shared multi-party record card, not a citizen-facing intake form; Motorstyrelsen's re-registration flow is exclusively login-gated with no static fallback) — a future cycle should look for a different DMV candidate (e.g. a dedicated new-vehicle-registration or learner's-permit form) rather than re-attempting those two.
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 Styrelsen for International Rekruttering og Integration (Danish Agency for International Recruitment and Integration) or any government. The authoritative source is always the live government form and its official instructions.