Skip to content

Quote.expired

Emitted each time a Quote is expired.

Quote.expire emits Quote.expired when it completes on a Quote.

PropertyValue
Emitted byQuote.expire
NounQuote
MovesQuote sent to expired
WakesNone.

Payload

Each delivery is an Event record. data holds what Quote.expire returns, and previous holds the state it left.

FieldTypeRequiredDescription
namestringrequiredQuote.expired.
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.quoteQuoterequiredThe expired Quote.
data.quote.totalmoneyrequiredThe quoted total.
data.quote.validUntildaterequiredThe last day it may be accepted.
data.quote.statusstringrequiredOne of draft, sent, accepted, declined, expired, or superseded; an expired or superseded Quote never converts.
data.quote.linesjsonrequiredOne line per Offer: quantity, list Price, discount percent, net amount, term, and start, one line per ramp year.
data.quote.concessionsstring[]Concessions granted, each from the Startup’s fixed concession list, such as a 60-day termination for convenience.
data.quote.paymentTermsjsonThe collection, terms and purchaseOrder every Invoice from the accepted Quote carries.
data.previous.statusstringrequiredThe status before this Event: sent.

Example

JSON
{
  "$id": "https://api.sb/quietcopy.com/events/event_1",
  "$type": "Event",
  "name": "Quote.expired",
  "at": "2026-10-22T12:00:00Z",
  "data": {
    "quote": {
      "$id": "https://api.sb/quietcopy.com/quotes/quote_1",
      "$type": "Quote",
      "total": {
        "amount": 39,
        "currency": "USD"
      },
      "validUntil": "2026-10-22",
      "status": "expired",
      "lines": {},
      "concessions": [
        "60-day termination for convenience"
      ],
      "paymentTerms": {}
    },
    "previous": {
      "status": "sent"
    }
  },
  "seq": 1
}