Forms / IRS
Fill Form 2848 programmatically
Form 2848 — Power of Attorney and Declaration of Representative. Official IRS PDF, 2 pages, 91 fields read automatically.
Tax-resolution and accounting platforms open every engagement the same way: a 2848 naming the representative. The firm's details never change, the client's come from the intake form, and yet someone assembles that same document by hand for every new matter — then again when a second representative joins.
What you send
Real field names, straight from the PDF — the excerpt shows the first 5 of 87. The full list is in the table below, and the template hands you the complete JSON schema to copy.
{
"data": {
"topmostSubform[0].Page1[0].TaxpayerName[0]": "string",
"topmostSubform[0].Page1[0].TaxpayerAddress[0]": "string",
"topmostSubform[0].Page1[0].TaxpayerIDSSN[0]": "string",
"topmostSubform[0].Page1[0].TaxpayerIDITIN[0]": "string",
"topmostSubform[0].Page1[0].TaxpayerIDEIN[0]": "string"
}
}
// …plus 82 more fields, all listed belowWhat you get back
The completed Form 2848, 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 2848 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 2848
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].TaxpayerName[0] | text (multiline) | |
| topmostSubform[0].Page1[0].TaxpayerAddress[0] | text (multiline) | |
| topmostSubform[0].Page1[0].TaxpayerIDSSN[0] | text | max 11 chars |
| topmostSubform[0].Page1[0].TaxpayerIDITIN[0] | text | max 11 chars |
| topmostSubform[0].Page1[0].TaxpayerIDEIN[0] | text | max 10 chars |
| topmostSubform[0].Page1[0].TaxpayerTelephone[0] | text | |
| topmostSubform[0].Page1[0].TaxpayerPlanNumber[0] | text | |
| topmostSubform[0].Page1[0].RepresentativesName1[0] | text (multiline) | |
| topmostSubform[0].Page1[0].RepresentativesAddress1[0] | text (multiline) | |
| topmostSubform[0].Page1[0].SentCopies1[0] | checkbox | |
| topmostSubform[0].Page1[0].CAFNumber1[0] | text | max 11 chars |
| topmostSubform[0].Page1[0].PTIN1[0] | text | max 11 chars |
| topmostSubform[0].Page1[0].TelephoneNo1[0] | text | |
| topmostSubform[0].Page1[0].FaxNo1[0] | text | |
| topmostSubform[0].Page1[0].NewAddress1[0] | checkbox | |
| topmostSubform[0].Page1[0].NewTelephoneNo1[0] | checkbox | |
| topmostSubform[0].Page1[0].NewFaxNo1[0] | checkbox | |
| topmostSubform[0].Page1[0].RepresentativesName2[0] | text (multiline) | |
| topmostSubform[0].Page1[0].RepresentativesAddress2[0] | text (multiline) | |
| topmostSubform[0].Page1[0].SentCopies2[0] | checkbox | |
| topmostSubform[0].Page1[0].CAFNumber2[0] | text | max 11 chars |
| topmostSubform[0].Page1[0].PTIN2[0] | text | max 11 chars |
| topmostSubform[0].Page1[0].TelephoneNo2[0] | text | |
| topmostSubform[0].Page1[0].FaxNo2[0] | text | |
| topmostSubform[0].Page1[0].NewAddress2[0] | checkbox | |
| topmostSubform[0].Page1[0].NewTelephoneNo2[0] | checkbox | |
| topmostSubform[0].Page1[0].NewFaxNo2[0] | checkbox | |
| topmostSubform[0].Page1[0].RepresentativesName3[0] | text (multiline) | |
| topmostSubform[0].Page1[0].RepresentativesAddress3[0] | text (multiline) | |
| topmostSubform[0].Page1[0].CAFNumber3[0] | text | max 11 chars |
| topmostSubform[0].Page1[0].PTIN3[0] | text | max 11 chars |
| topmostSubform[0].Page1[0].TelephoneNo3[0] | text | |
| topmostSubform[0].Page1[0].FaxNo3[0] | text | |
| topmostSubform[0].Page1[0].NewAddress3[0] | checkbox | |
| topmostSubform[0].Page1[0].NewTelephoneNo3[0] | checkbox | |
| topmostSubform[0].Page1[0].NewFaxNo3[0] | checkbox | |
| topmostSubform[0].Page1[0].RepresentativesName4[0] | text (multiline) | |
| topmostSubform[0].Page1[0].RepresentativesAddress4[0] | text (multiline) | |
| topmostSubform[0].Page1[0].CAFNumber4[0] | text | max 11 chars |
| topmostSubform[0].Page1[0].PTIN4[0] | text | max 11 chars |
| topmostSubform[0].Page1[0].TelephoneNo4[0] | text | |
| topmostSubform[0].Page1[0].FaxNo4[0] | text | |
| topmostSubform[0].Page1[0].NewAddress4[0] | checkbox | |
| topmostSubform[0].Page1[0].NewTelephoneNo4[0] | checkbox | |
| topmostSubform[0].Page1[0].NewFaxNo4[0] | checkbox | |
| topmostSubform[0].Page1[0].Table_Line3[0].BodyRow1[0].Description1[0] | text (multiline) | |
| topmostSubform[0].Page1[0].Table_Line3[0].BodyRow1[0].TaxForm1[0] | text (multiline) | |
| topmostSubform[0].Page1[0].Table_Line3[0].BodyRow1[0].Years1[0] | text (multiline) | |
| topmostSubform[0].Page1[0].Table_Line3[0].BodyRow2[0].Description2[0] | text (multiline) | |
| topmostSubform[0].Page1[0].Table_Line3[0].BodyRow2[0].TaxForm2[0] | text (multiline) | |
| topmostSubform[0].Page1[0].Table_Line3[0].BodyRow2[0].Years2[0] | text (multiline) | |
| topmostSubform[0].Page1[0].Table_Line3[0].BodyRow3[0].Description3[0] | text (multiline) | |
| topmostSubform[0].Page1[0].Table_Line3[0].BodyRow3[0].TaxForm3[0] | text (multiline) | |
| topmostSubform[0].Page1[0].Table_Line3[0].BodyRow3[0].Years3[0] | text (multiline) | |
| topmostSubform[0].Page1[0].SpecificUse[0] | checkbox | |
| topmostSubform[0].Page1[0].AccessRecords[0] | checkbox | |
| topmostSubform[0].Page1[0].AuthorizeDisclosure[0] | checkbox | |
| topmostSubform[0].Page1[0].SubtituteOrAdd[0] | checkbox | |
| topmostSubform[0].Page1[0].SignReturn[0] | checkbox | |
| topmostSubform[0].Page1[0].AdditionalActs1[0] | text | |
| topmostSubform[0].Page1[0].AdditionalActs2[0] | text | |
| topmostSubform[0].Page1[0].AdditionalActs3[0] | text | |
| topmostSubform[0].Page1[0].OtherActs[0] | checkbox | |
| topmostSubform[0].Page1[0].OtherActs1[0] | text | |
| topmostSubform[0].Page1[0].OtherActs2[0] | text | |
| topmostSubform[0].Page2[0].SpecificDeletions1[0] | text | |
| topmostSubform[0].Page2[0].SpecificDeletions2[0] | text | |
| topmostSubform[0].Page2[0].RetentionRevocation[1] | checkbox | |
| topmostSubform[0].Page2[0].Title[0] | text (multiline) | |
| topmostSubform[0].Page2[0].PrintName[0] | text (multiline) | |
| topmostSubform[0].Page2[0].PrintNameTaxpayer[0] | text (multiline) | |
| topmostSubform[0].Page2[0].Table_PartII[0].BodyRow1[0].Designation1[0] | text | max 1 char |
| topmostSubform[0].Page2[0].Table_PartII[0].BodyRow1[0].Jurisdiction1[0] | text | |
| topmostSubform[0].Page2[0].Table_PartII[0].BodyRow1[0].Bar1[0] | text | |
| topmostSubform[0].Page2[0].Table_PartII[0].BodyRow1[0].Signature1[0] | text | read-only |
| topmostSubform[0].Page2[0].Table_PartII[0].BodyRow1[0].Date1[0] | text | |
| topmostSubform[0].Page2[0].Table_PartII[0].BodyRow2[0].Designation2[0] | text | max 1 char |
| topmostSubform[0].Page2[0].Table_PartII[0].BodyRow2[0].Jurisdiction2[0] | text | |
| topmostSubform[0].Page2[0].Table_PartII[0].BodyRow2[0].Bar2[0] | text | |
| topmostSubform[0].Page2[0].Table_PartII[0].BodyRow2[0].Signature2[0] | text | read-only |
| topmostSubform[0].Page2[0].Table_PartII[0].BodyRow2[0].Date2[0] | text | |
| topmostSubform[0].Page2[0].Table_PartII[0].BodyRow3[0].Designation3[0] | text | max 1 char |
| topmostSubform[0].Page2[0].Table_PartII[0].BodyRow3[0].Jurisdiction3[0] | text | |
| topmostSubform[0].Page2[0].Table_PartII[0].BodyRow3[0].Bar3[0] | text | |
| topmostSubform[0].Page2[0].Table_PartII[0].BodyRow3[0].Signature3[0] | text | read-only |
| topmostSubform[0].Page2[0].Table_PartII[0].BodyRow3[0].Date3[0] | text | |
| topmostSubform[0].Page2[0].Table_PartII[0].BodyRow4[0].Designation4[0] | text | max 1 char |
| topmostSubform[0].Page2[0].Table_PartII[0].BodyRow4[0].Jurisdiction4[0] | text | |
| topmostSubform[0].Page2[0].Table_PartII[0].BodyRow4[0].Bar4[0] | text | |
| topmostSubform[0].Page2[0].Table_PartII[0].BodyRow4[0].Signature4[0] | text | read-only |
| topmostSubform[0].Page2[0].Table_PartII[0].BodyRow4[0].Date4[0] | text |
Prefill the half that never changes
A form profile can preset the representative's name, CAF number and PTIN as read-only, leaving only the taxpayer's side to fill. Your intake flow POSTs the client details, and the document that comes back needs nothing but signatures — which the embed can also collect.
Questions people ask
- Will the IRS accept an electronically signed 2848?
- The IRS accepts electronic signatures on Forms 2848 submitted through its online submission tools; mailed or faxed copies want ink. Doc2api produces the completed form either way — the signature route is a filing decision, not a document one.
- Can I reuse one template across all my clients?
- That's the intended shape: one uploaded 2848, one profile per representative or office, and a POST per client.
See your Form 2848 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 2848 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.