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: payment_intent.paid 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/accounts/{id}/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.type === 'payment_intent.paid') {
const { external_id, amount } = event.data;
// 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