Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.waffo.ai/llms.txt

Use this file to discover all available pages before exploring further.

Product = Billing Object

In Waffo Pancake, a product is the object used for checkout, taxation, and reporting. It is the commercial offer you charge for, not just a storefront card.
For professional use, think of products as billing entities:
  • a fixed-price offer
  • a subscription plan
  • or a base product used with dynamic pricing at checkout

Core Models

One-Time

Customer pays once for a predefined offer.
  • Digital downloads
  • Lifetime licenses
  • Templates, courses, assets

Subscription

Customer is billed on a recurring schedule.
  • SaaS plans
  • Memberships
  • Service retainers

Dynamic Pricing

Amount is calculated at checkout time.
  • Usage overage
  • Credit top-ups
  • Negotiated quotes

Create a Product

Dashboard —> Products —> Create Product
{
  "storeId": "your-store-uuid",
  "name": "Pro Plan",
  "prices": {
    "USD": { "amount": "29.00", "taxIncluded": false, "taxCategory": "saas" }
  }
}
Done. You get a permanent purchase link for fixed-price selling, or a reusable billing object for programmatic checkout.

Product Fields

Required

FieldWhat It Is
NameWhat customers see
PriceHow much you charge
CurrencyUSD, EUR, GBP, CNY, JPY, HKD, etc.
TypeOne-time or Subscription
Tax CategorySaaS, Digital Goods, Software, etc.

Optional

FieldDefaultPurpose
DescriptionMarkdown. Sell your product.
Image400x400px recommended
Success URLRedirect after purchase

Dynamic Pricing

Dynamic pricing is the right model when the final amount is not known until runtime. Examples:
  • usage-based overage billing
  • prepaid credit packs with variable size
  • contract-specific quotes
  • temporary discounts calculated on your server

How It Works

  1. Create a base one-time product in Waffo Pancake
  2. Calculate the final amount on your server
  3. Pass priceSnapshot when creating the checkout session
const session = await client.checkout.createSession({
  storeId: "store_id",
  productId: "usage-overage-product-id",
  productType: "onetime",
  currency: "USD",
  priceSnapshot: {
    amount: calculatedAmount,
    taxIncluded: false,
    taxCategory: "saas",
  },
});
priceSnapshot overrides the stored product price for that checkout session. Use it only from your server, never from untrusted client code.
If the amount is event-based, keep it as a one-time charge even if the customer is already on a subscription.

Free Trials

Let customers try subscription products before they buy.

Trial Abuse Protection

Waffo Pancake automatically tracks consumer trial history at the platform level. When a consumer starts a new subscription, the platform calculates the maximum available trial days based on their history — preventing repeated trial abuse without any effort from the merchant. Merchants can also pass requested_trial_days via the API to shorten or skip the trial for specific customers.
Effective trial abuse prevention requires buyerIdentity. Use authenticated checkout to ensure each buyer can only claim one trial per product.

Billing Intervals

IntervalWhenBest For
WeeklyEvery 7 daysHigh-usage products
MonthlyEvery monthStandard SaaS
QuarterlyEvery 3 monthsB2B software
YearlyEvery 12 monthsCommitted customers
Annual plans with 15-20% discount = lower churn + better cash flow.

Every product gets a permanent purchase link that never expires:
https://checkout.waffo.ai/{store-slug}/{product-slug}
Test mode:
https://checkout.waffo.ai/{store-slug}/{product-slug}/test
Add to your website:
  • Website button
  • Twitter bio
  • Email signature
  • Discord server
Key benefits:
  • Link is permanent — it stays the same even when you update product details
  • No session or token management needed
  • A checkout session is created automatically when the customer opens the link
Getting your link:
  • Dashboard: Click “Copy Link” on any product
  • API: For advanced use cases, create a Checkout Session via API with custom parameters (dynamic link, 7-day TTL)
Test vs Live:
  • Toggle Test Mode in Dashboard header to preview with test links
  • Test links use the /test suffix

Product Status

Active

Live. Customers can buy.

Inactive

Hidden. Existing subscriptions continue.

Updating Products

Products use immutable versioning:
Updates create new versions. Existing subscriptions keep their original version.
FieldImpact
Name/DescriptionCreates new version
ImageCreates new version
PriceNew purchases only
IntervalCannot change after creation

Environment Sync

Publish product versions from test to production:
POST /v1/actions/onetime-product/publish-product
{
  "id": "product-id"
}
Publishing is one-way (test → prod) and only needed for the first publish.

Best Practices

Include billing period:
  • “Pro Plan - Monthly”
  • “Pro Plan - Annual (Save 20%)”
  • Round numbers (29,not29, not 28.73)
  • Annual discount (15-20%)
  • Research competitors
  • 400x400px minimum
  • PNG or JPG
  • Under 2MB