# Renewal.opened

URL: /business/events/Renewal.opened · Id: `event:Renewal.opened`

> Emitted each time a Renewal is opened.

[Renewal.open](/business/nouns/renewal/open) emits `Renewal.opened` when it completes on a [Renewal](/business/nouns/renewal).

| Property | Value |
| --- | --- |
| Emitted by | [Renewal.open](/business/nouns/renewal/open) |
| Noun | [Renewal](/business/nouns/renewal) |
| Wakes | None. |

### Payload
Each delivery is an [Event](/business/nouns/event) record. `data` holds what [Renewal.open](/business/nouns/renewal/open) returns.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | `string` | Yes | `Renewal.opened`. |
| `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.renewal` | [Renewal](/business/nouns/renewal) | Yes | The open Renewal. |
| `data.renewal.status` | `string` | Yes | One of `Open`, `Qualified`, `Proposed`, `Won`, or `Lost`. |
| `data.renewal.value` | `money` | No | What the Deal is worth if won. |
| `data.renewal.owner` | [Worker](/business/nouns/worker) | No | The Worker who runs it. |
| `data.renewal.closesOn` | `date` | No | The date the buyer expects to decide. |
| `data.renewal.statusSince` | `datetime` | No | When it entered its current status, computed from its Events. |
| `data.renewal.nextStep` | `text` | No | The next dated step agreed with the buyer. |
| `data.renewal.termEndsAt` | `datetime` | Yes | When the current term ends, read from the Subscription. |
| `data.renewal.openedAt` | `datetime` | Yes | When it opened: by default 90 days before the term ends. |
| `data.renewal.usageReview` | `text` | No | Usage against each Entitlement over the term, written before any Quote. |
| `data.renewal.noticeSentAt` | `datetime` | No | When the renewal notice the legal floor requires went out, with the date, Price and cancel link. |
| `data.renewal.saveOffer` | `text` | No | The one save offer shown on cancel; it never blocks the cancel. |
| `data.renewal.outcome` | `string` | No | One of `renewed`, `expanded`, `contracted`, or `churned`, computed from the Subscription’s Events at the term end. |

### Example
```json
{
  "$id": "https://api.sb/tutorloop.com/events/event_1",
  "$type": "Event",
  "name": "Renewal.opened",
  "at": "2026-10-22T12:00:00Z",
  "data": {
    "renewal": {
      "$id": "https://api.sb/tutorloop.com/renewals/renewal_1",
      "$type": "Renewal",
      "status": "Open",
      "value": {
        "amount": 60,
        "currency": "USD"
      },
      "owner": "worker_1",
      "closesOn": "2026-10-22",
      "statusSince": "2026-10-22T12:00:00Z",
      "nextStep": "Example next step",
      "termEndsAt": "2026-10-22T12:00:00Z",
      "openedAt": "2026-10-22T12:00:00Z",
      "usageReview": "Example usage review",
      "noticeSentAt": "2026-10-22T12:00:00Z",
      "saveOffer": "Example save offer",
      "outcome": "renewed"
    }
  },
  "seq": 1
}
```