Paywall namespace

Reference for public candidate-access offers.

Retrieve the public offers shown before a signed-in candidate begins checkout through board.me.access.

board.paywall.offers()

ts
offers(options?: FetchOptions): Promise<ListEnvelope<PaywallOffer>>

Returns the enabled public tiers. When the candidate-access paywall is disabled, the response is a valid list envelope with an empty data array.

ts
const { data: offers } = await board.paywall.offers({
cache: 'force-cache',
});
const defaultOffer = offers.find((offer) => offer.isDefault) ?? offers[0];

Each PaywallOffer includes its public offerKey, label, billing copy, amount and currency, offer type, interval, and default state. Internal Stripe price IDs are not exposed.

Start checkout

Offer discovery is public. Checkout belongs to the authenticated candidate:

ts
const session = await board.me.access.checkout({
offerKey: 'monthly',
returnPath: '/account/access',
colorMode: 'light',
});

Use the selected returned offer’s key after validating it against the checkout input accepted by your installed SDK. Mount the returned connected-account checkout kit as described by AccessCheckoutSession. Do not assume a lifetime offer has a recurring-subscription portal.

Errors and feature behavior

  • An empty offer list means the paywall is disabled or has no enabled public offers; render no checkout CTA.
  • Authenticated access methods can return paywall_disabled, paywall_offer_not_found, paywall_no_candidate_profile, or checkout-specific errors.
  • Reload entitlement state through board.me.access.grant after checkout instead of trusting a return query parameter.

See the Me namespace for checkout, polling, grants, and billing portal methods.