---
title: "The money"
url: https://services.dev/docs/examples/tax/money
captured: [tax-amend.txt, tax-annual-return.txt, tax-check.txt, tax-money.txt]
---
# The money

URL: https://services.dev/docs/examples/tax/money

> Every way the tax brand earns, as check prints it before you sell and as the owner reads it after a year. The Tax Plan once a cycle, a notice answered with a professional or by the client, a fee on a penalty abated, an approval sold on top, a state's fee at cost, what each person is paid, and what a missed date gives back.

*tax's words: return is a job, taxpayer is a subject, review is a task, preparer is a member (examples/tax/brand.ts).*

A return earns its price, less the AI, the people and services.dev's take. The brand sells seven ways:

| The brand sells | Written |
|---|---|
| [A year, with allowances](https://services.dev/docs/examples/tax/tax-plan.md): a job inside one charges $0, so its ledger shows only its cost | `price.every`, `price.includes` |
| [A return, priced on its date](https://services.dev/docs/examples/tax/deadline.md) | `within: '5d before file'`, `late: '20%'` |
| [A professional, or the client](#two-ways-to-answer-a-notice): a taxpayer may always answer their own notice | `self: 99`, and `self: true` on the rules row |
| [A share of a penalty abated](#paid-on-whats-abated): the one fee that rides on a result | `price.outcome`, open on the notice response's rules row |
| [A person's approval, as an upgrade](https://services.dev/docs/examples/tax/year-end-close.md): AI closes the books, an accountant attests for $600 more | `approved: 900` |
| [Each payee's 1099](https://services.dev/docs/examples/tax/information-returns.md), $15 a payee | `per: 'payees'` |
| [A state's fee, at cost](#a-states-fee), read off the filing's receipt | `lines.state_fees` |

## Before you sell

`check` prints each Service's ledger and its margin, with the arithmetic that makes it:

```bash
npx services.dev check
```

```txt title="captured/tax-check.txt · magic values: none"
services/amended-return.ts · 22 lines · $900 per job, within 30 days, charged when file or aar is accepted.
  ledger  +$900.00 · AI $1.26 (example) · preparer $150.00 · signer $105.00 · you $643.74 · 4 jurisdictions
  margin  at least $465.00 when the first preparer does prepare ($900.00 − $150.00 preparer − $105.00 signer − $180.00 AI cap) · $337.50 at the ladder's cap, the lower of 50% and what the floor leaves · $210.00 after a decline and a second preparer
          a job that stops costs you at most $285.00
services/annual-return.ts · 45 lines · $1,800 per job, 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.
  ledger  +$1,800.00 · AI $1.68 (example) · signer $105.00 · you $1,693.32 · 4 jurisdictions
  margin  at least $1,335.00 when the first signer signs ($1,800.00 − $105.00 signer − $360.00 AI cap) · $1,282.50 at the ladder's cap, the lower of 50% and what the floor leaves · $1,230.00 after a decline and a second signer · $1,185.00 when a routed step runs
          a job that stops costs you at most $465.00 · filed late, $360.00 less · a missed date you answer for, up to $5,000.00 more
services/carryforward-watch.ts · 8 lines · $9 per year, charged at the start of each year.
  ledger  +$9.00 · AI $0.84 (example) · you $8.16
  margin  at least $7.20 a job (80%) · a job that stops costs you at most $1.80
services/estimate.ts · 17 lines · $79 per job, within 48 hours, charged on delivery.
  ledger  +$79.00 · AI $0.42 (example) · you $78.58
  margin  at least $63.20 a job (80%) · a job that stops costs you at most $15.80
services/information-returns.ts · 17 lines · $15 per payee, charged when file is accepted.
  ledger  +$90.00 · AI $0.84 (example) · you $89.16 · 6 payees
  margin  at least $72.00 a job (80%) · a job that stops costs you at most $18.00
services/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.
  ledger  +$299.00 · AI $0.84 (example) · representative $90.00 · you $208.16
          +$99.00 · AI $0.84 (example) · you $98.16 · self
          +25% of the penalty abated, $99.00 at least · AI $0.84 (example) · representative $90.00 · abated
  margin  at least $149.20 when the first representative signs ($299.00 − $90.00 representative − $59.80 AI cap) · $104.20 at the ladder's cap, the lower of 50% and what the floor leaves · $59.20 after a decline and a second representative · $79.20 yourself (80%)
          a job that stops costs you at most $149.80
services/question.ts · 10 lines · $49 per job, within 48 hours, charged on delivery.
  ledger  +$49.00 · AI $0.84 (example) · you $48.16
  margin  at least $39.20 a job (80%) · a job that stops costs you at most $9.80
services/tax-plan.ts · 18 lines · $2,400 per year, charged at the start of each year, 1 annual-return, 25 information-returns payees, 4 estimate, 12 question and 2 notice-response included each year.
  ledger  +$2,400.00 · AI $0.84 (example) · you $2,399.16
  margin  at least $1,920.00 a job (80%) · a job that stops costs you at most $480.00
services/transcript.ts · 18 lines · roadmap · $12 per job, within 48 hours, charged on order's receipt, or at disclose for a return the brand filed.
  ledger  +$12.00 · AI $0.84 (example) · you $11.16
  margin  at least $9.60 a job (80%) · a job that stops costs you at most $2.40
services/year-end-close.ts · 15 lines · $300 per job, or $900 with an accountant's approval, within 48 hours, charged on delivery.
  ledger  +$300.00 · AI $1.26 (example) · you $298.74
          +$900.00 · AI $1.26 (example) · accountant $250.00 · placement $20.00 · you $628.74 · approved
  margin  at least $240.00 a job (80%), $450.00 approved (50%) · a job that stops costs you at most $450.00
```

## The Tax Plan's year

The Tax Plan charged $2,400 at the start of each cycle:

```txt
→ GET /subscriptions/sbn_7Hq2
```

```txt title="magic values: owner.email = signs@example.test, metadata.sandbox.asks = {"organizer.books":"after 160d","organizer.assets":"waive","organizer #2":"after 2d","w9":"after 19d"}, metadata.sandbox.outside = {"reject":{"file.US-NY":["ein_mismatch"]}}, metadata.sandbox.events = { notice.received: { at: 2027-11-14T15:00:00Z, data: { notice, reply_by, tax_years } } }"
← sbn_7Hq2 · tax-plan · active · cycle 2 · 2028-01-20 → 2029-01-20 · $2,400.00 per year
  allowances  annual-return 1 of 1 · information-returns 0 of 25 · estimate 0 of 4 · question 0 of 12 · notice-response 0 of 2
  schedule    information → information-returns · next 2029-01-05
  schedule    annual → annual-return · next 2029-02-01
  schedule    estimate → estimate · next 2028-04-05
  event       question.asked → question
  event       notice.received → notice-response
  charge      cycle 1 · $2,400.00 · 2027-01-20
  charge      cycle 2 · $2,400.00 · 2028-01-20
```

Each job it ordered, at its cost:

```txt
→ GET /subscriptions/sbn_7Hq2
```

```txt title="magic values: owner.email = signs@example.test, metadata.sandbox.asks = {"organizer.books":"after 160d","organizer.assets":"waive","organizer #2":"after 2d","w9":"after 19d"}, metadata.sandbox.outside = {"reject":{"file.US-NY":["ein_mismatch"]}}, metadata.sandbox.events = { notice.received: { at: 2027-11-14T15:00:00Z, data: { notice, reply_by, tax_years } } }"
# each job the plan drew on, as the owner reads its ledger
  job_4Tx1  information-returns  2026  +$0.00 · AI $0.84 · you −$0.84 · 5 payees
  job_4Tx3  annual-return        2026  +$0.00 · AI $3.36 · signer $210.00 · you −$213.36
  job_4Tx4  estimate                   +$0.00 · AI $0.42 · you −$0.42
  job_4Tx5  estimate                   +$0.00 · AI $0.42 · you −$0.42
  job_4Tx6  estimate                   +$0.00 · AI $0.42 · you −$0.42
  job_4Tx7  notice-response            +$0.00 · AI $0.84 · representative $90.00 · you −$90.84
  job_4Tx8  estimate                   +$0.00 · AI $0.42 · you −$0.42
  job_4TxA  information-returns  2027  +$0.00 · AI $0.84 · you −$0.84 · 6 payees
  job_4Tx9  annual-return        2027  you $0.00
```

## Outside the Tax Plan

A return on its own charges $1,800; an amendment pays two members:

```txt
→ GET /owner/returns/job_4Tx2   # the owner console
```

```txt title="magic values: none"
  ledger  +$1,800.00 · AI $1.68 · signer $105.00 · you $1,693.32
```

```txt
→ GET /owner/returns/job_4Tx3   # the owner console
```

```txt title="magic values: none"
  ledger  +$900.00 · AI $1.26 · preparer $150.00 · signer $105.00 · you $643.74
```

## Two ways to answer a notice

One OFFER sells both postures. Under `posture: 'self'` the officer answers herself, and the representative's $90 drops out:

```txt
→ POST /returns {"service":"notice-response","owner":{"name":"Ada Lovelace","email":"ada@example.com"},"ein":"12-3456789","notice":"cp161.pdf","reply_by":"2027-12-14","tax_years":["2026"],"key":"cp161-1"}
```

```txt title="captured/tax-money.txt · 402 · OFFER · $299 with a representative, or $99 if you answer it yourself. · magic values: owner.email = signs@example.test, metadata.sandbox.asks = {"organizer.books":"after 160d","organizer.assets":"waive","organizer #2":"after 2d","w9":"after 19d"}, metadata.sandbox.outside = {"reject":{"file.US-NY":["ein_mismatch"]}}, metadata.sandbox.events = { notice.received: { at: 2027-11-14T15:00:00Z, data: { notice, reply_by, tax_years } } }"
  choices   posture: 'full' · $299.00 · a CPA, enrolled agent or attorney answers for you, under a Form 2848 that names them
            posture: 'self' · $99.00 · the AI drafts the response, and you sign and send it in your own name, with nothing to authorize
  abated    on a penalty the agency takes off: 25% of what it takes off, $99.00 at least, in place of $299.00
  plan      inside a Tax Plan, either posture draws on the notice-response allowance at $0.00
  next      POST /returns {…,"max_usd":299} or {…,"posture":"self","max_usd":99}
```

```txt
→ GET /owner/returns/job_4Tz1   # posture self
```

```txt title="captured/tax-money.txt · 200 · job_4Tz1 · notice-response · delivered · $99.00 charged · posture self · rules 2026-10 · magic values: owner.email = signs@example.test, metadata.sandbox.asks = {"organizer.books":"after 160d","organizer.assets":"waive","organizer #2":"after 2d","w9":"after 19d"}, metadata.sandbox.outside = {"reject":{"file.US-NY":["ein_mismatch"]}}, metadata.sandbox.events = { notice.received: { at: 2027-11-14T15:00:00Z, data: { notice, reply_by, tax_years } } }"
  record  read · ai · CP161 | match · code · each payment posted to its period | classify · code · agree → pay | poa · skipped: the owner performs every act it grants | review · ai · adversarial · pass | respond · owner · signed as officer, in her own name · id-verified | send · rcp_7Hz1 accepted | pay · Treasury · accepted
  ledger  +$99.00 · AI $0.84 · you $98.16 · posture self
```

## Paid on what's abated

Circular 230 lets one fee ride on a result: a share of a penalty the IRS takes off, here a quarter, $99 at least. [The rules table](https://services.dev/docs/examples/tax/rules.md#a-refused-act) refuses the same key on a return:

```txt
→ GET /owner/returns/job_4Tz4
```

```txt title="captured/tax-money.txt · 200 · job_4Tz4 · notice-response · accepted · Harbor Partners · $367.50 charged · on the abatement's receipt · magic values: owner.email = signs@example.test, metadata.sandbox.asks = {"organizer.books":"after 160d","organizer.assets":"waive","organizer #2":"after 2d","w9":"after 19d"}, metadata.sandbox.outside = {"reject":{"file.US-NY":["ein_mismatch"]}}, metadata.sandbox.events = { notice.received: { at: 2027-11-14T15:00:00Z, data: { notice, reply_by, tax_years } } }"
  record  read · ai · CP162 · failure-to-file penalty $1,470.00 for 2025: 3 partners × 2 months × $245 | match · code · nothing misapplied | classify · code · penalty → respond | respond · representative · claimed by mbr_8Ea1, CAF 0312-45678R | poa · owner · Form 2848 · names mbr_8Ea1 · income, 1065, 2025 | respond · a request for first-time abatement, three clean years before it · stamped | send · rcp_7Hz7 accepted | abated · rcp_7Hz8 · $1,470.00 taken off
  price   25% of $1,470.00 abated, $367.50, above the $99.00 floor · rules 2026-10 · services['notice-response'].price_outcome
  ledger  +$367.50 · AI $0.84 · representative $90.00 · you $276.66
```

## A state's fee

Only what the receipt states is charged:

```txt
→ POST /returns {"service":"annual-return","business":{"name":"Harbor Partners","email":"books@harbor.example"},"owner":{"name":"Rosa Diaz","email":"rosa@harbor.example"},"ein":"98-7654340","tax_year":"2026","entity":"partnership","jurisdictions":["US","US-NJ"],"books":"https://books.example/harbor","key":"harbor-2026"}
```

```txt title="captured/tax-money.txt · 402 · OFFER · $1,800 per return, 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. · magic values: owner.email = signs@example.test, metadata.sandbox.asks = {"organizer.books":"after 160d","organizer.assets":"waive","organizer #2":"after 2d","w9":"after 19d"}, metadata.sandbox.outside = {"reject":{"file.US-NY":["ein_mismatch"]}}, metadata.sandbox.events = { notice.received: { at: 2027-11-14T15:00:00Z, data: { notice, reply_by, tax_years } } }"
  lines     state fees at cost, read off each filing's receipt · charged with the return, up to max_usd
  holds     $1,800.00 once you send max_usd · released when every filing is accepted
  next      POST /returns {…,"max_usd":2000}
```

```txt
→ GET /owner/returns/job_4Tz3
```

```txt title="captured/tax-money.txt · 200 · job_4Tz3 · annual-return · accepted · $1,950.00 charged · held $2,000.00, $50.00 released · magic values: owner.email = signs@example.test, metadata.sandbox.asks = {"organizer.books":"after 160d","organizer.assets":"waive","organizer #2":"after 2d","w9":"after 19d"}, metadata.sandbox.outside = {"reject":{"file.US-NY":["ein_mismatch"]}}, metadata.sandbox.events = { notice.received: { at: 2027-11-14T15:00:00Z, data: { notice, reply_by, tax_years } } }"
  receipts  rcp_7Hz3 US 1065 2026 accepted · rcp_7Hz4 US-NJ NJ-1065 2026 accepted · fee $150.00
  ledger    +$1,950.00 · state fees $150.00 at cost, rcp_7Hz4 (pass-through) · AI $1.68 · signer $75.00 · you $1,723.32
  take      on $1,725.00 · the state's fee leaves the base with its receipt
```

## When a date is missed

A late date costs the brand, never the client:

| When | What happens | Key |
|---|---|---|
| Filed after the price's deadline | 20% comes off the charge, released from the hold | `late: '20%'` |
| The client never answers | The job lapses, the hold is released, nothing is charged | `organizer.expires` |
| A penalty for a date the brand or its member missed | Credited back from your line, up to $5,000 | `clocks.file.guarantee` |

[When a date is missed](https://services.dev/docs/examples/tax/missed.md) walks Cedar Works' late return, from the stale credential to the credit back.

## Pay

Each act is payable two days after it and paid that evening:

```txt
→ GET /subscriptions/sbn_7Hq2
```

```txt title="magic values: owner.email = signs@example.test, metadata.sandbox.asks = {"organizer.books":"after 160d","organizer.assets":"waive","organizer #2":"after 2d","w9":"after 19d"}, metadata.sandbox.outside = {"reject":{"file.US-NY":["ein_mismatch"]}}, metadata.sandbox.events = { notice.received: { at: 2027-11-14T15:00:00Z, data: { notice, reply_by, tax_years } } }"
# pay accrued to members: each act payable two days after it, paid that evening
  mbr_8Ea1  job_4Tx2  sign    $105.00  payable 2026-02-03 · paid 2026-02-03 · simulated
  mbr_8Ea1  job_4Tx3  sign    $105.00  payable 2027-07-13 · paid 2027-07-13 · simulated
  mbr_8Ea1  job_4Tx3  sign    $105.00  payable 2027-07-15 · paid 2027-07-15 · the re-sign after a repair, a new act · simulated
  mbr_8Ea1  job_4Tx7  respond $90.00   payable 2027-11-16 · paid 2027-11-16 · simulated
```

## The brand's year

Ten jobs: one return at its own price, the rest inside two cycles:

```txt
→ GET /subscriptions/sbn_7Hq2
```

```txt title="magic values: owner.email = signs@example.test, metadata.sandbox.asks = {"organizer.books":"after 160d","organizer.assets":"waive","organizer #2":"after 2d","w9":"after 19d"}, metadata.sandbox.outside = {"reject":{"file.US-NY":["ein_mismatch"]}}, metadata.sandbox.events = { notice.received: { at: 2027-11-14T15:00:00Z, data: { notice, reply_by, tax_years } } }"
# the brand
tax · 10 jobs · +$6,600.00 · AI $9.24 · people $405.00 · you $6,185.76
```

[Money](https://services.dev/docs/money.md) has the formula.

---

- Up: [The tax example](https://services.dev/docs/examples/tax.md)
- Previous: [The owner console](https://services.dev/docs/examples/tax/console.md)
- Next: [What the brand gets](https://services.dev/docs/examples/tax/surfaces.md)
