Forms / IRS
Fill Form 2553 programmatically
Form 2553 — Election by a Small Business Corporation. Official IRS PDF, 4 pages, 100 fields read automatically.
Nearly every new S-corp starts with a 2553, and the clock is unforgiving — the election window opens and closes within months of formation. Formation platforms hold every answer the form wants the moment the company is created; what slows the filing down is assembling the document and chasing each shareholder for their consent line.
What you send
Real field names, straight from the PDF — the excerpt shows the first 5 of 100. The full list is in the table below, and the template hands you the complete JSON schema to copy.
{
"data": {
"topmostSubform[0].Page1[0].NameAddress[0].f1_01[0]": "string",
"topmostSubform[0].Page1[0].NameAddress[0].f1_02[0]": "string",
"topmostSubform[0].Page1[0].NameAddress[0].f1_03[0]": "string",
"topmostSubform[0].Page1[0].f1_04[0]": "string",
"topmostSubform[0].Page1[0].f1_05[0]": "string"
}
}
// …plus 95 more fields, all listed belowWhat you get back
The completed Form 2553, streamed back as the response — or delivered to your webhook, HMAC-signed.
curl -X POST https://www.doc2api.co/api/v1/templates/<ID>/fill \ -H "X-Api-Key: d2a_live_…" \ -H "Content-Type: application/json" \ -d @payload.json -o filled.pdf # → the completed Form 2553 as a PDF. # With a webhook configured, the reply is JSON and the # document arrives at your endpoint as a signed URL.
Or skip the mapping entirely: embed the actual form on your site and let the person it belongs to fill and sign it — you receive the values as JSON and the finished PDF.
Every field on Form 2553
Extracted automatically from the official PDF — this table is generated by the same code that reads your uploads. In the editor, each of these is highlighted on the page itself, so you never map a name blind.
| Field name | Type | Notes |
|---|---|---|
| topmostSubform[0].Page1[0].NameAddress[0].f1_01[0] | text | |
| topmostSubform[0].Page1[0].NameAddress[0].f1_02[0] | text | |
| topmostSubform[0].Page1[0].NameAddress[0].f1_03[0] | text | |
| topmostSubform[0].Page1[0].f1_04[0] | text | max 11 chars |
| topmostSubform[0].Page1[0].f1_05[0] | text | |
| topmostSubform[0].Page1[0].f1_06[0] | text | |
| topmostSubform[0].Page1[0].c1_1[0] | checkbox | |
| topmostSubform[0].Page1[0].c1_2[0] | checkbox | |
| topmostSubform[0].Page1[0].f1_07[0] | text | |
| topmostSubform[0].Page1[0].c1_3[0] | checkbox | |
| topmostSubform[0].Page1[0].c1_3[1] | checkbox | |
| topmostSubform[0].Page1[0].f1_08[0] | text | |
| topmostSubform[0].Page1[0].c1_3[2] | checkbox | |
| topmostSubform[0].Page1[0].c1_3[3] | checkbox | |
| topmostSubform[0].Page1[0].f1_09[0] | text | |
| topmostSubform[0].Page1[0].c1_4[0] | checkbox | |
| topmostSubform[0].Page1[0].f1_10[0] | text | |
| topmostSubform[0].Page1[0].f1_11[0] | text | |
| topmostSubform[0].Page1[0].f1_12[0] | text | |
| topmostSubform[0].Page1[0].f1_13[0] | text | |
| topmostSubform[0].Page1[0].f1_14[0] | text | |
| topmostSubform[0].Page1[0].f1_15[0] | text | |
| topmostSubform[0].Page1[0].f1_16[0] | text | |
| topmostSubform[0].Page1[0].f1_17[0] | text | |
| topmostSubform[0].Page1[0].f1_18[0] | text | |
| topmostSubform[0].Page1[0].f1_19[0] | text | |
| topmostSubform[0].Page1[0].f1_20[0] | text | |
| topmostSubform[0].Page1[0].f1_21[0] | text | |
| topmostSubform[0].Page2[0].f2_01[0] | text | |
| topmostSubform[0].Page2[0].f2_02[0] | text | max 10 chars |
| topmostSubform[0].Page2[0].Table_Part1[0].Row1[0].f2_03[0] | text (multiline) | |
| topmostSubform[0].Page2[0].Table_Part1[0].Row1[0].f2_04[0] | text (multiline) | |
| topmostSubform[0].Page2[0].Table_Part1[0].Row1[0].f2_05[0] | text | |
| topmostSubform[0].Page2[0].Table_Part1[0].Row1[0].f2_06[0] | text | |
| topmostSubform[0].Page2[0].Table_Part1[0].Row1[0].f2_07[0] | text | |
| topmostSubform[0].Page2[0].Table_Part1[0].Row1[0].f2_08[0] | text | max 11 chars |
| topmostSubform[0].Page2[0].Table_Part1[0].Row1[0].f2_09[0] | text | |
| topmostSubform[0].Page2[0].Table_Part1[0].Row2[0].f2_10[0] | text (multiline) | |
| topmostSubform[0].Page2[0].Table_Part1[0].Row2[0].f2_11[0] | text (multiline) | |
| topmostSubform[0].Page2[0].Table_Part1[0].Row2[0].f2_12[0] | text | |
| topmostSubform[0].Page2[0].Table_Part1[0].Row2[0].f2_13[0] | text | |
| topmostSubform[0].Page2[0].Table_Part1[0].Row2[0].f2_14[0] | text | |
| topmostSubform[0].Page2[0].Table_Part1[0].Row2[0].f2_15[0] | text | max 11 chars |
| topmostSubform[0].Page2[0].Table_Part1[0].Row2[0].f2_16[0] | text | |
| topmostSubform[0].Page2[0].Table_Part1[0].Row3[0].f2_17[0] | text (multiline) | |
| topmostSubform[0].Page2[0].Table_Part1[0].Row3[0].f2_18[0] | text (multiline) | |
| topmostSubform[0].Page2[0].Table_Part1[0].Row3[0].f2_19[0] | text | |
| topmostSubform[0].Page2[0].Table_Part1[0].Row3[0].f2_20[0] | text | |
| topmostSubform[0].Page2[0].Table_Part1[0].Row3[0].f2_21[0] | text | |
| topmostSubform[0].Page2[0].Table_Part1[0].Row3[0].f2_22[0] | text | max 11 chars |
| topmostSubform[0].Page2[0].Table_Part1[0].Row3[0].f2_23[0] | text | |
| topmostSubform[0].Page2[0].Table_Part1[0].Row4[0].f2_24[0] | text (multiline) | |
| topmostSubform[0].Page2[0].Table_Part1[0].Row4[0].f2_25[0] | text (multiline) | |
| topmostSubform[0].Page2[0].Table_Part1[0].Row4[0].f2_26[0] | text | |
| topmostSubform[0].Page2[0].Table_Part1[0].Row4[0].f2_27[0] | text | |
| topmostSubform[0].Page2[0].Table_Part1[0].Row4[0].f2_28[0] | text | |
| topmostSubform[0].Page2[0].Table_Part1[0].Row4[0].f2_29[0] | text | max 11 chars |
| topmostSubform[0].Page2[0].Table_Part1[0].Row4[0].f2_30[0] | text | |
| topmostSubform[0].Page2[0].Table_Part1[0].Row5[0].f2_31[0] | text (multiline) | |
| topmostSubform[0].Page2[0].Table_Part1[0].Row5[0].f2_32[0] | text (multiline) | |
| topmostSubform[0].Page2[0].Table_Part1[0].Row5[0].f2_33[0] | text | |
| topmostSubform[0].Page2[0].Table_Part1[0].Row5[0].f2_34[0] | text | |
| topmostSubform[0].Page2[0].Table_Part1[0].Row5[0].f2_35[0] | text | |
| topmostSubform[0].Page2[0].Table_Part1[0].Row5[0].f2_36[0] | text | max 11 chars |
| topmostSubform[0].Page2[0].Table_Part1[0].Row5[0].f2_37[0] | text | |
| topmostSubform[0].Page2[0].Table_Part1[0].Row6[0].f2_38[0] | text (multiline) | |
| topmostSubform[0].Page2[0].Table_Part1[0].Row6[0].f2_39[0] | text (multiline) | |
| topmostSubform[0].Page2[0].Table_Part1[0].Row6[0].f2_40[0] | text | |
| topmostSubform[0].Page2[0].Table_Part1[0].Row6[0].f2_41[0] | text | |
| topmostSubform[0].Page2[0].Table_Part1[0].Row6[0].f2_42[0] | text | |
| topmostSubform[0].Page2[0].Table_Part1[0].Row6[0].f2_43[0] | text | max 11 chars |
| topmostSubform[0].Page2[0].Table_Part1[0].Row6[0].f2_44[0] | text | |
| topmostSubform[0].Page2[0].Table_Part1[0].Row7[0].f2_45[0] | text (multiline) | |
| topmostSubform[0].Page2[0].Table_Part1[0].Row7[0].f2_46[0] | text (multiline) | |
| topmostSubform[0].Page2[0].Table_Part1[0].Row7[0].f2_47[0] | text | |
| topmostSubform[0].Page2[0].Table_Part1[0].Row7[0].f2_48[0] | text | |
| topmostSubform[0].Page2[0].Table_Part1[0].Row7[0].f2_49[0] | text | |
| topmostSubform[0].Page2[0].Table_Part1[0].Row7[0].f2_50[0] | text | max 11 chars |
| topmostSubform[0].Page2[0].Table_Part1[0].Row7[0].f2_51[0] | text | |
| topmostSubform[0].Page3[0].f3_01[0] | text | |
| topmostSubform[0].Page3[0].f3_02[0] | text | max 10 chars |
| topmostSubform[0].Page3[0].c3_1[0] | checkbox | |
| topmostSubform[0].Page3[0].c3_1[1] | checkbox | |
| topmostSubform[0].Page3[0].c3_1[2] | checkbox | |
| topmostSubform[0].Page3[0].c3_2[0] | checkbox | |
| topmostSubform[0].Page3[0].c3_3[0] | checkbox | |
| topmostSubform[0].Page3[0].c3_4[0] | checkbox | |
| topmostSubform[0].Page3[0].c3_5[0] | checkbox | |
| topmostSubform[0].Page3[0].c3_5[1] | checkbox | |
| topmostSubform[0].Page3[0].c3_6[0] | checkbox | |
| topmostSubform[0].Page3[0].c3_7[0] | checkbox | |
| topmostSubform[0].Page3[0].c3_8[0] | checkbox | |
| topmostSubform[0].Page3[0].c3_9[0] | checkbox | |
| topmostSubform[0].Page4[0].f4_01[0] | text | |
| topmostSubform[0].Page4[0].f4_02[0] | text | max 10 chars |
| topmostSubform[0].Page4[0].f4_03[0] | text (multiline) | |
| topmostSubform[0].Page4[0].f4_04[0] | text | max 11 chars |
| topmostSubform[0].Page4[0].f4_05[0] | text (multiline) | |
| topmostSubform[0].Page4[0].f4_06[0] | text | max 10 chars |
| topmostSubform[0].Page4[0].f4_07[0] | text |
The form your shareholders have to finish
The 2553 isn't done when the entity's half is filled — every shareholder consents on their own line, with a signature. Prefill the entity's side, embed the form, and send each shareholder to sign their row; completed submissions land on your webhook, so 'waiting on one signature' is a state your system can see rather than an email thread.
Questions people ask
- How is a 2553 filed?
- By mail or fax to the IRS service center for the entity's state — there is no online filing. This produces the completed, signed PDF; the transmission is yours. Whether an electronic signature is acceptable on it is defined by the IRS's current e-signature policy, so check that before skipping ink.
- What about a late election?
- The form itself carries the representation lines used for late-election relief. Whether a client qualifies is tax advice — we produce the document, not the eligibility call.
See your Form 2553 pipeline working in the next five minutes
The button uploads the official PDF into the editor as a live template with an API key — no account, nothing to cancel. Trial documents are watermarked and kept for 24 hours; sign up to keep your work.
Doc2api is not affiliated with the Internal Revenue Service. Form 2553 is a public government work; the copy here is the official revision, refreshed from irs.gov. Nothing on this page is tax or legal advice — how a completed form may be signed, filed or retained is defined by the issuing agency.