Offer.withdrawn
Emitted each time an Offer is withdrawn.
Offer.withdraw emits Offer.withdrawn when it completes on an Offer.
| Property | Value |
|---|---|
| Emitted by | Offer.withdraw |
| Noun | Offer |
| Moves | Product selling to retired when the last published Offer on this Product is withdrawn; Offer published to withdrawn; Price fixed to retired when the Offer holds this Price |
| Wakes | None. |
Payload
Each delivery is an Event record. data holds what Offer.withdraw returns.
| Field | Type | Required | Description |
|---|---|---|---|
name | string | required | Offer.withdrawn. |
at | datetime | required | When it happened. |
seq | integer | Its position in the namespace, one more than the Event before; any seq is a cursor into the history. | |
data | json | required | The Thing as the Action left it. |
data.offer | Offer | required | The Offer, closed to new acceptance. |
data.offer.price | money | required | The amount, currency, and unit. Zero is a price. |
data.offer.terms | text | The conditions the Customer accepts, refund rights included. | |
data.offer.from | string | Lineage: the slot it compiles from, as Hypothesis#<slot>@v<version>. | |
data.offer.activation | json | The Event, count and window that mark a Customer activated, such as Reminder.sent 20 times within 7 days. | |
data.offer.credit | money | The Credit Grant each purchase issues, for an Offer that sells prepaid credit, such as $50 of calls. | |
data.offer.atBound | string | 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 | How often it bills: once, day, week, month or year. | |
data.offer.availableFrom | datetime | When it can first be bought. Unset: from when it is published. | |
data.offer.availableUntil | datetime | When it can last be bought. Existing Subscriptions continue past it. | |
data.offer.trial | json | 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 | 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 | The monthly uptime it promises, and the share of that month’s charge credited back below each level. | |
data.offer.license | string | What a buyer may do with the records it sells: use them internally, display them to its own users, or redistribute them. | |
data.offer.attribution | text | The credit line a buyer shows wherever the records appear. | |
data.offer.privateTo | Party | The one Party who sees it and may accept it, making it a private Offer; no pricing page lists it. |
Example
{
"$id": "https: //api.sb/ petpantry.shop/ events/ event_1",
"$type": "Event",
"name": "Offer.withdrawn",
"at": "2026-10-22T12: 00: 00Z",
"data": {
"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
}