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.
Recurring Revenue. Automated.
Customers subscribe. We handle billing cycles, renewal recovery, and lifecycle management. You focus on your product.How It Works
past_due. This is a recovery state, not an immediate termination state. The system can keep the subscription in a grace or retry window while the customer updates payment details.
Subscription Plan Structure
In Waffo Pancake, each separately purchasable subscription option is an independent subscription product. The most common distinction is billing interval, such as:- monthly
- yearly
| Business offer | Waffo model |
|---|---|
| Monthly plan | 1 subscription product |
| Yearly plan | 1 subscription product |
Subscription States
| Status | Description |
|---|---|
pending | Awaiting first payment |
active | Live and billing normally |
trialing | In free trial period |
past_due | Renewal charge not collected, in recovery or grace period |
canceling | Cancellation requested, access continues until current period ends |
canceled | Will not renew after current period |
expired | Subscription has reached the end of its term |
closed | Never activated — payment timed out |
Billing Intervals
| Interval | Frequency | Best For |
|---|---|---|
| Weekly | Every 7 days | Usage-heavy products |
| Monthly | Every month | Standard SaaS |
| Quarterly | Every 3 months | B2B software |
| Yearly | Every 12 months | Committed customers |
Free Trials
Reduce signup friction. Let customers try before they commit.Configure Trials
When creating a subscription product, enable the trial toggle and set the number of days in the Dashboard.Platform-Level Trial Protection
Waffo Pancake acts as the Merchant of Record and automatically prevents trial abuse:| Layer | How It Works |
|---|---|
| Platform (Pancake) | Tracks each consumer’s trial history across all merchants. Calculates the maximum available trial days for each new subscription. |
| Merchant | Can pass requested_trial_days when creating an order via API to customize the trial length per customer. |
- If the merchant requests ≤ the platform maximum → the merchant’s requested value is used
- If the merchant requests > the platform maximum → falls back to the platform maximum
- If the merchant doesn’t specify → the full platform maximum is used
Buyer Identity & Trial Protection
Trial eligibility is tracked bybuyerIdentity — a stable identifier you provide via authenticated checkout. The platform uses this to detect repeat trial claims across sessions.
Renewal Recovery
When a renewal charge is not collected successfully, the subscription transitions topast_due. This usually means the subscription is in a retry or grace window while the customer updates their payment method, not that access is terminated immediately.
Common handling includes:
- notifying the customer to update payment details
- keeping access active during a grace period
- retrying collection based on the dunning policy
Treat
past_due as “renewal requires recovery”, not simply “payment failed and service stopped”.Managing Subscriptions
Cancel
Cancellation is always effective at the end of the current billing period. When a cancellation is requested, the subscription enters thecanceling intermediate state. The customer retains access until the current billing period ends, at which point the status transitions to canceled.
currentPeriodEnd so you know when access expires. The returned status will be canceling (or canceled if the period has already ended).
There is no immediate cancellation option. Customers always retain access through the end of their paid period. The
canceling → canceled transition happens automatically when the current billing period expires.Resume Subscription
If a subscription is still incanceling, the customer can resume it before the current period ends.
After resuming:
- the subscription returns to
active - access continues without interruption
- future renewals continue on the original billing cycle
Resuming applies to subscriptions that were canceled but have not reached the end of the current period yet. It is effectively an undo for cancellation, not a brand-new purchase.
Upgrade/Downgrade
| Scenario | Behavior |
|---|---|
| Upgrade mid-cycle | Takes effect immediately |
| Downgrade mid-cycle | Takes effect at the end of the current billing period |
Metrics
MRR (Monthly Recurring Revenue)
Key Metrics
| Metric | What It Tells You |
|---|---|
| MRR | Monthly recurring revenue |
| Churn | % subscriptions canceled |
| LTV | Customer lifetime value |
| ARPU | Average revenue per user |
Webhooks
Subscribe to subscription lifecycle events via webhooks. Configure webhook endpoints in Settings —> Webhooks. Webhook payloads use standard Waffo Pancake conventions:- IDs are UUID v4 format
- Amounts as display format strings
- Timestamps in ISO 8601 UTC
- Billing frequency uses the
billingPeriodfield (e.g.,monthly,yearly)
Customer Portal
Let customers manage their own subscriptions:- View details
- Update payment method
- Change plans
- Cancel
- Resume subscription
- Download invoices
Customer Portal
Self-service subscription management.
Best Practices
Offer annual discounts
Offer annual discounts
15-20% off yearly = lower churn + better cash flow.
Don't cut access immediately
Don't cut access immediately
A missed renewal charge does not need to mean instant cancellation. Give the customer time to recover the subscription.
Send reminders
Send reminders
Trial ending. Upcoming charge. No surprises.