Shop and customer balance
The shop lets your customers order and renew servers themselves, without you creating guests by hand. A customer buys a product (a size template with a price) in the customer portal, the server is created automatically, and it is renewed every period. Customers pay in one of two ways:
- From their balance (prepaid). Each customer has a balance that you or your billing system top up through the REST API, or that the customer tops up by card or PayPal.
- By automatic payment: a Stripe or PayPal subscription charges the card or PayPal account every period. See Payments, invoices and coupons.
Licensing
Section titled “Licensing”The shop is included in the Business and Unlimited licenses. Any other paid license can get it as an add-on. Without it, the shop settings are read-only and the shop is off. A reseller’s own shop additionally needs the reseller feature.
If the license lapses, the shop pages and new purchases switch off, but servers that were already sold keep renewing from the balance (no free service and no surprise deletions). Existing balances stay readable through the API and credits (top-ups) keep working, so a payment is never lost. Debits and manual bookings need a live license.
The Shop menu
Section titled “The Shop menu”While the shop is licensed and switched on (Open for customers), the admin sidebar has a Panel / Shop switch above the search box:
- Panel shows the hosting menu (nodes, guests, networking, provisioning, settings and so on).
- Shop shows the selling menu, in three groups.
- Dashboard, Support and Customers are in both.
Each mode opens its own dashboard: Panel the Operations dashboard, Shop the Shop dashboard. The panel remembers your mode per admin and follows the page you open (a shop page switches to Shop, a hosting page to Panel). With orders waiting, the Shop button carries their count.
| Group | Entries |
|---|---|
| Sales | Orders (orders waiting to be set up by hand, with a count badge, see Setting up orders by hand), Services (see Service products), Invoices (see Invoices and VAT) and Payments (see Payments list and refunds). |
| Catalog | Products (see Products), Categories (see Categories), Add-ons (see Add-ons) and Coupons (see Coupons). |
| Shop settings | General (the settings below), Payment gateways (see Payments, invoices and coupons), Storefront (see Storefront and WordPress plugin), Invoice settings and Legal texts (see Legal texts and order consent). |
While the shop is licensed but not switched on yet, there is no switch: the hosting menu shows one Shop entry with the same three groups as headers (so you can set the shop up and open it), and Legal texts stays under Customer portal.
Shop settings
Section titled “Shop settings”Open Shop settings > General.
| Setting | Meaning |
|---|---|
| Open for customers | Customers see their balance and can buy products that are in the shop. |
| Currency | ISO 4217 code such as EUR, USD or CHF. One currency per panel. Only currencies with two decimals (cents) work, so codes such as JPY or KWD are refused. |
| How customers pay | The default: From their balance (prepaid), Automatic card / PayPal payment or Customer chooses. A product can choose its own. |
| Warn about low balance | Warn a customer when the balance does not cover the renewals due within this many days before renewal. |
| Minimum top-up | The smallest amount a customer can add on the Balance page with card or PayPal, in the shop currency. 0 = no own minimum (the panel’s floor of 1.00 applies). Use it so small payments are not eaten by gateway fees. |
| Maximum top-up | The largest such amount. 0 = no own maximum (the panel’s ceiling of 10,000.00 applies). |
| Refund unused days when a customer deletes a server | Prorated by whole remaining days, never more than was paid for the current period. Off by default. |
| Set up | Automatically, right away or By me (Shop > Orders). The default; a product can choose its own. |
| Notify admins about orders I set up | A notice in the panel inbox and an email to the alert recipients for each order waiting for you. |
| Email customers while I set up their order | The customer gets an email when the order is paid and when the server is ready. |
| Notify admins when a customer cancels | A notice in the panel inbox and an email to the alert recipients. |
All amounts are stored as whole cents, so nothing is lost to rounding.
Products
Section titled “Products”Shop > Products lists what customers can order. New product starts from a size template (or from scratch) and copies its size and limits once. A product can also be a service (something you deliver outside NexoVirt, such as a dedicated server) or free (price 0.00): see Service products and free products. The product form has a side navigation:
| Section | What you set |
|---|---|
| General | Name, Name on the website, Description on the website (shown on the shop card), Server type (Virtual machine or Container), Set up new orders, and under Where it is offered: Sell in the shop, Show the server type, Stock and In the create wizard. |
| Resources | vCPU, RAM, Disk, the monthly traffic and Port speed (see Traffic), under Add-ons the most a server can have with add-ons, under Disks the disk types and additional disks, under Server setup the CPU type and Disk discard, and under Images which images customers can install. |
| Price and periods | The Main period (Length, Price, How customers pay, Setup fee, Unpaid: delete after) and More billing periods. |
| Website | Display facts for the shop cards, the order page and your website: see Website facts. |
| Location and network | Locations, Network (Public IP or Internal network only), IP addresses (by DHCP or from an IP zone), Bridge for DHCP, and which Nodes the product may run on. |
| Limits | Snapshots per server and Backups per server. |
Name is your internal name. Name on the website is what customers see in the portal shop, on the order page, in the storefront catalog and in the WordPress plugin; leave it empty to use the name. The internal name is never shown to customers when a website name is set.
A preview of the shop card is shown next to the form. A product is sold when Sell in the shop is on and it has a price. Size templates themselves are managed under Provisioning > Size templates and are not sold.
Deleting and archiving a product
Section titled “Deleting and archiving a product”Delete on a product that nothing uses removes it with its billing periods. A product that servers or services still use is archived instead (the button reads Archive and asks for confirmation):
- It is hidden from the shop, the storefront and the pickers (create wizard, Assign, Create webspace and Create game server), and it is never sold again.
- Running servers and services keep it. They renew, suspend, resume and change plan as before, and the remote panel of a module service keeps working.
- The list shows Archived (N) next to the product tabs. Open it to see the archived products, each with a Restore button (it comes back as it was, including its shop switch) and a Delete button that stays disabled (“Still in use”) until nothing uses the product any more.
- Open manual orders block deletion and archiving: accept or reject them under Shop > Orders first.
Website facts
Section titled “Website facts”The Website tab holds facts that are only shown, never enforced: on the portal shop cards, the order page, the storefront catalog and the WordPress plugin. All fields are optional and plain text; empty fields are not shown.
| Field | Meaning |
|---|---|
| Tagline | A short line under the product name, up to 100 characters. |
| Highlight badge | Highlights the card, for example “Popular” or “Best value”. Up to 24 characters. |
| Included IPv4 addresses | A number from 0 to 256. Display only: addresses are still assigned by the product’s IP zone. A new product with a public IPv4 zone starts with 1. |
| Included IPv6 | A prefix such as /64, or a number of addresses. Shown as “1 IPv4, /64 IPv6”. |
| CPU model | For example “AMD EPYC 9654”, up to 60 characters. |
| Core type | Shared cores, Dedicated cores or Not shown. Shown next to the CPU model. |
| Show DDoS protection and DDoS protection text | The switch shows a DDoS line; the text (up to 80 characters) replaces the default “DDoS protection”. |
| Backup storage and Backup retention | For example “100 GB” and “7 days”. Display only: the number of backups is set under Limits. |
| SLA / uptime | For example “99.9% uptime”. |
| Feature bullets | One per line, up to 10 lines of 80 characters. Shown as a list on the card. |
A service product keeps only Tagline, Highlight badge, SLA / uptime and Feature bullets.
Setup fee
Section titled “Setup fee”Setup fee on the Price and periods tab is charged once, with the first order only:
- Never on renewals, plan changes, other billing periods or upgrades.
- Coupons and customer group discounts do not reduce it.
- It is refunded with the order when the order fails or you reject it. Delete now and unused-days refunds never give it back.
- Not allowed on free products.
- Orders of a product with a setup fee are prepaid only: from the balance, or a one-time card or PayPal payment. The customer can switch the server to automatic payment afterwards.
- The invoice shows it as its own line Setup fee.
Stock limits how many servers of a product run at the same time, all its billing periods together. Leave it empty for no limit. Every shop server of the product takes a unit, and so does a paid order that waits for you under Shop > Orders. A unit is free again when the server is deleted (also after a cancellation ends or an unpaid server is removed) or when a create fails and is refunded.
- Customers see Only N left on the shop card and the order page once 5 or fewer are left, and Sold out when none are left. A sold-out product cannot be ordered or paid for, and servers cannot change to it.
- Two customers ordering (or changing plan to) the last unit at the same time: only one goes through.
- A plan change scheduled for the next renewal is checked again then. If the product is sold out by that time, the server renews on its current plan and the customer gets an email and an entry in the server’s activity.
- Shop > Products shows Stock: N of M left (or Sold out) next to each limited product.
- The storefront catalog has a
stockfield per product: the units left,nullfor no limit. The WordPress plugin (1.2.0 and later) shows Only N left and Sold out from it and disables the order button.
Under Resources > Disks (server products only):
- Disk type of the main disk: Any storage, NVMe, SSD or HDD. With a type, servers are placed only on nodes that have a storage of that type with room, marked on the node page (Storage tab, see Disk types).
- Additional disks: Add disk adds a row with the Size in GB and a Disk type (Any storage or a
type), for example an NVMe main disk with a large HDD data disk. At most 8 per product. Containers mount them at the
Mount path (empty:
/mnt/disk1,/mnt/disk2, …); virtual machines get them as extra drives to format. Remove drops a row.
A product without a disk type and without additional disks behaves as before. With either, every disk needs a storage of its type with room on the node: the order, the create wizard and automatic placement only pick such nodes (snapshot-capable storages first, then the one with the most free space), and a node without one is refused with “No storage of the required disk type with enough free space.” Additional disks count towards a reseller’s disk quota.
Customers see the disks on the shop card and in the order summary (for example 50 GB NVMe + 500 GB HDD), and
the subscription card of their server has a Disks row. The storefront lists them per
product in disks. A reinstall keeps the additional disks but recreates them empty.
Plan changes keep every disk: the new product needs the same disk type for the main disk, and each additional disk of the old product again at the same position with the same type and at least its size (it may add more disks). A plan change grows a smaller additional disk and adds a missing one on a storage of its type on the server’s node; disks never shrink and are never removed. More disk space add-ons grow the main disk.
Server setup
Section titled “Server setup”Under Resources > Server setup:
- CPU type (virtual machines only): Automatic (x86-64-v2-AES, or x86-64-v3 for images that need it),
one of the common types (
host,x86-64-v2-AES,x86-64-v3,kvm64,qemu64, …) or a named model such asEPYC-RomeorSkylake-Server. Only the listed values are accepted. - Disk discard: freed blocks go back to thin storage. Virtual machines get
discard=onon the disk, containers thediscardmount option on the root disk.
The CPU type and disk discard are set when the server is created and kept on plan changes and reinstalls.
Images
Section titled “Images”Under Resources > Images you choose which operating systems customers can install on the product (virtual machines: QEMU templates, containers: container templates, custom images included):
- All images (the default): every template.
- Only these images: tick whole groups and/or single templates. A ticked group allows all its templates, also ones you add to it later. A single template allows only that template.
The list applies to the order page, the storefront catalog, every order path and the customer’s reinstall (portal, reseller portal and the API): the picker lists only allowed images and other images are refused. A billing period follows its product. Changing the list does not touch running servers; their next reinstall follows the new list. Admins reinstalling from the panel can always pick every image, and servers without a shop product are not limited. The minimum size per operating system (below) still applies on top.
This replaces the Allow Windows switch of 1.3.40: products with it on allow all images, products with it off allow every image except the Windows templates (whole groups without Windows, plus the non-Windows templates of mixed groups).
Internal network only
Section titled “Internal network only”Under Location and network > Network, Internal network only gives servers of the product an address from a private IPv4 zone instead of a public one. Pick the Private IP zone: the list shows private (RFC 1918) IPv4 IP zones with NexoVirt NAT on at least one node (node page > Network > NAT, NAT switched on with masquerading for that network). The server reaches the internet through NAT but has no public IP.
- Orders are placed only on nodes where NexoVirt NAT covers the zone, never on a node whose network is managed outside NexoVirt or where foreign NAT rules block NexoVirt.
- An order is refused with a clear message when NAT is not active on any such node, or when the zone has no free address left. A manual order handed to a node without NAT is refused too.
- Customers see Internal network (no public IP) on the shop card, the order summary and the server page.
- Sell IP address add-ons: off by default, so IPv4 and IPv6 add-ons are not offered for the product. Turn it on to sell them anyway.
- Plan changes stay within internal or public products (the address does not change).
- Port forwards to such servers are not part of the product; you can add them by hand on the NAT page.
- The storefront catalog has
networkper product:publicorinternal. - Service products have neither images nor a network.
Minimum size per operating system
Section titled “Minimum size per operating system”On the Groups tab of Provisioning > QEMU templates, each group can have a Minimum server size (vCPU, GB RAM, GB disk), for example 2 vCPU, 4 GB RAM and 40 GB disk for Windows. The order page shows “Needs …” on the group, and an order, a self-service server or a customer reinstall (portal or API) on a smaller server is refused. Add-ons ordered with the server count towards the size.
Billing periods
Section titled “Billing periods”The main period is the product’s own Length (30 days is monthly, 0 never expires) and Price. Under
More billing periods click Add period for each further period. Pick Monthly, Every 3 months,
Every 6 months, Yearly or Own length (1 to 3650 days), then either a fixed Price or a % off
the main price, for example yearly with 15 % off. Up to 8 periods per product.
- The customer picks one when ordering. The order page lists them under Billing period and shows what the customer saves.
- Add-on prices are per main period and are scaled for a longer period (a yearly period of a monthly product charges add-ons 365/30 times).
- Switching a period off keeps it for running servers but stops selling it.
- A customer changes period at the next renewal. This is refused while a card or PayPal subscription runs.
- Stripe and PayPal subscriptions work for periods of 1, 3, 6 or 12 months only.
Locations
Section titled “Locations”With node groups set up, Locations on Location and network lets you tick the node groups a product is offered in. With none ticked the product can run on any node. With several ticked, the customer picks one on the order page under Location, shown by the group’s name (for example “Oslo”). The panel then places the server on the best node of that group.
Setting up orders by hand
Section titled “Setting up orders by hand”With Set up on By me (Shop > Orders) (in the shop settings or on one product), a paid order does not create a server. It waits under Shop > Orders with the status Waiting, and the customer sees “Your order is being reviewed”. A customer group or a single customer can also be set to manual (or automatic): a product set to manual always waits, otherwise the customer’s setting, then the group’s, then the product’s, then the shop default decide. Open an order to see the customer, product, server name, location and what was paid.
- Create the server: choose Node and storage and Network, then Create server. The server is built with the customer’s product, add-ons, operating system, name and access. The paid time starts when you hand it over (status Handed over).
- Reject and refund: enter a Reason for the customer. The full amount goes back to the customer’s balance and a card or PayPal subscription is cancelled (status Rejected).
Resellers have the same list under Orders in their portal, see Resellers.
Categories
Section titled “Categories”Shop > Categories groups products in the shop. Click New category and fill in:
| Field | Meaning |
|---|---|
| Name | Your internal name, shown on the card and as the page title when no website name is set. |
| URL name | The page address /portal/shop/c/<URL name>. Made from the name on the website (or the name) when empty, so the internal name never shows in a public address. other is taken by products without a category. |
| Name on the website | What customers see in the portal shop, the storefront and the WordPress plugin. Empty: the name. |
| Description on the website | Shown on the card. |
| Sort order | Lower numbers come first. |
| Visible in the shop | Off hides the category and its products from the shop pages and the storefront. Order links keep working. |
| Filters | What customers can filter by on the category’s page: vCPU, RAM, Disk, Price, Billing period, Location, Operating system, Network and Product type. A filter shows only when the products of the category differ in it. |
| Image / Icon | A picture (PNG, JPG or WEBP, up to 512 KB) shown on top of the card, or an icon when there is no picture. |
A product belongs to one category or none: pick it under Category on the product’s General tab, with its Sort order inside the category. Its billing periods follow. Sort order also sets the order of the cards in the portal shop, the storefront catalog and the WordPress plugin (then by price). On Shop > Products the tabs at the top show each category with its number of products; New product in a category tab starts with that category selected.
Deleting a category never deletes products: they keep selling without a category and show under Other.
In the portal, as soon as one visible category has products, Shop opens with one card per category (picture, description, number of products and the lowest price) plus Other for products without one. A category’s page lists its products with the filters you picked, a Sort by list (price, vCPU, RAM) and Clear filters. Filters are part of the address, so a filtered page can be shared. Without categories the shop shows all products on one page, as before.
Resellers manage their own categories under Products > Categories in their portal; their customers see only those.
What customers see
Section titled “What customers see”In the portal, with the shop on, customers get a balance badge in the header and the sidebar entries Balance and Shop. The dashboard shows the balance, the services due in the next 14 days and a price and days-left column for each service.
-
Balance: Top up (with Pay with card or Pay with PayPal, when a gateway is on), the History of bookings and the Invoices with a PDF each.
-
Shop: one card per product with price, CPU, memory, disk and traffic, its other billing periods and the website facts: the badge as a ribbon, the tagline under the name, a line such as ”+ 5.00 EUR setup” under the price, and the IP, CPU, DDoS, backup, SLA and feature lines. Order opens the order page:
- Operating system (or Container template) and Version.
- Name and access: Location (when the product has several), Server name, Root password and SSH keys.
- Add-ons, when extras are on sale.
- Payment: Prepaid from your balance or Automatic payment, when both are offered.
The summary on the right shows the website facts, the price, a Setup fee, one-time line when the product has one (added after the coupon, part of the Total), a Coupon code field with Apply, and the checkboxes for the terms and (if you turned it on) the immediate start. See Legal texts and order consent. The purchase is charged at once and the server is created in the background. If the order or the create job fails, the charge is refunded once.
Each shop server has a Subscription card on its page:
- Paid until, Price and Last renewal, and a badge Auto-renew on or Cancelled.
- Renew automatically from my balance: the auto-renew switch. Off, the server runs until the paid date.
- Renew now: pays one more period early.
- Disks: the server’s disks with their types, shown when the product has a disk type or additional disks.
- Change plan: switch to a plan with at least the same CPU, RAM and disk (and the same disks, see Disks). The customer pays the difference for the rest of the paid period now, the paid date stays, and later renewals use the new price. A virtual machine needs a full shut down and start for the new RAM and vCPUs (a reboot from inside the server is not enough); a container gets them right away.
- Extras: buy extras and Remove extra addresses.
- Cancel subscription: see Cancellation.
- Delete now: deletes the server. With the refund setting on, the unused whole days are refunded (not for suspended servers).
Cancellation
Section titled “Cancellation”Cancel subscription on the Subscription card opens a page that shows until when the server keeps running and when it will be deleted, with an optional reason and one confirm button. A cancelled server:
- runs on until the paid date and is not renewed. A card or PayPal subscription stops at the end of its period.
- is stopped at that date (not marked unpaid, no unpaid email) and deleted after the product’s Unpaid: delete after days.
- can be taken back: the card shows a banner to withdraw the cancellation, which renews the server again. After the end date, a cancelled server becomes unpaid and resumes when the balance covers it.
An admin’s Turn on auto-renew on the server also clears a cancellation. The customer receives an email, and with Notify admins when a customer cancels you get a notice too. Cancellations also show in the Cancellations dashboard widget (Shop dashboard).
Cancel contracts here
Section titled “Cancel contracts here”For German law (§ 312k BGB) the panel also has a public page at /cancel without a sign-in, linked in the
footer as Cancel contracts while the shop is on. A visitor enters the email address of the account and gets a
one-time link (valid 24 hours, the same answer for unknown addresses) to pick the servers to cancel. The servers
keep running until the end of their paid period. Requests are limited per address and per network.
Add-ons
Section titled “Add-ons”Catalog > Add-ons (formerly Extras) holds the add-on catalog (resellers manage theirs on their Products page). Each extra has a Name, a kind in Adds, a Price per period, Per unit (for example 10 GB), Max per server and an On sale switch.
| Kind | What the customer gets |
|---|---|
| Extra IPv4 address / Extra IPv6 address | A new address from the IP range you set, on a new network interface. Can be removed again. |
| More disk space | The root disk grows by the unit. Disk space only grows, it cannot be removed. |
| Extra disk (NVMe, SSD, HDD) | A second disk of the Disk type you pick, attached empty (the customer formats it; containers get it at /mnt/<type>). The first unit creates the disk on a storage of that type on the server’s node, later units grow it. Only in your own catalog, not in reseller catalogs. |
| More RAM / More vCPUs | Memory or CPU cores on top of the product. A virtual machine needs a full shut down and start for them, a container gets them right away. |
| Extra backup slots | Raises the server’s backup limit by the unit (slots bought before 1.3.31 raised the snapshot limit). |
An extra is charged for the rest of the paid period when it is bought, then with every renewal.
An Extra disk (NVMe, SSD, HDD) is offered only where it can be delivered: on the order page when some node has a storage of that type with room for it (the order is then placed only on such a node), and on a running server when its node has one. Otherwise the purchase is refused with “There is no storage of this disk type with enough room on the node of this server.” Mark the storages on the node page Storage tab (see Disk types). Customers see the type as a badge next to the add-on.
New RAM or vCPUs on a running virtual machine
Section titled “New RAM or vCPUs on a running virtual machine”Proxmox keeps more RAM or vCPUs for a running virtual machine as a pending change: only a full power off and power on applies them, a reboot from inside the server keeps the old values. While such a change is waiting, the customer’s server page shows New RAM or vCPUs are waiting with Power cycle now, which shuts the server down cleanly, switches it off hard if it is still running after 2 minutes, and starts it again (after a confirmation). Containers apply new RAM and vCPUs at once, so they never show it.
Topping up a balance
Section titled “Topping up a balance”Your billing system credits a customer by calling the API after a payment succeeded (see Integrating your billing system). Rules:
external_idis required and unique per customer. It is your payment id. If your system retries the call, the panel returns the first booking withduplicate: trueand books nothing again.- A negative
amount_centsis a chargeback or correction. It may take the balance below zero. - Customers only. Admin and reseller accounts answer
422. - Tokens limited to specific hosts cannot read or change balances.
Every booking appears in the customer’s history with its type (top-up, purchase, renewal, upgrade, extra, refund or adjustment), amount, balance after, note and who booked it.
Renewals
Section titled “Renewals”The command php spark shop:renew --once runs from cron every 10 minutes (installed by
deploy/install-cron.sh; re-run it after updating).
- Within an hour before the paid date, an auto-renewing server is renewed from the old date if the balance covers plan price plus extras. The customer gets a renewal mail. A renewal is never charged twice.
- If the balance is too low at the paid date, the server is stopped and marked unpaid. It is deleted after the plan’s Grace period (days).
- A top-up that covers the renewal brings a suspended server back: it is renewed and started again straight away. Servers with auto-renew turned off are not resumed by a top-up.
- Before that, one low-balance mail per period warns the customer.
Plan expiry enforcement (plans:enforce) skips shop servers. Traffic throttling still applies.
Admin actions
Section titled “Admin actions”On a customer page under Customers > All customers the Billing section shows the balance, the history and the customer’s payments. Credit / debit on the balance card books a manual amount with a required note. It is protected by step-up confirmation and audited. Credits are positive, debits negative (the balance may go below zero), and the note is visible to the customer. A credit can get an invoice when you tick Create an invoice (for a credit only, e.g. a bank transfer). When the customer has no complete billing address (name, street, postal code, city, country), the dialog warns that the invoice would be issued without it: add it on the Profile tab first.
On a shop server’s Plan section an admin sees Shop: paid until, Shop: auto-renew, Shop: period price and Shop: last renewal, and can use Turn on auto-renew or Turn off auto-renew. Free products that ask for a usage confirmation also show Shop: usage confirmation and a Confirm now button (see Usage confirmation). Extending the expiry is free and writes a 0.00 note to the customer’s history.
Resellers
Section titled “Resellers”With the reseller feature, a reseller sells its own products (own prices, own extras) to its own customers and tops up their balances with the reseller API. Resellers have their own legal texts, orders to set up by hand, tickets and FAQ in their portal, see Resellers. Card and PayPal payments, coupons and invoices are not available in reseller shops. Customers of a reseller only see that reseller’s plans, never the operator’s, and the other way round. The reseller’s quotas and assigned nodes and IP zones apply to every order.
These templates are listed under Settings > Email: Shop: order receipt, Shop: renewed, Shop: low balance, Shop: suspended (unpaid), Shop: resumed, Shop: usage confirmation due (free products), Shop: suspended, usage not confirmed (free products), plus the payment, cancellation and invoice mails. When an unpaid server is finally deleted the customer gets the usual Plan deleted mail.
Integrating your billing system
Section titled “Integrating your billing system”After your payment provider confirms a payment, credit the customer. Use the payment id as
external_id so retries are safe.
curl -s -X POST https://panel.example.com/api/v1/users/14/balance \ -H "Authorization: Bearer $NEXOVIRT_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "amount_cents": 2500, "external_id": "pay_8f31c2", "note": "Invoice 2026-0412" }'{ "success": true, "data": { "entry": { "id": 41, "amount_cents": 2500, "balance_after_cents": 3400, "kind": "topup", "external_id": "op:pay_8f31c2" }, "duplicate": false, "balance_cents": 3400, "balance": "34.00 EUR", "currency": "EUR" }, "error": null}Read the balance and history with GET /api/v1/users/14/balance. To send the customer to the portal
without a password, create a one-time link, see
Billing systems: customer login links:
curl -s -X POST https://panel.example.com/api/v1/users/14/login-link \ -H "Authorization: Bearer $NEXOVIRT_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "redirect": "/portal/shop" }'Resellers use the same calls on the reseller API:
GET|POST /api/reseller/customers/{id}/balance. See the API reference for every field.
Next steps
Section titled “Next steps”- Payments, invoices and coupons for Stripe, PayPal, VAT and discount codes.
- Storefront and WordPress plugin to sell from your own website.
- Legal texts and order consent for terms, withdrawal policy and sign-up.
- Plans & quotas to define what a shop plan contains.
- Users & portal for customers and impersonation.
- Resellers for white-label shops.
NexoVirt is developed and designed by Nucez Software, your partner for custom software and web design.