---
title: "Money"
url: https://services.dev/docs/money
captured: [money-ledger.txt, money-outcomes.txt]
---
# Money

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

> How a Service earns and pays. One ledger the buyer, each member and you read, one carrier for every way money goes wrong, and the Stripe object behind every line.

Every Service says how it earns, and `check` fails one that doesn't. The buyer's money is held at the order, released by the fact the price names, and split by one ledger:

**you = charge − tax − processing − AI − pay − pass-through − coverage − placement − nested Services − services.dev's take**

A won deal on api.forsale leaves you $3,388.66 and one a closer loses costs $340.00, so it breaks even at 9.1% won. `check` prints both before your first order.

## Who carries what

Every way money can go wrong has one carrier, named before anyone pays. The page each row links proves its cells, and [flow of funds](https://services.dev/docs/money/flow-of-funds.md) proves the Stripe column.

| When | The buyer | A member | Your brand | services.dev |
|---|---|---|---|---|
| A [refusal](https://services.dev/docs/money/release.md#refusals-never-charge) | $0, nothing held | — | $0, no AI | nothing |
| A [lost deal](https://services.dev/docs/money/outcomes.md#who-funds-the-work-before-the-end) on `usd: 0` | $0 | flat pay stands; a share is $0 | flat pay, placement and AI: $340 on deal.ts when a closer loses it | nothing |
| A [send-back](https://services.dev/docs/money/refunds-and-disputes.md#before-and-after-release) | $0 only if the redo is declined | accrued pay stands | the redo | the take on what's kept |
| A [goodwill refund](https://services.dev/docs/money/refunds-and-disputes.md#two-sellers) | refunded | accrued and held pay stand | its own line | its take, refunded pro rata |
| A [chargeback](https://services.dev/docs/money/refunds-and-disputes.md#disputes) on your charge | the bank refunds them | pay stands | the amount and the dispute fee | its take returns on a loss |
| A chargeback on a member's own charge | the bank refunds them | never debited | the amount, as `make_whole` | no take on it |
| The outcome [reverses](https://services.dev/docs/money/outcomes.md#what-reverses) inside its window | refunded the share | held share pay reverses; flat pay stands | the share | its take reverses |
| It reverses after the [window](https://services.dev/docs/money/outcomes.md#the-window) | carries it | the pay is theirs | final | final |
| An outside fee [repeats](https://services.dev/docs/money/lines-and-rails.md#lines) | at cost, unless you caused it | — | the repeat, with `fault: 'brand'` | none on it |
| AI runs past its [budget](https://services.dev/docs/money/prices.md#every-form) | never billed | — | at most `price.ai`, then its `then` | none on AI |
| Flat pay comes [before any charge](https://services.dev/docs/money/flow-of-funds.md#money-outside-a-charge) | $0 | paid, from money already drawn | the pay, debited from your account | nothing |
| Your balance stays negative after [the draw order](https://services.dev/docs/money/flow-of-funds.md#the-way-back) | — | pay stands | owes it, and new orders wait | carries it meanwhile |

Each carrier is held twice: by a gate `check` runs before you sell, and by the Stripe object and way back behind it:

| When | Held by | [At Stripe](https://services.dev/docs/money/flow-of-funds.md) |
|---|---|---|
| A refusal | `act_refused` | no PaymentIntent |
| A lost deal on `usd: 0` | `ai_unfunded`, `effort_charged` | the mandate is never charged; its costs are debits from your account |
| A send-back | [the contest](https://services.dev/docs/people/pool/track.md#contests) | a declined redo is refunded |
| A goodwill refund | `held_pay_exposed` | refund from services.dev's account, your transfer reversed, the take returned |
| A chargeback on your charge | `Brand.disputes` | transfer reversal from your account |
| A chargeback on a member's own charge | `member_charged` | recovered from your account; the member's transfer stands |
| The outcome reverses inside its window | `held_pay_exposed` | refunded from the untransferred hold |
| It reverses after the window | `window_too_long` | nothing moves |
| An outside fee repeats | `price.lines` | a pass-through line with its receipt |
| AI runs past its budget | `price_below_cost` | nothing: AI is never a charge |
| Flat pay before any charge | `pay_unfunded` | a debit from your account, then a transfer to the member |
| Your balance negative after the draw order | `balance_negative` | a debit to your bank account; new orders answer 402 |

You read every row in the owner console, a member reads their own pay in the delivery portal, and the buyer reads a receipt that names each seller.

## The ledger

**Paid on a receipt**

A trademark response on api.lawyer: its pay and price, the rules row that puts the member's fee on their own rail, and the Pool's cover.

```ts title="api.lawyer"
// services/trademark-response.ts
  roles: { attorney: { pool: attorneys, pay: 175 } },
  price: { usd: 349, release: 'file' },
// rules.ts
      respond: { reserved: 'bar admission', where: '*', rail: 'member', position: '…' },
// pools/attorneys.ts
  coverage: { per_act: 1_000_000, by: 'either', usd: 4 },
```

```bash
npx services.dev jobs ledger job_7Hq3
```

```txt title="magic values: none"
job_7Hq3 · api.lawyer · Trademark Office Action Response · $349.00 released on the USPTO's receipt, rcp_7Hq3
  charge        +$349.00   the client, at one checkout with two sellers
  tax              $0.00   no sales tax on a legal service in US-NY · Brand.tax 'stripe'
  processing     −$10.73   Stripe's, on both charges: $5.35 on yours, $5.38 on the attorney's, which you pay
  pay           −$175.00   the attorney's fee, sold by mbr_7Hq3 on their own account (rail member)
  pass-through     $0.00   no office fee on this response
  coverage        −$4.00   the attorneys Pool's malpractice cover, one attested act
  placement        $0.00   your own Pool
  nested           $0.00   no other Service
  AI              −$2.10   five calls, three review rounds
  take            on $170.00, the value api.lawyer adds, at your plan's rate
  you            $157.17   before the take · final 16 Nov 2026
```

**Paid on the close**

A deal on api.forsale: nothing on effort, 5% at won, and the closer's 10% charged to the seller beside it.

```bash
grep -n -A1 "outcome:\|price:" services/deal.ts
```

```txt title="magic values: none"
49:  outcome: { amount: 'closed_value', proof: 'payment', match: { customer: 'account', metadata: 'deal' },
50-    window: { bank: '60d', card: '120d' }, tail: '90d', due: '90d', collect: job => (job.output.billing === 'monthly' ? 'each' : 'first') },
51:  price: { usd: 0, share: '5%', of: 'closed_value', on: 'won', ai: 40,
52-    lines: { referral: { share: '1%', of: 'closed_value', to: 'referrer', on: 'won' } } },
```

```txt
→ GET /owner/deals/job_7Hq5   # won by a closer, and proven
```

```txt title="200 · job_7Hq5 · deal · won · $11,100.00 charged, held to 2027-03-09 · magic values: none"
  close     person · closer · mbr_7Hq4 · committed · closed_value $74,000.00
  proof     payment · in_…8841, the seller's own invoice, matched on the account's customer and metadata.deal · $74,000.00 paid 4 Jan 2027, net 30 from the close on 4 Dec
  outcome   verified · $74,000.00 · window 60d from the collection · closes 9 Mar 2027
  money     outcome.verified → chg_7Hq5 $11,100.00 debited off-session on the seller's bank mandate → charge.pending 4 Jan → charge.collected 8 Jan → held under job_7Hq5
  ledger    +$11,100.00 · closer $7,400.00 (share, from the seller) · setter $250.00 · placement $50.00 · AI $11.34 of $40.00 · you $3,388.66 before the take
  held      the 5% $3,700.00, the closer's $7,400.00 and the take, until the window closes
```

The $11,100.00 is debited from the seller's bank the day the payment proves the deal, collects four days later, and is held 60 days under the job before anyone is paid from it.

| Line | What it is | Read |
|---|---|---|
| Charge | what the buyer paid, released by its fact | [Prices](https://services.dev/docs/money/prices.md), [Release](https://services.dev/docs/money/release.md) |
| Tax | collected on top of your price with `Brand.tax: 'stripe'`, and remitted | [Flow of funds](https://services.dev/docs/money/flow-of-funds.md) |
| Processing | Stripe's fee on each charge, yours and each member's | [Flow of funds](https://services.dev/docs/money/flow-of-funds.md) |
| Pay | each person's fee, posted before anyone claims | [Pay](https://services.dev/docs/money/pay.md) |
| Pass-through | an outside fee, at cost, with its receipt | [Lines and rails](https://services.dev/docs/money/lines-and-rails.md) |
| Coverage | cover per attested act, at cost | [Coverage](https://services.dev/docs/people/pool/coverage.md) |
| Placement | per Task another operator's Pool fills | [Share a Pool](https://services.dev/docs/people/pool/share.md#the-placement-line) |
| Nested Services | another Service's ledger, counted once | [Nested](https://services.dev/docs/service/nested.md) |
| AI | at most a fifth of the price, or the `ai` budget | [AI steps](https://services.dev/docs/service/ai.md) |
| services.dev's take | your plan's rate on the value your brand adds | [Plans](https://services.dev/docs/money/plans.md#the-take) |

`check` prints each ledger before tax and processing, which depend on how the buyer pays, and the job's ledger prints both. Tax is never yours, so it never enters the take's base. Processing is a cost of yours, like AI, and stays in it. A line leaves the base only with its proof, and a fee a member sells on their own account was never your charge, so it carries no take.

## Entries, never edits

Each line is an entry, `le_…`, written once. A refund, a reversal or a dispute appends an entry that names the one it `reverses`, so a job's ledger reads the same next year, and every entry reconciles to a [bank deposit](https://services.dev/docs/money/payouts.md#from-the-bank-deposit-back-to-the-job):

```txt
→ GET /owner/matters/job_7Hq3/ledger   # the owner console: append-only entries
```

```json title="200 · magic values: none"
{
  "object": "ledger",
  "job": "job_7Hq3",
  "currency": "usd",
  "released": { "on": "file", "receipt": "rcp_7Hq3", "at": "2026-11-09T15:12:40Z" },
  "final_at": "2026-11-16T15:12:40Z",
  "charges": ["chg_7Hq3", "chg_7Hq4"],
  "entries": [
    { "id": "le_7Hq3a", "line": "charge", "amount": 34900, "brand": 17400, "member": 17500 },
    { "id": "le_7Hq3b", "line": "processing", "amount": -1073, "charges": ["chg_7Hq3", "chg_7Hq4"] },
    { "id": "le_7Hq3c", "line": "pay", "amount": -17500, "role": "attorney", "member": "mbr_7Hq3", "rail": "member", "charge": "chg_7Hq4" },
    { "id": "le_7Hq3d", "line": "coverage", "amount": -400, "to": "attorneys", "acts": 1 },
    { "id": "le_7Hq3e", "line": "ai", "amount": -210, "calls": 5 },
    { "id": "le_7Hq3f", "line": "take", "base": 17000, "charge": "chg_7Hq3" }
  ],
  "you": 15717
}
```

One deal, walked from the order to Friday's payout, with each branch: [the deal's money](https://services.dev/docs/examples/sales/money.md).

---

- Up: [Your first paid job](https://services.dev/docs.md)
- Previous: [Practices](https://services.dev/docs/people/practices.md)
- Next: [Prices](https://services.dev/docs/money/prices.md)
