What the brand gets
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:
→ GET /openapi.json 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:
npx api.forsale helpapi.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.
→ tools/list← 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 agentnpx services.dev sdk --lang ts && grep -n "deals\." api-forsale.ts | head -412: 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:
→ GET /deal <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:
→ GET /llms.txt# 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 /dealsOne 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:
npx services.dev dev 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 ledgerThe customer portal, closing on closers.deals and the owner console show their screens. Brand() covers the words.