Skip to content

Resellers ​

Resellers is in the main menu, and only the owner sees it.

A panel with more capacity than customers gets sold on, and a reseller is how. The person you sell to signs in here with their own username and password, manages their own customers, and never reaches the machine underneath.

The three roles ​

OwnerPanel administratorReseller
Interfaces, nodes, hosts, outbounds, routing, engine, settings, backups✅
Resellers✅
Clients and Groupsevery oneevery onetheir own only
Ceiling on customers, traffic and time✅
Menu they seeeverythingOverview, Clients, GroupsClients, Groups

There is exactly one owner. It cannot be deleted, switched off or handed over, and it is not listed on the Resellers page.

A panel administrator is a second pair of hands over the customers: every customer on the panel, with no ceiling, and nothing about the server itself. A reseller is a customer of yours who sells on.

The page ​

The top of the page shows how many resellers you have; how many are active, ending soon or stopped; how many customers they hold between them; and how much traffic those customers have used.

There is a row for each reseller, in the same colours as the customer list: green while there is room, orange when it is running low, red when it has run out, purple for unlimited.

  • Users: how many users they have sold, against their limit.
  • Traffic and Traffic left: what their customers have used, and what is left of the allowance.
  • Time left: days until their term ends, or on hold while it has not started.
  • Servers: the ones they may sell.

Above the list are the Clients page's controls. Search by username, note or group; filter by status (active, on hold, ending soon, stopped) and by server; sort by name, most users, most traffic used, ending first or newest. The summary tiles filter too: press Ending soon to see who needs renewing. The view is kept in the address, so a reload or a shared link opens on it.

On a phone each reseller is a card with the same figures.

Adding a reseller ​

The dialog is laid out like the customer dialog.

  • Username and password are drawn for you, and the button beside each draws another. The copy button puts the panel's address, the username and the password on the clipboard together, ready to send.
  • Users: how many users they may sell in all. A customer counts for the users their plan is for, so a limit of 100 is a hundred one-user customers, or twenty-five customers with four users each, or any mix that adds up to 100. Raising a customer's users counts against the limit too, and lowering them frees what they held. A reseller with a limit cannot sell a customer an unlimited number of users. Empty is no limit.
  • Traffic: what their customers may carry between them. It is measured in what was actually used, not what was promised, so ten unlimited plans nobody connects to cost nothing. Empty is no limit.
  • Until: the last day their account works, picked from a calendar in the calendar the panel is set to: Gregorian, or Jalali under Settings → General → Calendar Type. +1 month, +3 months and +1 year count from the date already set, so extending is one click.
  • On hold: the term is a number of days that starts the first time they sign in, not today. Sold on Friday and first signed in on Monday, they still get every day.
  • Group: what their customers are filed under on your own customer list, so you can see whose they are. It defaults to reseller:<username>; type a name to use another, or pick an existing group of yours. The reseller never sees it. Two resellers cannot share one, since the list could then no longer tell them apart.
  • Servers: the tunnels they may put a customer on. Their own customer form offers exactly these, nothing more and nothing missing. Choose nothing and they cannot sell at all. A node reserved for one reseller, through the node's ownerId in the API, carries nobody else's customers.

The presets fill in a typical reseller plan in one click.

Changing the group later moves all their existing customers to the new name.

What the reseller sees ​

Their Clients page opens with Your account: users against their limit, traffic left and time left. If their term has ended or their allowance is used up, it says so, and why.

When you take a server back, the customers already on it keep working, and the reseller can still rename them, extend them or take them off it. They cannot put anyone new there.

Switching one off ​

The rule ​

A customer is served only when two switches both allow it: their own, and their reseller's standing.

  • Switching a reseller off takes every one of their customers off at once.
  • Switching them back on returns each customer to what their own switch says.
  • None of this ever writes anything to the customers. That is what keeps the second point true. Had the pause switched each customer off, switching the reseller back on could no longer tell who had been off before, and customers you had stopped on purpose would come back.
The customer's own switchReseller in good standingReseller pausedAfter the reseller is back
Onservedoffserved
Off, switched off before the pauseoffoffoff
Switched off during the pauseoffoff
Switched on during the pauseoffserved
Expired or out of trafficoffoffoff

Your own customers, and other resellers' customers, are never affected.

What pauses a reseller ​

Three things, checked in this order:

  1. Switched off by you.
  2. Term ended: the date has passed. A term on hold has not started, so it has not ended.
  3. Traffic used up: their customers between them used the whole allowance.

A reseller is back only when none of the three applies. Switching on a reseller whose term has also ended keeps their customers off until the date is extended.

What happens, and when ​

The moment you save the change:

  • their customers' traffic is dropped by the kernel;
  • their devices are taken off the tunnels, WireGuard peers and sign-ins alike;
  • connected OpenVPN, L2TP/IPsec and PPTP sessions are ended;
  • on the Clients page each of their customers reads Paused, and the switch shows off and cannot be flipped. The tag's tooltip says why, and whether the customer's own switch is on, which is whether they come back with the reseller;
  • their subscription page says they are inactive, without saying why.

The same happens by itself when the date passes or the traffic runs out. If the panel cannot read the resellers' standing for a moment, during a database hiccup for instance, it keeps the last answer rather than letting paused customers back on.

What the reseller can do meanwhile ​

Can sign inCan see their customersCan change anything
Switched offno: they are told your account has been switched off, and signed out of open sessions
Term ended, or traffic used upyes, to see why and payyesno: every change is refused with the reason

"Every change" includes the ones that would store value up for when they are renewed: new customers, extending, raising a quota, resetting traffic, bulk and group actions, imports, new devices, and moving customers between servers.

Many at once ​

Tick the box on each reseller, or the one in the header for everything the filters show. The toolbar then reads n selected, with more and Delete:

ActionWhat it does
Switch on, Switch offSwitching off asks first and says how many customers go off. It signs the resellers out, exactly as switching one off does.
Extend termAdds days to each running term. A term that has ended starts again from today; a term on hold gets the days added to the hold; a reseller with no end date stays without one.
Start their allowance againEach reseller's traffic counts from zero again. Their customers' own usage is not touched.
Set traffic allowance, Set user limitThe same value for all of them. Empty is no limit.
Add servers, Remove serversAdded to, or taken from, what each already has. Customers on a server taken away keep working.
DeleteAsks, as for one reseller, whether to keep their customers under you or delete them too.

Every reseller in a selection goes through the same checks as when changed alone. One that cannot be changed does not stop the rest: the answer says how many changed, and names each one that did not, with the reason. The owner's own account is never part of a selection, and a panel administrator has no ceiling to extend or set. Only what the filters show can be selected, and narrowing the list drops whatever it hides.

Removing one ​

You are asked what becomes of their customers, because both answers are expensive to get wrong:

  • Keep them, under me: the plans stay live, and every configuration people hold keeps working. Only who administers them changes.
  • Delete them too: what the reseller sold stops, and the customers' addresses go back to the pools.

Either way their customers leave the reseller's group. The group itself goes only if nothing else is filed under it, so a group you share with customers of your own stays. A node that was reserved for them goes back to the shared pool rather than being deleted.

What holds this up ​

The separation is not the menu. Every endpoint checks for itself. A reseller's reads and writes of customers are narrowed to their own by the database, on a rule registered once rather than a condition written out per query, so a path nobody has thought of yet is narrowed too.

A device is reached through its customer. Removing one, or reading its configuration, first asks whether its customer is one the reseller can see, and answers not found when it is not. That is the same answer an id that does not exist gets, so counting through ids learns nothing.

Released under the AGPL-3.0 License.