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 });
});