The rules table
Who may perform each act in the tax brand's Services, frozen under a version. Who prepares and signs, the EFIN a return goes under, where the §7216 consent lets return information go, who represents, which advice waits for a signer, and the fee no return may carry. Every row is illustrative and records its position.
tax's wordsreturn is a jobtaxpayer is a subjectreview is a taskpreparer is a member
Every row is illustrative: a brand's counsel writes its real table, and each row says what the brand does and why. An act is reserved to a credential, a consent or the brand's own credential, open to the brand, or refused: Rules.
cat rules.ts prepare: { reserved: preparer, where: '*', in: { 'US-CA': { all: ['ptin'], any: ['ctec', 'cpa', 'enrolled agent', 'attorney'] } }, position: 'A paid preparer holds a PTIN; on a California leg the brand staffs a CTEC registrant, a CPA, an enrolled agent or an attorney.' },
sign: { reserved: signer, where: '*', position: 'The signer holds a PTIN, and a CPA licence or an enrolled agent\'s card, and signs as the paid preparer for the brand\'s firm.' },
file: { reserved: preparer, and: { brand: 'efin' }, where: '*', position: 'E-filed under the brand\'s own EFIN, the signer\'s PTIN in the paid-preparer block.' },
disclose: { reserved: { consent: '7216' }, position: '§7216: return information goes only where the taxpayer\'s signed consent names, and abroad only when it says so.' },
price_outcome: { refused: true, position: 'Circular 230 §10.27: no fee is contingent on a return as prepared or amended.' },
version: '2026-10',
extend: { open: true, position: 'An extension asks for time, not a return: the brand files it, or answers that a state needs none.' },
pay: { open: true, position: 'Paying what is owed with the extension is a payment, not a return: the brand sends it.' },
represent: { reserved: ['cpa', 'enrolled agent', 'attorney'], where: '*', self: true, position: 'Representing a taxpayer needs one of these and a Form 2848 that names the representative; a taxpayer may answer for themselves.' },
send: { open: true, position: 'Sending a signed response under a live authorization is a delivery act.' },
price_outcome: { open: { on: 'abated_usd' }, position: 'Circular 230 §10.27(b): a fee on a penalty the agency abates is permitted.' },
advise: { reserved: signer, where: '*', kind: 'advice', position: 'An answer that tells a taxpayer what to do is a signer\'s advice, adopted in their name.' },
match: { open: true, and: { brand: 'tin_matching' }, position: 'Each payee\'s name and TIN are matched under the brand\'s own TIN matching.' },
file: { open: true, and: { brand: 'iris' }, position: 'A 1099 reports a payment, not a return: the brand files it under its own transmitter code.' },
order: { reserved: { brand: 'ives' }, position: 'Transcripts are ordered through the brand\'s participant status.' },
disclose: filing.disclose,
prepare_return: { refused: true, route: 'https://apis.tax/annual-return', position: 'A paid preparer with a PTIN prepares a return: the transcript door prepares none.' },
represent_taxpayer: { refused: true, route: 'https://apis.tax/notice-response', position: 'A CPA, enrolled agent or attorney represents a taxpayer: the transcript door represents none.' },
sign_consent: { refused: true, position: 'The taxpayer signs the consent: nothing here signs for them.' },The whole file, and check after it.
| Service | Act | Who performs it | Where | Position |
|---|---|---|---|---|
| annual-return, amended-return | prepare | a PTIN holder; on a California leg, also a CTEC registration, a CPA licence, an EA card or a bar admission | every leg | The brand staffs California's leg the way California registers preparers. |
| annual-return, amended-return | sign | a PTIN, and a CPA licence or an EA card | every leg | The signer signs as the paid preparer for the brand's firm, by name, PTIN and credential. |
| annual-return, amended-return | file | a PTIN, under the brand's own EFIN | every leg | The signer never lends their own e-file number. |
| annual-return, amended-return, transcript | disclose | the taxpayer's signed §7216 consent | where the consent names | Return information goes nowhere the consent doesn't name, and abroad only when it says so. |
| annual-return, amended-return | price_outcome | refused | Circular 230 §10.27: no fee rides on a return as prepared or amended. | |
| annual-return | extend, pay | the brand: open | An extension asks for time, not a return; a deposit is a payment. | |
| notice-response | represent | a CPA, an EA or an attorney under a Form 2848 that names them, or the taxpayer for themselves | everywhere | |
| notice-response | send | the brand: open | Sending a signed response under a live grant is a delivery act. | |
| notice-response | price_outcome | open, on a penalty abated | §10.27(b): a fee on a penalty the IRS takes off is permitted. | |
| question | advise | a signer: advice | everywhere | An answer that tells a taxpayer what to do goes out in a signer's name. |
| information-returns | match, file | the brand: open, under its TIN matching and its transmitter code | A 1099 reports a payment; it isn't a return. | |
| transcript | order | the brand's own IVES participant status | ||
| transcript | prepare_return, represent_taxpayer, sign_consent | refused, the first two routed to the brand's own Services | The transcript door prepares, represents and signs nothing. |
The disclose row joins the brand's two lines. The officer's consent lists each disclosure she allows, such as a lender she names, who then reads the filed return. A consent that leaves out disclosure abroad sends the review only to members who work in the US.
Each return pins the version it was ordered under, 2026-10.
Each step of the annual return, who does it, and the row that decides it:
npx services.dev check --who services/annual-return.tsservices/annual-return.ts · Annual Return · 12 steps · $1,800 per return, charged when the federal return is accepted
consent party the owner, as officer · an ask: the §7216 consent · nothing · Free
organizer party the owner · an ask: upload the request list · nothing · Free
compute code schedules, your code · by: schedules, citing each one · nothing · Free
draft ai AI, citing the workpapers · the default · AI, at cost · Free
check ai AI, with three adversarial lenses · the default · AI, at cost · Free
sign credentialed a signer from practitioners: a PTIN, and a CPA licence or an enrolled agent's card, as the paid preparer for the brand's firm · rules: sign is reserved · $45 + $15 a jurisdiction an act · Launch: roles.signer.pool at :34
authorize party the owner, id-verified · an ask: Form 8879-CORP or 8879-PE · nothing · Free
file brand the brand, under its own EFIN, with the signer's PTIN in the paid-preparer block · rules: file is reserved, and the brand's efin · nothing · every plan: the floor
prepare credentialed a preparer from practitioners: a PTIN, and on a California leg a CTEC registration or a CPA, EA or bar card · rules: prepare is reserved; a rejection no route names · $90 + $15 a jurisdiction an act · Launch: roles.preparer.pool at :34
tentative code tentative, your code · three days out and unfiled · nothing · Free
pay system Treasury and each state · a submit; rules: pay is open · the taxpayer's own payment · Free
extend system the IRS and each state that needs a filing · a submit; rules: extend is open · nothing · Free
beyond the steps: subject at :29 · subject.of_record.custodian at :31, Team · subject.keeps at :32 · the assessment, refund and expiring clocks on the subject at :55-57
plan Team (services.dev) · the highest line · on Free, you sign and staff prepare: check --fit free services/annual-return.tsA refusal cites its row, names whose act it is, and meters nothing:
→ POST /returns {"service":"prepare_return","max_usd":100,"key":"prepare_return"}← 403 act_refused: prepare_return is never performed here: A paid preparer with a PTIN prepares a return: the transcript door prepares none.
cites rules 2026-10 · services['transcript'].prepare_return
next hand_to_person https://apis.tax/annual-return
→ POST /returns {"service":"represent_taxpayer","max_usd":100,"key":"represent_taxpayer"}
← 403 act_refused: represent_taxpayer is never performed here: A CPA, enrolled agent or attorney represents a taxpayer: the transcript door represents none.
cites rules 2026-10 · services['transcript'].represent_taxpayer
next hand_to_person https://apis.tax/notice-response
→ POST /returns {"service":"sign_consent","max_usd":100,"key":"sign_consent"}
← 403 act_refused: sign_consent is never performed here: The taxpayer signs the consent: nothing here signs for them.
cites rules 2026-10 · services['transcript'].sign_consent
next none: the act is never performed here
← GET /owner/events: no return.ordered and no charge, and the key has spent $0A refused row binds a price too. A fee on a return's refund fails check; the notice response's abatement may carry one:
npx services.dev check services/annual-return.tsservices/annual-return.ts · 45 lines · $1,800 per job, or 20% of the refund, filed 5 days before its deadline, 20% off if late, or we pay the penalty and its interest, up to $5,000, after we ask the IRS to take it off, charged when file is accepted.
✗ rules_refused · annual-return price.outcome: rules 2026-10 refuses a fee contingent on the return as prepared. Circular 230 §10.27: no fee is contingent on a return as prepared or amended. Take outcome off the price; a notice's abated penalty may carry one.
at services/annual-return.ts:60 · price.outcome · rules.ts:16 · price_outcome
✗ 1 to fix
next Take outcome off the price.npx services.dev check services/notice-response.ts --only priceservices/notice-response.ts · 19 lines · $299 per job, or $99 if you answer it yourself, or 25% of a penalty abated, $99 at least, within 48 hours, charged on send's receipt.
price outcome on abated_usd · 25%, $99.00 at least · when kind is penalty · rules 2026-10 · services['notice-response'].price_outcome, openA row with in asks more of one leg. A PTIN alone can't claim California's repair; an EA card can:
→ POST /reviews/tsk_7Hq3/claim # as mbr_7Hq6← 403 ineligible · credential: prepare on US-CA needs ptin, and ctec, cpa, enrolled agent or attorney, and the verifier holds ptin alone for mbr_7Hq6 · rules 2026-10 · services['annual-return'].prepare→ POST /reviews/tsk_7Hq3/claim # as mbr_8Ea1← 200 claimed · prepare · tsk_7Hq3 · US-CA · $150.00 · held for you 24 hoursA lender the consent doesn't name is refused at $0:
→ POST /returns {"service":"transcript","taxpayer":{"name":"Fern & Co","email":"books@fern.example"},"ein":"98-7654350","tin_last4":"4350","years":[2026],"source":"filed","purpose":"business lending","max_usd":12,"key":"tr-fern-2"} # Northline Credit's key← 403 consent_required: disclose needs the taxpayer's §7216 consent to name this lender, and job_4Ta1's names Harbor Bank alone. Ask Maya Fern for one, or order with source: 'ives' and her Form 4506-C.
cites rules 2026-10 · services['transcript'].disclose
next hand_to_person https://apis.tax/asks/new?consent=7216&for=Northline%20CreditWhere an act happens covers where and in, and Refusals and cures every refusal a row can bring.