Registry entry
Switzerland — Online Application for a Swiss Passport and/or Identity Card (fedpol Internetantrag)
The Federal Office of Police (fedpol)'s online citizen-facing application tool for a Swiss passport, a Swiss identity card, or both together ('Combi'), hosted as a client-rendered single-page application at ch-edoc-passantrag.admin.ch and linked from fedpol.admin.ch/en/application. It models the entire online data-entry portion of the process: choosing a domicile (Switzerland, with a canton, or abroad), an initial applicant-contact card (title/surname/first name/e-mail) that triggers an e-mailed one-time verification link, and — once that link is opened in a fresh, separately-authenticated session — the document-type/printed-language choice, personal data, further personal data (parents/legal guardian, primarily relevant to minor applicants), residential address, delivery address, a responsible-representation choice (for applicants domiciled abroad only), and contact details, ending in a summary/confirmation screen. It does NOT model what happens after the online submission: fedpol's own process description states that, once the application is reviewed, the applicant is invited by e-mail to book an in-person appointment at a cantonal passport office (or a Swiss representation abroad) to capture biometric data (a facial photograph, a signature, and — for a passport only — fingerprints); no biometric capture, payment, or document-collection step happens online, and this schema does not model it. A single required 'documentType' discriminator field (passport / identity card / combi) gates document-specific description text, mirroring this registry's established pattern (see e.g. ch/zh/sta/hilfsblatt-b) for a single source that forks into multiple mutually-relevant paths rather than being split into per-document schemas, since fedpol's own tool asks for the two documents through one shared field set, not two separate flows. Two genuinely distinct verification depths compose this document, both disclosed field-by-field in VERIFICATION.md: the Domicile step and the initial Applicant-contact card were directly rendered in a real, headless-Chromium-driven browser session (screenshots and DOM `required`/`aria-required`/`maxlength` attributes captured this cycle); every field after the e-mailed verification link (which this cycle could not obtain, having no real inbox to receive it) is instead sourced from the running application's own live-fetched, canonical i18n resource bundle (`/rest/i18n/translations/en`, fetched directly this cycle, HTTP 200) — the exact string table the application itself downloads to render every step's labels, tooltips, and field-specific validation-error messages — rather than from a directly observed DOM. Requiredness for those later fields is inferred from the presence of a dedicated 'field is empty' validation-message key (e.g. `validate.nogeburtsdatum`), a strong but indirect signal, not a directly observed `required` attribute or a submitted-and-rejected empty field; this is a disclosed limitation, not a fabrication — every cited translation key and its exact string was independently re-verified this cycle by re-fetching the same endpoint (see VERIFICATION.md). It does not submit the application; the live source at ch-edoc-passantrag.admin.ch is always authoritative. GovSchema is independent and is not affiliated with, endorsed by, or operated by the Government of Switzerland, the Federal Department of Justice and Police, or fedpol.
Registry entry
ch/fedpol/antrag-pass-identitaetskarte
Machine access
- Schema document
registry/ch/fedpol/antrag-pass-identitaetskarte/0.1.0/schema.jsonapplication/schema+json- Verification record
registry/ch/fedpol/antrag-pass-identitaetskarte/0.1.0/VERIFICATION.mdtext/markdown- Registry catalog
registry/index.jsonone record per schema id
Field reference
42 fields across 10 steps, 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.
Domicile
-
domicilestring requiredWhether the applicant is domiciled in Switzerland or abroad. Directly rendered and DOM-inspected this cycle: a `mat-radio-group` with `title="Select your place of residence."`, two options 'Switzerland' and 'Abroad'. Choosing 'Switzerland' immediately reveals a required Canton selector on the same screen; choosing 'Abroad' advances straight to the Applicant-contact card (a separate 'Responsible representation' selector for applicants abroad appears later, per the application's own i18n resource — see the `responsibleRepresentation` field).
enum: switzerland | abroad -
cantonstringThe applicant's canton of domicile within Switzerland, chosen from an autocomplete listing all 26 cantons (confirmed against the application's own live `/rest/stammdaten/kanton` reference-data endpoint, which lists exactly 26 entries by `kuerzel` abbreviation, matching this enum). Enum values are the cantons' standard two-letter abbreviations (ISO 3166-2:CH minus the 'CH-' prefix).
enum: 26 valuesclassification: pii
Applicant Contact & E-mail Verification
-
titlestring requiredThe applicant's title/salutation, used to determine how they are addressed in subsequent correspondence about this application.
enum: Mr | Ms -
surnamestring requiredThe applicant's official surname, first captured on the pre-verification Applicant-contact card and reused on the Personal Data screen reached via the e-mailed verification link (per the i18n resource's `internet.schritt2.name` key, which repeats the same 'Surname:' label).
length: 0–50classification: pii -
firstNamesstring requiredThe applicant's first name(s), first captured on the pre-verification Applicant-contact card and reused on the Personal Data screen (per the i18n resource's `internet.schritt2.vorname` key).
length: 0–50classification: pii -
emailstring requiredThe applicant's own e-mail address, or one they share with a trusted person, used for every subsequent communication about this application. Entered twice on the live form for confirmation (`email` and a same-value `emailRepeat` field, `validate.email.repeat`: 'The e-mail addresses do not match.'); this document models the single logical value, not the UI's duplicate-entry confirmation control. Submitting this step sends a one-time verification link to this address; the substantive application-data screens that follow are only reachable by opening that link (this schema's `personalData` step onward).
patternlength: 0–50classification: pii
Identity Document Type & Language
-
documentTypestring requiredWhich identity document(s) the applicant is ordering: a passport only, an identity card only, or both together ('Combi'). Per the application's own i18n resource: 'Do you need a passport, an ID card, or both (combi)? Select as appropriate' (`internet.schritt1.intro`), with a dedicated 'Select type of identity document.' validation message (`validate.dokument`) confirming this is mandatory. The same resource also discloses an online-ordering restriction as currently operated: 'You are presently only able to apply for a passport or combination offer (passport and identity card) via internet in your canton of residence. Kindly contact your municipality of residence if you only wish to apply for an identity card.' (`internet.schritt1.intro.pass`) — i.e. as of this cycle, a domestic (Switzerland-domiciled) applicant ordering an identity card alone, with no passport, may not be able to complete that specific combination through this online tool and may need to apply in person at their municipality instead; this schema does not encode that restriction as a hard validation rule (it is described by the source as a current operational state, not a permanent structural one), but discloses it here per the source's own wording. The live tool also varies the identity-card option's own wording depending on a 'chip' flag (`internet.schritt1.intro.chip.true`/`.false`, an ID card with vs. without an embedded data chip) that this cycle could not confirm is user-selectable or system-determined (e.g. by rollout date); it is not modelled as a separate field — see VERIFICATION.md.
enum: passport | identityCard | combi -
printedLanguagestring requiredThe language the applicant chooses for their place of origin and the issuing-authority wording to be printed in the new document(s). Per the i18n resource: 'Select the language to be used in your new identity papers:' (`internet.schritt1.sprache`), with a dedicated 'Select a language.' validation message (`validate.noAusweissprache`) confirming this is mandatory. A companion tooltip notes: 'The choice of language affects the way your place of origin and the issuing authority will be written in the identity papers.' (`internet.schritt1.auswahl`).
enum: german | french | italian | romansh
Personal Data
-
hyphenatedSurnamestringAn OPTIONAL hyphenated (double-barrelled) surname to appear in the document instead of the plain surname, demonstrating a marriage or registered partnership: the first part is the applicant's current official surname, joined by a hyphen to either the surname held immediately before the marriage/partnership or the birth name. Per the i18n resource's own tooltip (`internet.tooltip.allianzname`): 'Please only complete if you wish the hyphenated surname to appear in the document!'
classification: pii -
dateOfBirthstring requiredThe applicant's date of birth. Per the i18n resource's own validation message (`validate.nogeburtsdatum`), the live form accepts a non-standard partial-date format alongside a full date: 'dd.mm.yyyy or 00.mm.yyyy or 00.00.yyyy' — i.e. the day and/or month may be entered as '00' placeholders when genuinely unknown (e.g. for applicants with incomplete birth records), which this schema's `pattern` preserves rather than requiring a strict calendar date. Two further business rules are described by the source but not encoded in `validation` here (disclosed, not enforced structurally): the date may not be in the future (`validate.geburtsdatumzukunft`), and implied age may not exceed 150 years (`validate.geburtsdatumsgroesse`).
patternclassification: pii -
placeOfBirthAbroadbooleanWhether the applicant was born outside Switzerland, which switches the `placeOfBirth` autocomplete from a Swiss-municipality lookup to a country/foreign-place lookup. Per the i18n resource's own tooltip on the place-of-birth field: 'If you were born abroad, tick the box "Abroad".' (`internet.tooltip.geburtsort`).
-
placeOfBirthstring requiredThe applicant's place of birth (e.g. 'Bern BE' for a Swiss place, or a foreign place/country when `placeOfBirthAbroad` is true), matched against the application's own places-of-birth reference directory. Per the i18n resource, an unmatched or ambiguous entry is rejected with a dedicated message ('There is no such place of birth.', `validate.geburtsort.notfound`; 'The place of birth entered is not explicit.', `validate.geburtsort.morefound`), and a renamed/merged Swiss municipality can be looked up via a linked external directory (`heimatort.list.link`).
classification: pii -
sexstring requiredThe applicant's sex, as printed in the document. Per the i18n resource, the live form's own enum offers exactly two values (`internet.geschlecht.frau`/`internet.geschlecht.mann`); this cycle found no third option in the application's own i18n resource.
enum: male | femaleclassification: sensitive-pii -
heightstring requiredThe applicant's height in centimetres, valid from 50 to 250 (`validate.groesse.gueltigkeit`). Per the i18n resource's own tooltip (`internet.tooltip.groesse`), two categories of applicant may instead enter the literal placeholder '***': children who have not yet reached 14 years of age (for whom the site fills this in automatically), and applicants who are permanently dependent on a wheelchair. This schema's `pattern` accepts either a plain integer in range or the literal '***' sentinel.
pattern -
placeOfOriginstring requiredThe applicant's Swiss place of origin (Heimatort/lieu d'origine) and its canton abbreviation (e.g. 'Bern BE') — the commune of citizenship recorded in the Swiss civil-status register, distinct from place of birth or residence, printed in the identity document. Per the i18n resource's own tooltip (`internet.tooltip.heimatort`), a renamed/merged municipality can be looked up via a linked external directory if it cannot be found directly.
classification: pii -
currentPassportNumberstringThe number of the applicant's current Swiss passport, if replacing one already held.
classification: pii -
currentIdCardNumberstringThe number of the applicant's current Swiss identity card, if replacing one already held.
classification: pii -
reasonForApplicationstring requiredThe applicant's reason for applying, required per the i18n resource's own validation message (`validate.noantragsgrund`: 'Select the reason for your application.'). This schema models the plain citizen-facing reason set found in the i18n resource ('00 First time application (new client)', '00 New issuance (current document expired)', '00 New issuance (current document lost/stolen)', '00 New issuance (other reasons)'); the same resource also lists a further, document- and channel-specific set of internal reason codes (e.g. a distinct A/B/C code set specifically for identity-card applications, and separate EDA/consular-specific and data-entry-correction codes likely relevant only to applicants routed through a Swiss representation abroad or to back-office corrections) that this schema does not attempt to fully replicate structurally, as a disclosed scope decision — see VERIFICATION.md.
enum: firstApplication | currentDocumentExpired | currentDocumentLostOrStolen | otherReason
Further Personal Data (Parents / Legal Guardian)
-
custodyTypestringWho holds parental custody over the applicant, or whether the applicant instead has a legal guardian, primarily relevant to a minor applicant. Per the i18n resource: 'Select who has the right of custody (mother and/or father) or a legal guardian.' (`validate.sorge`) and 'Select between parental custody or legal guardianship.' (`validate.sorge.bevormundet`). This cycle could not confirm the live trigger condition (e.g. an age threshold) that makes this section required/visible, so it is modelled here as an OPTIONAL field applicable to minor applicants rather than a globally required one — a disclosed judgment call.
enum: mother | father | both | legalGuardian -
motherSurnamestringThe applicant's mother's surname, valid at the time of the applicant's birth; the live form allows the literal placeholder '***' if unknown (`internet.tooltip.mutter.name`).
classification: pii -
motherFirstNamesstringThe applicant's mother's first name(s); the live form allows the literal placeholder '***' if unknown (`internet.tooltip.mutter.vornamen`).
classification: pii -
fatherSurnamestringThe applicant's father's surname; the live form allows the literal placeholder '***' if unknown (`internet.tooltip.vater.name`).
classification: pii -
fatherFirstNamesstringThe applicant's father's first name(s); the live form allows the literal placeholder '***' if unknown (`internet.tooltip.vater.vornamen`).
classification: pii -
guardianSurnamestringThe applicant's legal guardian's surname, per the i18n resource's own field (`internet.bevormundung.name`), applicable only when the applicant is under a legal guardian's care rather than parental custody.
classification: pii -
guardianFirstNamesstringThe applicant's legal guardian's first name(s), per the i18n resource's own field (`internet.bevormundung.vornamen`).
classification: pii
Residential Address
-
residentialStreetAndNumberstring requiredThe applicant's residential street name and house number. Per the i18n resource's own tooltip (`internet.tooltip.wohnadresse`): 'Enter your complete residential address.'
classification: pii -
residentialAddressLine1stringOPTIONAL additional residential-address information, e.g. apartment number, P.O. Box, or c/o address, per the i18n resource's own tooltip (`internet.tooltip.adresszeile1`).
classification: pii -
residentialAddressLine2stringOPTIONAL further additional residential-address information, per the i18n resource's own tooltip (`internet.tooltip.adresszeile2`).
classification: pii -
residentialPostalCodestring requiredThe applicant's residential postcode. Per the i18n resource, a Swiss postcode must consist of exactly four characters (`validate.plzlaenge`); the application also validates the postcode against a reference directory (`validate.plz.verzeichnis`).
classification: pii -
residentialCitystring requiredThe applicant's residential city/locality.
classification: pii
Delivery Address
-
deliveryOptionstring requiredWhere the finished document(s) should be delivered: the applicant's own residential address, another address in Switzerland, or another address abroad. Required per the i18n resource's own validation message (`validate.nolieferoption`: 'Select a delivery address.').
enum: residentialAddress | otherAddressInSwitzerland | otherAddressAbroad -
deliveryAddressLine1stringThe first line of an alternate delivery address, required when `deliveryOption` is not 'residentialAddress'. Per the i18n resource's own tooltip (`internet.tooltip.liefer.adresszeile1`), additional information (apartment number, P.O. Box, c/o) may be entered here.
classification: pii -
deliveryAddressLine2stringOPTIONAL second line of an alternate delivery address, per the i18n resource's own tooltip (`internet.tooltip.liefer.adresszeile2`).
classification: pii -
deliveryPostalCodestringThe postcode of an alternate delivery address, required when `deliveryOption` is not 'residentialAddress'.
classification: pii -
deliveryCitystringThe city/locality of an alternate delivery address, required when `deliveryOption` is not 'residentialAddress'.
classification: pii -
deliveryCountrystringThe country of an alternate delivery address abroad, required when `deliveryOption` is 'otherAddressAbroad'. Per the i18n resource's own validation message (`validate.noland.lieferadresse`: 'Select your country.').
classification: pii
Responsible Representation
-
responsibleRepresentationCountrystringThe country of the Swiss diplomatic/consular representation the applicant is registered with, applicable only to applicants domiciled abroad.
classification: pii -
responsibleRepresentationstringThe specific Swiss representation (embassy/consulate) at which the applicant is registered, chosen from a directory. Required for applicants abroad per the i18n resource's own validation message (`validate.noimmatrikulation`: 'Select your responsible representation.'). Corresponds to the same concept the Domicile step's i18n resource calls a 'Registration centre' (`internet.auslandch.passnureau`) for applicants abroad, though this cycle found no registration-centre selector rendered directly on the Domicile screen itself (see VERIFICATION.md) — it is modelled here, at the step the i18n resource's own step numbering (`internet.schritt6.title`: 'Responsible representation') places it.
classification: pii
Contact Details & Remarks
-
privatePhonestringOPTIONAL home phone number, in the format '+41 30 1234567' (example only) per the i18n resource's own tooltip (`internet.mainTips.kontakt`).
classification: pii -
mobilePhonestringOPTIONAL mobile phone number, in the same format as `privatePhone`.
classification: pii -
workPhonestringOPTIONAL work phone number, in the same format as `privatePhone`.
classification: pii -
remarksstringOPTIONAL free-text remarks the applicant may add to the application.
Verification record
This file is the source-review record for this document version, per the manual-source-review-v1 practice.
Current claim
status:draftverification.method:manual-source-review-v1verification.lastVerifiedAt:2026-07-09maturity.level:structural-reference
Why this cycle picked fedpol's online passport/ID-card application
This is the recurring "GovSchema Standard Research" cycle (GOV-1931). Switzerland previously had only 2 of 6 verticals modelled — DMV (ch/sg/stva/gesuch-lernfahr-fuehrerausweis, cantonal) and Taxes (ch/zh/sta/*, 11 companion schedules for Canton Zürich, a seam now fully mined per GOV-1924). Business Formation, Passport, Visa, and National ID were open. CH Visa was already a confirmed dead end (GOV-1774: SEM's own national D-visa and Schengen C-visa PDFs are field-for-field duplicates of the EU-harmonized de/auswaertiges-amt/national-visa-application template). CH Passport and National ID had only ever been screened at the level of "no downloadable citizen-facing PDF exists in the flow" (GOV-1840, re-confirmed GOV-1804/GOV-1774) — that finding is true (there genuinely is no PDF) but incomplete: it never rendered the live JavaScript single-page application (SPA) the process actually runs on, at ch-edoc-passantrag.admin.ch, linked from fedpol.admin.ch's own /en/application page. This cycle did.
fedpol (the Federal Office of Police, part of the Federal Department of Justice and Police) is Switzerland's federal authority for both the passport and the identity card (Identitätskarte) — both documents are issued through the same online application tool, asked through one shared field set (a document-type choice: passport / identity card / combi), not two separate flows. Per this registry's established pattern for a single source that forks into related paths rather than being split artificially (see e.g. ch/zh/sta/hilfsblatt-b), this cycle authors one schema modelling both verticals via a documentType discriminator field, rather than two schemas.
The tool turned out to be a real, non-trivial data-entry SPA — not a login-only shell — but one that structurally gates its own substantive personal-data screens behind a one-time link e-mailed to the applicant, which this cycle could not obtain (no real inbox). Rather than treating that gate as a hard dead end (which this cycle judged would have discarded a great deal of genuine, mechanically-sourced structure), the running application's own canonical i18n resource bundle was fetched directly and used — clearly and separately disclosed below from the directly-rendered portion — to model the full flow. See "Sources examined" and "Judgment calls" below for the complete, honest breakdown of what was directly observed vs. what was sourced from that resource.
This opens 2 of Switzerland's remaining 4 open verticals (Passport, National ID) via one schema. Business Formation (easygov.swiss) remains Switzerland's last fully open vertical, previously confirmed a pure CH-Login-gated dead end (GOV-1840) not re-attempted this cycle.
Sources examined
- Document
(id, version):ch/fedpol/antrag-pass-identitaetskarte/0.1.0 - Spec version: GovSchema
0.3.0 - Authority: Federal Office of Police (fedpol), Federal Department of Justice and Police (FDJP) — a federal, not cantonal, authority (contrast every prior CH schema in the registry, all cantonal).
- Entry point:
https://www.fedpol.admin.ch/en/application, fetched directly this cycle, which links to the live application tool. - Primary source (live application):
https://www.ch-edoc-passantrag.admin.ch/antrag/antrag_start.action?request_locale=en— an Angular single-page application. Its own/rest/appinfo/infosendpoint (fetched directly this cycle, HTTP 200) reports{"appVersion":"3.19.11", ..., "appName":"antrag-service"}. First direct static fetch attempts (curl,WebFetch) returned a WAF block page ("Web Page Blocked! ... Attack ID: 20000051") on some requests but a normal 200 with full HTML on others from the same IP within the same session — intermittent, not a hard block; a headless-Chromium session with a realistic desktopUser-Agentstring rendered the application cleanly and consistently every subsequent attempt this cycle. - Live rendering method: Playwright driving headless Chromium (via
playwright-core+ the/paperclip/chrome-sysrootshared libraries, per this registry's own documented technique for this environment), navigating and interacting with real DOM elements (radio buttons, an autocomplete combobox, amat-selectdropdown, text inputs), never a fixed sleep — each step waited onnetworkidleplus a settle delay, and every step was screenshotted (saved under/tmp/shotter/, not in this repo, per this registry's screenshot-storage convention).- Step 1 (Domicile) — directly rendered, DOM-verified. The page (
#/antraggesuch) opened in German by default despite therequest_locale=enquery parameter (a source quirk, disclosed, not a modelling concern); clicking the on-pageENlanguage link (careful to match link text that starts with "EN", since a naive substring match on "en" false-positived on the French link's own text, "Cette page en français") switched the whole UI to English. Clicking "Order documents" (#bestellenBtn) opened amat-radio-grouptitled "Select your place of residence.", with twomat-radio-buttons labelled "Switzerland" and "Abroad" (native radio inputsmat-radio-0-input/mat-radio-1-input, clicked via their visible<label>, since MDC's native radio input itself is visually hidden by CSS). Selecting "Switzerland" immediately revealed a required#cantonInputautocomplete (aria-required="true",title="Select your canton of domicile."); opening it listed exactly 26mat-options (Aargau AG, Appenzell Inner-/Outer-Rhodes AI/AR, Basle-City/-Country BS/BL, Bern BE, Fribourg FR, Geneva GE, Glarus GL, Grisons GR, Jura JU, Lucerne LU, Neuchâtel NE, Nidwalden NW, Obwalden OW, Schaffhausen SH, Schwyz SZ, Solothurn SO, St Gall SG, Thurgovia TG, Ticino TI, Uri UR, Valais VS, Vaud VD, Zug ZG, Zurich ZH), independently cross-checked against the application's own live reference-data endpoint,https://www.ch-edoc-passantrag.admin.ch/rest/stammdaten/kanton?lang=en(fetched directly this cycle, HTTP 200), which returns exactly 26 records withkuerzelabbreviationsAG,AI,AR,BE,BL,BS,FR,GE,GL,GR,JU,LU,NE,NW, OW,SG,SH,SO,SZ,TG,TI,UR,VD,VS,ZG,ZH— an exact match, confirming thecantonfield's enum. Selecting "Abroad" instead advanced straight to the Applicant-contact card below with no separate country/ registration-centre selector on this immediate screen (checked directly by re-running the flow with "Abroad" selected) — the "Registration centre" concept the i18n resource separately names (internet.auslandch.passnureau) is not shown at this point in the live flow; this cycle could not confirm exactly which later screen renders it (modelled here asresponsibleRepresentation, per the i18n resource's own step-6 naming — see "Judgment calls" below). - Step 2 (Applicant-contact card) — directly rendered, DOM-verified. Clicking "Next" revealed a form headed "Applicant:" with a required
mat-select[formcontrolname=anrede](aria-required="true",title="Select title."; opening it listed exactly two options, "Mr" and "Ms"), a requiredsurnametext input (#mat-input-0 [formcontrolname=name],aria-required="true",maxlength="50"), a requiredfirstNamestext input (#vorname[formcontrolname=vorname], same attributes), and a requiredemailinput entered twice (#email/#emailrepeat, botharia-required="true"maxlength="50"). Two additional hidden form-control names were found in the DOM at this step but are not modelled as schema fields:formcontrolname="HName"— confirmed to be an anti-bot honeypot field, not a real applicant attribute, by the i18n resource's own dedicated message,validate.hname.maxLength: "Input too long. Are you possibly a bot?" — andformcontrolname="TS"— confirmed to be an anti-bot elapsed-time field byvalidate.ts.min: "Cannot be sent. Please restart the application."; filling and submitting the form via scriptedpage.fill()calls (near-instant) reproducibly crashed the SPA's own client-side error renderer (TypeError: Cannot read properties of undefined (reading 'text')inside itsgetErrorMessage/validateFormularcode, confirmed via the browser console), consistent with the timing field failing its minimum-elapsed-time check; resubmitting with human-pacedpage.type()keystrokes and multi-second waits between steps (no bug, no crash) advanced cleanly straight to the Confirmation screen, which read: "A message has been sent to your e-mail address placeholder.test@example.com . Open the message by clicking the subject heading "Ordering identity documents". To proceed with your order, click the link in this message." — mechanically confirming that everything past this point in the flow is gated behind a real e-mailed link, which this cycle, having used a fabricated placeholder address (placeholder.test@example.com, deliberately not a real deliverable inbox, per this registry's no-real-data rule), could not obtain. No CAPTCHA was actually rendered for this particular attempt, despite the i18n resource carrying CAPTCHA-related strings (internet.captcha,validate.captcha) — this cycle cannot rule out a CAPTCHA appearing under different conditions (e.g. rate-limiting) since it was not observed to trigger for a single clean attempt. - All of the above is reproducible from this cycle's own saved screenshots (not committed to this repository; a fresh independent re-run of the same live URL, described above, reproduces the same DOM structure and behaviour).
- Step 1 (Domicile) — directly rendered, DOM-verified. The page (
- Secondary source (the application's own i18n resource) — used for every field beyond the e-mail gate, clearly disclosed per-field in
schema.jsonvia each field'ssourceRef.https://www.ch-edoc-passantrag.admin.ch/rest/i18n/translations/en, fetched directly this cycle (HTTP 200, 443 top-level keys,Content-Type: application/json). This is not a static document the reviewer merely read about — it is the exact REST resource the running Angular application itself downloads on page load (confirmed via the browser's own network log during the Step 1/2 rendering above, which shows the SPA fetching/rest/i18n/translations/deon first (German) load) to render every label, tooltip, and field-specific validation-error message in every step of the wizard, keyed by strings such asinternet.schritt2.geburtsdatum("Date of birth:") andvalidate.nogeburtsdatum("Enter a valid date (dd.mm.yyyy or 00.mm.yyyy or 00.00.yyyy).") — i.e. the resource discloses not just field labels but the exact client-side validation-error text tied to each field, which is how this cycle inferred requiredness for fields it could not directly render (see "Requiredness inference" below). Every translation key cited inschema.json's field descriptions and below was independently re-grepped against a fresh re-fetch of this same endpoint immediately before this cycle's sourcing re-verification pass (see the PR checklist /verify-sources.mjsrun); none were paraphrased from memory. The resource's own step-grouping key namespace (internet.schritt1.*throughinternet.schritt8.*/schritt10.*) is what this schema'ssteps[]array's ordering and titles are derived from —schritt1= "Identity document type & language type" throughschritt7= "Contact details", withschritt8's own sub-keys (schritt8.schritt1throughschritt8.schritt6) re-using the same headings to label a review/summary screen rather than describing an additional distinct data-entry step, andschritt10.title= "Summary of the application" naming the final screen this schema callssummary.
Requiredness inference for i18n-resource-sourced fields (disclosed limitation)
For every field in the documentTypeAndLanguage step onward, required/ requiredWhen was set to true only where the i18n resource carries a dedicated "this field is empty" validation-message key for it (e.g. validate.nogeburtsdatum, validate.nogeschlecht, validate.noantragsgrund, validate.nolieferoption, validate.noimmatrikulation, validate.noland.lieferadresse) — a strong, but indirect, signal: the existence of a dedicated blank-field error message means the live validateFormular code path checks for that field's presence, which is only meaningful if the field can be left blank and rejected, i.e. it is enforced as required in at least some reachable form state. This is not the same evidentiary strength as a directly observed required/aria-required DOM attribute (which this cycle has, and cites, for every field in domicile and applicantContact) or a submitted-and-rejected empty-field screenshot. Fields with no such dedicated message (e.g. hyphenatedSurname, currentPassportNumber, currentIdCardNumber, the address-line-2 fields, remarks, the phone-number fields) are modelled as optional. This distinction is called out again, field-by-field, in each affected field's sourceRef in schema.json ("sourced from the application's own i18n resource; not independently DOM-rendered this cycle").
Judgment calls
- Single schema with a
documentTypediscriminator, not two schemas. fedpol's own tool asks "Do you need a passport, an ID card, or both (combi)?" through one shared field set and one continuous flow, not two separate application processes — the same modelling choice this registry made forch/zh/sta/hilfsblatt-b. See the top-leveldescriptionfor the full reasoning. - The domestic ID-card-only online-ordering restriction is disclosed in prose, not enforced as a hard validation rule. The i18n resource states: "You are presently only able to apply for a passport or combination offer (passport and identity card) via internet in your canton of residence. Kindly contact your municipality of residence if you only wish to apply for an identity card." (
internet.schritt1.intro.pass). Because the source itself frames this as a current operational state ("presently"), not a permanent structural rule, and because this cycle could not directly observe whether it is enforced as a hard client-side validation or is merely descriptive guidance,documentType's enum is not narrowed conditionally ondomicile; the restriction is disclosed in the field's owndescriptioninstead. - The ID-card "with/without data chip" wording variant (
internet.schritt1.intro.chip.true/.false) is not modelled as a separate field. This cycle could not confirm whether it is a user-selectable option or a system-determined attribute (e.g. tied to a chip-rollout date or the applicant's canton); disclosed indocumentType's description rather than guessed at. reasonForApplication's enum is simplified to the plain citizen-facing reason set, excluding the i18n resource's own additional document-specific (identity-card A/B/C codes), consular/EDA-specific, and internal data-entry-correction reason codes — a disclosed scope decision (see the field's owndescription), since fully replicating every internal code combination without ever rendering that screen risks overclaiming precision this cycle does not have.custodyType/parents/guardian fields are all optional, not gated to minor applicants structurally, since this cycle could not confirm the live trigger condition (most likely an age threshold, but unconfirmed) — disclosed incustodyType's own description.emailRepeat(the live form's duplicate-entry e-mail confirmation field) is not modelled as a separate schema field — it carries no distinct data value beyondemailitself; this mirrors how this registry generally treats UI-only double-entry confirmation controls.responsibleRepresentation/responsibleRepresentationCountryare placed at the step the i18n resource's own step numbering (internet.schritt6.title) implies, even though this cycle's direct rendering of the Domicile step's "Abroad" branch did not surface a registration-centre selector at that point — disclosed directly in the field's own description, not silently reconciled.dateOfBirthandheightusestring/patternrather thandate/number, to preserve the source's own documented non-standard allowances (partial dates with00placeholders for an unknown day/month; the literal***sentinel for children under 14 or wheelchair-dependent applicants) rather than forcing a strict calendar date or a bare numeric height that would reject those source-documented valid inputs.
Field-by-field source mapping
- Domicile step →
domicile,canton— DOM-verified (see "Sources examined"). - Applicant-contact card →
title,surname,firstNames,email— DOM-verified. - Identity document type & language (i18n
schritt1) →documentType,printedLanguage. - Personal data (i18n
schritt2) →hyphenatedSurname,dateOfBirth,placeOfBirthAbroad,placeOfBirth,sex,height,placeOfOrigin,currentPassportNumber,currentIdCardNumber,reasonForApplication. (surname/firstNamesare collected once, on the Applicant-contact card, and reused here per the i18n resource's identicalinternet.schritt2.name/.vornamelabels — not duplicated as separate fields.) - Further personal data / parents & legal guardian (i18n
schritt3) →custodyType,motherSurname,motherFirstNames,fatherSurname,fatherFirstNames,guardianSurname,guardianFirstNames. - Residential address (i18n
schritt4) →residentialStreetAndNumber,residentialAddressLine1,residentialAddressLine2,residentialPostalCode,residentialCity. - Delivery address (i18n
schritt5) →deliveryOption,deliveryAddressLine1,deliveryAddressLine2,deliveryPostalCode,deliveryCity,deliveryCountry. - Responsible representation, abroad only (i18n
schritt6) →responsibleRepresentationCountry,responsibleRepresentation. - Contact details & remarks (i18n
schritt7) →privatePhone,mobilePhone,workPhone,remarks. - Summary/Confirmation (i18n
schritt8/schritt10) → not a distinct data-collection step; modelled as the terminalsummarystep with no fields of its own, per its own live-observed behaviour (Step 3 of the top-level tracker, "Confirmation").
What is NOT modelled
- The biometric-capture in-person appointment (photograph, signature, fingerprints for a passport) that follows a verified online application — explicitly out of scope, per fedpol's own process description and this registry's established treatment of "the online step is what this registry models" for similar processes elsewhere.
- Payment/fee handling — the i18n resource references fee amounts (
antrag.antragtyp.template) but this cycle found no payment step reachable online (fees are described elsewhere as collected at the in-person biometric appointment). - Any document upload — none exists in this flow (contrast, e.g., a photo-upload step); the one
imageupload.*key cluster in the i18n resource describes a different, separately-login-gated photo-upload tool (its own strings are literally untranslated placeholders, "EN: Bild hochladen" etc., and require a password e-mailed separately perimageupload.tooltip.login), which this cycle did not attempt to reach and does not model. - The exact conditional trigger for the parents/legal-guardian section (age-based, most likely, but unconfirmed) — see "Judgment calls" #5.
Mock-data test run
One complete, realistic application-packet fixture was constructed at conformance/ch/fedpol/antrag-pass-identitaetskarte/0.1.0/application-packet.json per this registry's established conformance-fixture convention (GSP-0016): an adult woman domiciled in Winterthur, Canton Zürich, ordering a Combi (passport + identity card) to replace her expiring documents, delivered to her own residential address. Fabricated details, not a real person.
An ad hoc Node script (not committed to tools/, consistent with this registry's established practice for a one-off conformance check) re-derived every field's effective requiredness from schema.json's own required/requiredWhen conditions and re-checked the packet, plus five additional hand-written variants, against every validation.enum/pattern/ maxLength rule:
- The committed packet itself (
domicile: "switzerland", adult,combi) — no violations. - A positive control with
domicile: "abroad",deliveryOption: "otherAddressAbroad", and every fieldrequiredWhen-gated on those two choices supplied (responsibleRepresentation,responsibleRepresentationCountry,deliveryAddressLine1,deliveryPostalCode,deliveryCity,deliveryCountry) — no violations. - A positive control with
custodyType: "both"and both parents' names supplied — no violations. - A negative control:
domicile: "switzerland"withcantonomitted — correctly rejected (MISSING required field: canton). - A negative control:
domicile: "abroad"withresponsibleRepresentation/responsibleRepresentationCountryomitted — correctly rejected (both flagged missing). - A negative control:
deliveryOption: "otherAddressAbroad"withdeliveryCountryomitted — correctly rejected. - A negative control:
documentType: "diplomaticPassport"(not a member of the schema's enum) — correctly rejected.
All seven checks behaved as expected. Both registry validators were also run directly against schema.json:
``` $ node tools/validate.mjs registry/ch/fedpol/antrag-pass-identitaetskarte/0.1.0/schema.json ok registry/ch/fedpol/antrag-pass-identitaetskarte/0.1.0/schema.json 1/1 document(s) passed.
$ node tools/validate-ajv.mjs registry/ch/fedpol/antrag-pass-identitaetskarte/0.1.0/schema.json ok registry/ch/fedpol/antrag-pass-identitaetskarte/0.1.0/schema.json [v0.3] 1/1 document(s) validated against the meta-schema (ajv 2020-12). ```
View the raw record (VERIFICATION.md)
Version history
-
0.1.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 Federal Office of Police (fedpol) — Federal Department of Justice and Police (FDJP) or any government. The authoritative source is always the live government form and its official instructions.