NEW Bare Metal Servers with 20G Dedicated Unmetered Bandwidth 20G Dedicated Unmetered Servers Read more STATUS

Read Your Bandwidth Graphs and Transfer Totals: Portal and API

Sep 15, 2026 6 min read

For a bare-metal server you see the traffic on its switch port: what it's doing right now, its average and peak, its 95th percentile and the total moved in and out over the period. A cloud instance gives you the hypervisor's view instead, meaning CPU, memory, network and disk activity over time. You'll find both in the portal and in the API. Below is where to look, and how to read what you find.

Two units get mixed up all the time:

  • Rates are in bits per second (Mbps, Gbps). At most, a 10 Gbps port moves 10 gigabits a second, which works out to 1.25 gigabytes.
  • Totals are in bytes (GB, TB), the same unit your plan is written in. Only outbound transfer counts on a metered plan, and inbound is free. For how metered and unmetered plans work, see bandwidth explained.

Method 1: In the portal

Bare-metal servers: the Graphs tab

  1. Log in at amoni.app, open Servers, click the server, then the Graphs tab.
  2. When the server has several connected ports, choose the one you want with the buttons at the top right. Under the heading, a single line tells you the port's name, its type, the link speed and whether it's up.
  3. Up top, three live tiles show Link speed, Inbound and Outbound, as of the last poll.
  4. The table breaks the selected period down by direction: Now, Avg, Max, 95th % (all rates), plus Total (bytes moved). The note underneath says when statistics started for this port. If collection only began recently, it covers less than the period you picked.
  5. The graph plots that same period. Use Day, Week, Month and Year at the bottom to switch, and the table changes with it.
The Graphs tab of a bare-metal server in the Amóni portal: link speed, live inbound and outbound tiles, a table with now, average, maximum, 95th percentile and total per direction, a 24-hour traffic graph, and Day, Week, Month and Year buttons
One port's live rates, period statistics and graph. Total is how much moved. The 95th percentile is how busy the port actually was.

Reading the 95th percentile. Take every five-minute sample in the period, sort them and throw away the top 5%. Whatever sample is now highest is the 95th percentile. It shows sustained load and ignores short bursts. When you're deciding whether to upgrade, this is the number to hold up against the port speed. A 95th percentile near the link speed means the port really is saturated and isn't just spiking.

Cloud instances: the Insights tab

  1. Go to Virtual Machines, click the instance and open Insights.
  2. Choose a window: Hour, Day, Week, Month or Year.
  3. You get four charts on one shared clock: CPU (percent of the allocated cores), Memory (used, against the allocation in the title), Network (in and out, bits per second) and Disk I/O (read and write, bytes per second).
The Insights tab of a cloud instance in the Amóni portal with four charts over one day: CPU percentage, memory used against 8 GiB allocated, network in and out, and disk read and write
What the hypervisor sees. A gap in a line means the instance was off, which is not the same as idle.

Because these come from the hypervisor, you don't install anything in the guest, and they're the same charts we'd check if you opened a ticket about performance. A gap in a line is time the instance spent powered off. A flat line at zero means it was on and doing nothing.

Method 2: With the API

A key with the read scope can fetch all of this. Full reference: api.amoni.app/v1/docs.

Bare metal

1. Find the port. Every connected interface has a port_id, and that's what the next two calls expect.

curl -s https://api.amoni.app/v1/servers/955/bandwidth -H "Authorization: Bearer nr_live_..."
{ "success": true, "data": [ {
  "id": 1, "interface_name": "eth0", "type": "ethernet", "speed": 10000, "status": "up",
  "port_name": "Ethernet12", "port_id": 5011, "in_bps": 412300000, "out_bps": 168000000 } ] }

2. Period statistics for the port. Set period to day (the default), week, month or year.

curl -s "https://api.amoni.app/v1/servers/955/bandwidth/stats?interface=5011&period=month" \
  -H "Authorization: Bearer nr_live_..."
{
  "success": true,
  "data": {
    "period": "month",
    "samples": 8640,
    "covered_from": "2026-08-16 00:00:00",
    "in_bps":  { "now": 412300000, "avg": 361800000, "max": 703200000, "p95": 598400000 },
    "out_bps": { "now": 168000000, "avg": 151900000, "max": 302600000, "p95": 259100000 },
    "total_in_bytes": 117240000000000,
    "total_out_bytes": 49200000000000
  }
}

Rates come in bits per second, totals in bytes. Check samples and covered_from to see how much of the period the numbers actually span. To check a metered plan's monthly egress in terabytes:

curl -s "https://api.amoni.app/v1/servers/955/bandwidth/stats?interface=5011&period=month" \
  -H "Authorization: Bearer nr_live_..." | jq '.data.total_out_bytes / 1e12'

3. The graph itself, returned as an image you can drop into your own dashboard:

curl -s "https://api.amoni.app/v1/servers/955/bandwidth/graph?interface=5011&period=week" \
  -H "Authorization: Bearer nr_live_..." -o web1-week.png

What comes back is the image itself (PNG or SVG, per the Content-Type). It isn't JSON.

Cloud instances

For now, Insights metrics live in the portal only. The public API doesn't expose them yet, though it's on the list. Once it does, the call will look like this:

curl -s "https://api.amoni.app/v1/vms/990204/411/insights?timeframe=day" \
  -H "Authorization: Bearer nr_live_..."
{ "success": true, "data": { "timeframe": "day", "points": [
  { "t": 1757900100, "cpu_pct": 23.4, "mem_bytes": 4563402752, "maxmem_bytes": 8589934592,
    "net_in_bps": 21300000, "net_out_bps": 61800000, "disk_read_bps": 480000, "disk_write_bps": 1310000 },
  { "t": 1757900400, "cpu_pct": null, "mem_bytes": null, "maxmem_bytes": null,
    "net_in_bps": null, "net_out_bps": null, "disk_read_bps": null, "disk_write_bps": null } ] } }

timeframe is hour, day, week, month or year. A point full of null values marks a moment the instance was off, so don't read it as zero. Results are cached for a minute per instance and window.

What the API will tell you

Status Meaning
200 Data as shown above, or an image body for the graph.
401 / 403 The key is wrong, or it lacks read.
404 That server isn't on your account, or the port_id belongs to a different server ({"success": false, "error": "Server not found"}).
422 Unknown period, or interface missing, returned in the framework's shape: {"message": "The selected period is invalid.", "errors": {"period": ["…"]}}.
200 with [] Interfaces: no port on this server is linked to monitoring yet. Open a ticket and we'll link it.

Troubleshooting

  • The Graphs tab says no graphable interface, or the graph area is empty. We haven't linked the server's port to our monitoring yet. Open a ticket with the server selected. Linking it takes minutes, and history starts from that point.
  • The totals look too small for the period. Read the “statistics collected since” note (or covered_from in the API). If the port was linked two days ago, it can't show you a month.
  • My invoice says something else. Billing counts outbound bytes on the switch port across the calendar month, while Day, Week and Month here are rolling windows that end right now. Choose Month at the start of a new month and the two come close. They'll never match exactly.
  • Inbound looks “wrong way round”. Inbound is traffic to your server (updates and files it fetches, uploads from users). Outbound is whatever your server sends (page views, files your users download). Expect a web server to be heavy on outbound.
  • The 95th percentile is higher than the average by a lot. That's normal with bursty traffic. The average tells you total use. The 95th tells you how busy the port gets.
  • Insights shows gaps. The instance was off for those minutes. When every chart has a gap at the same moment, that's a stop or a rebuild, and the Activity tab has the timestamps.

Still stuck?

Open a support ticket with the machine selected and tell us which period you're looking at. We read the same graphs you do, so a screenshot helps a lot.

Built for production

Why teams stay with Netrouting

We connect you to the Internet using network engineers (and not order takers) and hardware and infrastructure that is built to last, so we can pick up where you left off when you need us.

  • Expert-Level Support Our staff is available 24 hours a day, 7 days a week to handle network administration and systems management issues as they occur.
  • Scalable Solutions Build whatever depth or breadth your infrastructure needs and then scale as required.
  • Enhanced Security Enable 2-factor authentication and also limit by IP address from the control panel to secure your account.
  • Cost-Efficient Infrastructure You will always receive the best value from your investment as you will be optimized for budget without any compromise on Quality.