What the brand gets

The running jobjob_7Hq5 · won · msa-northwind.pdf · $11,100.00 charged, held to 2027-03-09

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 wordsdeal is a jobaccount is a subjectgig is a taskcloser is a memberseller is a clientseller is a buyer

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.

Every route its openapi.json lists:

Call
→ GET /openapi.json
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

The brand's own help:

Run
npx api.forsale help
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>

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.

Call
→ tools/list
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
Run
npx services.dev sdk --lang ts && grep -n "deals\." api-forsale.ts | head -4
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 walks one deal over MCP.

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

Call
→ GET /deal
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>

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

Call
→ GET /llms.txt
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

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:

Run
npx services.dev dev
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, closing on closers.deals and the owner console show their screens. Brand() covers the words.