Registry
OPM Optional Form 306 — programmatic fill compatibility
Declaration for Federal Employment · US Office of Personnel Management (OPM) · Revised October 2019. 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 | 38/38 supported fields landed; flatten=true byte-deterministic (sha256 8a2c33f31d3c…) |
| pdf-lib | 1.17.1 | verified (38/38) | 38 fields filled in-process |
| @cantoo/pdf-lib (fork) | 2.6.5 | verified (38/38) | 38 fields filled in-process |
| pypdf | 6.15.0 | text fields verified (25/25) | 25 text fields written and re-read (text fields only) |
| pdftk-java | 3.3.3 | verified (38/38) | 38 fields filled via FDF and re-dumped |
| qpdf --check | 11.9.0 | warnings | WARNING: public/registry/blank/opm-of-306.pdf: page 2: shared object 633: in hint table but not computed list | qpdf: operation succeeded with warnings |
| poppler render check | 24.02.0 | values render (25/25) | 25/25 filled text values present in pdftotext output of the pdf-lib-filled file; page-1 raster sha256 8ddb82581522… |
File facts
- Source: https://www.opm.gov/forms/pdf_fill/of0306.pdf (issuer page: here)
- Blank tested: opm-of-306.pdf · 167 KB · sha256
3229d821dd6b07b2f38c73fa5be4ce87276a09f03df881fab2be9ef3bd5b6261 - License: US federal government work — public domain (17 U.S.C. § 105). The hash-verified blank is redistributed here unmodified.
- Structure: 3 pages · AcroForm
- Fields: 40 (25 text, 13 radiogroup, 2 signature)
Quirks & limitations
- The field-type sampler of this corpus: real radio groups (13 of them — the Yes/No question pairs), plus two true digital-signature fields, alongside plain text fields.
- Radio groups expose their selectable options at inspection; set the option string, not 'true'.
- The two signature fields are actual /Sig fields: programmatic form-fillers list them but cannot fill them — signing requires a certificate-based signature workflow, which is out of scope for AcroForm value-filling APIs. Both pdfops and the local libraries report them as unsupported rather than faking a value.
Tested request
This exact shape ran against the live API during the recorded test (values here shortened to two fields; the test filled all 38 supported fields). With flatten=true, two identical runs produced byte-identical output — sha256 8a2c33f31d3c234e0369ef8e9e55b05ecfba8ddccddef665a9ec02abaacfb4c5.
curl -X POST https://pdfops.dev/api/fill-form \
-F "pdf=@opm-of-306.pdf" \
-F 'fields={"Name":"Jane Doe","SSN":"Jane Doe"}' \
-F "flatten=true" \
-o filled.pdf
Enumerate all 40 field names first with the inspector or POST /api/inspect.
Field schema
All 40 fields (name, type, maxLength, options)
| Field name | Type | maxLength | Options |
|---|---|---|---|
Name | TextField | ||
SSN | TextField | ||
PlaceBirth | TextField | ||
Citizen | RadioGroup | 2 options | |
CitizenCountry | TextField | ||
Birthdate | TextField | ||
OtherNames | TextField | ||
DayPhone | TextField | ||
NightPhone | TextField | ||
Male | RadioGroup | 2 options | |
SelectiveService | RadioGroup | 2 options | |
Military | RadioGroup | 2 options | |
Branch1 | TextField | ||
From1 | TextField | ||
To1 | TextField | ||
Discharge1 | TextField | ||
Branch2 | TextField | ||
Branch3 | TextField | ||
From2 | TextField | ||
From3 | TextField | ||
To2 | TextField | ||
To3 | TextField | ||
Discharge2 | TextField | ||
Discharge3 | TextField | ||
Convixted | RadioGroup | 2 options | |
Court-Martial | RadioGroup | 2 options | |
CurrentCharges | RadioGroup | 2 options | |
Fired | RadioGroup | 2 options | |
Debt | RadioGroup | 2 options | |
Relatives | RadioGroup | 2 options | |
Retirement | RadioGroup | 2 options | |
Explanation | TextField | ||
LeaveLastJob | TextField | ||
CancelWaiver | RadioGroup | 3 options | |
BasicLifeInsurance | RadioGroup | 3 options | |
ApplicantDate | TextField | ||
AppointingOfficerDate | TextField | ||
AppointeeDate | TextField | ||
ApplicantSign | Signature | ||
AppointeeSign | Signature |
Frequently asked
Can I fill the OPM Optional Form 306 programmatically?
Yes — the blank Revised October 2019 OPM Optional Form 306 is a fillable AcroForm with 40 fields. In our tested run, all 38 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.
Can the OPM Optional Form 306's signature fields be filled via API?
No — the form has 2 true digital-signature field(s), which require a certificate-based signing workflow. Value-filling APIs (pdfops included) list them at inspection but skip them rather than faking a value. All other field types on the form filled and verified normally.
← All forms in the registry · Inspect your own PDF · Make a flat PDF fillable