Offer methods: list, update, delete
The Offer Verbs list, update, delete as typed SDK methods, with inputs, result, refusals and an example.
curl -X POST https: //api.sb/ leaseline.app/ offers/ offer_2hzYe1ERo0/ publish \
-H "Authorization: Bearer $SB_TOKEN"
API reference
Offer.publishnpx startup-builder do Offer.publish --data '{"offer": "offer_2hzYe1ERo0"}'
CLI reference
Offer.publish{
"name": "do",
"arguments": {
"code": "return await $.Offer.publish({ offer: 'offer_2hzYe1ERo0' })"
}
}
MCP reference
Offer.publishimport { $ } from 'startup-builder'
const offer = await $.Offer.publish({ offer: 'offer_2hzYe1ERo0' })
SDK reference
Offer.publishReference for Offer, one group of Offer methods.
Offer.list
Returns Offers, newest first, one page at a time. Verb page.
interface OfferVerbs {
list(input?: OfferListInput, options?: SB.CallOptions): SB.ListCall<Offer>
}Reads only: it emits no Event.
Inputs
| Input | Type | Required | Description |
|---|---|---|---|
limit | integer | At most this many records, up to 100. The default is 20. | |
after | string | The cursor from the previous page. | |
where | string | A filter over the properties in the where grammar, such as paidAt = null and total.amount > 500 (/ | |
sort | string | Properties to sort by, comma-separated; a leading minus sorts descending. | |
total | boolean | True adds the match count as meta.total, exact up to 10,000 matches and estimated above. | |
facets | string | Properties to count by value, comma-separated, returned as meta.facets. | |
fields | string | Properties to return on each record, comma-separated; $id and $type always return. | |
include | string | Related records to embed in place of their URLs, comma-separated. | |
depth | integer | How many levels of related records to embed. The default is 1. | |
q | string | Words to match across the text properties, ranked by relevance. | |
match | string | Ranks the search by words, or meaning; words is the default. |
Returns
| Output | Type | Required | Description |
|---|---|---|---|
offers | list of Offer | required | One page of Offers. |
Refuses when
| Check | Error | Fix | Then call |
|---|---|---|---|
| The key is valid, but its scopes do not allow this operation | forbidden | Use a key whose scopes cover the operation, or ask an owner of the namespace to grant them. | None. |
match is not one of words or meaning | invalid-input | Send match as one of words or meaning. | None. |
Example
import { $ } from 'startup-builder'
const offers = await $.Offer.list({ limit: 20 })Offer.update
Changes the given properties of an Offer. Verb page.
interface OfferVerbs {
update(input: OfferUpdateInput, options?: SB.CallOptions): SB.Call<Offer>
}Emits Offer.updated.
Inputs
| Input | Type | Required | Description |
|---|---|---|---|
id | string | required | The id of the Offer. |
price | money | The amount and currency per period, or per unit its meter counts. Zero is a price. Never randomized. | |
terms | text | The conditions the Customer accepts, refund rights included. Never randomized. | |
from | string | Lineage: the slot it compiles from, as Hypothesis#<slot>@v<version>. | |
activation | json | The Event, count and window that mark a Customer activated, such as Reminder.sent 20 times within 7 days. | |
credit | money | The Credit Grant each purchase issues, for an Offer that sells prepaid credit, such as $50 of calls. | |
name | string | The name buyers see on the pricing table and the invoice, such as Pro. A declared Offer answers to its file name as its slug. | |
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). | |
interval | string | How often it bills: once, day, week, month or year. | |
availableFrom | datetime | When it can first be bought. Unset: from when it is published. | |
availableUntil | datetime | When it can last be bought. Existing Subscriptions continue past it. | |
trial | json | The free trial every new Customer starts with: days, and card true to take a card up front. Unset: no trial. | |
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). | |
uptime | json | The monthly uptime it promises, and the share of that month’s charge credited back below each level. | |
license | string | What a buyer may do with the records it sells: use them internally, display them to its own users, or redistribute them. | |
attribution | text | The credit line a buyer shows wherever the records appear. | |
privateTo | Party | The one Party who sees it and may accept it, making it a private Offer; no pricing page lists it. | |
meter | Meter | The Meter whose count it bills, for a usage-priced Offer: each unit the Meter counts bills at price. | |
refundable | boolean | True for a refundable deposit: refunded in full on request before shipBy, and to every buyer when shipBy passes unshipped. | |
shipBy | date | The date a deposit Offer promises to ship by; past it unshipped, every deposit refunds on its own. | |
product | Product | The Product it sells. Omitted on create: the Startup’s only Product; with several, the call is refused with invalid-input until one is named. | |
convertsTo | string | What a deposit pays at ship: firstInvoice (the first period of a Subscription) or firstOrder (the first Order). |
Returns
| Output | Type | Required | Description |
|---|---|---|---|
offer | Offer | required | The Offer. |
Refuses when
| Check | Error | Fix | Then call |
|---|---|---|---|
| The key is valid, but its scopes do not allow this operation | forbidden | Use a key whose scopes cover the operation, or ask an owner of the namespace to grant them. | None. |
id is missing, or is not a string | invalid-input | Send id as a string, then call it again. | None. |
atBound is not one of stop, overage or upgrade | invalid-input | Send atBound as one of stop, overage or upgrade. | None. |
interval is not one of once, day, week, month or year | invalid-input | Send interval as one of once, day, week, month or year. | None. |
seats is not one of manual or members | invalid-input | Send seats as one of manual or members. | None. |
license is not one of internal, display or redistribute | invalid-input | Send license as one of internal, display or redistribute. | None. |
product: omitted on create: the Startup’s only Product; with several, the call is refused with invalid-input until one is named | invalid-input | Send product, then call it again. | None. |
convertsTo is not one of firstInvoice or firstOrder | invalid-input | Send convertsTo as one of firstInvoice or firstOrder. | None. |
The Idempotency-Key was sent before with another operation or other input | idempotency-mismatch | Send a new key for new input; reuse a key only to retry the same request. | None. |
Example
import { $ } from 'startup-builder'
const offer = await $.Offer.update({ id: 'offer_2hzYe1ERo0', price: { amount: 29, currency: 'USD' } }, { idempotencyKey: 'leaseline-offer-update-1' })Offer.delete
Deletes an Offer: a soft delete that keeps its history, undone by Thing.restore. Verb page.
interface OfferVerbs {
delete(input: OfferDeleteInput, options?: SB.CallOptions): SB.Call<Offer>
}Emits Offer.deleted.
Inputs
| Input | Type | Required | Description |
|---|---|---|---|
id | string | required | The id of the Offer. |
Returns
| Output | Type | Required | Description |
|---|---|---|---|
offer | Offer | required | The Offer. |
Refuses when
| Check | Error | Fix | Then call |
|---|---|---|---|
| The key is valid, but its scopes do not allow this operation | forbidden | Use a key whose scopes cover the operation, or ask an owner of the namespace to grant them. | None. |
id is missing, or is not a string | invalid-input | Send id as a string, then call it again. | None. |
The Idempotency-Key was sent before with another operation or other input | idempotency-mismatch | Send a new key for new input; reuse a key only to retry the same request. | None. |
Example
import { $ } from 'startup-builder'
const offer = await $.Offer.delete({ id: 'offer_2hzYe1ERo0' }, { idempotencyKey: 'leaseline-offer-delete-1' })