# Quote routes: accept, decline, expire

URL: /code/api/quote/verbs · Id: `page:code/api/quote/verbs`

> The Quote Verbs accept, decline, expire as api.sb routes, with inputs, result, refusals and an example.

Reference for [Quote](/business/nouns/quote), one group of [Quote routes](/code/api/quote).

### Quote.accept
Accept takes a sent Quote before it expires, turning one-time lines into an Order and recurring lines into a Subscription. [Verb page](/business/nouns/quote/accept?interface=api).

```text
POST /{namespace}/quotes/{quote}/accept
```

Path: `quote`. Body, as JSON: the other inputs. Emits [`Quote.accepted`](/business/events/Quote.accepted).

**Inputs**

| Input | Type | Required | Description |
| --- | --- | --- | --- |
| `quote` | [Quote](/business/nouns/quote) | Yes | The sent Quote. |
| `party` | [Party](/business/nouns/party) | Yes | The Contact or Organization accepting, who becomes the Customer. |

**Returns**

| Output | Type | Required | Description |
| --- | --- | --- | --- |
| `order` | [Order](/business/nouns/order) | No | The Order for the one-time lines, when the Quote has any. |
| `subscription` | [Subscription](/business/nouns/subscription) | No | The Subscription for the recurring lines, at each line’s quantity and term. |
| `quote` | [Quote](/business/nouns/quote) | Yes | The Quote, now accepted. |

**Refuses when**

| Check | Error | Fix | Then call |
| --- | --- | --- | --- |
| The key is valid, but its scopes do not allow this operation. | [`forbidden`](/code/api/errors/forbidden) | Use a key whose scopes cover the operation, or ask an owner of the namespace to grant them. | None. |

**Example**

```bash
curl -X POST https://api.sb/leaseline.app/quotes/qt_GZnH5OK100/accept \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"party":"party_hmQWaPrAyZ"}'
```

```json
{
  "api": "https://api.sb/leaseline.app",
  "order": {
    "$id": "https://api.sb/leaseline.app/orders/order_dswDnxf2vt",
    "$type": "Order",
    "total": {
      "amount": 29,
      "currency": "USD"
    },
    "status": "placed"
  },
  "subscription": {
    "$id": "https://api.sb/leaseline.app/subscriptions/sub_jpvy3zejKB",
    "$type": "Subscription",
    "status": "active"
  },
  "quote": {
    "$id": "https://api.sb/leaseline.app/quotes/qt_GZnH5OK100",
    "$type": "Quote",
    "total": {
      "amount": 29,
      "currency": "USD"
    },
    "validUntil": "2026-10-22",
    "status": "accepted",
    "lines": {}
  },
  "action": {
    "$id": "https://api.sb/leaseline.app/actions/act_br07HsG8MG",
    "operation": "Quote.accept",
    "status": "done"
  },
  "links": {
    "self": "https://api.sb/leaseline.app/actions/act_br07HsG8MG"
  }
}
```

### Quote.decline
Decline records the buyer’s refusal of a sent Quote, with the reason in their words. [Verb page](/business/nouns/quote/decline?interface=api).

```text
POST /{namespace}/quotes/{quote}/decline
```

Path: `quote`. Body, as JSON: the other inputs. Emits [`Quote.declined`](/business/events/Quote.declined).

**Inputs**

| Input | Type | Required | Description |
| --- | --- | --- | --- |
| `quote` | [Quote](/business/nouns/quote) | Yes | The sent Quote. |
| `reason` | `text` | No | Why the buyer declined, kept verbatim. |

**Returns**

| Output | Type | Required | Description |
| --- | --- | --- | --- |
| `quote` | [Quote](/business/nouns/quote) | Yes | The declined Quote. |

**Refuses when**

| Check | Error | Fix | Then call |
| --- | --- | --- | --- |
| The key is valid, but its scopes do not allow this operation. | [`forbidden`](/code/api/errors/forbidden) | Use a key whose scopes cover the operation, or ask an owner of the namespace to grant them. | None. |

**Example**

```bash
curl -X POST https://api.sb/leaseline.app/quotes/qt_GZnH5OK100/decline \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY"
```

```json
{
  "api": "https://api.sb/leaseline.app",
  "quote": {
    "$id": "https://api.sb/leaseline.app/quotes/qt_GZnH5OK100",
    "$type": "Quote",
    "total": {
      "amount": 29,
      "currency": "USD"
    },
    "validUntil": "2026-10-22",
    "status": "declined",
    "lines": {}
  },
  "action": {
    "$id": "https://api.sb/leaseline.app/actions/act_br07HsG8MG",
    "operation": "Quote.decline",
    "status": "done"
  },
  "links": {
    "self": "https://api.sb/leaseline.app/actions/act_br07HsG8MG"
  }
}
```

### Quote.expire
Expire closes a sent Quote that reached its validUntil date unaccepted; it never converts afterward. [Verb page](/business/nouns/quote/expire?interface=api).

```text
POST /{namespace}/quotes/{quote}/expire
```

Path: `quote`. Emits [`Quote.expired`](/business/events/Quote.expired).

**Inputs**

| Input | Type | Required | Description |
| --- | --- | --- | --- |
| `quote` | [Quote](/business/nouns/quote) | Yes | The Quote past its date. |

**Returns**

| Output | Type | Required | Description |
| --- | --- | --- | --- |
| `quote` | [Quote](/business/nouns/quote) | Yes | The expired Quote. |

**Refuses when**

| Check | Error | Fix | Then call |
| --- | --- | --- | --- |
| The key is valid, but its scopes do not allow this operation. | [`forbidden`](/code/api/errors/forbidden) | Use a key whose scopes cover the operation, or ask an owner of the namespace to grant them. | None. |

**Example**

```bash
curl -X POST https://api.sb/leaseline.app/quotes/qt_GZnH5OK100/expire \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY"
```

```json
{
  "api": "https://api.sb/leaseline.app",
  "quote": {
    "$id": "https://api.sb/leaseline.app/quotes/qt_GZnH5OK100",
    "$type": "Quote",
    "total": {
      "amount": 29,
      "currency": "USD"
    },
    "validUntil": "2026-10-22",
    "status": "expired",
    "lines": {}
  },
  "action": {
    "$id": "https://api.sb/leaseline.app/actions/act_br07HsG8MG",
    "operation": "Quote.expire",
    "status": "done"
  },
  "links": {
    "self": "https://api.sb/leaseline.app/actions/act_br07HsG8MG"
  }
}
```