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

API key scopes and least privilege

Sep 22, 2026 4 min read

An Amóni API key does only what its scopes allow. A scope is a named area of the account, and a key carries the set you tick when you create it. The habit worth keeping is least privilege: give each key the narrowest set that lets its job run, so a key that leaks or a script that misbehaves can only reach what it was ever meant to.

The scopes

read covers listing and viewing every resource. Each write area is its own scope, and choosing a write scope includes reading that area, so you never tick read alongside a write to get view access.

The Create API Key dialog showing the scope checkboxes, each with its machine name and a short description of what it allows
Each scope names an area and one line of what it grants.
Scope What a key with it can do
read List and view everything: servers, VMs, IPs, monitors, projects, operations.
servers.write Power, reinstall and rescue bare-metal servers; set tags and labels; read a reinstall's root password.
vms.write Power, rebuild, rename and re-password cloud instances; snapshots, backups, firewall, cloud-init.
ips.write Change reverse DNS on your addresses.
monitors.write Create, edit, pause and delete uptime monitors.
sshkeys.write Add and remove keys in your stored SSH key set.
projects.write Create projects and move resources into them.
webhooks.write Create webhooks and send test events.
vpcs.write Manage private networks.
network.write Announce and withdraw blackhole routes.
bgp.write Manage BGP sessions.
colo.write Raise datacenter access and remote-hands requests.
orders.write Place orders. An order generates an invoice, so this one spends money.

Choosing the set

Work backwards from what the key does. A monitoring dashboard that only draws graphs wants read and nothing else. A CI job that reinstalls a server wants read and servers.write. A Terraform run that manages servers, addresses and cloud instances wants read, servers.write, ips.write and vms.write. If you are unsure whether a key needs a scope, leave it off; adding it later is one edit, and a call that lacks it fails loudly rather than quietly doing too much.

Ordering sits on its own for a reason. orders.write is the only scope that costs money, because an order raises an invoice. Paying that invoice is deliberately not in the API at all, so even an ordering key cannot charge a card. Keep orders.write off every key that does not exist to buy things.

When a scope is missing

A call your key is not scoped for does not half-succeed. It answers 403, and the body names the scope to add:

{
  "success": false,
  "error": "This API key is missing the `servers.write` scope. Create a key with that scope in the portal under Account → API Keys.",
  "code": "insufficient_scope",
  "required_scope": "servers.write"
}

Read code to branch in your own tooling, and required_scope to see exactly what to grant.

Two more limits on a key

Scopes decide what a key may do. Two other settings decide when and from where.

  • The allowed source IPs are required, and they bind the key to the addresses it may be called from. A key scoped wide but locked to one CI runner is still a small target.
  • An expiry is optional. A key you set to lapse in ninety days is one you cannot forget to rotate.

Rotation is a revoke and a recreate. Revoke next to a key stops it immediately, so anything still using it breaks at once. Create the replacement first, move your job onto it, then revoke the old one.

Questions we get

  • Does a write scope include reading? Yes. A servers.write key can read servers without also holding read. Tick read only for a key that reads and nothing more.
  • Can I change a key's scopes after creating it? No. Scopes are fixed at creation. To change them, create a new key and revoke the old one.
  • Is there a scope for billing or invoices? No. Reading billing and paying invoices stay in the portal, off the API surface entirely.
  • What is the smallest useful key? A read key locked to one address, for a dashboard or an export. It can see everything and change nothing.

Still stuck?

Open a support ticket with the key name and the required_scope from a 403. We can confirm what the key holds and what the route needs.

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.