How It Works

From Zero to Paywall in 5 Minutes

PaywallOS makes monetization simple. Define verbs, map to tiers, add attributes. Done.

1

Create Your App

Sign up for PaywallOS and create your first app. You'll get an API key and App ID instantly.

# Install OpenVerb SDK (used by PaywallOS)
npm install @openverb/sdk

# Or copy the PaywallOS client from our repo
# lib/paywall-sdk.ts - set baseUrl: 'https://paywallos.openverb.org'
2

Define Your Verbs

Create an OpenVerb library describing what users can do in your app. Use our AI assistant or write it yourself.

{
  "namespace": "myapp.core",
  "verbs": [
    {
      "name": "export_data",
      "category": "file_system",
      "description": "Export user data to CSV"
    },
    {
      "name": "generate_report",
      "category": "analysis",
      "description": "Generate analytics report"
    }
  ]
}
3

Create Pricing Tiers

Set up your pricing tiers (Free, Pro, Enterprise, etc.) and add your Stripe Price IDs.

Free
$0
  • • Basic features
  • • 10 exports/month
Popular
Pro
$29
  • • All features
  • • 100 exports/month
Enterprise
$299
  • • Unlimited everything
  • • Priority support
4

Map Verbs to Tiers

Assign which verbs are available in each tier. Set usage limits if needed.

export_dataPro & above
generate_reportPro & above
ai_suggestionsEnterprise only
5

Add to Your App

Initialize PaywallOS and add verb= attributes. That's it!

import { initPaywallOS } from './paywall-sdk'

// Call once at app startup
initPaywallOS(apiKey, appId, user.id, user.tier)

// Your app - add verb= to any element
<button verb="export_data">Export</button>
<button verb="generate_report">Reports</button>

Done! 🎉

PaywallOS now automatically:

  • PaywallOSIntercepts clicks on elements with verb= attributes
  • Checks user's subscription tier
  • Allows or blocks action in <10ms
  • Shows upgrade modal when blocked

How It Works Under the Hood

User clicks <button verb="export_data">
         ↓
PaywallOS intercepts click (capture phase)
         ↓
POST /api/openverb/check
  {
    verbId: "export_data",
    userId: "user_123",
    appId: "app_456"
  }
         ↓
Database queries:
  1. Get user's subscription tier
  2. Check if verb enabled for tier
  3. Check usage limits (if any)
         ↓
Response (~10ms):
  { ok: true, receipt: {...} }  // allowed
  or
  { denied: true, reason: { message: "Upgrade to Pro" } }  // blocked
         ↓
If allowed: Original action proceeds
If blocked: Show upgrade modal

Ready to Get Started?

Build your first paywall in 5 minutes

PaywallOS Sandbox

The OpenVerb JSON library defines what actions exist in the app.

Analytics
dashboard.view
Access to the main analytics dashboard and basic metrics.
data.export
Export reports and raw data to CSV or PDF formats.
data.streaming
Access to real-time websocket data and live feed updates.
AI
ai.insights
Generate automated summaries and trend detection from datasets.
ai.forecast
Access to predictive modeling and future trend forecasting.
Collaborate
team.collaboration
Shared workspaces, comments, and team-based tagging.
Developer
api.custom_keys
Generate and manage programmatic API keys for data integration.
Service
support.priority
Priority ticket handling and 24/7 technical support access.
8 verbs loaded from openverb.core.json

Subscription tiers determine pricing. Each tier unlocks specific verbs.

Free
Free
dashboard.view
1 verb included
Pro
$29/mo
dashboard.view
data.export
ai.insights
3 verbs included
Business
$99/mo
dashboard.view
data.export
data.streaming
ai.insights
ai.forecast
team.collaboration
api.custom_keys
support.priority
8 verbs included

The access control matrix. Which verbs are allowed on which tiers.

VerbFreeProBusiness
dashboard.view
data.export
50/monthly
data.streaming
ai.insights
20/monthly
ai.forecast
team.collaboration
api.custom_keys
support.priority
Active User
Try an Action