---
title: "Take your first real return"
url: https://services.dev/docs/examples/tax/launch
captured: [tax-launch.txt]
---
# Take your first real return

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

> Everything outside the tax folder a real return depends on, from the e-file transmitter and the Treasury to the brand's credentials, the verifiers, the two doors and each client's ledger, each with the contract a real one meets.

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

The tax folder runs whole on localhost because every outside system it reads is a sandbox at `example.test`, and the e-file system is your own simulated code in `lib/tax.ts`. A real return needs a real one behind each. Most are the brand's own, connected once. These are all of them, as the folder reads them, each with what stands in for it on localhost:

```bash
npx services.dev check --connections   # every outside system the tax folder reads, and what stands in for it on localhost
```

```txt title="magic values: none"
services/annual-return.ts:44      file.submit efile          the e-file transmitter, under the brand's efin    lib/tax.ts: efile, simulated, answering as a test environment
services/annual-return.ts:50      extend.submit extension    the same transmitter, for each state's extension  lib/tax.ts: extension, simulated
services/annual-return.ts:49      pay.submit                 the Treasury's payment system, and each state's   https://treasury.example.test/payments
services/estimate.ts:22           pay.submit                 the Treasury's payment system, and each state's   https://treasury.example.test/payments
services/notice-response.ts:28    send.submit                the IRS's correspondence channel                  https://correspondence.example.test/replies
services/notice-response.ts:29    pay.submit                 the Treasury's payment system                     https://treasury.example.test/payments
services/information-returns.ts:20  match.submit             TIN matching, under the brand's tin_matching      https://tin-matching.example.test/match
services/information-returns.ts:22  file.submit              the information returns system, under its iris    https://iris.example.test/submit
services/transcript.ts:25         order.submit               transcripts, through the participant program      https://transcripts.example.test/order
brand.ts:12                       credentials.efin           the e-file application's verifier                 https://verify.example.test/efin
brand.ts:13                       credentials.iris           the transmitter control code's verifier           https://verify.example.test/iris
brand.ts:14                       credentials.tin_matching   the TIN matching program's verifier               https://verify.example.test/tin-matching
brand.ts:15                       credentials.ives           the participant program's verifier                https://verify.example.test/ives
pools/preparers.ts:24             verify                     the preparers' credential verifier                https://verify.example.test/preparers
pools/preparers.ts:11             door                       gigs.tax, operated by your account                https://gigs.tax/door.json
services/year-end-close.ts:17     roles.accountant.pool      gigs.accountants, another operator's Pool         https://gigs.accountants/pools/accountants.json
services/annual-return.ts:42      authorize.how id-verified  identity verification for the officer's Form 8879  https://id.example.test/verify
services/notice-response.ts:27    poa.how esign              e-signature for the Form 2848                     https://sign.example.test/envelopes
services/annual-return.ts:21      input.books                the client's ledger, read-only                    https://books.example/{client}
19 connections · 16 the brand's own, made once · 2 the doors' · 1 each client's, at the order
```

## The contract each must meet

| Dependency | The contract a real one meets |
|---|---|
| The e-file transmitter, behind `efile` and `extension` | your code calls it: one submission per jurisdiction, the federal return first and each state linked to it, answered `job.accepted(ref, { fee_usd })` or `job.rejected(...codes)` with the IRS's and each state's own codes, which `rejected` routes; an extension a state grants without a filing is answered accepted, with nothing sent |
| The brand's e-file number, `credentials.efin` | the verifier re-checks it every 30 days; a stale one refuses every filing and extension, lists the dates at risk on the console, and the guarantee answers for a date it costs |
| The Treasury's and each state's payment systems | take a payment for a taxpayer and its period, and return its receipt; a payment over the single-payment cap is the client's to make |
| The IRS's correspondence channel | takes a signed response under a live authorization, and returns its receipt |
| The transcript program, and `credentials.ives` | orders under the brand's participant status, on the taxpayer's signed Form 4506-C, received within 120 days of the signature |
| TIN matching and the information returns system, `credentials.tin_matching` and `credentials.iris` | match each payee's name and TIN, and take the 1099s under the brand's transmitter code, each with its receipt |
| The preparers' verifier | writes each member's PTIN, fresh to 31 December, CTEC registration, CPA licence, enrolled agent's card or bar admission, with where it counts, through its own token |
| gigs.tax | your door, with its terms pinned at their version; members join once for every Pool on it |
| gigs.accountants | the operator's terms, pinned at a version, its minimum pay per role and its placement line, with 30 days' notice of a change |
| Identity verification, behind `authorize` | proves the officer is who signs her Form 8879, to the remote-signing identity check, and writes how onto the record |
| E-signature, behind `poa` | returns the signed Form 2848, naming the representative, hashed on the record |
| Each client's ledger, `input.books` | a read-only link the client gives at the order, or the books the year-end close kept |
| Live keys | `sk_live_` keys, which take real orders and charge real money |
| Payouts | apis.tax's payout account, which receives each charge and pays every member and the placement; a live order answers `payouts_unconfigured` until it is connected |

## Before the first return

Run `check`, then [the year](https://services.dev/docs/examples/tax/years.md) on a test clock, and one return on a test key end to end, from the order to the payout. Connect the transmitter and the brand's credentials, point the Pool at its verifier, then take live keys and connect payouts. Each client's ledger arrives with their first order. [Deploy](https://services.dev/docs/operate/deploy.md) takes the folder live, and [Operate](https://services.dev/docs/operate.md) is what running it looks like.

---

- Up: [The tax example](https://services.dev/docs/examples/tax.md)
- Previous: [Porting apis.tax](https://services.dev/docs/examples/tax/port.md)
- Next: [The sales example](https://services.dev/docs/examples/sales.md)
