Registry entry
Thailand Non-Immigrant Visa (B) Application — For Employment
The Ministry of Foreign Affairs' (MFA) two-page visa application specimen served under its Non-Immigrant Visa (B) for Employment publishing path, opening Thailand's Visa vertical (2 of 6; Taxes opened via th/rd/pit-90-personal-income-tax-return). Page 1 is a non-fillable checklist naming the required supporting documents for this visa category and purpose (modelled as documents[] below, not fields[]); page 2 is the MFA's own generic 'APPLICATION FOR VISA' AcroForm (footer-stamped 'mfavisaform 10 09 2007'), used across all MFA/Royal Thai Embassy and Consulate-General visa categories, with a 'Please Indicate Type of Visa Requested' selector rather than a form dedicated solely to Non-Immigrant Visa (B). This v1.0.0 models every applicant-facing field on page 2's live AcroForm: the visa-type-requested and title selectors, full identity/travel-document/occupation/address fields, the local-guarantor and guarantor-in-Thailand blocks, the minor-children-if-accompanying block, travel/entry details, and the purpose-of-visit selector, plus the date fields accompanying the form's two printed declarations. Two of the 58 AcroForm widgets (Text4, Text13) are excluded as non-visible, near-zero-dimension artifact fields with no corresponding printed label — disclosed in VERIFICATION.md. The lower 'FOR OFFICIAL USE' block (Application/Reference No., Visa No., consulate-assigned Type of Visa/Category/Entries/Fee/dates, Documents Submitted) carries no AcroForm widgets at all and is out of scope, consistent with this registry's convention for consulate/caseworker-only sections. GovSchema is independent and is not affiliated with, endorsed by, or operated by the Government of Thailand or the Ministry of Foreign Affairs.
Registry entry
th/mfa/non-immigrant-visa-b-application-for-employment
Authoritative source NON-IMMIGRANT VISA (B) FOR EMPLOYMENT — checklist + APPLICATION FOR VISA (page 2 footer-stamped "mfavisaform 10 09 2007")
Machine access
- Schema document
registry/th/mfa/non-immigrant-visa-b-application-for-employment/1.0.0/schema.jsonapplication/schema+json- Verification record
registry/th/mfa/non-immigrant-visa-b-application-for-employment/1.0.0/VERIFICATION.mdtext/markdown- Registry catalog
registry/index.jsonone record per schema id
Field reference
57 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
-
visaTypeDiplomaticboolean optionalOne of six mutually-exclusive 'Type of Visa Requested' options printed at the top of the application (see exclusivityGroups). This document is served under the MFA's Non-Immigrant Visa (B) for Employment publishing path, so an applicant using this specimen for that purpose is expected to select visaTypeNonImmigrant rather than this option; the field itself is modelled as printed since the underlying AcroForm is the MFA's shared, all-purpose visa application (not a Non-Immigrant-B-only form) and imposes no such constraint mechanically.
-
visaTypeOfficialboolean optionalSee visaTypeDiplomatic for the mutual-exclusivity and shared-form disclosure.
-
visaTypeCourtesyboolean optionalSee visaTypeDiplomatic for the mutual-exclusivity and shared-form disclosure.
-
visaTypeNonImmigrantboolean optionalThe option expected to be checked for this document's Non-Immigrant Visa (B) for Employment purpose. See visaTypeDiplomatic for the mutual-exclusivity and shared-form disclosure.
-
visaTypeTouristboolean optionalSee visaTypeDiplomatic for the mutual-exclusivity and shared-form disclosure.
-
visaTypeTransitboolean optionalSee visaTypeDiplomatic for the mutual-exclusivity and shared-form disclosure.
-
numberOfEntriesRequestedstring optionalA handwritten blank ('Number of Entries Requested _____') printed beside the visa-type selector, with no corresponding AcroForm widget in the source PDF — modelled here for completeness of the printed form's data points, but not backed by a fillable field; disclosed in VERIFICATION.md.
-
titleMrboolean optionalOne of three mutually-exclusive title checkboxes preceding the applicant's name (see exclusivityGroups).
-
titleMrsboolean optionalSee titleMr for the mutual-exclusivity note.
-
titleMissboolean optionalSee titleMr for the mutual-exclusivity note.
-
fullNamestring requiredThe applicant's full name in block letters, e.g. "SOMCHAI MANEE JAIDEE".
length: 1–∞classification: pii -
formerNamestring optionalA prior legal name the applicant has held, if any.
classification: pii -
nationalitystring requiredThe applicant's current nationality, e.g. "Malaysian".
length: 1–∞classification: pii -
nationalityAtBirthstring requiredThe nationality the applicant held at birth, if different from the current nationality (printed as its own blank distinct from nationality above).
length: 1–∞classification: pii -
countriesTravelDocumentValidstring requiredThe countries/territories the applicant's travel document is valid for, e.g. "All countries".
length: 1–∞ -
birthPlacestring requiredThe applicant's city/country of birth, e.g. "Kuala Lumpur, Malaysia".
length: 1–∞classification: pii -
maritalStatusstring requiredThe applicant's marital status as a free-text blank, e.g. "Single" — printed as a blank line, not as selectable checkboxes.
length: 1–∞classification: pii -
proposedAddressInThailandLine1string requiredThe address the applicant intends to reside at in Thailand (line 1 of 3 blank lines provided).
length: 1–∞classification: pii -
proposedAddressInThailandLine2string optionalSecond of 3 blank lines for the proposed address in Thailand.
classification: pii -
proposedAddressInThailandLine3string optionalThird of 3 blank lines for the proposed address in Thailand.
classification: pii -
dateOfBirthdate requiredThe applicant's date of birth.
classification: pii -
localGuarantorNameAddressLine1string requiredThe name and address of the applicant's local (home-country) guarantor (line 1 of 2 blank lines provided).
length: 1–∞classification: pii -
localGuarantorNameAddressLine2string optionalSecond of 2 blank lines for the local guarantor's name and address.
classification: pii -
localGuarantorTelstring optionalThe local guarantor's telephone/fax number.
classification: pii -
travelDocumentTypestring requiredThe type of travel document presented, e.g. "Ordinary Passport".
length: 1–∞ -
guarantorInThailandNameAddressLine1string requiredThe name and address of the applicant's guarantor in Thailand — for this visa's Employment purpose, typically the sponsoring employer (line 1 of 2 blank lines provided).
length: 1–∞classification: pii -
guarantorInThailandNameAddressLine2string optionalSecond of 2 blank lines for the name and address of the guarantor in Thailand.
classification: pii -
guarantorInThailandTelstring optionalThe Thailand-based guarantor's telephone/fax number.
classification: pii -
travelDocumentNostring requiredThe travel document's number.
length: 1–∞classification: sensitive-pii -
travelDocumentIssuedAtstring requiredThe place the travel document was issued.
length: 1–∞ -
travelDocumentDateOfIssuedate requiredThe travel document's date of issue.
-
travelDocumentExpiryDatedate requiredThe travel document's expiry date.
-
occupationPositionstring requiredThe applicant's present position/job title, per the label's instruction to "specify present position and name of employer" across the 2 blank lines provided (line 1).
length: 1–∞ -
occupationEmployerstring requiredThe applicant's employer, per the label's instruction to "specify present position and name of employer" across the 2 blank lines provided (line 2).
length: 1–∞ -
currentAddressLine1string requiredThe applicant's current address (line 1 of 2 blank lines provided).
length: 1–∞classification: pii -
currentAddressLine2string optionalSecond of 2 blank lines for the applicant's current address.
classification: pii -
currentAddressTelstring requiredA contact telephone number for the applicant's current address.
length: 1–∞classification: pii -
currentAddressEmailstring optionalAn e-mail address for the applicant.
classification: pii -
permanentAddressLine1string optionalThe applicant's permanent address, only if different from the current address above (line 1 of 3 blank lines provided). No selector field distinguishes whether this block applies; left fully optional, per this registry's established convention for the same class of printed 'if different/if applicable' block with no dedicated gating widget.
classification: pii -
permanentAddressLine2string optionalSecond of 3 blank lines for the permanent address.
classification: pii -
permanentAddressLine3string optionalThird of 3 blank lines for the permanent address.
classification: pii -
permanentAddressTelstring optionalA contact telephone number for the applicant's permanent address, if provided.
classification: pii -
minorChildrenInfoLine1string optionalNames, dates, and places of birth of any minor children accompanying the applicant (line 1 of 2 blank lines provided). Optional: only applies when minor children are accompanying.
classification: pii -
minorChildrenInfoLine2string optionalSecond of 2 blank lines for accompanying minor children's information.
classification: pii -
dateOfArrivalInThailanddate requiredThe applicant's planned date of arrival in Thailand.
-
travelingBystring requiredThe applicant's mode of travel into Thailand, e.g. "Air".
length: 1–∞ -
flightOrVesselNamestring requiredThe flight number or vessel name the applicant will arrive on.
length: 1–∞ -
durationOfProposedStaystring requiredThe applicant's proposed duration of stay in Thailand, e.g. "90 days".
length: 1–∞ -
dateOfPreviousVisitToThailanddate optionalThe date of the applicant's most recent previous visit to Thailand, if any.
-
purposeOfVisitTourismboolean optionalOne of five mutually-exclusive 'Purpose of Visit' options (see exclusivityGroups). None of the five printed options is literally worded 'Employment'; for this visa's Employment purpose, purposeOfVisitBusiness is the closest applicable printed option, disclosed here rather than asserted as canonical.
-
purposeOfVisitTransitboolean optionalSee purposeOfVisitTourism for the mutual-exclusivity and Employment-purpose disclosure.
-
purposeOfVisitBusinessboolean optionalThe closest printed option to this document's Employment purpose (see purposeOfVisitTourism). See purposeOfVisitTourism for the mutual-exclusivity note.
-
purposeOfVisitDiplomaticOfficialboolean optionalSee purposeOfVisitTourism for the mutual-exclusivity and Employment-purpose disclosure.
-
purposeOfVisitOtherboolean optionalSee purposeOfVisitTourism for the mutual-exclusivity note. When selected, purposeOfVisitOtherDescription should be completed.
-
purposeOfVisitOtherDescriptionstring optionalFree-text description of the visit's purpose, required only when purposeOfVisitOther is checked.
-
refundDeclarationDatedate requiredThe date accompanying the applicant's signature on the printed declaration "I hereby declare that I will not request any refund from my paid visa fee even if my application has been declined." (No separate fillable Signature widget exists in the source; the signature itself is a wet-ink line with no AcroForm mechanism, consistent with this registry's convention for such lines.)
-
touristTransitDeclarationDatedate optionalThe date accompanying the applicant's signature on the printed declaration under "Attention for Tourist and Transit Visas Applicants" ("I hereby declare that the purpose of my visit to Thailand is for pleasure or transit only..."). Required only for Tourist/Transit applicants; left optional here since this document's Employment purpose does not fall under that attention block. No separate fillable Signature widget exists, consistent with refundDeclarationDate.
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-12maturity.level:structural-reference
This is GovSchema Standard Research cycle GOV-2602, a child of the standing research routine (GOV-2599) and a pre-scouted, ready-to-author candidate identified in GOV-2593's prior cycle (see that cycle's own CATALOG.md Executive Summary update and its own memory record). It opens Thailand's Visa vertical (2 of 6), via the Ministry of Foreign Affairs' (MFA) Non-Immigrant Visa (B) for Employment publishing path. Taxes is already open (th/rd/pit-90-personal-income-tax-return, GOV-2593); Business Formation is being authored concurrently by a sibling child issue (GOV-2601) of the same parent cycle — no file overlap is expected beyond CATALOG.md and tools/govschema-client/registry-index.json, both re-diffed against main immediately before opening this PR.
Source verification (independently re-derived, not copied from the task)
- URL:
https://image.mfa.go.th/mfa/0/3fsjzRYZ2e/VISA_FORM/NON-IMMIGRANT_VISA_(B)_FOR_EMPLOYMENT_-_To_be_employed_in_Thailand-new.pdf - The task's own description names only a widget count (58 AcroForm fields) and the general topic (MFA Non-Immigrant Visa B/Employment) — no specific URL. This URL was independently located this cycle via a fresh web search restricted to
mfa.go.th, then confirmed as the correct specimen by independently re-deriving its AcroForm widget count withpdfjs-distand finding it matches the task's cited figure exactly (below); two sibling candidates found in the same search (a bare "APPLICATION FOR VISA" PDF with 0 widgets — non-fillable — and a different visa-application PDF with 103 widgets) were fetched and screened first and ruled out precisely because their widget counts did not match. - Fetched independently via
curl:- HTTP 200,
Content-Type: application/pdf,Content-Length: 270415bytes. sha256:8e61fcc80bd6260f83f86b01d5443f54a75eda4ef915c3c5449e498b8b2600d4(computed viasha256sumon the freshly-downloaded file).- Note: the CDN's
Last-Modifiedresponse header reflects the fetch time (acloudflare-frontedimage.mfa.go.thasset host, not an origin file-mtime signal) and is not treated as evidence of the document's edition/vintage; the document's own footer text (page 2:mfavisaform 10 09 2007) is the only in-document dating signal and is quoted verbatim in this schema's own field-levelsourceRefs.
- HTTP 200,
- Parsed with
pdfjs-dist@3(legacy build,getAnnotations({intent:'display'}), filtered tosubtype === 'Widget'), installed in a scratch directory (not a repo dependency), following this registry's established PDF-extraction practice:- 2 pages, 58 AcroForm widgets total — 0 on page 1, 58 on page 2 — matching the task's cited widget count exactly.
- Every widget's
fieldName/fieldType/rect/checkBox/exportValuewas dumped and correlated againstgetTextContent()'s position-sorted text items (sorted by roundedydescending, thenxascending) to read every printed label and confirm each widget's meaning before modeling it — not assumed from field names alone (the source's own field names are the generic auto-numberedText1...Text51/Check Box2...Check Box16, with no self-documenting names to lean on).
Document structure
Page 1 is a non-fillable checklist ("Checklist — Please complete and submit together with the application form — Application with incomplete documents cannot be accepted"), titled "NON-IMMIGRANT VISA (B) FOR EMPLOYMENT — Purpose of visit: To be employed in Thailand", naming 10 required-document line items (with sub-items 5.1-5.3 and 6.1-6.5) plus a visa-fee note and a set of numbered applicant-declaration bullets. It carries zero AcroForm widgets — confirmed via pdfjs-dist — and is modeled entirely as documents[] (10 entries), not fields[].
Page 2 is the MFA's own generic "APPLICATION FOR VISA" AcroForm (footer-stamped mfavisaform 10 09 2007), used across the Ministry's/Royal Thai Consulate-General's full range of visa categories — the page itself prints a "Please Indicate Type of Visa Requested" selector spanning Diplomatic/Official/Courtesy/Non-Immigrant/Tourist/Transit, not a form dedicated solely to Non-Immigrant Visa (B). Because this specimen is served under the MFA's Non-Immigrant Visa (B) for Employment publishing path (distinguishing it from the sibling "FOR BUSINESS PURPOSE" and "FOR EMPLOYMENT AS TEACHER" specimens found during sourcing, which share the same underlying page-2 AcroForm), this v1.0.0 discloses (rather than silently resolves) that the AcroForm itself does not encode Non-Immigrant-B/Employment specificity — see the visaTypeNonImmigrant and purposeOfVisitBusiness field descriptions below.
All 58 page-2 widgets were mapped to a printed label via rect/text-row correlation. 2 widgets are excluded from fields[] as non-substantive artifacts:
Text4—rect: [94, 593, 95, 598], a 1pt-wide, 5pt-tall degenerate widget sitting between the "Former Name (if any)" row (Text2, y≈603-617) and the "Nationality" row (Text3, y≈580-593), with no adjacent printed label of its own.Text13—rect: [226, 479, 226, 484], a genuinely zero-width widget sitting between the "Issued at" row (Text12, y≈466-480) and the "Date of Issue" row (Text15, y≈443-458), likewise with no adjacent printed label.
Both are consistent with leftover/duplicated artifact fields from the source's own PDF authoring tool rather than data-entry points a filer could plausibly use; excluding them follows this registry's convention of only modeling substantively fillable widgets (cf. se/skatteverket's precedent of excluding read-only signature-line placeholders for a different reason — non-fillability rather than non-existent screen real estate).
The remaining 56 widgets collapse into 57 fields[] entries: 42 single-widget fields, 3 multi-widget checkbox groups collapsed into 3 exclusivityGroups entries (6 + 3 + 5 = 14 widgets, expressed as 14 independent boolean fields per this registry's established convention — see e.g. gh/nia, dk/um, ng/cac precedents — since the source's checkboxes are independently-clickable Btn widgets, not a single shared-name radio group), plus numberOfEntriesRequested, a printed blank ("Number of Entries Requested _____") with no corresponding AcroForm widget at all — modeled for completeness of the printed form's data points and disclosed as unbacked by a fillable field, consistent with this registry's precedent for the same class of gap (e.g. se/skatteverket's documents[]-only gating disclosures).
Field-by-field inventory and disclosed judgment calls
- Checkbox groups modeled as independent booleans +
exclusivityGroups:visa_type_requested(visaTypeDiplomatic/visaTypeOfficial/visaTypeCourtesy/visaTypeNonImmigrant/visaTypeTourist/visaTypeTransit, Check Box3/6/5/4/7/2 respectively),title(titleMr/titleMrs/titleMiss, Check Box14/15/16), andpurpose_of_visit(purposeOfVisitTourism/purposeOfVisitTransit/purposeOfVisitBusiness/purposeOfVisitDiplomaticOfficial/purposeOfVisitOther, Check Box8/9/11/10/13). All three groups are confirmed viagetAnnotations()to becheckBox:true/radioButton:falseindependent widgets (no shared field name), so — per this registry's established convention — they are modeled as independent optional booleans with anexclusivityGroupsentry expressing "at most one", rather than a singleenumfield. - Disclosed judgment call — no printed option says "Employment": none of the 6 "Type of Visa Requested" options or the 5 "Purpose of Visit" options is literally worded "Employment".
visaTypeNonImmigrantandpurposeOfVisitBusinessare each disclosed in their own fielddescriptionas the closest applicable printed option for this document's stated Employment purpose — not asserted as a canonical mapping, since the source itself provides none. occupationPosition/occupationEmployer(Text17/Text18): the printed label reads "Occupation (specify present position and name of employer)" over two consecutive full-width blank lines with no further sub-labels distinguishing them. Modeled as two required fields (position, then employer), matching the label's own two-part instruction in printed order — a disclosed interpretation, since the PDF itself does not separately caption the two lines.- Multi-line address/name blocks (
currentAddressLine1/2,permanentAddressLine1/2/3,proposedAddressInThailandLine1/2/3,localGuarantorNameAddressLine1/2,guarantorInThailandNameAddressLine1/2,minorChildrenInfoLine1/2): each source label sits above 2-3 consecutive full/near-full-width blank lines with no distinguishing sub-labels between them; modeled as sequentially-numbered line fields (first line required where the base label carries no "if applicable/if different" qualifier, continuation lines optional), consistent with this registry's convention for the same "one printed label, several blank writing lines" pattern (cf.th/rd/pit-90's multi-line address handling). proposedAddressInThailandLine1(Text36) vs.Line2(Text37) vs.Line3(Text38):Text36'srect(y≈564-579) straddles the "Proposed Address in Thailand" label's own baseline (y≈567) and is narrower (x≈452-576) than the two widgets below it (Text37x≈325-576,Text38x≈324-577) — read as a short first-line blank positioned inline with the label itself, followed by two full-width continuation lines. Disclosed here since this inline-with-label placement differs from every other multi-line block on this page (which all place their first blank line entirely below the label).- **
permanentAddress*fields left fully optional, norequiredWhen:** the printed label reads "Permanent Address (if different from above)" but the source provides no discrete boolean/selector widget to key arequiredWhencondition on — consistent with this registry's established convention (and thenotEquals-against-an-optional-field pitfall documented in this registry's own operating practice) of not inventing a synthetic gating field where the source has none; seese/skatteverket/samordningsnummer-ansokan's identical disclosed reasoning for its own contact-address block. purposeOfVisitOtherDescription(Text34) is the one field in this schema with a realrequiredWhen(gated onpurposeOfVisitOther equals true), since the source's own printed instruction ("Other (please specify)") explicitly ties the blank to that specific checkbox.refundDeclarationDate/touristTransitDeclarationDate(Text50/Text51): each sits beside a printed "Signature ___ Date ___" line under one of the form's two printed declarations. Only the Date half of each line has a fillable widget — noSignaturewidget exists in the source for either line, consistent with a wet-ink signature mark having no AcroForm mechanism (the same pattern asse/skatteverket's excluded read-onlyUnderskriftplaceholders, except here there is no widget at all, substantive or read-only, standing in for the signature).refundDeclarationDateis modeled as required (the refund-non-request declaration applies to every applicant regardless of visa type, per its own printed text);touristTransitDeclarationDateis modeled as optional, since its declaration is explicitly captioned "Attention for Tourist and Transit Visas Applicants" and this document's Employment purpose falls outside that caption.- The "FOR OFFICIAL USE" block (page 2, lower third: Application/ Reference No., Visa No., a second "Type of Visa:" row, "Category of Visa:", "Number of Entries:" with Single/Double/Multiple Entries options, Date of Issue/Fee/Expiry Date, "Documents Submitted", "Authorized Signature and Seal") is confirmed via
pdfjs-distto carry no AcroForm widgets whatsoever in this range — every one of the 58 total widgets maps to the applicant-facing rows above this block. Out of scope, consistent with this registry's convention for consulate/caseworker-only sections with no fillable mechanism (contrastse/skatteverket's page 2, which is caseworker-only but does carry widgets and is disclosed as out of scope for that reason instead).
documents[]
All 10 entries are sourced from page 1's checklist (not from the AcroForm text layer, which carries none of this content):
completedVisaApplicationForm— item 1 (this schema's ownfields[], printed and signed).originalPassport— item 2.passportCopy— item 3.passportPhoto— item 4.workPermitOrApprovalEvidence— item 5's three either/or sub-items (5.1-5.3), modeled as one required document per this registry's convention for disclosed either/or evidence requirements (the source itself introduces them with "Any of the followings", not discrete selectable options).jobOfferLetter— item 6.1.companyRegistrationCopy— item 6.2.shareholderListCopy— item 6.3.balanceSheetCopy— item 6.4.vatRegistrationCopy— item 6.5.
Items 6.1-6.5 are tagged belongsTo: "responsible-party" (the sponsoring employer), matching this schema's guarantorInThailandNameAddressLine1 field description tying that guarantor block to the employer for this visa's Employment purpose.
Validation runs
node tools/validate.mjs registry/th/mfa/non-immigrant-visa-b-application-for-employment/1.0.0/schema.json— passes.node tools/validate-ajv.mjs registry/th/mfa/non-immigrant-visa-b-application-for-employment/1.0.0/schema.json— passes (draft 2020-12, spec v0.3 meta-schema).- A from-scratch conformance-checker script (scratch, not committed — evaluates
required/requiredWhen/validation.minLength/exclusivityGroupsagainst each fixture) found: bothvalid-*.jsonscenarios raise 0 errors; each of 5mutation-control-*.jsonfixtures raises exactly 1 error. Seeconformance/th/mfa/non-immigrant-visa-b-application-for-employment/1.0.0/.
Out of scope, disclosed
- Page 2's "FOR OFFICIAL USE" block (see above) — no AcroForm mechanism exists for it.
Text4/Text13— excluded degenerate/artifact widgets (see above).- No canonical mapping is asserted between this document's Employment purpose and the generic form's "Type of Visa Requested"/"Purpose of Visit" printed options, since the source provides none (see above).
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 the Kingdom of Thailand or any government. The authoritative source is always the live government form and its official instructions.