# Offer.granted

URL: /business/events/Offer.granted · Id: `event:Offer.granted`

> Emitted each time an Offer is granted.

[Offer.grant](/business/nouns/offer/grant) emits `Offer.granted` when it completes on an [Offer](/business/nouns/offer).

| Property | Value |
| --- | --- |
| Emitted by | [Offer.grant](/business/nouns/offer/grant) |
| Noun | [Offer](/business/nouns/offer) |
| Wakes | None. |

### Payload
Each delivery is an [Event](/business/nouns/event) record. `data` holds what [Offer.grant](/business/nouns/offer/grant) returns.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | `string` | Yes | `Offer.granted`. |
| `at` | `datetime` | Yes | When it happened. |
| `seq` | `integer` | No | Its position in the namespace, one more than the Event before; any seq is a cursor into the history. |
| `data` | `json` | Yes | The Thing as the Action left it. |
| `data.entitlement` | [Entitlement](/business/nouns/entitlement) | Yes | The new Entitlement, granted by the Offer. |
| `data.offer` | [Offer](/business/nouns/offer) | Yes | The Offer, with the Entitlement added. |
| `data.offer.price` | `money` | Yes | The amount, currency, and unit. Zero is a price. |
| `data.offer.terms` | `text` | No | The conditions the Customer accepts, refund rights included. |
| `data.offer.from` | `string` | No | Lineage: the slot it compiles from, as `Hypothesis#<slot>@v<version>`. |
| `data.offer.activation` | `json` | No | The Event, count and window that mark a Customer activated, such as `Reminder.sent` 20 times within 7 days. |
| `data.offer.credit` | `money` | No | The Credit Grant each purchase issues, for an Offer that sells prepaid credit, such as $50 of calls. |
| `data.offer.atBound` | `string` | No | What a call past an Entitlement’s Limit gets: `stop`, `overage` or `upgrade` (refuse it, bill it through the Meter, or move to the next Offer). |
| `data.offer.interval` | `string` | No | How often it bills: `once`, `day`, `week`, `month` or `year`. |
| `data.offer.availableFrom` | `datetime` | No | When it can first be bought. Unset: from when it is published. |
| `data.offer.availableUntil` | `datetime` | No | When it can last be bought. Existing Subscriptions continue past it. |
| `data.offer.trial` | `json` | No | The free trial every new Customer starts with: `days`, and `card` true to take a card up front. Unset: no trial. |
| `data.offer.seats` | `string` | No | How a per-seat Price counts: `manual` (the buyer sets the quantity) or `members` (people in the Customer’s Tenant, prorated as they change). |
| `data.offer.uptime` | `json` | No | The monthly uptime it promises, and the share of that month’s charge credited back below each level. |
| `data.offer.license` | `string` | No | What a buyer may do with the records it sells: use them `internal`ly, `display` them to its own users, or `redistribute` them. |
| `data.offer.attribution` | `text` | No | The credit line a buyer shows wherever the records appear. |
| `data.offer.privateTo` | [Party](/business/nouns/party) | No | The one Party who sees it and may accept it, making it a private Offer; no pricing page lists it. |

### Example
```json
{
  "$id": "https://api.sb/petpantry.shop/events/event_1",
  "$type": "Event",
  "name": "Offer.granted",
  "at": "2026-10-22T12:00:00Z",
  "data": {
    "entitlement": {
      "$id": "https://api.sb/petpantry.shop/entitlements/entitlement_1",
      "$type": "Entitlement",
      "verb": "verb_1"
    },
    "offer": {
      "$id": "https://api.sb/petpantry.shop/offers/offer_1",
      "$type": "Offer",
      "price": {
        "amount": 54,
        "currency": "USD"
      },
      "terms": "Full refund within 14 days of purchase. Delivery in 2 business days.",
      "from": "Hypothesis#approach@v1",
      "activation": {},
      "credit": {
        "amount": 54,
        "currency": "USD"
      },
      "atBound": "stop",
      "interval": "once",
      "availableFrom": "2026-10-22T12:00:00Z",
      "availableUntil": "2026-10-22T12:00:00Z",
      "trial": {
        "days": 14,
        "card": true
      },
      "seats": "manual",
      "uptime": {
        "target": 99.9,
        "credits": [
          {
            "below": 99.9,
            "percent": 10
          },
          {
            "below": 99,
            "percent": 25
          }
        ]
      },
      "license": "internal",
      "attribution": "Renewal data from Leaseline",
      "privateTo": "party_1"
    }
  },
  "seq": 1
}
```