Documentation

Oversight Docs

Everything you need to know about setting up and running your ISP workspace on Oversight.

Overview

Oversight is a multi-tenant ISP management platform. It gives you a single dashboard for PPPoE wired subscribers, Hotspot WiFi sessions, M-Pesa billing, SMS messaging, and router infrastructure — all talking directly to your MikroTik devices via the RouterOS API.

PPPoE

Wired internet subscribers

Hotspot

Paid WiFi sessions via captive portal

M-Pesa

Automated billing (STK Push & C2B)

Messaging

SMS reminders & manual broadcasts

Network

WireGuard VPN & public IP routers

Backups

Daily automated router config backups

Getting started

Follow these steps to go from sign-up to your first live subscriber.

  1. 1

    Create an account

    Sign up at /auth/signup. Your first workspace is created automatically and you are assigned SUPER_ADMIN.

  2. 2

    Connect a router

    In the Network section, register your MikroTik via WireGuard VPN (recommended) or a public IP. The router must be reachable before anything else works.

  3. 3

    Choose your service

    PPPoE for wired subscribers, Hotspot for WiFi sessions, or both. Each has its own workspace created separately.

  4. 4

    Create packages

    Define your bandwidth plans — each package maps to a MikroTik profile with a speed, price, and billing duration.

  5. 5

    Configure M-Pesa

    Link your Safaricom Daraja credentials in the Payment settings. Without this, only manual/free activations work.

  6. 6

    Add subscribers

    Create PPPoE users (provisioned to the router) or let Hotspot users self-onboard via the captive portal.

You need a Safaricom Daraja account to enable M-Pesa payments. Visit developer.safaricom.co.ke to register.

PPPoE management

The PPPoE module manages wired internet subscribers. Each subscriber is provisioned directly to your MikroTik as a PPP secret. Subscriptions are tied to M-Pesa payments — when a customer pays, their connection is enabled automatically.

Subscriber statuses

Every subscriber has one of three statuses. These are distinct — do not substitute one for another.

Active

Subscriber is enabled on MikroTik and can connect to the internet.

Inactive

Disabled but not expired. Use for new accounts or temporarily suspended subscribers.

Expired

Subscription lapsed. Distinct from Inactive so you can filter, follow up, and report accurately.

How billing works

  1. 1

    Customer pays via M-Pesa PayBill

    The customer uses their assigned account number as the BillRefNumber. This is set per-subscriber in Oversight — it is not assumed to be their phone number.

  2. 2

    Balance is credited

    The payment is credited to the subscriber's balance.

  3. 3

    Subscription is created or extended

    The system creates a new subscription or extends an active one based on the package price and available balance.

  4. 4

    PPPoE secret is enabled

    The subscriber's PPPoE secret is enabled on MikroTik — they can connect immediately.

  5. 5

    Automatic expiry

    When the subscription end_at passes, a background job disables the secret and the subscriber loses access until they pay again.

Subscription policies

  • Rolling expiry — subscription ends exactly N days after payment
  • Fixed-time expiry — subscription always ends at a specific time of day (e.g. midnight)
  • Partial subscriptions — allow subscribers with less than a full package price to receive proportional days
  • Minimum days — prevent tiny partial subscriptions below a configurable threshold

Packages & burst

A package maps to a bandwidth profile already configured on your MikroTik. The package gives it a price, duration, and display name.

  • Profile name must exist on the router before creating the package in Oversight
  • Burst lets a subscriber briefly exceed their base speed — configured per package under Packages → Burst
  • Burst limit: the peak speed allowed. Burst threshold: average usage must be below this to trigger burst. Burst time: how long the peak can be sustained.
  • Use burst for a premium feel on standard-tier plans — it is time-limited, not a permanent upgrade

Sync & reconciliation

Over time your database and MikroTik router will drift apart. The Sync page (Users → Sync) detects and resolves four types of mismatch:

Router-only users

Exist on MikroTik but not in your database. Often created directly on the router. Investigate before deleting.

DB-only users

In your database but not provisioned on the router. They cannot connect regardless of status — provisioning likely failed.

Status mismatches

Database says Active but MikroTik has them disabled — or vice versa. Subscribers may be blocked despite paying.

Profile mismatches

Subscriber is on the wrong bandwidth plan on the router. They may be getting faster or slower speeds than their package allows.

Admin actions

  • Create or extend a subscription from the subscriber's Subscriptions tab
  • Adjust end_at of an active subscription without affecting billing history
  • Deactivate a subscription early — disconnects the subscriber immediately
  • Manually enable, disable, or expire a subscriber from the Users page
  • Soft-delete or hard-delete a subscriber record
When an admin creates a subscription for a subscriber who already has an active one, the system automatically extends the existing subscription by the package duration rather than creating a concurrent one.

Hotspot WiFi

The Hotspot module deploys a branded captive portal on MikroTik routers and handles session-based billing. Customers pay per session using M-Pesa STK Push and are connected automatically — no manual work needed.

Captive portal flow

  1. 1

    Customer connects to your WiFi

    MikroTik intercepts the first HTTP request and redirects them to your branded Oversight portal page.

  2. 2

    Customer selects a package

    Available packages are shown with price, speed, and duration. Free plans can also be offered.

  3. 3

    Payment via M-Pesa STK Push

    A payment prompt appears on the customer's phone. They enter their M-Pesa PIN to complete the transaction.

  4. 4

    Session is activated

    On payment confirmation, Oversight creates a throwaway username/password, provisions the MikroTik hotspot user, and logs the customer in automatically.

  5. 5

    Session expires

    A background job runs every 30 minutes. When a session's duration window passes, the hotspot user is removed from MikroTik and access ends.

If the customer dismisses the STK prompt, they can pay manually via PayBill using the reference code shown on the portal. The portal polls for payment confirmation and will log them in once it arrives.

Packages

Hotspot packages define what each WiFi plan offers. When you create or update a package, it is automatically synced to every setup-complete router in your workspace.

  • Rate limit — written as "upload/download" (e.g. "2M/10M"). Becomes the MikroTik user profile speed cap.
  • Duration — session length in minutes. The hard cutoff after which the user is disconnected.
  • Idle timeout — disconnects inactive users early, freeing slots for new customers.
  • Shared users — how many devices can share one session purchase (default 1).
  • Profile sync — package changes propagate to all routers automatically. No manual MikroTik edits needed.

Setup wizard

A router must complete the 6-step wizard before it can accept sessions. An incomplete wizard means no portal on that router.

  • Step 1 — Inspect: reads existing interfaces, pools, and profiles from the router over SSH
  • Step 2 — Bridge: creates a network bridge for the hotspot interface
  • Step 3 — Pool: assigns an IP address pool (e.g. 10.5.0.2–10.5.0.254)
  • Step 4 — Hotspot Profile: configures the captive portal server profile
  • Step 5 — Hotspot Server: ties bridge + pool + profile together
  • Step 6 — Push login page: generates a branded login.html and uploads it to the router via SFTP
Step 6 requires SSH enabled on the router (IP → Services → ssh). Without it, the login page cannot be uploaded and the captive portal will show MikroTik's default branding instead of yours.

Billing & payments

Payment channels

A payment channel is a configured Safaricom PayBill shortcode. One shortcode can serve both a PPPoE tenant and a Hotspot tenant simultaneously — the system routes each incoming payment to the correct service.

Required Daraja credentials

  • Shortcode — your M-Pesa PayBill number
  • Consumer Key and Consumer Secret — from your Daraja app
  • STK Passkey — for STK Push prompts (Hotspot)
  • C2B Validation and Confirmation URLs — must be registered with Safaricom

STK Push vs C2B PayBill

STK Push

System-initiated. A prompt appears on the customer's phone. Used by the Hotspot captive portal for a frictionless payment experience. Falls back to manual C2B if the customer cancels the prompt.

C2B PayBill

Customer-initiated. For PPPoE, the customer enters their account number as BillRefNumber. For Hotspot fallback, they enter the reference code shown on the portal. The system checks for a pending Hotspot request first, then falls through to PPPoE account lookup.

Payment routing logic

When a C2B payment arrives on a shared channel, the system resolves which service it belongs to in order:

  1. Check if the payer's phone (MSISDN) matches a pending Hotspot STK request on this channel → Hotspot payment
  2. Check if the BillRefNumber matches a pending Hotspot manual reference → Hotspot payment
  3. Look up the BillRefNumber as a PPPoE account number → PPPoE payment
  4. If none match, the payment is logged but not routed

Messaging & SMS

The Messaging module lets you send SMS to subscribers — manually or automatically. It connects to your SMS provider (Africa's Talking, etc.) and powers subscription expiry reminders that run without any manual work.

Setup

Go to Messaging → Setup and select your provider. Enter the required credentials (API key, username, sender ID). Without a configured channel, no SMS can go out.

  • Each workspace (PPPoE or Hotspot) has its own SMS channel configuration
  • Check your provider balance from the Setup page at any time
  • Delivery reports are supported for providers that offer webhooks — configure the callback URL in your provider dashboard

Expiry reminders

Configure trigger rules under Messaging → Reminders. The system runs every hour and sends to all matching subscribers automatically.

BEFORE N days

Sends N days before the subscription expires. Use for renewal prompts (e.g. 3 days before expiry: “Your plan expires in 3 days — renew now”).

ON_EXPIRY

Sends on the expiry day itself. Use for a final reminder or to inform the subscriber their access has ended.

AFTER N days

Sends N days after expiry. Use for win-back messages to lapsed subscribers.

No duplicate sends

Each reminder is recorded per trigger, subscriber, and subscription window. If the hourly job runs twice for any reason, no subscriber receives the same reminder twice.

Template variables

Use these placeholders in your reminder message templates — they are filled in per-subscriber at send time:

VariableExample value
{tenant_name}Acme ISP
{username}john_doe
{package_name}Premium 10Mbps
{amount}2500
{expiry_date}2026-06-30
{payment_methods}Paybill 400000 A/C john_doe
{account_number}john_doe

Compose & manual sends

  • Send to individual subscribers by name or phone search
  • Bulk-send to a filtered group: all active, all expired, or all subscribers
  • GSM-7 encoding: 160 characters per SMS part. Unicode (emoji, Arabic, etc.): 70 characters per part — switching encoding costs more
  • Live character and part count shown before sending — check cost before dispatching large batches
  • All manual sends are logged in History alongside automated reminder sends

History & delivery statuses

Delivered

Provider confirmed the message reached the subscriber's handset. Final success state. If a subscriber claims they did not receive an SMS, check here before resending.

Buffered

Accepted by the provider but not yet delivered — usually the phone is off or out of signal. Will deliver automatically when the device is reachable.

Failed

Delivery rejected — invalid number, blacklisted recipient, or provider error. Check the provider message in the log. Failed messages are not retried automatically.

Cost calculator

Messaging → Calculator forecasts how many SMS your reminder rules will trigger over the next 1–30 days and the projected cost. Use it before month-end to budget and to catch misconfigured rules before they become expensive.

Network & routers

Oversight talks to MikroTik routers via the RouterOS API. Two connectivity modes are supported — choose based on whether your router has a public IP and how much exposure you are comfortable with.

WireGuard VPN (recommended)

Your MikroTik connects outward through an encrypted WireGuard tunnel. The router does not need a public IP and the RouterOS API is never exposed to the internet.

  • Works behind NAT, CGNAT, or dynamic IPs
  • Traffic stays end-to-end encrypted
  • No open ports on the router side

WireGuard infrastructure is organised in three levels:

Server

The host machine running WireGuard. One server can host multiple interfaces.

Interface

A VPN endpoint on a server with its own subnet and listen port. Multiple peers connect to one interface.

Peer

One connected MikroTik router. Each peer gets a unique tunnel IP and a generated key pair.

After creating a peer, copy the generated RouterOS script and paste it into your MikroTik terminal. It configures the WireGuard interface, adds the peer, and sets routing — one command, done.

Public IP (direct)

If your router has a static public IP, you can connect directly without a VPN tunnel. Register the IP, API port, and credentials under Network → Public IP.

  • Simpler setup — no tunnel configuration needed
  • Register multiple IPs per server for failover (system tries them in order)
  • Requires API service enabled on MikroTik: IP → Services → api (port 8728) or api-ssl (port 8729)
Public IP mode exposes your RouterOS API port to the internet. Use a non-standard port and a strong password. Consider firewall rules that restrict access to the Oversight server IP only.

Enabling the RouterOS API

  1. 1

    Open WebFig or Winbox

    Navigate to IP → Services.

  2. 2

    Enable the api service

    Set port to 8728 (or custom). Ensure "Available From" is not blocking the Oversight server.

  3. 3

    For Hotspot SSH push

    Also enable the ssh service (port 22). The wizard uses SFTP to upload login.html to the router.

  4. 4

    For router backups

    Both api and ssh must be enabled. Use the "Check Services" button in Backups to verify both are on before configuring a backup schedule.

Router backups

Configure a daily backup for any connected router under Network → Backups. The system pulls a binary .backup file from the router at the scheduled time each day.

  • Supports both Public IP and WireGuard-connected routers
  • 12-day retention — files older than 12 days are deleted automatically
  • Manual trigger available at any time — useful after making config changes
  • Files can be downloaded individually at any time from the Backups page
  • Backup requires both API (8728) and SSH (22) enabled on the router

Router health monitoring

The Routers page shows live metrics for every connected device. Check here first when a subscriber reports connectivity issues.

  • CPU load — sustained above 80% outside peak hours usually signals a routing policy issue or incoming attack
  • Memory usage — high memory (>90%) can cause slow API responses or dropped connections
  • Disk usage — RouterOS logs accumulate over time; clear if disk is near full
  • Interface traffic — select any interface to see live RX/TX bytes per second
  • RouterBoard info — shows hardware model, firmware version, and uptime. Unexpected recent reboots are worth investigating

Users & roles

Oversight uses role-based access control per workspace. PPPoE and Hotspot have separate role sets — the same user can have different roles in each.

PPPoE roles

SUPER_ADMIN

Full control — workspace settings, billing, team management, and all subscriber operations. Automatically assigned to the workspace creator.

ADMIN

Day-to-day management — subscribers, packages, routers, and subscriptions. Cannot modify admin accounts or workspace billing.

SUPPORT

Read-only plus limited operations — view subscribers, check statuses, and assist customers. Cannot create or delete users.

TECHNICIAN

Field-focused — create, enable, disable, and expire subscribers. Use for installation teams who need user management but not billing access.

Hotspot roles

SUPER_ADMIN

Full workspace control — M-Pesa channel setup, team membership, tenant settings, and all router/package/session operations.

ADMIN

Day-to-day operations — routers, packages, sessions, and payment logs. Cannot configure payment channels or modify team membership.

Inviting team members

  1. 1

    New member registers an Oversight account

    They must sign up at /auth/signup before they can be added to any workspace.

  2. 2

    SUPER_ADMIN opens Roles page

    Go to PPPoE → Roles or Hotspot → Roles and click "Add user".

  3. 3

    Select the user and assign a role

    Search by email or username. Choose the appropriate role. Access takes effect immediately.

Multi-tenant context switching

A single Oversight account can belong to multiple workspaces. Use the tenant selector in the sidebar to switch context — all pages show data for the currently selected workspace. Your selected workspace is preserved across sessions.

FAQ

A subscriber paid but their connection did not come on.

Check Payment → Logs to confirm the payment was received and marked PAID. If PAID but no network access, check that the router is reachable and use the admin Fulfill button. If still PENDING, the M-Pesa callback may be delayed — wait 2 minutes and it will auto-resolve.

Can one PayBill shortcode serve both PPPoE and Hotspot customers?

Yes. A single channel can be linked to both. Routing is determined at payment time: the system first checks if the payer's phone matches a pending Hotspot STK request, then checks for a Hotspot manual reference, then falls through to a PPPoE account number lookup.

The STK Push is not going through.

Confirm the phone number is in 254XXXXXXXXX format. Check that your Daraja credentials are production (not sandbox). Verify the STK passkey and callback URL are correct in Payment settings.

How do I extend a subscriber's subscription as an admin?

Open the subscriber's profile, go to the Subscriptions tab, click Adjust on the active subscription, and set the new end date. Alternatively, use Create Subscription — the system chains from the current subscription's end date automatically.

The hotspot captive portal is showing default MikroTik branding.

The branded login.html is uploaded in Step 6 of the router setup wizard via SFTP. Ensure SSH is enabled on the router (IP → Services → ssh) and re-run Step 6.

My router shows as disconnected.

For WireGuard: check that the tunnel is up on both sides (MikroTik and the Oversight server). For public IP: verify the api service is enabled on the configured port and the IP is reachable from the Oversight server.

The Sync page shows status mismatches — what caused this?

Status mismatches happen when someone changes a subscriber's state directly on MikroTik (via Winbox or terminal) without going through Oversight, or when a network interruption prevented a status change from completing. Use the Sync page to push the correct state back to the router.

Subscribers are getting the wrong speed.

Check the Sync page for Profile mismatches — this means the subscriber is on a different bandwidth profile on the router than their package specifies. Fix the mismatch in Sync and it will push the correct profile to MikroTik.

Reminders are sending but subscribers say they received duplicates.

Each reminder is deduplicated per trigger, subscriber, and subscription window. Duplicates should not occur. If they do, check if the subscriber has two overlapping subscriptions, or if the same phone number is registered to multiple accounts.

Router backup is failing.

Verify both API (port 8728) and SSH (port 22) services are enabled on the MikroTik. Use the Check Services button on the Backups page to confirm. Also confirm that the router's API credentials in Oversight are correct and the device is reachable.

Still stuck?

Open a support chat from inside the dashboard and our team will help directly.

Contact us
oversight@2026·Terms & Conditions