Reseller Onboarding
A reseller is a partner ISP operator who owns a slice of subscribers, has their own wallet, and (optionally) their own login URL, branding, and downstream sub-resellers. Onboarding is the path from “admin creates the row” to “reseller logs in, tops up their wallet, and adds their first sub-reseller”.
This page describes the operator side of onboarding — what the platform admin does, what the new reseller sees on first login, and the four decisions every onboarding makes (permissions, balance, NAS scope, branding).
How to get here
Section titled “How to get here”From the admin panel sidebar:
- Resellers → Add Reseller (top-right button)
- Or direct URL:
/resellers/new
Only admins can create top-level resellers. A reseller can create sub-resellers under themselves from the same page in their own panel (see Sub-Resellers).
Layout
Section titled “Layout”The Add Reseller form is divided into five sections:
| Section | What you set | When to revisit |
|---|---|---|
| Account | Username, password, email, phone, full name | Username and password can be changed later from the reseller’s profile |
| Company | Display name, company name, address | Shown on invoices and (if branded) on the login page |
| Wallet | Starting balance, credit limit | Top up later from the Resellers list → Transfer |
| Scope | Parent reseller, permission group | Permission group can be changed any time; parent rarely changes |
| Network | Allowed IPs, WAN check overrides | Used for partner / read-only lockdowns |
Account — username and password
Section titled “Account — username and password”| Field | Rule |
|---|---|
| Username | Lowercase, unique across the system, used at login. Soft-deleted usernames are still reserved — use Permanent Delete if you need to free one up. |
| Password | Stored hashed (bcrypt) + an admin-visible plain copy so you can hand it to the reseller. Force-password-change on first login is the safer default. |
| Email / phone | Used by Communication Rules for billing alerts and password reset (if SMTP/SMS is configured in Settings → Notifications). |
| Full name | Free text; used in the audit log and admin lists. |
Company — what appears on invoices
Section titled “Company — what appears on invoices”The company name is the display name shown:
- In the Subscribers list “Reseller” column
- On invoices generated for this reseller’s subscribers
- On the login page only if branding is enabled and a custom domain is set
The address is printed on invoices when “Reseller is invoice issuer” is enabled in Billing Settings — otherwise the panel-wide company address is used.
Wallet — starting balance and credit limit
Section titled “Wallet — starting balance and credit limit”Two separate numbers:
- Balance — actual money in the reseller’s wallet. Increases on Transfer in / Top-up; decreases on every subscriber renewal, plan change, top-up fulfilled.
- Credit limit — how far below zero the balance can go before subscriber renewals start failing. Default is
0(no credit — must always be in the black). Resellers you trust can carry, e.g.,-500so they can keep renewing for the first few days of the month before settling with you.
Most operators leave the starting balance at 0 and credit at 0, then transfer real funds once the reseller signs their agreement.
Scope — parent and permissions
Section titled “Scope — parent and permissions”Parent reseller
Section titled “Parent reseller”| Caller | Parent field behavior |
|---|---|
| Admin creating a top-level reseller | Leave Parent empty. The reseller reports directly to the admin. |
| Admin creating a sub-reseller | Pick the parent from the dropdown. The sub-reseller inherits NAS scope from the parent. |
| Reseller creating a sub-reseller | Parent is forced to the calling reseller — they cannot create resellers under someone else. |
Hierarchy depth is one level: a sub-reseller cannot themselves have sub-resellers. This is a deliberate design choice — supporting deeper trees triples the complexity of balance flow and permission scoping without a real-world demand.
Permission group
Section titled “Permission group”The permission group decides what the reseller can do, not what they can see. Common patterns:
| Group | Use case |
|---|---|
SALES (default) | Full reseller — create / edit / delete their own subscribers, set prices, top-up, view their reports. |
SUPPORT | View-only on their own subscribers, can reset FUP and disconnect, cannot delete or change pricing. |
PARTNER (read-only) | All *.view_all permissions, no .edit / .create / .delete. See Partner Role. |
| No group | Backward-compatible mode — the reseller has all permissions on their own scope. |
You can create more groups under Settings → Permissions.
Network — IP restriction and WAN check
Section titled “Network — IP restriction and WAN check”Both fields are optional and most resellers leave them blank.
| Field | Meaning |
|---|---|
| Allowed IPs | Comma-separated IP / CIDR list. If set, all logins and API calls from this reseller must originate from one of these addresses. See IP Restriction. |
| WAN check | Per-reseller override of the system-wide WAN connectivity check (used for sharing detection). Leave on inherit unless you have a reason. |
Common workflows
Section titled “Common workflows”Creating a new top-level reseller (admin)
Section titled “Creating a new top-level reseller (admin)”- Sidebar → Resellers → Add Reseller.
- Fill in Username, Password, Full Name, Email, Phone.
- Set Company Name (this is the public-facing name).
- Leave Balance at
0and Credit Limit at0for now. - Pick a Permission Group.
SALESis the typical full-reseller default. - Leave Parent empty — this is a top-level reseller reporting to you.
- Click Create. The list refreshes with the new row.
- From the new row’s action menu → Login as Reseller to verify they can sign in.
- Hand the reseller their
username/password+ the panel URL.
Topping up a reseller’s wallet (admin)
Section titled “Topping up a reseller’s wallet (admin)”- Resellers → click the reseller’s row → Transactions tab.
- Click Transfer in the top-right.
- Enter the amount (e.g.
1000) and an optional note (e.g."Monthly settlement May 2026"). - Click Transfer. The reseller’s balance increases instantly; a
transfertransaction is logged on both sides.
First-login walkthrough (the reseller)
Section titled “First-login walkthrough (the reseller)”- Reseller opens the panel URL and signs in with the credentials you provided.
- If
force_password_changeis set, they’re prompted to pick a new password. - The Dashboard loads — they see their own subscriber count (zero), today’s revenue (zero), and their balance.
- Subscribers → Add Subscriber to onboard their first end-customer.
- (Optional) Settings → Branding to upload a logo and pick a primary color — only if the admin has enabled rebranding for this reseller (see Custom Branding).
Creating a sub-reseller (the reseller does this)
Section titled “Creating a sub-reseller (the reseller does this)”- Reseller signs into their own panel.
- Resellers → Add Reseller (visible because they have
resellers.create). - Username / password / contact details — same form as the admin sees, minus the Parent picker (it’s auto-set).
- Permission Group picker is constrained — they can only pick groups the admin has marked as “available to sub-resellers”.
- Starting balance defaults to
0. To fund the sub-reseller, save first, then use Transfer from the sub-reseller’s row.
Permissions
Section titled “Permissions”| Permission | Effect |
|---|---|
resellers.view | See the Resellers list (your own sub-resellers only — admins see all). |
resellers.create | Add a new sub-reseller under yourself. |
resellers.edit | Change a sub-reseller’s name, contact, permission group, NAS scope. |
resellers.delete | Delete a sub-reseller (only if they have zero subscribers). |
transactions.transfer | Use Transfer to fund a sub-reseller from your own wallet. |
transactions.withdraw | Pull balance back from a sub-reseller into your wallet. |
Admins always have all reseller permissions.
What happens behind the scenes
Section titled “What happens behind the scenes”When Create is clicked, the API performs in one transaction:
- Insert a row in
users(bcrypt password,user_type=2for reseller). - Insert a row in
resellers(linked to that user, with the wallet, credit, parent, permission group). - Update
users.reseller_idto point back at the new reseller row. - Append an audit log entry:
Created new reseller.
If step 2 fails, step 1 is rolled back so you don’t end up with a dangling user record.
Related pages
Section titled “Related pages”- Sub-Resellers — the 1-level hierarchy in depth.
- Balance & Transactions — the 14 transaction types and how money flows.
- Custom Branding — logos, colors, custom domain.
- Partner / Read-Only Role — locked-down view-only operators.
- Managing Subscribers (Reseller) — what the reseller does after onboarding.
- Permissions — defining and assigning permission groups.