Migrating from Superwall
AgentWallie is designed as a drop-in replacement for Superwall with full API-first control. The SDK API surface mirrors Superwall's, making migration straightforward.
SDK API Comparison
| Superwall | AgentWallie | Notes |
|---|---|---|
Superwall.configure(apiKey:) | AgentWallie.configure(apiKey:) | Same signature |
Superwall.shared.register(placement:) | AgentWallie.shared.register(placement:) | Same signature, same behavior |
Superwall.shared.identify(userId:) | AgentWallie.shared.identify(userId:) | Same signature |
Superwall.shared.reset() | AgentWallie.shared.reset() | Same behavior |
Superwall.shared.setUserAttributes(_:) | AgentWallie.shared.setUserAttributes(_:) | Same signature |
Superwall.shared.subscriptionStatus | AgentWallie.shared.subscriptionStatus | Same pattern |
SuperwallDelegate | AgentWallieDelegate | Similar callbacks |
SuperwallOptions | AgentWallieOptions | Similar options |
Migration Steps
Step 1: Replace the SDK Dependency
Remove the Superwall package and add AgentWallie:
// Remove: https://github.com/superwall/Superwall-iOS.git
// Add: https://github.com/cynisca/AgentWallieKit.gitUpdate imports:
// Before
import SuperwallKit
// After
import AgentWallieKitStep 2: Update Configuration
// Before
Superwall.configure(apiKey: "pk_superwall_key")
// After
AgentWallie.configure(apiKey: "pk_agentwallie_key")Step 3: Find-and-Replace SDK Calls
In most cases, a simple find-and-replace works:
| Find | Replace |
|---|---|
Superwall | AgentWallie |
SuperwallKit | AgentWallieKit |
SuperwallDelegate | AgentWallieDelegate |
SuperwallOptions | AgentWallieOptions |
Placement names stay the same. If your Superwall integration uses register(placement: "onboarding_complete"), the same placement name works in AgentWallie.
Step 4: Migrate Configuration via API
Use the migration endpoint to import your Superwall configuration:
curl -X POST https://agentwallie.com/api/v1/projects/PROJECT_ID/duplicate-from-superwall \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk_your_private_key" \
-d '{
"campaigns": [
{
"name": "Onboarding Campaign",
"placements": ["app_launch", "onboarding_complete"]
}
],
"paywalls": [
{
"name": "Premium Offer",
"components": []
}
],
"products": [
{
"name": "Annual Pro",
"store_product_id": "com.myapp.annual_pro"
},
{
"name": "Monthly Pro",
"store_product_id": "com.myapp.monthly_pro"
}
]
}'Or use the MCP tool:
agentwallie_migrate_from_superwall(
project_id: "PROJECT_ID",
superwall_config: {
campaigns: [...],
paywalls: [...],
products: [...]
}
)Step 5: Recreate Paywalls
Superwall paywalls are built in a visual editor and don't have a public export format. You will need to recreate them as AgentWallie JSON schemas.
Options:
- Use
agentwallie_generate_paywallwith a description of your existing paywall - Start from a template and customize
- Build the schema manually using the component reference
Step 6: Verify with Dry-Run
Before going live, use the dry-run endpoint to verify your configuration:
curl -X POST https://agentwallie.com/api/v1/projects/PROJECT_ID/dry-run \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk_your_private_key" \
-d '{
"user_attributes": { "subscription_status": "free", "session_count": 5 },
"placement_name": "onboarding_complete"
}'This shows exactly which paywall would be presented without affecting real users.
What Stays the Same
- Placement names: Keep all your existing placement names
- Product IDs: Same App Store / Google Play product IDs
- User attributes: Same attribute keys for audience targeting
- SDK API surface: Nearly identical method signatures
What Changes
| Area | Change |
|---|---|
| Paywall creation | JSON schemas instead of visual editor (dashboard editor available too) |
| Campaign config | API/JSON instead of dashboard-only |
| MCP access | Full agent control via MCP tools (new capability) |
| Validation | Config validation and dry-run simulation (new capability) |
| Rendering | Native SwiftUI/Compose from schema (not WebView) |
The biggest benefit of migration: everything that required Superwall's dashboard can now be done via API or MCP. An AI agent can manage your entire paywall lifecycle without a browser.