Skip to content

Offer.subscribed

Emitted each time an Offer is subscribed.

Offer.subscribe emits Offer.subscribed when it completes on an Offer.

PropertyValue
Emitted byOffer.subscribe
NounOffer
MovesCustomer churned to wonBack when the subscriber is this Customer
WakesNone.

Payload

Each delivery is an Event record. data holds what Offer.subscribe returns.

FieldTypeRequiredDescription
namestringrequiredOffer.subscribed.
atdatetimerequiredWhen it happened.
seqintegerIts position in the namespace, one more than the Event before; any seq is a cursor into the history.
datajsonrequiredThe Thing as the Action left it.
data.subscriptionSubscriptionrequiredThe new Subscription.
data.offerOfferrequiredThe Offer subscribed to.
data.offer.pricemoneyrequiredThe amount, currency, and unit. Zero is a price.
data.offer.termstextThe conditions the Customer accepts, refund rights included.
data.offer.fromstringLineage: the slot it compiles from, as Hypothesis#<slot>@v<version>.
data.offer.activationjsonThe Event, count and window that mark a Customer activated, such as Reminder.sent 20 times within 7 days.
data.offer.creditmoneyThe Credit Grant each purchase issues, for an Offer that sells prepaid credit, such as $50 of calls.
data.offer.atBoundstringWhat 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.intervalstringHow often it bills: once, day, week, month or year.
data.offer.availableFromdatetimeWhen it can first be bought. Unset: from when it is published.
data.offer.availableUntildatetimeWhen it can last be bought. Existing Subscriptions continue past it.
data.offer.trialjsonThe free trial every new Customer starts with: days, and card true to take a card up front. Unset: no trial.
data.offer.seatsstringHow 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.uptimejsonThe monthly uptime it promises, and the share of that month’s charge credited back below each level.
data.offer.licensestringWhat a buyer may do with the records it sells: use them internally, display them to its own users, or redistribute them.
data.offer.attributiontextThe credit line a buyer shows wherever the records appear.
data.offer.privateToPartyThe 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.subscribed",
  "at": "2026-10-22T12:00:00Z",
  "data": {
    "subscription": {
      "$id": "https://api.sb/petpantry.shop/subscriptions/subscription_1",
      "$type": "Subscription",
      "status": "active"
    },
    "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
}