---
title: "What the brand gets"
url: https://services.dev/docs/examples/sales/surfaces
captured: [sales-surfaces.txt]
---
# What the brand gets

URL: https://services.dev/docs/examples/sales/surfaces

> The sales brand's API, CLI, MCP server, SDK, Site, Docs and App, each generated from its three files, in its own words of deal, account, gig and closer.

*sales's words: deal is a job, account is a subject, gig is a task, closer is a member, seller is a client, seller is a buyer (examples/sales/brand.ts).*

Three files, and the brand gets seven surfaces. Each one below is what the brand serves for this folder. `brand.ts` sets the words, so a seller, an agent or a closer reads deal, account, gig and closer everywhere, and never the words services.dev uses inside.

## API

Every route its `openapi.json` lists:

```txt
→ GET /openapi.json
```

```txt title="magic values: none"
  servers https://api.forsale (the brand's own origin) · http://localhost:8787 (where dev serves it now)
  POST GET    /deals
  GET         /deal.json
  POST        /deal/waitlist
  GET         /deals/{id}
  POST        /deals/{id}/cancel
  POST        /deals/{id}/end
  POST        /deals/{id}/again
  POST        /deals/{id}/policy
  POST        /deals/{id}/signals
  POST GET    /deals/{id}/messages
  GET         /deals/{id}/record
  GET         /owner/deals/{id}
  GET         /owner/deals/{id}/outcome
  POST        /closers/join
  POST        /closers/firms
  GET         /closers/me/track
  GET         /closers/me/earnings
  GET         /closers/me/earnings/{id}
  GET         /gigs
  GET         /gigs/{id}
  GET         /gigs/{id}/thread
  POST        /gigs/{id}/claim
  POST        /gigs/{id}/meet
  POST        /gigs/{id}/propose
  POST        /gigs/{id}/negotiate
  POST        /gigs/{id}/complete
  POST        /gigs/{id}/ask
  POST        /gigs/{id}/contest
  POST        /gigs/{id}/release
  POST        /keys
  POST        /test_clocks
  POST        /test_clocks/{id}/advance
  GET POST    /events
  GET         /events/stream
  POST GET    /watches
  GET         /index.json
  GET         /pricing
  GET         /offer
  GET         /llms.txt
  GET         /.well-known/agents.json
```

## CLI

The brand's own help:

```bash
npx api.forsale help
```

```txt title="magic values: none"
api.forsale · deals worked to close, paid only on a win
  deal      npx api.forsale deal account=… value=… offer=… max_usd=…   order a deal, or read its OFFER without max_usd
  deals     get <deal> · list · wait <deal> · policy <deal> k=v · signal <deal> <signal> · again <deal> · end <deal> lost
  gigs      npx api.forsale gigs [--role closer]   in a closer's own session: the feed, claim, propose, complete, ask
  earnings  npx api.forsale earnings [--held]      in a closer's own session
  events    npx api.forsale events --deal <deal>
```

## MCP and SDK

The buyer toolset an agent lists, then the typed client `services.dev sdk` writes. A closer's own agent has its own eight tools on closers.deals: [from your own agent](https://services.dev/docs/examples/sales/delivery-portal.md#from-your-own-agent).

```txt
→ tools/list
```

```txt title="magic values: none"
← order_deal · get_deal · list_deals · cancel_deal · end_deal · reorder_deal · set_deal_policy · send_deal_signal · send_deal_message · list_deal_messages · list_events
  11 tools, about 3,912 tokens · closers.deals/mcp serves the 8 member tools to a closer's own agent
```

```bash
npx services.dev sdk --lang ts && grep -n "deals\." api-forsale.ts | head -4
```

```txt title="magic values: none"
12:  deals.order(input: DealInput & { max_usd?: number; key: string }): Promise<Deal | Offer | Blocked>
13:  deals.get(id: string, opts?: { wait?: number }): Promise<Deal>
14:  deals.signal(id: string, signal: 'committee' | 'person', note?: string): Promise<Deal>
15:  deals.again(id: string, opts: { max_usd: number; key: string }): Promise<Deal | Offer>
```

[The agent's order](https://services.dev/docs/examples/sales/agent.md) walks one deal over MCP.

## Site

The head of the Service's page, as a browser gets it:

```txt
→ GET /deal
```

```txt title="magic values: none"
  <title>Deal · api.forsale</title>
  <h1>Deals worked to close. Nothing on effort.</h1>
  <p>5% of the closed value when the account pays, or 15% when a closer takes the deal: the closer's 10% passes through whole.</p>
  <a href="/deals">Order a deal</a> · <a href="https://closers.deals">Close for us</a>
```

## Docs

The brand's own `llms.txt`: the Service with its price, then every operation:

```txt
→ GET /llms.txt
```

```txt title="magic values: none"
# api.forsale
> Deals worked to close by AI and, past $50,000, by a closer. Nothing on effort: 5% of the closed value at won, proven by the account's payment.
## Services
- [Deal](https://api.forsale/deal.md): nothing on effort; 5% of closed_value at won, 15% with a closer; proven by the payment, held 60 days
## Operations
- service.order POST /deals · job.get GET /deals/{id} · job.signal POST /deals/{id}/signals · job.again POST /deals/{id}/again · job.list GET /deals
```

## App

One brand serves three apps, each at its own path: the customer portal, the closers' delivery portal and the owner console. The dev server prints them:

```bash
npx services.dev dev
```

```txt title="magic values: none"
  deals               http://localhost:8787/portal · the customer portal, where a seller follows its deals and sets its floor
  closers             http://localhost:8787/closers · the delivery portal, served on closers.deals live · join at /closers/join
  you                 http://localhost:8787/owner · the owner console: every deal, gig and closer, and the ledger
```

[The customer portal](https://services.dev/docs/examples/sales/customer-portal.md), [closing on closers.deals](https://services.dev/docs/examples/sales/delivery-portal.md) and [the owner console](https://services.dev/docs/examples/sales/console.md) show their screens. [Brand()](https://services.dev/docs/service/brand.md) covers the words.

---

- Up: [The sales example](https://services.dev/docs/examples/sales.md)
- Previous: [The money](https://services.dev/docs/examples/sales/money.md)
- Next: [The Deal Service](https://services.dev/docs/examples/sales/deal.md)
