# Answer an approval

URL: /agents/answer-an-approval · Id: `guide:answer-an-approval`

> Approve, refuse or ask for a change on what waits for you, from your startups.studio inbox, Slack, Microsoft Teams or the iPhone app.

Each [Approval](/business/nouns/approval) waits in your startups.studio inbox, and the same card shows in Slack, Microsoft Teams and the iPhone app. Answer it [anywhere](/agents/reach): approve, refuse with a reason, or reply in its thread to ask for a change.

**Before it runs**

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

## What you get
- 1 inbox in startups.studio with everything waiting on you, most urgent first (Approval)
- 1 card in Slack or Microsoft Teams with Approve and Refuse buttons, in the thread about the work (Thread)
- 1 iPhone app with the same inbox, for answers on the move (Approval)
- 1 daily or weekly email that links to each one (Dashboard)
- 1 answer recorded once, wherever you give it first; every other place shows it (Decision)
- 1 deadline: unanswered by then, the request is canceled and nothing runs (Action)

## Your agent does
**For agents**

- Guide: `guide:answer-an-approval`, status `live`. Page: [/agents/answer-an-approval.md](/agents/answer-an-approval.md).
- Approval: none. Run it when the founder asks.
- Leaves the chat: never.
- 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 | [`Approval.approve`](/business/nouns/approval/approve) (`verb:Approval.approve`) | `approval` Approval (an id), required: example `"approval_ads_740"`; `note` text: example `"Yes, for the March campaign only."` | `approval` Approval |

Returns: the last call answers with `approval` 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",
  "approval": {
    "$id": "https://api.sb/leaseline.app/approvals/approval_ads_740",
    "$type": "Approval"
  },
  "action": {
    "$id": "https://api.sb/leaseline.app/actions/action_1",
    "operation": "Approval.approve",
    "status": "done"
  },
  "links": {
    "self": "https://api.sb/leaseline.app/actions/action_1"
  }
}
```

Next: offer “Refuse it: the March budget is spent”, or “Ask the agent for a cheaper option before I decide”.

Calls: `Approval.approve`

Ask:

```text
What is waiting on me?
Show me my approvals.
Approve the $740 ad spend.
```

API:

```bash
# Approval.approve
curl -X POST https://api.sb/leaseline.app/approvals/approval_ads_740/approve \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"note":"Yes, for the March campaign only."}'
```

SDK:

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

await $.Approval.approve({ approval: 'approval_ads_740', note: 'Yes, for the March campaign only.' })
```

CLI:

```bash
npx startup-builder do Approval.approve --json '{"approval":"approval_ads_740","note":"Yes, for the March campaign only."}'
```

MCP:

```json
{
  "name": "do",
  "arguments": {
    "code": "return await $.Approval.approve({ approval: 'approval_ads_740', note: 'Yes, for the March campaign only.' })"
  }
}
```

## Change it
- Refuse it: the March budget is spent.
- Ask the agent for a cheaper option before I decide.
- Send my approvals to Slack too.

## Under the hood
- Systems: [Work queue](/agents/work-queue), [Discussions](/agents/discussions)
- Nouns: [Approval](/business/nouns/approval), [Action](/business/nouns/action), [Thread](/business/nouns/thread), [Decision](/business/nouns/decision)
- Events: [`Approval.approved`](/business/events/Approval.approved)