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.
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 proves the Stripe column.
| When | The buyer | A member | Your brand | services.dev |
|---|---|---|---|---|
| A refusal | $0, nothing held | — | $0, no AI | nothing |
A lost deal 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 | $0 only if the redo is declined | accrued pay stands | the redo | the take on what's kept |
| A goodwill refund | refunded | accrued and held pay stand | its own line | its take, refunded pro rata |
| A chargeback 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 inside its window | refunded the share | held share pay reverses; flat pay stands | the share | its take reverses |
| It reverses after the window | carries it | the pay is theirs | final | final |
| An outside fee repeats | at cost, unless you caused it | — | the repeat, with fault: 'brand' | none on it |
| AI runs past its budget | never billed | — | at most price.ai, then its then | none on AI |
| Flat pay comes before any charge | $0 | paid, from money already drawn | the pay, debited from your account | nothing |
| Your balance stays negative after the draw order | — | 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 |
|---|---|---|
| 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 | 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.
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.
// 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 },npx services.dev jobs ledger job_7Hq3job_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| Line | What it is | Read |
|---|---|---|
| Charge | what the buyer paid, released by its fact | Prices, Release |
| Tax | collected on top of your price with Brand.tax: 'stripe', and remitted | Flow of funds |
| Processing | Stripe's fee on each charge, yours and each member's | Flow of funds |
| Pay | each person's fee, posted before anyone claims | Pay |
| Pass-through | an outside fee, at cost, with its receipt | Lines and rails |
| Coverage | cover per attested act, at cost | Coverage |
| Placement | per Task another operator's Pool fills | Share a Pool |
| Nested Services | another Service's ledger, counted once | Nested |
| AI | at most a fifth of the price, or the ai budget | AI steps |
| services.dev's take | your plan's rate on the value your brand adds | Plans |
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.
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:
→ GET /owner/matters/job_7Hq3/ledger # the owner console: append-only entries{
"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.