# Buy a specialist agent for a seat

URL: /agents/buy-a-specialist-agent-for-a-seat · Id: `guide:buy-a-specialist-agent-for-a-seat`

> Subscribe to an agent another business sells, seat it in place of the default, and put the default back with one call if it falls short.

[Subscribe](/business/nouns/offer/subscribe) to an [Agent](/business/nouns/agent) sold as a [Product](/business/nouns/product), and your own copy of it fills the seat. It works under the same [Role](/business/nouns/role) contract, [Limits](/business/nouns/limit) and record as the default it replaces.

Needs: [Open a bank account](/systems/finance/open-a-bank-account)

**Before it runs**

- You leave the chat: Never: it all happens in the chat.

## What you get
- 1 monthly subscription to the specialist agent (Subscription)
- 1 your own copy of the agent, with what it learns kept in your business (Agent)
- 1 Customer Lead seat filled by it, with the same duties and limits (Role)
- 1 default support agent on standby, ready to take the seat back (Agent)

## Your agent does
**For agents**

- Guide: `guide:buy-a-specialist-agent-for-a-seat`, status `live`. Page: [/agents/buy-a-specialist-agent-for-a-seat.md](/agents/buy-a-specialist-agent-for-a-seat.md).
- Approval: none. Run it when the founder asks.
- Leaves the chat: never.
- Needs first: [Open a bank account](/systems/finance/open-a-bank-account).
- Run: call the steps in order, each through the API, SDK, CLI or MCP tab below; a later step passes the `$id` an earlier one returns. Each value marked example is the sample business’s: pass the founder’s own.

| Step | Verb | Inputs (type, required, this guide’s value) | Returns |
| --- | --- | --- | --- |
| 1 | [`Offer.subscribe`](/business/nouns/offer/subscribe) (`verb:Offer.subscribe`) | `offer` Offer (an id), required: example `"offer_pm_support"` | `subscription` Subscription, `offer` Offer |
| 2 | [`Role.staff`](/business/nouns/role/staff) (`verb:Role.staff`) | `role` Role (an id), required: example `"customer-lead"`; `worker` Worker (an id), required: example `"agent_pm_support"` | `role` Role |

Returns: the last call answers with `role` and its `action`, whose `status` is `done`, `pending` (waiting on an Approval or a Worker), `failed`, `canceled` or `refused`:

```json
{
  "api": "https://api.sb/leaseline.app",
  "role": {
    "$id": "https://api.sb/leaseline.app/roles/customer-lead",
    "$type": "Role",
    "status": "filled"
  },
  "action": {
    "$id": "https://api.sb/leaseline.app/actions/action_1",
    "operation": "Role.staff",
    "status": "done"
  },
  "links": {
    "self": "https://api.sb/leaseline.app/actions/action_1"
  }
}
```

Next: offer “For the first week, it drafts and I send”, or “Put the default agent back in the seat”.

Calls: `Offer.subscribe` → `Role.staff`

Ask:

```text
Buy a support agent trained on property management.
Find a specialist agent for the Customer Lead seat.
Replace the default support agent with a specialist.
```

API:

```bash
# 1. Offer.subscribe
curl -X POST https://api.sb/leaseline.app/offers/offer_pm_support/subscribe \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY"

# 2. Role.staff
curl -X POST https://api.sb/leaseline.app/roles/customer-lead/staff \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"worker":"agent_pm_support"}'
```

SDK:

```ts
import { $ } from 'startup-builder'

await $.Offer.subscribe({ offer: 'offer_pm_support' })
await $.Role.staff({ role: 'customer-lead', worker: 'agent_pm_support' })
```

CLI:

```bash
npx startup-builder do Offer.subscribe --json '{"offer":"offer_pm_support"}'
npx startup-builder do Role.staff --json '{"role":"customer-lead","worker":"agent_pm_support"}'
```

MCP:

```json
{
  "name": "do",
  "arguments": {
    "code": "await $.Offer.subscribe({ offer: 'offer_pm_support' })\nreturn await $.Role.staff({ role: 'customer-lead', worker: 'agent_pm_support' })"
  }
}
```

## Change it
- For the first week, it drafts and I send.
- Put the default agent back in the seat.
- Cancel the subscription at the end of the month.

## Under the hood
- Systems: [Workforce](/systems/workforce), [Billing](/systems/billing)
- Nouns: [Offer](/business/nouns/offer), [Subscription](/business/nouns/subscription), [Agent](/business/nouns/agent), [Role](/business/nouns/role)
- Events: [`Offer.subscribed`](/business/events/Offer.subscribed), [`Role.staffed`](/business/events/Role.staffed)

Buy a specialist when its eval record beats the default on your own cases, not on the seller's.

A bought agent is a team member: it acts as your [Startup](/business/nouns/startup), keeps its [Memory](/business/nouns/memory) in your [Tenant](/business/nouns/tenant), and shows on your chart. To buy a result instead, such as 30 booked meetings a month, order it under an [Agreement](/business/nouns/agreement) and pay when you accept it.