Forms / IRS
Fill Form 8821 programmatically
Form 8821 — Tax Information Authorization. Official IRS PDF, 1 page, 45 fields read automatically.
Transcript-monitoring services and tax practices run on 8821s — every monitored client needs one on file, and the designee half of the form is identical on every single copy. The only variable content is the client, and the client's details are a CRM record, not a typing task.
What you send
Real field names, straight from the PDF — the excerpt shows the first 5 of 40. The full list is in the table below, and the template hands you the complete JSON schema to copy.
{
"data": {
"topmostSubform[0].Page1[0].f1_6[0]": "string",
"topmostSubform[0].Page1[0].f1_7[0]": "string",
"topmostSubform[0].Page1[0].f1_8[0]": "string",
"topmostSubform[0].Page1[0].f1_9[0]": "string",
"topmostSubform[0].Page1[0].c1_1[0]": true
}
}
// …plus 35 more fields, all listed belowWhat you get back
The completed Form 8821, 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 8821 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 8821
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].Pg1Header[0].f1_1[0] | text | read-only |
| topmostSubform[0].Page1[0].Pg1Header[0].f1_2[0] | text | read-only |
| topmostSubform[0].Page1[0].Pg1Header[0].f1_3[0] | text | read-only |
| topmostSubform[0].Page1[0].Pg1Header[0].f1_4[0] | text | read-only |
| topmostSubform[0].Page1[0].Pg1Header[0].f1_5[0] | text | read-only |
| topmostSubform[0].Page1[0].f1_6[0] | text (multiline) | |
| topmostSubform[0].Page1[0].f1_7[0] | text | |
| topmostSubform[0].Page1[0].f1_8[0] | text | |
| topmostSubform[0].Page1[0].f1_9[0] | text | |
| topmostSubform[0].Page1[0].c1_1[0] | checkbox | |
| topmostSubform[0].Page1[0].f1_10[0] | text (multiline) | |
| topmostSubform[0].Page1[0].c1_2[0] | checkbox | |
| topmostSubform[0].Page1[0].f1_11[0] | text | |
| topmostSubform[0].Page1[0].f1_12[0] | text | max 11 chars |
| topmostSubform[0].Page1[0].f1_13[0] | text | |
| topmostSubform[0].Page1[0].f1_14[0] | text | |
| topmostSubform[0].Page1[0].c1_3[0] | checkbox | |
| topmostSubform[0].Page1[0].c1_4[0] | checkbox | |
| topmostSubform[0].Page1[0].c1_5[0] | checkbox | |
| topmostSubform[0].Page1[0].f1_15[0] | text (multiline) | |
| topmostSubform[0].Page1[0].c1_6[0] | checkbox | |
| topmostSubform[0].Page1[0].f1_16[0] | text | |
| topmostSubform[0].Page1[0].f1_17[0] | text | max 11 chars |
| topmostSubform[0].Page1[0].f1_18[0] | text | |
| topmostSubform[0].Page1[0].f1_19[0] | text | |
| topmostSubform[0].Page1[0].c1_7[0] | checkbox | |
| topmostSubform[0].Page1[0].c1_8[0] | checkbox | |
| topmostSubform[0].Page1[0].c1_9[0] | checkbox | |
| topmostSubform[0].Page1[0].c1_10[0] | checkbox | |
| topmostSubform[0].Page1[0].Table_Line3[0].BodyRow1[0].f1_20[0] | text | |
| topmostSubform[0].Page1[0].Table_Line3[0].BodyRow1[0].f1_21[0] | text | |
| topmostSubform[0].Page1[0].Table_Line3[0].BodyRow1[0].f1_22[0] | text | |
| topmostSubform[0].Page1[0].Table_Line3[0].BodyRow1[0].f1_23[0] | text | |
| topmostSubform[0].Page1[0].Table_Line3[0].BodyRow2[0].f1_24[0] | text | |
| topmostSubform[0].Page1[0].Table_Line3[0].BodyRow2[0].f1_25[0] | text | |
| topmostSubform[0].Page1[0].Table_Line3[0].BodyRow2[0].f1_26[0] | text | |
| topmostSubform[0].Page1[0].Table_Line3[0].BodyRow2[0].f1_27[0] | text | |
| topmostSubform[0].Page1[0].Table_Line3[0].BodyRow3[0].f1_28[0] | text | |
| topmostSubform[0].Page1[0].Table_Line3[0].BodyRow3[0].f1_29[0] | text | |
| topmostSubform[0].Page1[0].Table_Line3[0].BodyRow3[0].f1_30[0] | text | |
| topmostSubform[0].Page1[0].Table_Line3[0].BodyRow3[0].f1_31[0] | text | |
| topmostSubform[0].Page1[0].c1_11[0] | checkbox | |
| topmostSubform[0].Page1[0].c1_12[0] | checkbox | |
| topmostSubform[0].Page1[0].f1_32[0] | text | |
| topmostSubform[0].Page1[0].f1_33[0] | text |
The half that never changes, preset once
Preset your firm's name, address and CAF number as read-only in a form profile, and an 8821 becomes a one-POST document: client in, signature collected through the embed, finished form on your webhook. The same pattern as our 2848 page — many practices run one template of each, because information access and representation are different grants.
Questions people ask
- 8821 or 2848?
- The 8821 authorizes someone to receive a taxpayer's information; the 2848 appoints a representative who can act. Monitoring wants the 8821, resolution work usually needs the 2848 — plenty of engagements open with both.
- Will the IRS accept an electronic signature?
- The IRS accepts electronic signatures on 8821s submitted through its online submission tools; mailed and faxed copies want ink. Either way the completed form comes out of the same template — the signature route is a filing decision.
See your Form 8821 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 8821 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.