Subscriptions — Node.js SDK
Create a plan
const plan = await simiz.plans.create({
name: 'Pro Monthly',
amount: 9900,
currency: 'XAF',
interval: 'month', // day, week, month, year
interval_count: 1,
trial_days: 14, // optional
metadata: {
tier: 'pro',
},
});
console.log(plan.id); // plan_xxx
Subscribe a customer
const subscription = await simiz.subscriptions.create({
plan_id: plan.id,
customer: {
phone: '237690000000',
name: 'John Doe',
email: 'john@example.com',
},
payment_method: 'ORANGE_MONEY',
callback_url: 'https://your-site.com/webhooks/simiz',
});
console.log(subscription.id); // sub_xxx
console.log(subscription.status); // trialing (if trial_days > 0)
List subscriptions
const subscriptions = await simiz.subscriptions.list({
status: 'active',
limit: 50,
});
for (const sub of subscriptions.data) {
console.log(sub.id, sub.plan_id, sub.current_period_end);
}
Update a subscription
// Change plan (upgrade/downgrade)
await simiz.subscriptions.update('sub_xxx', {
plan_id: 'plan_enterprise',
});
Cancel a subscription
// Cancel at end of billing period
await simiz.subscriptions.cancel('sub_xxx');
// Cancel immediately
await simiz.subscriptions.cancel('sub_xxx', {
immediately: true,
});
Handle subscription webhooks
app.post('/webhooks/simiz', express.raw({ type: 'application/json' }), (req, res) => {
const event = simiz.webhooks.constructEvent(
req.body,
req.headers['x-simiz-signature'],
process.env.SIMIZ_WEBHOOK_SECRET
);
switch (event.type) {
case 'subscription.created':
// Activate user's pro features
break;
case 'subscription.renewed':
// Extend access period
break;
case 'subscription.past_due':
// Warn user about failed payment
break;
case 'subscription.cancelled':
// Revoke pro features
break;
}
res.status(200).json({ received: true });
});

