Skip to main content
The Monigo customer portal is a hosted billing UI that your customers access through a unique, revocable link. Each customer can:
  • View and pay outstanding invoices
  • See payout slips and track payment history
  • Monitor their active subscriptions with live usage estimates
  • Add and manage payout accounts (bank transfer or mobile money)
  • View and manage saved payment cards
There is no login — access is granted by the portal token embedded in the URL.

How portal tokens work

A portal token is an opaque 64-character random string that encodes a (org, customer) pair. Monigo validates the token on every request to the portal API.
Key properties:
Use your API key to generate a portal link server-side. Pass the customer’s external_id — the same ID you use when ingesting events.
Response:
When sending a portal link in an email or notification, use a short expiry so the link becomes invalid once clicked and acted on.
Keep one permanent token per customer for your in-app “Billing” link, and generate fresh short-lived tokens whenever you send an email or notification that includes a portal link. This way you can revoke the email link independently without breaking the in-app experience.

Fetch a permanent portal link at account creation and store it, or generate it on demand when the customer navigates to their billing settings.
TypeScript
Go

Option 2 — Native embed (React, Vue, Svelte, Flutter)

For the deepest integration, embed the portal as native components in your app. Monigo ships UI packages for React, Vue, Svelte, and Flutter that render the full portal — or any individual building block — directly in your product, styled to match your brand.
React
See Embedding the Portal for the full guide covering theming, routing, building blocks, and SSR.

Option 3 — Embedded iframe

Embed the hosted portal as-is. The portal is responsive and renders cleanly at any width. Use this option when you don’t want to pull a framework package into your app.
For a seamless feel, generate the token server-side and inject it into the page template rather than exposing your API key to the browser.
Never call the Monigo API from client-side JavaScript using your live API key. Generate the portal token on your server and pass only the URL to the browser.
Include portal_url directly in invoice emails, payment receipts, or dunning messages.
TypeScript

What customers see in the portal

Invoices

Customers can view all finalized, paid, and failed invoices. On finalized or failed invoices a Pay Now button is shown — clicking it redirects to Paystack (or your configured provider) for payment. Once paid, the invoice status updates automatically.

Payout Slips

For payout-type plans, customers see their payout slips — the amounts they are owed. They can drill into each slip to see line items, WHT deductions, and the transaction history showing when payouts were sent to their account.

Subscriptions

The subscriptions tab shows active and trial plans alongside live usage and an accrued estimate for the current billing period. This lets customers see how their usage is tracking before the invoice is generated.

Payout Accounts

Customers can add and manage the bank or mobile money accounts that Monigo uses when issuing payouts to them.

Payment Methods (Saved Cards)

When a customer pays an invoice via Paystack, their card is automatically saved as a reusable payment method. On the next invoice, Monigo charges the saved default card automatically — the customer only sees the portal if the charge fails. Customers can:
  • View all saved cards (card type, last 4 digits, expiry, bank)
  • Set a different card as the default
  • Remove a card they no longer want to use
Cards approaching expiry are flagged with an expiring_soon status 30 days in advance, and become expired after their expiry date. Customers receive email notifications for both.

Using the portal API directly (custom UI)

If you want to build your own billing UI rather than using the hosted portal, you can call the portal API endpoints directly from your frontend. Authenticate with the X-Portal-Token header instead of a Bearer token.

Customer info

cURL

List invoices

cURL

Initiate payment for an invoice

cURL
Redirect the customer to authorization_url to complete payment.

Full endpoint reference

The portal API only returns documents that are visible to the customer: finalized, paid, and failed invoices. Draft invoices are never exposed. This is enforced server-side regardless of any query parameters.

Managing tokens (list & revoke)

List all tokens for a customer

Revoke a token

Revoking a token immediately invalidates the portal link. Any browser tab or iframe using that token will receive a 401 on the next API call.
Revoke all tokens for a customer (e.g. after account closure or a suspected breach) by listing and revoking each one.

Security considerations

Keep token generation server-side. Your Monigo API key must never appear in client-side code. Generate the portal token on your server and pass only the resulting URL to the browser. Scope tokens to the minimum necessary lifetime. Use permanent tokens only for in-app links where you control the session. For emails and notifications, set expires_at to 7–30 days depending on your use case. Revoke tokens on account deletion or suspension. When a customer closes their account or is suspended, revoke all their portal tokens so they cannot continue to access billing data. Prefer external_id over UUID in your code. Your customer_external_id (the ID from your own database) is the most stable identifier. Using it avoids having to track Monigo-internal UUIDs in your application.
TypeScript

Integration pattern: on-demand generation

The recommended pattern for most products: generate the portal URL on demand when the customer navigates to their billing section, then redirect or open in a modal/iframe. This avoids storing tokens and ensures the link is always fresh.
TypeScript
Go