Registry entry
Ukraine Visa Application Form
Apply for a Ukrainian national entry visa (short- or long-term stay, or transit) as a foreign national, via the Ministry of Foreign Affairs of Ukraine's own numbered, 36-item Visa Application Form. The form follows the common EU/Schengen-style application template in layout but is Ukraine's own national instrument, not a Schengen form: it is confirmed Ukraine-specific by field 23 ('Previous Ukrainian visas'), field 24 (entry to Ukraine's temporarily-occupied Crimea/Sevastopol territories after 10 June 2015), fields 26-28 (arrival into/departure from/period of stay in Ukraine), and repeated 'Ukraine' references throughout. Models the applicant's identity and passport particulars, address and contact details, residence/occupation, travel purpose and entry-count request, prior-Ukrainian-visa and Crimea/Sevastopol-entry history, any entry permit needed for a final destination beyond Ukraine, the intended Ukraine itinerary, inviting-person/entity and expense-coverage disclosures, an optional minor/incapacitated-applicant guardian block, and the closing place/date/signature. Does not model the form's own right-hand 'For official use only' column (visa application number, date of application, the receiving officer's own submitted-documents checklist, visa decision/category/validity, fee/day/entry counts, expedited-service flag, vignette number, issue/print date, passport-return date, and the visa officer's own signature block) — consistent with how other consular-form schemas in this registry (e.g. co/cancilleria/visa-application-individual) exclude officer/agency-facing review sections. Does not submit anything and does not imply endorsement by, or affiliation with, the Ministry of Foreign Affairs of Ukraine or the Ukrainian government.
Registry entry
ua/mfa/visa-application-form
Authoritative source Ukraine Ministry of Foreign Affairs 'VISA APPLICATION FORM', English-language edition, filename '2018-02-02-visapp-en.pdf'
Machine access
- Schema document
registry/ua/mfa/visa-application-form/1.0.0/schema.jsonapplication/schema+json- Verification record
registry/ua/mfa/visa-application-form/1.0.0/VERIFICATION.mdtext/markdown- Registry catalog
registry/index.jsonone record per schema id
Field reference
53 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
-
surnamestring requiredSurname(s) / Family name(s)
length: 1–200classification: pii -
surnameAtBirthstring optionalSurname(s) at birth / Previous surname(s)/family name(s)
length: 0–200classification: pii -
givenNamesstring requiredName(s) / Given name(s)
length: 1–200classification: pii -
dateOfBirthdate requiredDate of birth
classification: sensitive-pii -
placeOfBirthstring requiredPlace of birth
length: 1–200classification: pii -
countryOfBirthstring requiredCountry of birth
length: 1–100classification: pii -
currentNationalitystring requiredCurrent nationality
length: 1–100classification: pii -
nationalityAtBirthIfDifferentstring optionalPrinted directly beneath field 7 with no number of its own — confirmed genuinely unnumbered in the source (no separate '7b' printed), not a transcription omission.
length: 0–100classification: pii -
sexenum requiredSex
enum: male | femaleclassification: pii -
maritalStatusenum requiredMarital status
enum: single | married | divorced-or-separated | widowedclassification: pii -
nationalIdentityNumberstring optionalNational identity/personal number (if applicable)
length: 0–50classification: sensitive-pii -
passportTypeenum requiredType of the passport document
enum: ordinary-passport | diplomatic-passport | service-passport | official-passport | special-passport | other -
passportTypeOtherDescriptionstring optionalOther travel document (please specify)
length: 0–200 -
passportNumberstring requiredPassport document's series/number
length: 1–50classification: sensitive-pii -
passportIssueDatedate requiredIssue date
-
passportValidUntildate requiredValid until
-
passportIssuedBystring requiredIssued by / authority
length: 1–200 -
applicantPostalAddressAndEmailstring requiredMissing from this issue's own field inventory (flagged as 'unlabeled in extraction'); resolved this cycle from the source's own page-1 heading, positioned immediately before field 17's telephone-number heading. Modelled as one combined free-text field, matching the single heading and single blank-line box printed on the source.
length: 1–400classification: pii -
applicantTelephoneNumbersstring requiredTelephone number(s) including international dial codes
length: 1–100classification: pii -
residesInOtherCountryboolean requiredResidence in a country other than the country of current nationality
-
residencePermitDetailsstring optionalResidence permit or equivalent — Document's type, series/number, issued by/authority
length: 0–300classification: sensitive-pii -
residencePermitValidFromdate optionalResidence permit valid from
-
residencePermitValidUntildate optionalResidence permit valid until
-
currentOccupationstring requiredCurrent occupation
length: 1–200 -
employerOrEducationalEstablishmentDetailsstring requiredSingle composite field, matching the source's own single heading and single blank-line box; the 'for students' alternative content is a printed continuation of the same field, not a separate one.
length: 1–400 -
purposeOfTravelenum required'short-term-stay' and 'long-term-stay' carry the source's own parenthetical thresholds: short-term stay is up to 90 days, long-term stay is more than 90 days.
enum: transit | short-term-stay | long-term-stay -
numberOfEntriesRequestedenum requiredNumber of entries requested
enum: one | two | multiple -
hasPreviousUkrainianVisaboolean requiredPrevious Ukrainian visas (issued during recent three years)
-
previousVisaValidFromdate optionalDate(s) of previous visa validity from
-
previousVisaValidUntildate optionalDate(s) of previous visa validity until
-
crimeaSevastopolEntrySince2015boolean requiredEntry to Ukraine's temporarily occupied territories of Crimea and the city of Sevastopol after 10 June 2015
-
crimeaVisitPurposestring optionalPlease specify the purpose of the journey(s)
length: 0–500 -
crimeaSpecialPermitIssuedBystring optionalOnly some journey purposes require a special permit; not every 'yes' answer to crimeaSevastopolEntrySince2015 implies one was issued, so this is visibleWhen, not requiredWhen.
length: 0–200 -
crimeaSpecialPermitValidFromdate optionalSpecial permit valid from
-
crimeaSpecialPermitValidUntildate optionalSpecial permit valid until
-
hasEntryPermitForFinalDestinationboolean requiredEntry permit (or equivalent) for the final country of destination (for transiting through Ukraine's territory)
-
entryPermitTypeIssuedBystring optionalPermit or equivalent's type, issued by / authority
length: 0–300 -
entryPermitValidFromdate optionalPermit/equivalent valid from
-
entryPermitValidUntildate optionalPermit/equivalent valid until
-
intendedTransitDateFromdate optionalIntended transit date(s) from
-
intendedTransitDateUntildate optionalIntended transit date(s) until
-
intendedArrivalDateUkrainedate requiredIntended date of arrival into Ukraine
-
intendedDepartureDateUkrainedate requiredIntended date of departure from Ukraine
-
intendedStayFromUkrainedate requiredIntended period of stay in Ukraine — from
-
intendedStayUntilUkrainedate requiredIntended period of stay in Ukraine — until
-
residenceAddressInUkrainestring requiredSingle composite field; the source's own parenthetical names hotel(s)/temporary accommodation(s) name(s), telephone(s) and fax number(s), and email address(es) as an example of what this address box covers, not as separate sub-fields of their own.
length: 1–400classification: pii -
invitingPersonDetailsstring optionalSingle composite field covering the source's own parenthetical address, telephone(s)/fax number(s), and email address(es). Optional: a tourism/hotel-based stay (see residenceAddressInUkraine) need not name an inviting person.
length: 0–400classification: pii -
invitingEntityDetailsstring optionalSingle composite field covering the source's own parenthetical postal address, telephone(s)/fax number(s), and email address(es). Optional, as an alternative or addition to invitingPersonDetails.
length: 0–300 -
invitingEntityContactPersonDetailsstring optionalSingle composite field covering the source's own parenthetical telephone(s)/fax number(s) and email address(es).
length: 0–300classification: pii -
expensesCoveredByenum requiredExpenses as regards travelling to and stay in Ukraine are covered by
enum: applicant | inviting-person-entity-organisation | sending-party-organisation -
minorOrIncapacitatedGuardianDetailsstring optionalSingle composite field covering the source's own parenthetical surname/name, current nationality/citizenship, postal/residence address, telephone(s)/fax number(s), and email address(es). The source names no separate 'is the applicant a minor or incapacitated?' gating field elsewhere on the form to key a requiredWhen against, so this is modelled unconditionally optional, per its own printed 'in cases where...' framing.
length: 0–500classification: pii -
signaturePlacestring requiredPlace
length: 1–100 -
signatureDatedate requiredDate
Verification record
This file is the source-review record for this document version, per the manual-source-review-v1 practice. It documents the provenance of the published fields and states the current verification claim honestly.
Current claim
status:draftverification.method:manual-source-review-v1verification.lastVerifiedAt:2026-07-17
This is GOV-3523 (child of GOV-3520, "GovSchema Standard Research"), deepening the GOV-3513 cycle's own disclosed Visa backlog candidate for Ukraine, the registry's 73rd jurisdiction (opened via Business Formation).
Why this candidate
GOV-3513's own cycle scouted Ukraine's remaining five verticals in parallel while authoring the Business Formation schema and found Visa, Passport, and Taxes all "STRONG" (directly downloadable, government-published forms) — disclosed as open, ready-to-scope backlog rather than authored that cycle. This issue picks up the Visa candidate specifically: the Ministry of Foreign Affairs' own English-language Visa Application Form PDF.
Sources examined
Source 1 (primary source)
- Authority: Ministry of Foreign Affairs of Ukraine (MFA)
- Document: "VISA APPLICATION FORM", English-language edition
- Cited URL:
https://mfa.gov.ua/storage/app/sites/1/2018-02-02-visapp-en.pdf - Actually fetched via:
https://web.archive.org/web/2018/https://mfa.gov.ua/storage/app/sites/1/2018-02-02-visapp-en.pdf(direct fetch ofmfa.gov.uareturns HTTP 403 in this sandbox, matching the GOV-3513 cycle's own experience withminjust.gov.ua/mfa.gov.ua). - Retrieved: 2026-07-17, HTTP 200
- File: 149,185 bytes,
sha256:0fa40d9f59cdf9115ab320c6e580cf552d14d73ca16a21c1bccce4be6a66ee74 - Structure confirmed:
/Type /Pages /Count 2(genuine 2-page PDF, byte-for-byte confirmed); no AcroForm widgets (a flat/print specimen, not a fillable form). - Extraction method: each page's own
/Contentsstream object was located from itsPagedictionary andzlib-decompressed independently (page 1 = object 4, page 2 = object 19), so the field/page split below is confirmed structurally, not inferred from reading order alone. The content stream's text-showing operators (Tj/TJ, withTd/TD/T*treated as line breaks) were interpreted directly, per this registry's established raw-stream PDF-extraction technique (gov-form-pdf-extraction). This source splits its own text across two distinct string encodings in the same content stream: literal(...)TjASCII strings for most text, and hex<...>TJstrings under a Type0/Identity-H CID-keyed font for a second subset of runs — including every checkbox glyph (rendered as CID0x0191) and several field labels (including field 16's, see below). The embedded font's own/ToUnicodeCMap (PDF object 341 — abfchar/bfrangetable) was extracted and used to decode every hex string (e.g. CID0x0191→ U+25A1□; CID0x0024→A, etc., via the CMap's own ranges). Decoding only the literal strings and skipping the hex ones — the initial extraction pass this cycle ran — silently dropped roughly a third of the form's own visible text, including field 16's own label and every checkbox marker; this was caught by cross-checking the literal-only pass's field count against the issue's own 36-item inventory before treating the extraction as complete, and fixed by decoding the hex-string runs too.
Field inventory (Phase 3)
Page 1 (fields 1–22) and page 2 (fields 23–36 + declaration/signature) were independently confirmed by decompressing and reading each page's own content stream in isolation.
| Field (schema name) | Label (source) | Field no. / page | |---|---|---| | surname | Surname(s) / Family name(s) | 1, p.1 | | surnameAtBirth | Surname(s)/Family name(s) at birth / Previous surname(s) | 2, p.1 | | givenNames | Name(s) / Given name(s) | 3, p.1 | | dateOfBirth | Date of birth (day-month-year) | 4, p.1 | | placeOfBirth | Place of birth | 5, p.1 | | countryOfBirth | Country of birth | 6, p.1 | | currentNationality | Current nationality | 7, p.1 | | nationalityAtBirthIfDifferent | Nationality at birth (if different) | 7 sub-line, p.1 | | sex | Sex | 8, p.1 | | maritalStatus | Marital status | 9, p.1 | | nationalIdentityNumber | National identity/personal number (if applicable) | 10, p.1 | | passportType / passportTypeOtherDescription | Type of the passport document | 11, p.1 | | passportNumber | Passport document's series/number | 12, p.1 | | passportIssueDate | Issue date | 13, p.1 | | passportValidUntil | Valid until | 14, p.1 | | passportIssuedBy | Issued by / authority | 15, p.1 | | applicantPostalAddressAndEmail | Applicant's postal address and email address | 16, p.1 | | applicantTelephoneNumbers | Telephone number(s) including international dial codes | 17, p.1 | | residesInOtherCountry + residencePermitDetails/residencePermitValidFrom/residencePermitValidUntil | Residence in a country other than the country of current nationality | 18, p.1 | | currentOccupation | Current occupation | 19, p.1 | | employerOrEducationalEstablishmentDetails | Employer's name/address/telephone/fax/email; for students, educational establishment's own | 20, p.1 | | purposeOfTravel | Purpose of travel/stay | 21, p.1 | | numberOfEntriesRequested | Number of entries requested | 22, p.1 | | hasPreviousUkrainianVisa + previousVisaValidFrom/previousVisaValidUntil | Previous Ukrainian visas (issued during recent three years) | 23, p.2 | | crimeaSevastopolEntrySince2015 + 4 sub-fields | Entry to Ukraine's temporarily occupied territories of Crimea and Sevastopol after 10 June 2015 | 24, p.2 | | hasEntryPermitForFinalDestination + 5 sub-fields | Entry permit (or equivalent) for the final country of destination | 25, p.2 | | intendedArrivalDateUkraine | Intended date of arrival into Ukraine | 26, p.2 | | intendedDepartureDateUkraine | Intended date of departure from Ukraine | 27, p.2 | | intendedStayFromUkraine / intendedStayUntilUkraine | Intended period of stay in Ukraine | 28, p.2 | | residenceAddressInUkraine | Applicant's residence address in Ukraine | 29, p.2 | | invitingPersonDetails | Surname/name of the inviting person in Ukraine | 30, p.2 | | invitingEntityDetails | Name of the inviting entity/organisation | 31, p.2 | | invitingEntityContactPersonDetails | Surname/name of the contact person of the inviting entity/organisation | 32, p.2 | | expensesCoveredBy | Expenses ... covered by | 33, p.2 | | minorOrIncapacitatedGuardianDetails | Minor/incapacitated applicant's parent/legal guardian details | 34, p.2 | | signaturePlace / signatureDate | Date and place | 35, p.2 | | (documents[] applicantOrGuardianSignature) | Applicant's signature | 36, p.2 |
documents[]: applicantPhoto (the photo placeholder box, top of p.1) and applicantOrGuardianSignature (an attestation paraphrasing the declaration paragraph preceding field 36).
Access notes and judgment calls
- Field 16, missing from this issue's own field inventory (flagged there as "unlabeled ... verify against the actual PDF page layout"), is resolved this cycle as
applicantPostalAddressAndEmail— "Applicant's postal address and email address", confirmed on page 1 immediately before field 17's telephone-number heading. It was one of the field labels encoded as hex<...>TJstrings under the embedded CID font (see Extraction method above); the issue's own prior extraction attempt had evidently not decoded that string subset, which is exactly why the field read as blank/unlabeled to it. Modelled as one combined free-text field, matching the single heading and single blank-line box printed on the source (not split into separate address/email fields, since the source presents them as one box). - Field 7's nationality-at-birth sub-line is confirmed genuinely unnumbered in the source (no printed "7b" or any other sub-number) — modelled as
nationalityAtBirthIfDifferent, optional, with norequiredWhentie to field 7 (the source states no explicit gating condition beyond "if different"). - This form's own right-column "For official use only" panel is confirmed, by its position in the extracted content stream, to include a "Submitted documents" checkbox list (passport document / medical insurance policy / means to cover expenses / document confirming purpose of travel / other) interleaved directly among undisputed officer-only fields — Visa application no., Date of application, Visa decision, category (B/C/D), validity dates, day/entry counts, expedited-service flag, vignette number, issue/print date, passport-return date, and the visa officer's own signature line. This is the receiving officer's own receipt checklist of what was physically submitted, not an applicant-facing checkbox on this specific form. Per this issue's own instruction to model the official-use block as read-only/out-of-scope, it is not modelled as a
documents[]entry. (A self-declared supporting-documents checklist published by the MFA independently of this form — e.g. on a consular-services page — would be a legitimate companion-schema candidate for a future cycle, not modelled here.) - No required-field asterisks or other visual requiredness markers exist anywhere in this source's extracted text layer, for any of the 36 numbered fields — confirmed both by direct text search (no visible
character appears within any decoded string literal) and by checking that every rawbyte in the content stream is either a path-fill operator (f*) or falls inside binary image-XObject data, never inside a string-showing operand. Requiredness was therefore determined structurally: a field with no printed conditional qualifier ("if applicable", "if different", "please specify", or a parent yes/no gate) is modelledrequired: true, consistent with this being a mandatory consular application form where an incomplete unconditional field blocks processing; every field with a printed conditional qualifier is modelledrequired: falsewithrequiredWhen/visibleWhentied to its own parent boolean/enum. - Fields 20, 29, 30, 31, 32, and 34 are each modelled as one composite string field, matching the source's own single heading and single blank-line box per item (e.g. field 30's "Surname/name of the inviting person in Ukraine (postal/residence address, telephone(s) and fax number(s), email address(es))" is one field, not four) — the same discipline already used in this registry's
co/cancilleria/visa-application-individualandat/bmeia/schengen-visa-applicationschemas for analogous composite fields. - Field 34 (minor/incapacitated-applicant guardian details) has no dedicated "is the applicant a minor or incapacitated?" gating field printed anywhere else on the form to key a
requiredWhenagainst, so it is modelledrequired: falseunconditionally, per its own printed "in cases where applicant is a minor or an incapacitated person, please specify ..." framing — the same treatmentat/bmeia/schengen-visa-applicationgives its own structurally analogous field 10. maritalStatus's enum collapses the source's single printed "divorced/separated" checkbox option into one value (divorced-or-separated), since the source itself offers exactly one checkbox for both, not two.- Fields 24 and 25's own special-permit/entry-permit validity dates and authority sub-fields are modelled
visibleWhen, notrequiredWhen, against their parent boolean (crimeaSevastopolEntrySince2015,hasEntryPermitForFinalDestination), while each parent's own "please specify the purpose"/"type, issued by/authority" free-text sub-field is modelledrequiredWhen— since not every "yes" answer implies a special permit or transit dates were actually issued/needed, but the source does explicitly instruct the applicant to specify a purpose whenever the parent question is answered "yes". purposeOfTravel's enum values carry the source's own parenthetical day thresholds in their fielddescription(short-term stay: up to 90 days; long-term stay: more than 90 days), rather than as a separatevalidationrule, since the 90-day threshold is not independently enforceable from this field alone (it depends on the applicant's own requested date range, which this schema does not cross-validate against the enum choice).
Test run (Phase 4)
No live submission was attempted: this is Ukraine's own foreign-facing consular application to a real, currently-operating government, and there is no safe, reversible way to test a real submission against it — the same reasoning already documented for this registry's other live government-visa schemas (e.g. id/imigrasi/evisa-visitor-visa-application).
Instead, a small purpose-built Python interpreter for this schema's own required/requiredWhen/visibleWhen (Condition grammar), enum validation, and crossFieldValidation rules was run against 9 fixtures in conformance/ua/mfa/visa-application-form/1.0.0/:
minimal-required-only-valid.json— every conditional block left untriggered (all gating booleansfalse); passes with zero errors.fuller-conditional-blocks-triggered-valid.json— every conditional block triggered (residesInOtherCountry,hasPreviousUkrainianVisa,crimeaSevastopolEntrySince2015,hasEntryPermitForFinalDestinationalltrue;passportType=other), with every field the trigger makes required/visible filled in; passes with zero errors.- 7 mutation-invalid fixtures, each derived from the minimal-valid record with exactly one targeted violation, and each correctly rejected for exactly that reason: a missing unconditional required field (
surname), an invalidenumvalue (sex: "other"), threerequiredWhenviolations (residencePermitDetails,crimeaVisitPurpose,passportTypeOtherDescription, each left absent while their own parent condition is triggered), and twocrossFieldValidationviolations (departure date before arrival date; passport valid-until before its own issue date).
Both meta-schema validators (tools/validate.mjs and tools/validate-ajv.mjs) were run against the finished document and pass clean (534/534 and 534/534 respectively, alongside every other document already in the registry).
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 Ministry of Foreign Affairs of Ukraine (Міністерство закордонних справ України) or any government. The authoritative source is always the live government form and its official instructions.