# Give a customer a free trial

URL: /products/offers/give-a-free-trial · Id: `guide:give-a-free-trial`

> Say "give this customer a 14-day free trial" and get a trialing Subscription with everything the plan grants, and a reminder before it ends.

A trial starts one [Customer](/business/nouns/customer) on an [Offer](/business/nouns/offer) free for a set number of days. With a card on file it converts on its own; without one, the [Success Manager](/agents/customer/success-manager) follows up.

Needs: [Charge monthly](/systems/finance/charge-monthly) · [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 Subscription in its trial, free for 14 days (Subscription)
- 1 everything the Pro Offer grants, from the first day (Entitlement)
- 1 reminder before the trial ends (Message)
- 1 follow-up task for the Success Manager if no card is on file at the end (Task)

## Your agent does
**For agents**

- Guide: `guide:give-a-free-trial`, status `live`. Page: [/products/offers/give-a-free-trial.md](/products/offers/give-a-free-trial.md).
- Approval: none. Run it when the founder asks.
- Leaves the chat: never.
- Needs first: [Charge monthly](/systems/finance/charge-monthly), [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.trial`](/business/nouns/offer/trial) (`verb:Offer.trial`) | `offer` Offer (an id), required: example `"offer_pro_monthly"`; `customer` Customer (an id), required: example `"customer_riverside"`; `days` integer, required: example `14`; `card` boolean: example `false` | `subscription` Subscription, `offer` Offer |

Returns: the last call answers with `subscription`, `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",
  "subscription": {
    "$id": "https://api.sb/leaseline.app/subscriptions/subscription_1",
    "$type": "Subscription"
  },
  "offer": {
    "$id": "https://api.sb/leaseline.app/offers/offer_pro_monthly",
    "$type": "Offer"
  },
  "action": {
    "$id": "https://api.sb/leaseline.app/actions/action_1",
    "operation": "Offer.trial",
    "status": "done"
  },
  "links": {
    "self": "https://api.sb/leaseline.app/actions/action_1"
  }
}
```

Next: offer “Ask for a card up front next time”, or “Send a reminder three days before it ends”.

Calls: `Offer.trial`

Ask:

```text
Give Riverside Property a 14-day free trial.
Let this customer try Pro free for two weeks.
Start a trial without a card.
```

API:

```bash
# Offer.trial
curl -X POST https://api.sb/leaseline.app/offers/offer_pro_monthly/trial \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"customer":"customer_riverside","days":14,"card":false}'
```

SDK:

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

await $.Offer.trial({ offer: 'offer_pro_monthly', customer: 'customer_riverside', days: 14, card: false })
```

CLI:

```bash
npx startup-builder do Offer.trial --json '{"offer":"offer_pro_monthly","customer":"customer_riverside","days":14,"card":false}'
```

MCP:

```json
{
  "name": "do",
  "arguments": {
    "code": "return await $.Offer.trial({ offer: 'offer_pro_monthly', customer: 'customer_riverside', days: 14, card: false })"
  }
}
```

## Change it
- Ask for a card up front next time.
- Send a reminder three days before it ends.
- Who is on a trial right now?

## Under the hood
- Systems: [Billing](/systems/billing), [Success](/systems/success)
- Nouns: [Offer](/business/nouns/offer), [Subscription](/business/nouns/subscription), [Customer](/business/nouns/customer)
- Events: [`Offer.trialed`](/business/events/Offer.trialed)
- Stripe objects: `Subscription`