# Quoting

URL: /workflows/processes/quoting · Id: `process:quoting`

> Quoting prices each Deal from list Price, inside the discount Limit, with terms ready to sign.

Quoting prices each [Deal](/business/nouns/deal) from list [Price](/business/nouns/price), inside the discount [Limit](/business/nouns/limit), with terms ready to sign.

## Outcome
| Part | This Process |
| --- | --- |
| Outcome | Each Deal gets a Quote from list Price inside the discount Limit, and follow-up continues until it is won or lost. |
| Reads | [Deal](/business/nouns/deal) |
| Leaves | [Quote](/business/nouns/quote), [Agreement](/business/nouns/agreement) |
| Runs in | Each Startup |

## Accountable
[Sales Lead](/agents/sales/sales-lead), [Sales Team](/agents/sales).

Responsible: [Sales Engineer](/agents/sales/sales-engineer).

Consulted: [Security Engineer](/agents/engineering/security-engineer), [Contracts Manager](/agents/legal/contracts-manager).

Informed: [Finance Lead](/agents/finance/finance-lead).

## Workflows
| Workflow | Runs | Team |
| --- | --- | --- |
| [Send a quote](/workflows/processes/quoting/send-quote) | on `Deal.created` | [Sales Team](/agents/sales) |

## Who does each step

| Workflow | Step | Role | Calls | Approval |
| --- | --- | --- | --- | --- |
| [Send a quote](/workflows/processes/quoting/send-quote) | 1. Read the Deal and the buyer’s required terms. | [Sales Lead](/agents/sales/sales-lead) | [Deal.get](/business/nouns/deal/get) | None |
| [Send a quote](/workflows/processes/quoting/send-quote) | 2. Price from list Price, inside the discount Limit. | [Sales Lead](/agents/sales/sales-lead) | [Quote.create](/business/nouns/quote/create) | None |
| [Send a quote](/workflows/processes/quoting/send-quote) | 3. Answer the security questionnaire from the inherited compliance Evidence. | [Sales Engineer](/agents/sales/sales-engineer) | [Document.create](/business/nouns/document/create) | None |
| [Send a quote](/workflows/processes/quoting/send-quote) | 4. Send the Quote with click-to-sign terms. | [Sales Lead](/agents/sales/sales-lead) | [Quote.send](/business/nouns/quote/send) | Asks first; waits 1 business hour |
| [Send a quote](/workflows/processes/quoting/send-quote) | 5. Enroll the buyer in the quote follow-up Sequence until the Deal is won or lost. | [Prospector](/agents/sales/prospector) | [Contact.enroll](/business/nouns/contact/enroll) | None |

## Events
| Direction | When | What happens |
| --- | --- | --- |
| In | On `Deal.created` | Starts [Send a quote](/workflows/processes/quoting/send-quote) |
| Out | `Quote.created` | Raised by step 2 of [Send a quote](/workflows/processes/quoting/send-quote) |
| Out | `Document.created` | Raised by step 3 of [Send a quote](/workflows/processes/quoting/send-quote) |
| Out | [`Quote.sent`](/business/events/Quote.sent) | Raised by step 4 of [Send a quote](/workflows/processes/quoting/send-quote) |
| Out | [`Contact.enrolled`](/business/events/Contact.enrolled) | Raised by step 5 of [Send a quote](/workflows/processes/quoting/send-quote) |

## Plays
- [Paid pilot](/workflows/sales/plays/paid-pilot)
- [Closer handoff](/workflows/sales/plays/closer-handoff)
- [Written references](/workflows/sales/plays/written-references)
- [Trust pack](/workflows/sales/plays/trust-pack)
- [Single sign-on rung](/workflows/sales/plays/sso-rung)
- [Data residency](/workflows/sales/plays/data-residency)

## Controls
No Control names this Process or a Workflow of it.

## Settings
| Setting | Type | Default | Say | Set with |
| --- | --- | --- | --- | --- |
| `quotes.discountLimit` | `number` | `10` | Allow discounts up to 10% without asking me | [Setting.update](/business/nouns/setting/update) |
| `quotes.validDays` | `integer` | `30` | Keep quotes open for 30 days | [Setting.update](/business/nouns/setting/update) |

## Failure
A failed step retries; when retries run out, the Action goes to the [Sales Lead](/agents/sales/sales-lead).

## Loop
| Step | Value |
| --- | --- |
| Hypothesis | A Quote sent within one hour of the request closes more Deals than a Quote sent the next day. |
| Measure | [Outside paid Orders](/agents/sales#outside-paid-orders) over 30d, at least 30 observations |
| Learn | The learn step reads the Readout, records Evidence and a Decision, and drafts the next Variant. |

## Code

**Ask**

```text
Turn on quoting
```

**API**

```bash
curl -X POST https://api.sb/leaseline.app/processes/process_1/enable \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY"
```

**SDK**

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

await $.Process.enable({ process: 'process_1' })
```

**CLI**

```bash
npx startup-builder do Process.enable --json '{"process":"process_1"}'
```

**MCP**

```json
{
  "name": "do",
  "arguments": {
    "code": "return await $.Process.enable({ process: 'process_1' })"
  }
}
```

## Enable
On by default for [Dataset API](/products/templates/dataset-api), [Headless SaaS](/products/templates/headless-saas), [SaaS](/products/templates/saas), [Agent as a Service](/products/templates/agent-as-a-service), [Services-as-Software](/products/templates/services-as-software), [E2E managed service](/products/templates/managed-service). [Process.pause](/business/nouns/process/pause) stops new Actions; Actions in progress finish.

**Ask**

```text
Allow discounts up to 10% without asking me
```

**API**

```bash
curl -X PATCH https://api.sb/leaseline.app/settings/setting_1 \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"value":10,"key":"quotes.discountLimit"}'

curl -X PATCH https://api.sb/leaseline.app/settings/setting_2 \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"value":30,"key":"quotes.validDays"}'
```

**SDK**

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

await $.Setting.update({ id: 'setting_1', value: 10, key: 'quotes.discountLimit' })
await $.Setting.update({ id: 'setting_2', value: 30, key: 'quotes.validDays' })
```

**CLI**

```bash
npx startup-builder do Setting.update --json '{"id":"setting_1","value":10,"key":"quotes.discountLimit"}'
npx startup-builder do Setting.update --json '{"id":"setting_2","value":30,"key":"quotes.validDays"}'
```

**MCP**

```json
{
  "name": "do",
  "arguments": {
    "code": "await $.Setting.update({ id: 'setting_1', value: 10, key: 'quotes.discountLimit' })\nreturn await $.Setting.update({ id: 'setting_2', value: 30, key: 'quotes.validDays' })"
  }
}
```

## Example
A security-questionnaire tool opens a Deal with a 300-person software vendor. [Send a quote](/workflows/processes/quoting/send-quote) prices the $12,000 annual plan at 10% off, inside the 15% discount Limit. The vendor signs the click-to-sign terms in two days.