---
title: "Everyone gets an app"
url: https://services.dev/docs/start/participants
captured: [tax-who.txt]
---
# Everyone gets an app

URL: https://services.dev/docs/start/participants

> Who takes part in a job is worked out from your Service, never declared, and each of them gets the app and the calls their part needs.

You never list who takes part in a job. `check` reads it off your Service: who orders it, who the work is for, who acts at each step, and who runs the business. Each of them gets an app, and each app shows only the calls their part allows.

## Derived, never declared

Translation, as `npx services.dev` writes it, has no person in it, so `check` finds two apps:

```txt
$ npx services.dev check
services/translation.ts · 4 lines · $49 per job, within 48 hours, charged on delivery.
  who     AI delivers every job.
  steps   draft · ai → review · ai · adversarial
  agent   order_translation · 24 of 30 words · bought job_7Hq2 · $49.00 · no person
  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
  apps    customer portal · owner console
```

[Grow it](https://services.dev/docs/grow/role.md) with a question for the buyer and a sworn translator's signature, and the third app appears. Nothing declared it:

```txt
$ npx services.dev check
services/translation.ts · 13 lines · $89 per job, within 48 hours, charged on delivery.
  who     A translator signs every document before delivery. (rules 2026-10) The buyer answers at glossary.
  roles   translator · sworn translator · from sworn-translators · $30 an act
  steps   glossary · buyer · answer → translate · ai → harden · ai · adversarial · 2 lenses → sign · translator · * · stamped
  bounds  reserved sign to sworn translator
  agent   order_translation · 25 of 30 words · job_7Hq2 waits on party
  ledger  +$89.00 · AI $1.26 (example) · translator $30.00 · you $57.74
  margin  at least $41.20 when the first translator signs ($89.00 − $30.00 translator − $17.80 AI cap) · $26.20 at the ladder's cap, the lower of 50% and what the floor leaves · $11.20 after a decline and a second translator
          a job that stops costs you at most $47.80
  apps    customer portal · delivery portal · owner console
```

The signer is on the ledger, the buyer is on the `glossary` step, and the delivery portal is where the signer signs.

## Who does each step

`check --who` prints, for one Service, the doer of every step, why it is theirs, how they are paid, and the plan its line needs. apis.tax's annual return:

```bash
npx services.dev check --who services/annual-return.ts
```

```txt title="captured/tax-who.txt · magic values: none"
services/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.ts
```

Each doer is a rung of [who does the step](https://services.dev/docs/people.md#who-does-the-step).

## Who takes part

| Who | Their part | Their app | Money | Plan |
|---|---|---|---|---|
| **buyer** | pays, holding a key with a cap; often an agent | customer portal | pays the price, held until the fact it names | Free |
| **client** | the party the work is for, when it isn't the buyer: a `party` input. Only the client sets the choices that are theirs to make | customer portal, or a link that needs no account | pays nothing, unless they're also the buyer | Free |
| **member** | a credentialed person who does a step, from a Pool | delivery portal | paid the fee fixed at post, on every outcome of the act | Launch |
| **staff** | your own team, at the steps you keep in house | owner console | on your own payroll; no fee line | Free |
| **[tenant](https://services.dev/docs/people/tenants.md)** | an integrator reselling your Service as its own offer | tenant console | pays your price and sets its own | Team |
| **[practice](https://services.dev/docs/people/practices.md)** | a buyer that brings its own professionals to do the steps | practice console | pays your price; its professionals are its own | Scale |
| **owner** | you: every job, every ledger line, the line where people come in | owner console | keeps the ledger's last line | Free |

## Where the member comes from

A credentialed step needs a person who holds the credential. You and two staff sign on Free, with a role and no `pool`. Past that, a Pool's members come from one of five places, each one line:

| From | One line | Roster · rules · name members see | Placement | Plan |
|---|---|---|---|---|
| [A Pool you rent](https://services.dev/docs/people/pool/share.md#import-a-pool-another-operator-runs) | `pool: 'gigs.expert/translators'` | the operator's, throughout | theirs, on each Task it fills | Launch |
| [Your own Pool](https://services.dev/docs/people/pool.md) | `Pool({...})`, at `/<pool>` on your brand | yours · yours · your brand | none | Launch |
| [An existing door](https://services.dev/docs/people/pool/door.md#use-an-existing-door) | `door: 'gigs.expert'` | the door's · yours · the door | the door's, on each Task it fills | Launch |
| [Your own door](https://services.dev/docs/people/pool/door.md) | `door: 'join.lingua.example'` | yours · yours · your door | none | Team |
| [Your Pool, sold](https://services.dev/docs/people/pool/share.md#export-your-pool) | `export` on your Pool | yours · yours, for every importer | yours, paid to you | Scale |

Every source keeps one [member charter](https://services.dev/docs/people/pool/door.md#the-member-charter) that no Pool, importer or door can weaken. Which step each person does, and how they're paid, is [who does the step](https://services.dev/docs/people.md#who-does-the-step).

## What each one can call

Each credential reaches the operations its holder may call, and no more. This table is generated from the credential and operation registries:

| Who | Holds | Can | Operations | Reaches | A person? |
|---|---|---|---|---|---|
| a buyer | secret key, test mode, `sk_test_` | order, read, accept, send back, cancel, end, watch, and run test clocks | 37 | http, cli, mcp, sdk |  |
| a buyer | secret key, `sk_live_` | order, read, accept, send back, cancel, end, watch | 35 | http, cli, mcp, sdk |  |
| an agent a party delegated, scoped by Service and time | delegated key, `dlg_` | order within its cap; complete answer and upload asks; read that party's jobs | 31 | http, mcp, sdk |  |
| the named party, with no account | party link | complete that one ask, once | 4 | http | yes |
| a member, in the delivery portal or the member CLI | member session | every member act: join, set availability, keep their conflicts ledger, read their feed, claim, clear and do a Task | 30 | http, cli | yes |
| an integrator, with On-Behalf-Of | tenant key, `tk_` | order for its customer; read with consent | 17 | http, sdk |  |
| the owner and staff roles | owner session | the console, staff acts | 34 | http, cli | yes |
| a Pool's or the brand's verifier | verifier token, `vt_` | write verified facts | 1 | http |  |
| a watch | webhook secret, `whsec_` | verify deliveries | 0 | sdk |  |
| anyone | no key | `service.quote`, `service.waitlist`, `service.list`, `service.get`, `key.create`, `brand.home`, `brand.health`, `sandbox.fixtures`, `brand.card`, `brand.openapi`, `brand.llms`, `brand.manifest`, `brand.pricing`, `brand.verify` | 14 | http |  |
## What only a person does

A key can order, wait, accept and send back, so an agent can buy a whole job. Some acts need the person themselves: signing, consenting, directing, deciding and approving. Those take a person's own session or the link their ask carries, and they are never an MCP tool. An agent that reaches one gets the link first in `next`, to hand to the person it asks, and the calls it can still make:

```txt
→ tools/call get_job {"id":"job_7Hq2","wait":50}
# the text an agent reads first, beside structuredContent
← job_7Hq2 · waiting · on party · $49.00 held
  next  hand http://localhost:8787/a/ask_7Hq2?t=8FaWT5EoCj4h-uMyjlXp3_ to the person it asks
  next  get_job {"id":"job_7Hq2"}
  next  cancel_job {"id":"job_7Hq2"}
```

If it tries to finish the job itself, the answer is `needs_the_party`, with the same link.

So a person keeps every act that is theirs, and an agent still does everything else.

## Next

**[Choose your shape](https://services.dev/docs/start/shapes.md)**: the reference Service that looks like yours, what each job leaves you, and the plans it climbs.

---

- Up: [Your first paid job](https://services.dev/docs.md)
- Previous: [How a job runs](https://services.dev/docs/start/how-it-runs.md)
- Next: [Choose your shape](https://services.dev/docs/start/shapes.md)
