# Give a launch discount

URL: /products/offers/give-a-launch-discount · Id: `guide:give-a-launch-discount`

> Say "give the first 100 customers 20% off for three months" and get a Coupon, a promotion code at checkout and a discount line on each Invoice.

A [Coupon](/business/nouns/coupon) takes a percent or an amount off for a set time, and its code works at checkout. The [Price](/business/nouns/price) on the pricing page stays the same, so the discount ends cleanly.

Needs: [Charge monthly](/systems/finance/charge-monthly)

**Before it runs**

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

## What you get
- 1 Coupon for 20% off three monthly charges (Coupon)
- 1 promotion code LAUNCH20 at checkout, good for 100 customers (Coupon)
- 1 discount line on each Invoice it touches (Invoice)
- 1 count of redemptions on the Coupon (Coupon)

## Your agent does
**For agents**

- Guide: `guide:give-a-launch-discount`, status `live`. Page: [/products/offers/give-a-launch-discount.md](/products/offers/give-a-launch-discount.md).
- Approval: none. Run it when the founder asks.
- Leaves the chat: never.
- Needs first: [Charge monthly](/systems/finance/charge-monthly).
- 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 | [`Coupon.create`](/business/nouns/coupon/create) (`verb:Coupon.create`) | `percentOff` number: example `20`; `duration` string, required: example `"repeating"`; `months` integer: example `3`; `code` string: example `"LAUNCH20"`; `redeemBy` datetime: example `"2026-12-31T23:59:59Z"`; `maxRedemptions` integer: example `100` | `coupon` Coupon |

Returns: the last call answers with `coupon` 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",
  "coupon": {
    "$id": "https://api.sb/leaseline.app/coupons/coupon_1",
    "$type": "Coupon",
    "percentOff": 20,
    "duration": "repeating",
    "months": 3,
    "code": "LAUNCH20",
    "maxRedemptions": 100,
    "redeemBy": "2026-12-31T23:59:59Z"
  },
  "action": {
    "$id": "https://api.sb/leaseline.app/actions/action_1",
    "operation": "Coupon.create",
    "status": "done"
  },
  "links": {
    "self": "https://api.sb/leaseline.app/actions/action_1"
  }
}
```

Next: offer “Make it 50% off the first month instead”, or “Stop the code today”.

Calls: `Coupon.create`

Ask:

```text
Give the first 100 customers 20% off for three months.
Make a LAUNCH20 code.
Create a promo code for launch week.
```

API:

```bash
# Coupon.create
curl -X POST https://api.sb/leaseline.app/coupons \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"duration":"repeating","percentOff":20,"months":3,"code":"LAUNCH20","maxRedemptions":100,"redeemBy":"2026-12-31T23:59:59Z"}'
```

SDK:

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

await $.Coupon.create({ duration: 'repeating', percentOff: 20, months: 3, code: 'LAUNCH20', maxRedemptions: 100, redeemBy: '2026-12-31T23:59:59Z' })
```

CLI:

```bash
npx startup-builder do Coupon.create --json '{"duration":"repeating","percentOff":20,"months":3,"code":"LAUNCH20","maxRedemptions":100,"redeemBy":"2026-12-31T23:59:59Z"}'
```

MCP:

```json
{
  "name": "do",
  "arguments": {
    "code": "return await $.Coupon.create({ duration: 'repeating', percentOff: 20, months: 3, code: 'LAUNCH20', maxRedemptions: 100, redeemBy: '2026-12-31T23:59:59Z' })"
  }
}
```

## Change it
- Make it 50% off the first month instead.
- Stop the code today.
- How many people used LAUNCH20?

## Under the hood
- Systems: [Billing](/systems/billing)
- Nouns: [Coupon](/business/nouns/coupon), [Invoice](/business/nouns/invoice)
- Events: `Coupon.created`
- Stripe objects: `Coupon`, `Promotion Code`