Registry
USCIS Form I-9 — programmatic fill compatibility
Employment Eligibility Verification · US Citizenship and Immigration Services (USCIS), Department of Homeland Security · Edition 01/20/25. Tested 2026-08-06 on the unmodified upstream blank — every number below comes from a recorded run, not from documentation.
Verdict at a glance
| Tool | Version | Result | Detail |
|---|---|---|---|
| pdfops API | hosted, tested 2026-08-06 | verified + deterministic flatten | 128/128 supported fields landed; flatten=true byte-deterministic (sha256 32dcfd756fa8…) |
| pdf-lib | 1.17.1 | verified (128/128) | 128 fields filled in-process |
| @cantoo/pdf-lib (fork) | 2.6.5 | verified (128/128) | 128 fields filled in-process |
| pypdf | 6.15.0 | text fields verified (115/115) | 115 text fields written and re-read (text fields only) |
| pdftk-java | 3.3.3 | verified (127/127) | 127 fields filled via FDF and re-dumped |
| qpdf --check | 11.9.0 | structurally clean | errors that qpdf cannot detect |
| poppler render check | 24.02.0 | values render (115/115) | 115/115 filled text values present in pdftotext output of the pdf-lib-filled file; page-1 raster sha256 66d1b21734e9… |
File facts
- Source: https://www.uscis.gov/sites/default/files/document/forms/i-9.pdf (issuer page: here)
- Blank tested: uscis-i-9.pdf · 512 KB · sha256
780f348c34df694bb0b4dbbfaf9f22b99b9757b80d16a37ba89aadf069597281 - License: US federal government work — public domain (17 U.S.C. § 105). The hash-verified blank is redistributed here unmodified.
- Structure: 4 pages · AcroForm
- Fields: 128 (115 text, 8 checkbox, 5 dropdown)
Quirks & limitations
- uscis.gov sits behind Akamai and returns 403 to datacenter-IP fetchers (verified: plain curl from a cloud box gets blocked). A residential IP with a browser-shaped request passes fine — this blank was fetched over Playwright/CDP driving a real Chrome on a residential connection, not curl.
- The one outlier in USCIS's own catalog: every other current USCIS form checked alongside it for this entry (N-400, I-131, I-485, I-765, I-90, I-864, I-751, G-28) is a dynamic-XFA PDF additionally wrapped in AES encryption with an empty user password (same owner-locked pattern as this registry's ca-fl-100) — pdf-lib and cantoo refuse to even load them. I-9 alone is a plain, unencrypted AcroForm with real baked appearances, which is the only reason it's fillable by this registry's tooling at all.
- Field-level JavaScript is extensive — 24+ /JS actions wired to field /AA (additional-actions) triggers for formatting and validation (e.g. SSN and date masks). These only execute in Adobe products; non-Adobe fillers (this registry's included) skip them silently, so format enforcement has to happen in your own layer.
- 4 pages: Section 1 (employee), Section 2 (employer, page 2), a preparer/translator supplement (page 3), and a Reverification and Rehire supplement (page 4, formerly 'Section 3'). Most automation only needs Section 1 + 2.
Tested request
This exact shape ran against the live API during the recorded test (values here shortened to two fields; the test filled all 128 supported fields). With flatten=true, two identical runs produced byte-identical output — sha256 32dcfd756fa84b4b9466ca46cac0c6549087bd4a9753bce2c8d3ce0eeaaa6088.
curl -X POST https://pdfops.dev/api/fill-form \
-F "pdf=@uscis-i-9.pdf" \
-F 'fields={"3 A lawful permanent resident Enter USCIS or ANumber":"Jane Doe","Signature of Employee":"Jane Doe"}' \
-F "flatten=true" \
-o filled.pdf
Enumerate all 128 field names first with the inspector or POST /api/inspect.
Field schema
All 128 fields (name, type, maxLength, options)
| Field name | Type | maxLength | Options |
|---|---|---|---|
3 A lawful permanent resident Enter USCIS or ANumber | TextField | ||
Signature of Employee | TextField | ||
Last Name Family Name from Section 1 | TextField | ||
First Name Given Name from Section 1 | TextField | ||
Middle initial if any from Section 1 | TextField | ||
First Name Given Name | TextField | ||
Employee Middle Initial (if any) | TextField | 1 | |
Employee Other Last Names Used (if any) | TextField | ||
Today's Date mmddyyy | TextField | ||
List A. Document 2. Expiration Date (if any) | TextField | ||
List A. Document Title 3. If any | TextField | ||
List A. Document 3. Enter Issuing Authority | TextField | ||
List A. Document 3 Number. If any | TextField | ||
List B Document 1 Title | TextField | ||
Additional Information | TextField | ||
Middle initial if any from Section 1-2 | TextField | ||
Sig Date mmddyyyy 1 | TextField | ||
Sig Date mmddyyyy 0 | TextField | ||
Sig Date mmddyyyy 2 | TextField | ||
Sig Date mmddyyyy 3 | TextField | ||
Signature of Preparer or Translator 0 | TextField | ||
Signature of Preparer or Translator 1 | TextField | ||
Signature of Preparer or Translator 2 | TextField | ||
Signature of Preparer or Translator 3 | TextField | ||
Preparer or Translator Last Name (Family Name) 0 | TextField | ||
Preparer or Translator Last Name (Family Name) 2 | TextField | ||
Preparer or Translator Last Name (Family Name) 3 | TextField | ||
Preparer or Translator Address (Street Number and Name) 0 | TextField | ||
Preparer or Translator Address (Street Number and Name) 1 | TextField | ||
Preparer or Translator Address (Street Number and Name) 2 | TextField | ||
Preparer or Translator Address (Street Number and Name) 3 | TextField | ||
Preparer or Translator First Name (Given Name) 0 | TextField | ||
Preparer or Translator Last Name (Family Name) 1 | TextField | ||
Preparer or Translator First Name (Given Name) 2 | TextField | ||
Preparer or Translator First Name (Given Name) 3 | TextField | ||
Preparer or Translator City or Town 0 | TextField | ||
Preparer or Translator City or Town 1 | TextField | ||
Preparer or Translator City or Town 2 | TextField | ||
Preparer or Translator City or Town 3 | TextField | ||
Preparer State 0 | Dropdown | 59 options | |
Preparer State 1 | Dropdown | 59 options | |
Preparer State 2 | Dropdown | 59 options | |
Preparer State 3 | Dropdown | 59 options | |
Zip Code 0 | TextField | 6 | |
Zip Code 1 | TextField | 6 | |
Zip Code 2 | TextField | 6 | |
Zip Code 3 | TextField | 6 | |
CB_1 | CheckBox | ||
CB_2 | CheckBox | ||
CB_3 | CheckBox | ||
CB_4 | CheckBox | ||
Date of Rehire 0 | TextField | ||
Date of Rehire 1 | TextField | ||
Date of Rehire 2 | TextField | ||
Todays Date 0 | TextField | ||
Todays Date 1 | TextField | ||
Todays Date 2 | TextField | ||
Last Name 0 | TextField | ||
Last Name 1 | TextField | ||
Last Name 2 | TextField | ||
First Name 0 | TextField | ||
First Name 1 | TextField | ||
First Name 2 | TextField | ||
Middle Initial 0 | TextField | 1 | |
Middle Initial 1 | TextField | 1 | |
Middle Initial 2 | TextField | 1 | |
PT Middle Initial 0 | TextField | 1 | |
PT Middle Initial 1 | TextField | 1 | |
PT Middle Initial 2 | TextField | 1 | |
PT Middle Initial 3 | TextField | 1 | |
Document Title 0 | TextField | ||
Document Title 2 | TextField | ||
Document Number 0 | TextField | ||
Document Number 1 | TextField | ||
Document Number 2 | TextField | ||
Expiration Date 0 | TextField | ||
Expiration Date 2 | TextField | ||
Expiration Date 1 | TextField | ||
Name of Emp or Auth Rep 0 | TextField | ||
Name of Emp or Auth Rep 1 | TextField | ||
Name of Emp or Auth Rep 2 | TextField | ||
Signature of Emp Rep 0 | TextField | ||
Signature of Emp Rep 1 | TextField | ||
Signature of Emp Rep 2 | TextField | ||
CB_Alt_0 | CheckBox | ||
CB_Alt_1 | CheckBox | ||
CB_Alt_2 | CheckBox | ||
Addtl Info 0 | TextField | ||
Addtl Info 2 | TextField | ||
Addtl Info 1 | TextField | ||
CB_Alt | CheckBox | ||
Last Name Family Name from Section 1-2 | TextField | ||
First Name Given Name from Section 1-2 | TextField | ||
State | Dropdown | 59 options | |
ZIP Code | TextField | 6 | |
Date of Birth mmddyyyy | TextField | ||
US Social Security Number | TextField | 9 | |
Telephone Number | TextField | ||
Last Name (Family Name) | TextField | ||
Address Street Number and Name | TextField | ||
Apt Number (if any) | TextField | ||
City or Town | TextField | ||
Employees E-mail Address | TextField | ||
Exp Date mmddyyyy | TextField | ||
USCIS ANumber | TextField | 10 | |
Form I94 Admission Number | TextField | 11 | |
Foreign Passport Number and Country of IssuanceRow1 | TextField | ||
Document Title 1 | TextField | ||
Issuing Authority 1 | TextField | ||
Document Number 0 (if any) | TextField | ||
Document Title 2 If any | TextField | ||
Issuing Authority_2 | TextField | ||
Document Number If any_2 | TextField | ||
Document Number if any_3 | TextField | ||
List C Expiration Date 1 | TextField | ||
List C Document Number 1 | TextField | ||
List C Issuing Authority 1 | TextField | ||
List C Document Title 1 | TextField | ||
FirstDayEmployed mmddyyyy | TextField | ||
S2 Todays Date mmddyyyy | TextField | ||
Last Name First Name and Title of Employer or Authorized Representative | TextField | ||
Signature of Employer or AR | TextField | ||
Employers Business or Org Name | TextField | ||
Employers Business or Org Address | TextField | ||
Expiration Date if any | TextField | ||
List B Issuing Authority 1 | TextField | ||
List B Document Number 1 | TextField | ||
List B Expiration Date 1 | TextField |
Frequently asked
Can I fill the USCIS Form I-9 programmatically?
Yes — the blank Edition 01/20/25 USCIS Form I-9 is a fillable AcroForm with 128 fields. In our tested run, all 128 supported fields were filled through the pdfops API and verified by re-inspecting the output; upstream pdf-lib also round-trips it, and pypdf handled its text fields. Field names are listed in the schema on this page.
← All forms in the registry · Inspect your own PDF · Make a flat PDF fillable