Skip to main content

Subscription & Billing Platforms

"My subscribers need to pay their monthly bills through our portal. I want to offer QR Ph and earn from every transaction."

If you build billing or subscription management software — for ISPs, schools, cooperatives, or any organization with recurring fees — NextAPI lets you embed QRPH payment collection directly into your portal and optionally earn a share of every transaction your clients collect.

The problem​

Your clients' subscribers need to pay digitally. Right now they're doing one of:

  • Bank transfers — the organization manually checks their BPI account every morning to match payments to subscribers
  • Bayad Center / 7-Eleven OTC — high fees (3–5%), 3–7 day settlement, no real-time reconciliation
  • GCash/Maya merchant QR — only reaches that wallet's users, no integration with their billing system

None of these tell the organization in real time who has paid. Reconciliation is manual and error-prone.

How NextAPI fits​

Embed QRPH collection into your billing portal so subscribers can pay directly within the interface they already use. The moment a subscriber pays, NextAPI fires a webhook — your portal marks their account as paid, no manual checking required.

Subscriber opens billing portal
↓
Portal calls POST /v2/payment-intents
NextAPI returns QRPH code for exact amount due
↓
Subscriber scans with GCash, Maya, or any bank app
↓
NextAPI webhook → portal marks subscriber as paid

The referral / reseller model​

The most effective way NextAPI reaches subscription platforms is through tech services companies that already serve multiple organizations in a vertical. A company that sets up IT infrastructure for ISPs integrates NextAPI once, then bundles payment collection across all their ISP clients.

The revenue model: partners who bring clients onto NextAPI earn a share of the net transaction fee on every payment their clients collect — automatically, in perpetuity, without any additional work after the initial integration.

Revenue share rates vary based on volume and vertical. Contact your NextPay account manager for details.

Integration pattern for billing portals​

1. For each client organization, create:
- A Merchant (the organization)
- An Account (their collection wallet)

2. For each billing cycle:
- For each subscriber with an outstanding balance:
POST /v2/payment-intents with the amount due
→ Display the QRPH code in the subscriber's portal view

3. When the subscriber pays:
- NextAPI fires: v2.payment_intent.succeeded webhook
- Your portal updates their account to "paid"
- Your portal sends a payment receipt

4. At settlement time:
- POST /v2/payout-requests to transfer collected funds
from the organization's NextAPI account to their bank

Key API endpoints​

ActionEndpoint
Onboard a client organizationPOST /v2/merchants
Create collection accountPOST /v2/accounts
Generate subscriber QR (one-time)POST /v2/payment-intents
Generate persistent QR (all billing)POST /v2/funding-methods
Check who has paid (postings)GET /v2/accounts/{id}/postings
Settle to organization's bankPOST /v2/payout-requests

Persistent vs one-time QR​

For recurring billing (same subscriber, different months): use a Funding Method (static QR). The subscriber scans the same QR every month; your webhook handler matches the incoming amount to their current balance.

For exact-amount collection (specific invoice): use a Payment Intent (dynamic QR). Each payment intent carries a specific amount — when it's paid, you know exactly which invoice was settled.

→ See Collections Lifecycle for the full comparison.

Real-time reconciliation​

Traditional billing reconciliation involves downloading bank statements and matching line items manually. With NextAPI, every payment fires a webhook the moment it's confirmed. Your billing system can reconcile in real time:

// Webhook handler
app.post('/webhooks/nextapi', async (req, res) => {
const event = JSON.parse(req.body);

if (event.event === 'v2.payment_intent.succeeded') {
const { external_id, amount } = event.payload;
// external_id = your subscriber + invoice reference
await markInvoicePaid(external_id, amount);
await sendReceiptToSubscriber(external_id);
}

res.status(200).send('OK');
});

Getting started​

  1. Get sandbox credentials
  2. Follow Your First API Call
  3. Read Collections Lifecycle
  4. Follow Accept a QRPH Payment for the step-by-step guide
  5. Set up Webhooks for real-time payment notifications