# Promise uptime on a plan

URL: /products/api/promise-uptime · Id: `guide:promise-uptime`

> Say "promise 99.9% uptime on Scale" and get an uptime term on the Offer, measured every minute, with credits paid on the next invoice.

An uptime term on an [Offer](/business/nouns/offer) promises how much of each month the API answers, and what a [Customer](/business/nouns/customer) gets back below it. Credits apply themselves; nobody files a claim.

Needs: [Ship an API](/products/api/ship-an-api) · [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 uptime term of 99.9% a month on the Scale Offer (Offer)
- 1 uptime measured every minute from several regions (Monitor)
- 1 credit on next month’s invoice for each customer owed one, with no claim to file (Credit Grant)
- 1 uptime line in the plan’s terms and on the status page (Page)

## Your agent does
**For agents**

- Guide: `guide:promise-uptime`, status `live`. Page: [/products/api/promise-uptime.md](/products/api/promise-uptime.md).
- Approval: none. Run it when the founder asks.
- Leaves the chat: never.
- Needs first: [Ship an API](/products/api/ship-an-api), [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.update`](/business/nouns/offer/update) (`verb:Offer.update`) | `id` string, required: example `"offer_scale_monthly"`; `price` money: example `{"amount":29,"currency":"USD"}`; `uptime` json: example `{"target":99.9,"credits":[{"below":99.9,"percent":10},{"below":99,"percent":25}]}` | `offer` Offer |

Returns: the last call answers with `offer` 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",
  "offer": {
    "$id": "https://api.sb/leaseline.app/offers/offer_scale_monthly",
    "$type": "Offer",
    "uptime": {
      "target": 99.9,
      "credits": [
        {
          "below": 99.9,
          "percent": 10
        },
        {
          "below": 99,
          "percent": 25
        }
      ]
    }
  },
  "action": {
    "$id": "https://api.sb/leaseline.app/actions/action_1",
    "operation": "Offer.update",
    "status": "done"
  },
  "links": {
    "self": "https://api.sb/leaseline.app/actions/action_1"
  }
}
```

Next: offer “Make it 99.95% for the enterprise plan only”, or “Show uptime for the last 90 days on the status page”.

Calls: `Offer.update`

Ask:

```text
Promise 99.9% uptime on Scale.
Add an SLA to the Scale plan.
Credit customers when the API is down.
```

API:

```bash
# Offer.update
curl -X PATCH https://api.sb/leaseline.app/offers/offer_scale_monthly \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"price":{"amount":29,"currency":"USD"},"uptime":{"target":99.9,"credits":[{"below":99.9,"percent":10},{"below":99,"percent":25}]}}'
```

SDK:

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

await $.Offer.update({ id: 'offer_scale_monthly', price: { amount: 29, currency: 'USD' }, uptime: { target: 99.9, credits: [{ below: 99.9, percent: 10 }, { below: 99, percent: 25 }] } })
```

CLI:

```bash
npx startup-builder do Offer.update --json '{"id":"offer_scale_monthly","price":{"amount":29,"currency":"USD"},"uptime":{"target":99.9,"credits":[{"below":99.9,"percent":10},{"below":99,"percent":25}]}}'
```

MCP:

```json
{
  "name": "do",
  "arguments": {
    "code": "return await $.Offer.update({ id: 'offer_scale_monthly', price: { amount: 29, currency: 'USD' }, uptime: { target: 99.9, credits: [{ below: 99.9, percent: 10 }, { below: 99, percent: 25 }] } })"
  }
}
```

## Change it
- Make it 99.95% for the enterprise plan only.
- Show uptime for the last 90 days on the status page.
- Did anyone earn a credit last month?

## Under the hood
- Systems: [Billing](/systems/billing), [Monitoring](/code/systems/monitoring)
- Nouns: [Offer](/business/nouns/offer), [Monitor](/business/nouns/monitor), [Credit Grant](/business/nouns/credit-grant)
- Events: `Offer.updated`, [`CreditGrant.issued`](/business/events/CreditGrant.issued)