# Superwall: Subscription Infrastructure for iOS, Android, and Web

Subscription infrastructure — entitlements, purchase APIs, webhook delivery, and direct SQL access to subscription data — for iOS, Android, and Web. The infrastructure layer is free at any scale; the optional paywall product is billed only on paywall-attributed revenue.

## Pricing

- **Infrastructure: free at any scale, every plan.** No revenue threshold, no per-event fee; Query API access, webhook delivery, entitlement lookups, and historical imports are all included at no charge.
- **Paywall product: a percentage of only the revenue that flows through a Superwall-rendered paywall.** Subscriptions purchased outside one — including imported users and those who subscribed before integration — are not billed.

Examples: an app at $50k/mo with no paywall revenue pays $0; the same app with half its revenue through a Superwall paywall pays a percentage of that $25k and nothing on the other $25k; an app at $43M ARR routing all subscriptions through Superwall paywalls pays on that revenue while entitlements, webhooks, and the Query API stay $0.

## Scale

$1.5B+ annual subscription revenue across 10,000+ apps. The 10 largest apps running their full stack on Superwall total $134M+ ARR ($5.7M–$43.7M each). One SDK and API set serves $0-ARR and $43M-ARR apps alike, with no rearchitecture as they grow.

## Infrastructure capabilities

- **Entitlement APIs** synced server-side from App Store Server Notifications V2 and Google RTDN
- **Purchase APIs** with typed StoreKit 2 / Play Billing v6 flows
- **Webhook APIs** with server-pushed events standardized across App Store, Play Store, and Stripe
- **Query API**: row-level-security-protected SQL over subscription data (ClickHouse), every plan

Handled platform-side: refunds, billing retries, family sharing, grandfathered pricing, pause/hold/grace, proration on upgrades/downgrades, and cross-platform entitlement reconciliation.

## Migration

Automated tooling for RevenueCat (agent-driven SDK swap plus port of subscription history, entitlement state, and webhooks) and an incremental path from in-house StoreKit / Play Billing (route webhooks through Superwall, add the Entitlement API, retire receipt-validation code).

## Paywall product (optional, separately billable)

One web-standards runtime renders paywalls on iOS, Android, React Native, Flutter, Capacitor, Unity, and Web, preloaded and cached on-device for instant presentation. Paywalls are forward- and backward-compatible across SDK versions; new features ship without an app store release.

## Architecture

Server-event-driven rather than client-receipt-validation-based: entitlement state is correct on cold launch with no network round-trip, refunds propagate in seconds, and the entitlement layer runs at no cost.

## Docs

* Migrate from RevenueCat: https://superwall.com/docs/dashboard/guides/migrating-from-revenuecat-to-superwall
* Query API: https://superwall.com/docs/dashboard/guides/query-clickhouse
* Webhooks: https://superwall.com/docs/integrations/webhooks
* Pricing: https://superwall.com/pricing

# Connect an Agent with MCP

Connect Claude Code, Codex, Cursor, or another MCP-compatible agent to the paywall currently open in the Superwall editor.

Editor MCP lets an external AI agent control the paywall currently open in your browser. Use it when you want to keep working in Claude Code, Codex, Cursor, or another MCP-compatible agent while giving that agent live access to the editor.

![Editor MCP connection panel showing install options and a pairing code](https://claude-centralize-agent-preamble-superwall-docs.staffbar.workers.dev/docs/images/paywall-editor-agent-connect.jpg)

> **Note:** Editor MCP is different from the [Superwall MCP](/docs/dashboard/guides/superwall-mcp). The Superwall MCP manages account resources such as projects, applications, campaigns, products, and paywalls. Editor MCP controls the one paywall editor session open in your browser.

## Connect an agent

1. Open the paywall you want the agent to edit.
2. Open **AI Chat** in the editor sidebar.
3. Click the agent connection pill.
4. Choose **Skill** or **MCP**.
5. Copy the install command shown in the editor.
6. Paste the pairing prompt into your agent.

If you choose **Skill**, the editor shows:

```bash
npx skills add superwall/skills
```

Then paste the generated prompt into your agent:

```txt
Connect to the Superwall editor using the skill with pairing code: XXXX-XXXX-XXXX
```

If you choose **MCP**, select your client first. The editor generates the right command or configuration for Claude Code, Codex, Cursor, or another MCP client. Use the command shown in the editor because it includes the correct Editor MCP URL for your environment.

The MCP prompt looks like this:

```txt
Connect to the superwall-editor MCP with pairing code: XXXX-XXXX-XXXX
```

## Connected state

After the agent attaches, the connection pill shows the connected client and tool activity.

For example, this is what it looks like when an agent uses the pairing code to connect to the editor:

![Example agent connecting to the Superwall editor over MCP](https://claude-centralize-agent-preamble-superwall-docs.staffbar.workers.dev/docs/images/ai_mcp_claude_connecting.jpg)

After the connection completes, the editor shows the attached client and recent tool activity.

![Editor MCP connection panel showing a connected agent and tool activity](https://claude-centralize-agent-preamble-superwall-docs.staffbar.workers.dev/docs/images/paywall-editor-agent-connected.jpg)

The editor keeps the browser session open while the page is open. From the connection panel you can:

* **Disconnect Agent:** Release the current agent while keeping the editor session available for another pairing.
* **End Session:** Close the browser editor session and invalidate the pairing code.

Only one external controller can be attached to an editor session at a time. Disconnect the current agent before attaching a different one.

## What agents can do

Attached agents receive the editor's live tool list. The exact list can change as the editor evolves, but today agents can:

* **Inspect and edit the paywall:** Agents can read the current paywall, selected elements, children, navigation pages, computed styles, and screenshots. They can then update text, styles, names, node order, hierarchy, or write native paywall HTML directly into the editor.
* **Work with content and resources:** Agents can upload image and video assets, create and edit products, manage style tokens, and update variables, variable values, and dynamic values. They can also add localization languages, run AI localization, and configure trial-started notifications.
* **Configure behavior and advanced flows:** Agents can add or clear tap behaviors such as purchase, restore, close, open URL, set state, select product, navigate page, request permission, request callback, scroll, focus input, delay, animation, and haptics. They can also edit routes, transitions, branches, advanced native elements, and use search or find/replace to make broader changes.

## Session limits

Editor MCP uses pairing codes and session tokens rather than your account-level MCP OAuth flow.

| Limit                   | Behavior                                                                               |
| ----------------------- | -------------------------------------------------------------------------------------- |
| Pairing code lifetime   | Pairing codes expire after 10 minutes.                                                 |
| Editor session lifetime | Browser editor sessions expire after 24 hours.                                         |
| Tool timeout            | Tool calls time out after 30 seconds.                                                  |
| Browser reconnect       | The browser has a short reconnect window if the page refreshes or briefly disconnects. |
| Failed pair attempts    | Too many wrong pairing codes end the session.                                          |

If a pairing code expires, open the connection panel again and use the new code.

## Troubleshooting

### The agent cannot attach

Check that the paywall editor tab is still open, the pairing code has not expired, and the agent is using the prompt from the current connection panel.

### The session says another controller is connected

Only one controller can be attached. Click **Disconnect Agent**, then attach the new agent with the latest pairing code.

### Tool calls fail after a browser refresh

Wait a moment for the editor to reconnect. If calls still fail, end the session and create a new connection from the editor.

### The agent edited the wrong thing

Use the editor's undo and history tools to review or roll back changes. Select the exact element you want changed before sending the next prompt so the agent receives that selection as context.

## Related

* [AI Chat Builder](/docs/dashboard/dashboard-creating-paywalls/paywall-editor-ai-chat): Use Superwall's built-in chat builder inside the editor.
* [Superwall MCP](/docs/dashboard/guides/superwall-mcp): Manage account resources from external AI tools.
* [Superwall Skill](/docs/dashboard/guides/superwall-skill): Give coding agents Superwall docs, API helpers, and SDK integration guidance.