# Action plan

URL: /code/builders/startup/action-plan · Id: `capability:action-plan`

> Action plan lists the Actions a request would take, with each action class and cost, before any of them runs.

Action plan lists the [Actions](/business/nouns/action) a request would take, with each action class and cost, before any of them runs.

## Contract
Status `planned`. A `try` call returns `{ result, plan }`: the result the call would get, and its action plan. Nothing is stored and nothing runs.

The plan lists each Action in run order, one row per [Verb](/business/nouns/verb) call. Its `actionClass`, `door` and `undo` are that Verb's card in [/verbs.json](/verbs.json), so a plan and a Verb page use one vocabulary.

| Field | What it holds |
| --- | --- |
| `verb` | The Verb the step calls, such as `Order.refund` |
| `inputs` | The inputs it passes |
| `writes` | The [Nouns](/business/nouns/noun) it creates, changes or deletes |
| `money` | The mechanism money moves by, such as a Stripe refund |
| `sends` | The [Messages](/business/nouns/message) it sends, by [Channel](/business/nouns/channel) and count |
| `actionClass` | `spend`, `sign`, `publish`, `price` or `send`, or none |
| `door` | `one-way` or `two-way` |
| `waits` | What it waits for: an [Approval](/business/nouns/approval), a delay window or a [Worker](/business/nouns/worker) |
| `undo` | How `Action.undo` or `Thing.restore` reverses it |

The plan ends with the Approvals the request asks for: one for each step whose action class a seat's approval rule names.

## Verbs
None.

## Interfaces
None.

## Example
Dana Okafor asks the Leaseline agent to refund a resident's last month. `try` returns the refunded [Order](/business/nouns/order) and a two-step plan: `Order.refund` (`spend`, one-way, waiting for Dana above $50), then a Message to the resident. Nothing runs until she says yes.