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

ToolVersionResultDetail
pdfops APIhosted, tested 2026-08-06verified + deterministic flatten128/128 supported fields landed; flatten=true byte-deterministic (sha256 32dcfd756fa8…)
pdf-lib1.17.1verified (128/128)128 fields filled in-process
@cantoo/pdf-lib (fork)2.6.5verified (128/128)128 fields filled in-process
pypdf6.15.0text fields verified (115/115)115 text fields written and re-read (text fields only)
pdftk-java3.3.3verified (127/127)127 fields filled via FDF and re-dumped
qpdf --check11.9.0structurally cleanerrors that qpdf cannot detect
poppler render check24.02.0values 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

Quirks & limitations

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 nameTypemaxLengthOptions
3 A lawful permanent resident Enter USCIS or ANumberTextField
Signature of EmployeeTextField
Last Name Family Name from Section 1TextField
First Name Given Name from Section 1TextField
Middle initial if any from Section 1TextField
First Name Given NameTextField
Employee Middle Initial (if any)TextField1
Employee Other Last Names Used (if any)TextField
Today's Date mmddyyyTextField
List A. Document 2. Expiration Date (if any)TextField
List A. Document Title 3. If anyTextField
List A. Document 3. Enter Issuing AuthorityTextField
List A. Document 3 Number. If anyTextField
List B Document 1 TitleTextField
Additional InformationTextField
Middle initial if any from Section 1-2TextField
Sig Date mmddyyyy 1TextField
Sig Date mmddyyyy 0TextField
Sig Date mmddyyyy 2TextField
Sig Date mmddyyyy 3TextField
Signature of Preparer or Translator 0TextField
Signature of Preparer or Translator 1TextField
Signature of Preparer or Translator 2TextField
Signature of Preparer or Translator 3TextField
Preparer or Translator Last Name (Family Name) 0TextField
Preparer or Translator Last Name (Family Name) 2TextField
Preparer or Translator Last Name (Family Name) 3TextField
Preparer or Translator Address (Street Number and Name) 0TextField
Preparer or Translator Address (Street Number and Name) 1TextField
Preparer or Translator Address (Street Number and Name) 2TextField
Preparer or Translator Address (Street Number and Name) 3TextField
Preparer or Translator First Name (Given Name) 0TextField
Preparer or Translator Last Name (Family Name) 1TextField
Preparer or Translator First Name (Given Name) 2TextField
Preparer or Translator First Name (Given Name) 3TextField
Preparer or Translator City or Town 0TextField
Preparer or Translator City or Town 1TextField
Preparer or Translator City or Town 2TextField
Preparer or Translator City or Town 3TextField
Preparer State 0Dropdown59 options
Preparer State 1Dropdown59 options
Preparer State 2Dropdown59 options
Preparer State 3Dropdown59 options
Zip Code 0TextField6
Zip Code 1TextField6
Zip Code 2TextField6
Zip Code 3TextField6
CB_1CheckBox
CB_2CheckBox
CB_3CheckBox
CB_4CheckBox
Date of Rehire 0TextField
Date of Rehire 1TextField
Date of Rehire 2TextField
Todays Date 0TextField
Todays Date 1TextField
Todays Date 2TextField
Last Name 0TextField
Last Name 1TextField
Last Name 2TextField
First Name 0TextField
First Name 1TextField
First Name 2TextField
Middle Initial 0TextField1
Middle Initial 1TextField1
Middle Initial 2TextField1
PT Middle Initial 0TextField1
PT Middle Initial 1TextField1
PT Middle Initial 2TextField1
PT Middle Initial 3TextField1
Document Title 0TextField
Document Title 2TextField
Document Number 0TextField
Document Number 1TextField
Document Number 2TextField
Expiration Date 0TextField
Expiration Date 2TextField
Expiration Date 1TextField
Name of Emp or Auth Rep 0TextField
Name of Emp or Auth Rep 1TextField
Name of Emp or Auth Rep 2TextField
Signature of Emp Rep 0TextField
Signature of Emp Rep 1TextField
Signature of Emp Rep 2TextField
CB_Alt_0CheckBox
CB_Alt_1CheckBox
CB_Alt_2CheckBox
Addtl Info 0TextField
Addtl Info 2TextField
Addtl Info 1TextField
CB_AltCheckBox
Last Name Family Name from Section 1-2TextField
First Name Given Name from Section 1-2TextField
StateDropdown59 options
ZIP CodeTextField6
Date of Birth mmddyyyyTextField
US Social Security NumberTextField9
Telephone NumberTextField
Last Name (Family Name)TextField
Address Street Number and NameTextField
Apt Number (if any)TextField
City or TownTextField
Employees E-mail AddressTextField
Exp Date mmddyyyyTextField
USCIS ANumberTextField10
Form I94 Admission NumberTextField11
Foreign Passport Number and Country of IssuanceRow1TextField
Document Title 1TextField
Issuing Authority 1TextField
Document Number 0 (if any)TextField
Document Title 2 If anyTextField
Issuing Authority_2TextField
Document Number If any_2TextField
Document Number if any_3TextField
List C Expiration Date 1TextField
List C Document Number 1TextField
List C Issuing Authority 1TextField
List C Document Title 1TextField
FirstDayEmployed mmddyyyyTextField
S2 Todays Date mmddyyyyTextField
Last Name First Name and Title of Employer or Authorized RepresentativeTextField
Signature of Employer or ARTextField
Employers Business or Org NameTextField
Employers Business or Org AddressTextField
Expiration Date if anyTextField
List B Issuing Authority 1TextField
List B Document Number 1TextField
List B Expiration Date 1TextField

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.