Skip to content
Indiana
Dashboard
Docs
Browse docs / Paywall configuration & integration

Paywall configuration & integration

Pin an Offering, author Product presentation and connect independent purchases.

SDK examples target the current API. Check matching SDK versions and HTTP alternatives

API v1Updated

Before you start

Publish an Offering Version, then create/publish a Paywall with its Product subset, ordering and default. Prepare the current Customer and purchase integration.

Configure and publish a Paywall

A Paywall owns presentation and pins a published Offering Version. It chooses its displayed Product subset, display groups, Product/group order and default independently within that Offering's leaves.

  • Choose a template or blank design under Paywalls, bind a published Offering Version, then configure displayed Products, groups, periods and the default.
  • Re-selecting the same Offering Version preserves authored settings. New Offering publications never update a Paywall automatically. An explicit Version switch preserves surviving choices and their relative order; authors select additional Products.
  • Complete locales, buttons and Product selection, preview and publish. An unbound draft can save but cannot publish. Integrate it independently or reference its fixed Version from a Funnel.

Display a standalone Paywall

executeMerchantCheckout is your backend integration point: accept an operationId belonging to the authenticated Customer and read its original server-side execution instructions. Do not trust browser-supplied amounts or Stripe parameters. autumn mode redirects through onCheckoutUrl; record_only mode creates Checkout on your backend.

Standalone Paywall creates no Funnel and needs no Funnel run credential. Session refresh pins its original Paywall/Offering Version. Purchase completion and access approval are separate; when using an access check, continue protected work only after an allowed recheck. Actual consumption remains an atomic backend operation.

Related:Offering·Stripe checkout·resolvePaywall API·SDK compatibility

client/paywall.ts · current SDKTypeScript
import { createPaywallSession, showPaywall } from "@tinkerlandai/indiana-sdk"; const result = await showPaywall(container, {  start: () => createPaywallSession({ baseUrl, scope }, {    paywallId: configuredPaywallId,    customerToken, // Issued by your authenticated backend.    locale: "en",    commerce: { provider: "stripe", currency: "USD" },  }),  onCheckoutUrl: (url) => window.location.assign(url),  // Required for record_only mode: execute on your authenticated backend.  onPurchase: ({ operation, signal }) =>    executeMerchantCheckout(operation.operationId, signal),  onComplete: () => refreshCustomerHoldings(),  onError: reportError,});// On navigation/sign-out: result.host?.destroy();

HTTP operations

Use these operations with your HTTP integration. Each reference includes complete request/response fields and credential requirements; SDK snippets are an alternative when a matching SDK is available.

Operation and permission
OperationHTTPPermission
resolvePaywallPOST /api/v1/paywalls/resolveentitlements:read
previewAttachPOST /api/v1/subscriptions/preview-attachbilling:read
attachPOST /api/v1/subscriptions/attachbilling:write
readSubscriptionOperationPOST /api/v1/subscriptions/operations/readbilling:read

Operation and permission

  • resolvePaywall

    HTTP
    POST /api/v1/paywalls/resolve
    Permission
    entitlements:read
  • previewAttach

    HTTP
    POST /api/v1/subscriptions/preview-attach
    Permission
    billing:read
  • attach

    HTTP
    POST /api/v1/subscriptions/attach
    Permission
    billing:write
  • readSubscriptionOperation

    HTTP
    POST /api/v1/subscriptions/operations/read
    Permission
    billing:read

Related:resolvePaywall·previewAttach·attach·readSubscriptionOperation

Check your result

Expected outcome

Open the pinned Paywall independently, preview and confirm purchase, recover the same operation and re-check access after success. No hidden Funnel is required.