POST /subscription-plans
{
"name": "Premium Plan",
"description": "Full access to all premium features",
"metadata": {
"features": ["unlimited_api_calls", "priority_support"]
}
}
POST /subscription-plans/{planUid}/prices
{
"amount": "2999",
"currency": "NGN",
"interval": "month",
"intervalCount": 1,
"trialPeriodDays": 14
}
POST /subscription-checkout-sessions
{
"priceUid": "price_abc123",
"billingMode": "FIXED",
"customer": {
"email": "customer@example.com",
"firstName": "John",
"lastName": "Doe"
},
"successUrl": "https://yourapp.com/success",
"cancelUrl": "https://yourapp.com/cancel"
}
POST /subscription-checkout-sessions
{
"billingMode": "METERED",
"targetPrice": {
"targetCurrency": "NGN",
"targetAmount": "5000.00"
},
"customer": {
"email": "customer@example.com",
"firstName": "Jane",
"lastName": "Smith"
},
"successUrl": "https://yourapp.com/success",
"cancelUrl": "https://yourapp.com/cancel"
}
approvalUrl
in the response. Direct your customer to this URL where they will:successUrl
{
"sessionUid": "session_abc123",
"approvalUrl": "https://checkout.kuvarpay.com/approve/session_abc123",
"status": "pending"
}
GET /subscriptions/{subscriptionUid}
PATCH /subscriptions/{subscriptionUid}
{
"status": "PAUSED",
"cancel_at_period_end": true,
"metadata": {
"reason": "Customer requested pause"
}
}
DELETE /subscriptions/{subscriptionUid}
{
"cancel_at_period_end": false,
"reason": "Customer cancellation"
}
GET /subscriptions/{subscriptionUid}/invoices
POST /subscriptions/{subscriptionUid}/invoices/metered
{
"amount": "150.00",
"currency": "NGN",
"usage_description": "API calls for January 2024",
"due_date": "2024-02-15T10:00:00Z",
"charge_schedule": "scheduled",
"metadata": {
"period": "2024-01",
"service": "api"
}
}
immediate
: Charge the invoice immediately upon creationscheduled
: Charge at the specified due_date
(or 24 hours if not provided){
"amount": "750.00",
"currency": "NGN",
"usage_description": "Premium API usage - urgent billing",
"charge_schedule": "immediate"
}
{
"amount": "2000.00",
"currency": "NGN",
"usage_description": "Monthly data processing usage",
"due_date": "2024-02-01T09:00:00Z",
"charge_schedule": "scheduled"
}
POST /subscription-invoices/{invoiceUid}/charge
{
"amount": "15000",
"currency": "NGN"
}
subscription.created
- New subscription createdsubscription.updated
- Subscription details changedsubscription.cancelled
- Subscription cancelledsubscription.activated
- Subscription became activesubscription.trial_ended
- Trial period endedsubscription.payment_failed
- Payment attempt failedsubscription_invoice.created
- New invoice generatedsubscription_invoice.paid
- Invoice successfully paidsubscription_invoice.payment_failed
- Invoice payment failed/openapi.yaml
.Endpoint | Method | Description |
---|---|---|
/subscription-plans | POST | Create subscription plan |
/subscription-plans/{planUid} | GET | Get plan details |
/subscription-plans/{planUid}/prices | POST | Create price for plan |
/subscription-checkout-sessions | POST | Create checkout session |
/subscriptions/{subscriptionUid} | GET | Get subscription |
/subscriptions/{subscriptionUid} | PATCH | Update subscription |
/subscriptions/{subscriptionUid} | DELETE | Cancel subscription |
/subscriptions/{subscriptionUid}/invoices | GET | List invoices |
/subscriptions/{subscriptionUid}/invoices/metered | POST | Create metered invoice |
/subscription-invoices/{invoiceUid}/charge | POST | Charge invoice |
/subscription-currencies | GET | List supported currencies |
webhooks.mdc