---
title: "Buyer, client, party"
url: https://services.dev/docs/people/parties
captured: [service-consent.txt, tab-needs-the-party.txt]
---
# Buyer, client, party

URL: https://services.dev/docs/people/parties

> The buyer pays and holds the key. A party is a person the work is for or about, named in the input, who acts only through their own single-use link. The buyer can be the client, or order for one.

Who is a job for, and who may act on it? Two different people, often.

## The buyer pays; a party acts

The **buyer** orders and pays. They hold the key (`sk_test_` on localhost), and their key, or their agent, reads the job, accepts it, sends it back or cancels it.

A **party** is a person the input names with the type word `party`: a client, an applicant, a recipient, the founders. A party never holds a key. Each act the work needs of them is an ask, opened to them alone, through a hosted link that works once and needs no account. The buyer can be the client, ordering for themselves, or order for a client who acts through their own links.

| | The buyer | A party |
|---|---|---|
| Is | whoever orders and pays | a person the input names, as `party` or `party[]` |
| Holds | a key, or an agent with one | a link per ask, single-use, that expires and can be reissued |
| Can | order, read, accept, send back, cancel, end | consent, answer, upload, sign, decide, name who does a declined step |
| Never | sign, consent or decide for a party | see the brand's internals or a member's contact |

## Consent comes first

A Service whose Pool shows parties to its members asks the client's consent before any member reads the matter. A sandbox party who signs consents at once; one who declines ends the job at $0:

```txt
→ POST /private-translation {"document":"memo.pdf","to":"de","client":{"name":"Ada Lovelace","email":"signs@example.test"},"max_usd":59,"key":"consents","metadata":{"sandbox":{"asks":{"register":"informal"}}}}
```

```txt title="magic values: client.email = signs@example.test, metadata.sandbox.asks = { register: informal }, client.email = declines@example.test"
← job_7Hq2 · delivered · memo.de.pdf · $59.00 charged
  record  consent · client · consent | register · client · decide · decided informal | translate · ai | review · ai · pass
  ledger  +$59.00 · AI $0.84 · you $58.16
```

```txt
→ POST /private-translation {"document":"memo.pdf","to":"de","client":{"name":"Ada Lovelace","email":"declines@example.test"},"max_usd":59,"key":"declines"}
```

```txt title="magic values: client.email = signs@example.test, metadata.sandbox.asks = { register: informal }, client.email = declines@example.test"
← job_7Hq3 · ended · declined · $0
  record  declined · ended · Ada Lovelace declined consent.
  ledger  you $0.00
```

When the buyer is the client, their consent is the session that ordered, and no link is sent. [`sheet_without_consent`](https://services.dev/docs/reference/check/sheet_without_consent.md) fails a Pool whose sheet names parties with no consent ask ahead of the first role step.

## Only the party can

A key, the owner or an agent that tries a party's act is refused `needs_the_party`, and handed the link to pass on:

```bash title="API"
curl -X POST http://localhost:8787/jobs/job_7Hq3/accept -H 'content-type: application/json' -d '{}'
```

```json title="403 · magic values: none"
{
  "type": "BLOCKED",
  "category": "blocked",
  "code": "needs_the_party",
  "reason": "sign waits on Ada Lovelace to sign. Only they can, through their own link. Hand them the link in next.",
  "param": "ask_7Hq2",
  "party": "Ada Lovelace",
  "next": {
    "do": "hand_to_person",
    "url": "http://localhost:8787/a/ask_7Hq2?t=cHGjprSn08ODyOp_8zLIVH",
    "arguments": {
      "ask": "ask_7Hq2"
    },
    "party": {
      "name": "Ada Lovelace",
      "email": "ada@example.com"
    },
    "to": "sign",
    "expires_at": "2026-11-01T14:02:11.000Z",
    "tool": null,
    "http": "GET http://localhost:8787/a/ask_7Hq2?t=cHGjprSn08ODyOp_8zLIVH"
  },
  "doc_url": "http://localhost:8787/docs/errors/needs_the_party",
  "request_id": "req_SvsTKa",
  "simulated": true
}
```

An agent ordering for a person reads the same `next`, `hand_to_person` with the link, on every surface, and never the act itself.

## Three ways a job is ordered

| Pattern | Who pays | Who acts as the party |
|---|---|---|
| The client orders for themselves | the client | the client: their consent is the session that ordered |
| A buyer or their agent orders for a client | the buyer | the client, through each link the buyer hands on |
| A reseller orders for its customer | the reseller, with a tenant key | its customer, through the same links |

The party's links, their reminders and expiry are in [Ask the buyer](https://services.dev/docs/service/ask.md). What a member may learn of a party, and when, is in [What a member sees](https://services.dev/docs/people/pool/disclosure.md).

---

- Up: [human: the line](https://services.dev/docs/people.md)
- Previous: [Of record](https://services.dev/docs/people/of-record.md)
- Next: [A sample that falls](https://services.dev/docs/people/sample.md)
