Overview
Ionic provides comprehensive recurring billing and subscription management capabilities, allowing you to set up automatic payments, manage customer subscriptions, and process recurring charges without manual intervention.Recurring billing integrates seamlessly with the Customer Vault to securely store payment methods and process automatic charges on schedule.
- Flexible Scheduling - Daily, weekly, monthly, or custom frequency billing
- Subscription Plans - Create and manage reusable billing plans
- Automatic Retry - Smart retry logic for failed payments
- Customer Management - Integrated with Customer Vault for payment storage
- Real-Time Notifications - Webhook events for all subscription activities
- Lifecycle Management - Add, update, pause, and cancel subscriptions via API
How Recurring Billing Works
1
Store Payment Method
Save customer payment information securely in the Customer Vault
2
Create Subscription
Set up a subscription with billing frequency, amount, and schedule
3
Automatic Charging
Ionic automatically charges the stored payment method on schedule
4
Webhook Notifications
Receive real-time notifications for successful charges, failures, and subscription changes
5
Manage Subscription
Update amounts, change frequency, pause, or cancel subscriptions as needed
Subscription Types
- Plan-Based
- Custom Subscriptions
- Fixed Term
- Ongoing
Pre-Defined Plans
Create reusable subscription plans with standard pricing and frequency.Use Cases:- SaaS subscriptions (Basic, Pro, Enterprise tiers)
- Membership fees
- Monthly service packages
- Standard billing cycles
- Consistent pricing across customers
- Easy plan upgrades/downgrades
- Simplified subscription management
- Quick customer onboarding
Creating Subscriptions
API Variables
| Variable | Description | Format | Required |
|---|---|---|---|
recurring | Subscription action | add_subscription, update_subscription, delete_subscription | ✅ Yes |
customer_vault_id | Customer identifier | String | ✅ Yes |
plan_id | Plan identifier (for plan-based) | String | Optional |
plan_amount | Recurring charge amount | x.xx | ✅ Yes (if no plan_id) |
plan_payments | Number of payments | Numeric (0=unlimited) | ✅ Yes |
start_date | First charge date | YYYYMMDD | Optional |
day_frequency | Days between charges | Numeric | Optional* |
month_frequency | Months between charges | Numeric | Optional* |
day_of_month | Day to charge each month | 1-31 | Optional |
*Either
day_frequency or month_frequency is required to set billing frequency.Implementation Examples
Managing Subscriptions
Update Subscription
Change subscription amount, frequency, or plan:Cancel Subscription
Delete a subscription to stop future charges:Pause and Resume
Pause Subscription
Pause Subscription
To temporarily pause a subscription, update it with a future start date:
Resume Subscription
Resume Subscription
To resume immediately, update with today’s or tomorrow’s date:
Billing Frequencies
Common Frequency Patterns
- Daily
- Monthly
- Specific Day
- Custom Intervals
Webhook Events
Monitor subscription activity with real-time webhook notifications:Subscription Lifecycle Events
- subscription.added
- subscription.updated
- subscription.deleted
Triggered when a new subscription is created.Use Cases:
- Send welcome email
- Provision account access
- Update CRM records
- Track subscription metrics
Payment Events
- recurring.payment.success
- recurring.payment.failed
Triggered when a recurring payment is processed successfully.Use Cases:
- Send payment receipt
- Extend service access
- Update billing history
- Track successful charges
Webhook Implementation
Failed Payment Handling
Automatic Retry Logic
Ionic automatically retries failed recurring payments:| Attempt | Timing | Action |
|---|---|---|
| 1 | Immediate | First charge attempt |
| 2 | 3 days later | First retry |
| 3 | 3 days later | Second retry |
| 4 | 3 days later | Final retry |
Dunning Management
Implement dunning workflows to recover failed payments:1
Detect Failed Payment
Receive
recurring.payment.failed webhook notification2
Notify Customer
Send email requesting payment method update
3
Restrict Access
Optionally pause service access until payment succeeds
4
Allow Update
Provide customer portal to update payment method via Customer Vault
5
Cancel if Unresolved
Cancel subscription after grace period if payment not recovered
Testing Subscriptions
Test Scenarios
- Successful Recurring
- Failed Payment
- Expired Card
Test standard subscription flow:
Testing Checklist
Subscription Creation
Subscription Creation
- Create monthly subscription
- Create weekly subscription
- Create annual subscription
- Create fixed-term subscription (6 payments)
- Create ongoing subscription (unlimited)
- Verify subscription_id returned
- Verify start_date handling
Subscription Updates
Subscription Updates
- Update subscription amount
- Change billing frequency
- Update payment method
- Pause subscription (future start date)
- Resume subscription
- Upgrade plan
- Downgrade plan
Payment Processing
Payment Processing
- Successful recurring payment
- Failed payment handling
- Retry logic testing
- Multiple payment methods
- Expired card handling
- Insufficient funds handling
Webhooks
Webhooks
- subscription.added received
- subscription.updated received
- subscription.deleted received
- recurring.payment.success received
- recurring.payment.failed received
- Webhook signature verification
Lifecycle Management
Lifecycle Management
- Cancel subscription
- Reactivate canceled subscription
- Subscription completion (fixed-term)
- Handle customer vault deletion
- Prorated charges (if applicable)
Best Practices
Use Customer Vault
Always store payment methods in Customer Vault before creating subscriptions for PCI compliance
Set Start Dates
Specify start_date to control when first charge occurs, allowing time for account setup
Monitor Webhooks
Implement webhook handlers for all subscription events to keep your system in sync
Handle Failures Gracefully
Build dunning workflows to recover failed payments and reduce involuntary churn
Test Thoroughly
Test all subscription scenarios in test mode before going live
Provide Self-Service
Allow customers to update payment methods and manage subscriptions themselves
Communicate Clearly
Send confirmation emails for subscription changes and upcoming charges
Plan for Edge Cases
Handle expired cards, failed payments, and subscription upgrades/downgrades
Common Use Cases
SaaS Subscription Tiers
Membership Fees
Payment Plans
Installment Billing
Troubleshooting
Subscription Not Creating
Subscription Not Creating
Common Causes:
- Invalid customer_vault_id
- Missing required fields (plan_amount, plan_payments, frequency)
- Invalid date format for start_date
- Customer vault payment method expired
- Verify customer exists in vault
- Check all required fields are present
- Use YYYYMMDD format for dates
- Verify payment method is valid
Payments Not Processing
Payments Not Processing
Common Causes:
- Subscription paused (future start_date)
- Payment method expired
- Customer vault deleted
- Subscription completed (reached plan_payments)
- Check subscription status via Query API
- Verify payment method in Customer Vault
- Review subscription configuration
Webhooks Not Received
Webhooks Not Received
Common Causes:
- Webhook URL not configured
- Endpoint returning errors
- Firewall blocking requests
- SSL certificate issues
- Verify webhook URL in merchant portal
- Test endpoint returns 200 OK
- Check webhook logs in portal
- Verify SSL certificate is valid
Failed Payment Retries
Failed Payment Retries
Common Causes:
- Insufficient funds
- Expired card
- Card declined by issuer
- Account closed
- Implement dunning workflow
- Request updated payment method
- Send customer notifications
- Provide self-service update option
API Endpoint
All subscription operations use the Transaction API:security_key parameter in all requests

