Skip to main content

Arianet CLI

The Arianet CLI (arianet) is the official command-line client for the Arianet platform. With one API token it manages:

  • your VPS (arianet vps ...) through the VPS API,
  • Arianet Cloud servers, volumes, private networks, firewalls, floating IPs, load balancers and images (arianet cloud ...) through the Cloud API,
  • SSH keys, firewalls, balance and invoices.

It is a single static binary for macOS, Linux and Windows. Source and releases: github.com/ariaservice/arianet-cli. Product page: ariaservice.net/developers/cli. To describe your infrastructure as code instead, see the Terraform provider.

Install and get started in three steps​

1. Install​

Run the command for your operating system in a terminal:

curl -fsSL https://raw.githubusercontent.com/ariaservice/arianet-cli/main/scripts/install.sh | sh

Then open a new terminal and run arianet version to check that it is installed.

2. Connect your account​

Create a token on the API tokens page of the panel and give it to the CLI:

arianet configure

Paste the token (it is not shown on screen). The scopes each command needs are listed under Token scopes.

3. Run your first command​

arianet vps list

This lists your VPS. For Arianet Cloud servers: arianet cloud servers list. To order a server, see VPS and Arianet Cloud.

Other ways to install (Homebrew, apt, rpm, manual download, verifying signatures)

macOS and Linux (Homebrew)

brew trust ariaservice/arianet   # recent Homebrew versions require trusting third-party taps
brew install ariaservice/arianet/arianet

The formula (ariaservice/homebrew-arianet) only downloads the release archive from the CLI repository and checks its SHA-256.

Ubuntu / Debian (apt)

sudo install -d -m 0755 /etc/apt/keyrings
curl -fsSL https://ariaservice.github.io/arianet-cli/arianet-archive-keyring.gpg \
| sudo tee /etc/apt/keyrings/arianet.gpg >/dev/null
echo "deb [signed-by=/etc/apt/keyrings/arianet.gpg] https://ariaservice.github.io/arianet-cli stable main" \
| sudo tee /etc/apt/sources.list.d/arianet.list
sudo apt update && sudo apt install arianet

The repository is signed, and the key is trusted for this repository only (signed-by). Its fingerprint is 305A 2F52 0920 153A FC89 8F4A C420 B09C 99E5 515B. The package has no install or removal scripts.

About the macOS and Linux install script

The script downloads the release archive, verifies its SHA-256 against checksums.txt (and the signature too if cosign is installed), and copies the binary into ~/.local/bin (or /usr/local/bin when writable).

Windows (manual)

Instead of the PowerShell installer above, download arianet_<version>_windows_amd64.zip from the releases page, extract arianet.exe, and add its folder to your PATH. Then open a new terminal and run:

arianet version

Manual download (any platform)

Download the archive for your platform plus checksums.txt from the releases page. Archives are named arianet_<version>_<os>_<arch>.tar.gz (darwin or linux, amd64 or arm64); .deb and .rpm packages are published too.

sha256sum --check --ignore-missing checksums.txt   # macOS: shasum -a 256 -c --ignore-missing checksums.txt
tar -xzf arianet_<version>_<os>_<arch>.tar.gz
sudo install -m 0755 arianet /usr/local/bin/arianet
arianet version

checksums.txt carries a keyless Sigstore signature (checksums.txt.sigstore.json) you can check with cosign verify-blob; every archive also ships an SBOM.

To build from source: git clone https://github.com/ariaservice/arianet-cli.git && cd arianet-cli && go build -trimpath -o arianet ./cmd/arianet.

The CLI only talks to the API URL you configure (default https://api.ariaservice.net) and, at most once a day, to GitHub to look for a newer release (see Update notice). It sends no telemetry.

Upgrading​

From v0.5.0 on, the CLI upgrades itself:

arianet upgrade                    # upgrade to the latest release (asks first)
arianet upgrade --check # only report whether a newer release exists
arianet upgrade -y # no confirmation prompt
arianet upgrade --version v0.5.0 # install a specific release
arianet update # same as: arianet upgrade

arianet upgrade works out how the CLI was installed and upgrades it the same way, on macOS, Linux and Windows:

Installed withWhat arianet upgrade does
HomebrewRuns brew upgrade ariaservice/arianet/arianet and shows its output.
apt / dpkgRuns sudo apt-get update && sudo apt-get install --only-upgrade arianet (when it cannot ask you, it prints the command instead).
Install script, manual download or Windows zipDownloads the release archive for your OS and architecture, verifies it against the release checksums, and replaces the binary in place. If anything fails the old binary is kept.

If you already have the latest release it says so and changes nothing. On v0.4.x and earlier, upgrade the way you installed (brew upgrade ariaservice/arianet/arianet, sudo apt update && sudo apt install --only-upgrade arianet, or re-run the install script).

Update notice​

When a newer release is published, arianet prints a short notice to stderr after a command, with the command that upgrades your installation:

A new release of arianet is available: 0.4.0 → 0.5.0
To upgrade, run: brew upgrade ariaservice/arianet/arianet

The CLI looks up the latest release on GitHub at most once a day, in the background. The lookup never delays or fails a command. The notice is not shown with -o json, when stderr is not a terminal, when the CI environment variable is set, or when ARIANET_NO_UPDATE_NOTIFIER is set to any value:

export ARIANET_NO_UPDATE_NOTIFIER=1

Configuration​

The configuration is a config.yaml file in your user config directory (~/.config/arianet/ on Linux, ~/Library/Application Support/arianet/ on macOS), mode 0600. arianet configure show prints its exact location and the active values.

arianet configure                       # interactive setup (token typed without echo)
printf '%s' "$TOKEN" | arianet configure --token-stdin
arianet configure --token <token> # avoid on shared machines: visible in the process list and shell history
arianet configure --output json # default output format
arianet configure --api-url <url> # API base URL
arianet configure show # show the current configuration

Precedence, highest first: command-line flag, environment variable, config file.

Whenever the API URL is anything other than the default, every command prints a warning on stderr naming the host your token is sent to.

Environment variableMeaning
ARIANET_TOKENAPI token
ARIANET_API_URLAPI base URL (default https://api.ariaservice.net)
ARIANET_NO_UPDATE_NOTIFIERSet to any value to turn off the new-release notice

Global flags​

FlagMeaning
-o, --outputtable (default) or json
--tokenAPI token for this command only
--api-urlAPI base URL for this command only

Every command accepts --help, which lists its flags with examples. Shell completion scripts: arianet completion bash|zsh|fish|powershell.

Token scopes​

A token can be limited to the scopes it needs. A command fails with INSUFFICIENT_SCOPE if the token lacks the matching scope.

CommandsScope
region listregions:read
os listos:read
plan list, plan getplans:read
vps list/get/status/actionsservers:read
vps create/delete/restart/power-*/reinstall/rename/toggle-protectionservers:write
balance, balance transactionsbalance:read
balance invoicesinvoices:read
auth tokens list, auth tokens revoketokens:read, tokens:write (auth whoami and auth logout need none)
ssh list/get, ssh add/update/deletessh-keys:read, ssh-keys:write
firewall list/get, other firewall commandsfirewalls:read, firewalls:write
cloud ... reads / changescloud:servers:read / cloud:servers:write
cloud pricingnone (public)
hosting ... reads / changeshosting:accounts:read / hosting:accounts:write
vps regional ... reads / changesvps:servers:read / vps:servers:write
baremetal ... reads / changesbaremetal:servers:read / baremetal:servers:write
sms send, scheduled cancel, blocked add/delete, webhook / sms messages, batches, scheduled list, inbound, prices, reportsms:messages:write / sms:messages:read
sms lines list (sms lines request: a token without scopes)sms:lines:read
sms templates list / other sms templatessms:templates:read / sms:templates:write

A token can also be restricted to a list of source IP addresses; requests from elsewhere fail with IP_NOT_ALLOWED.

VPS​

arianet vps manages virtual private servers. server, servers and srv are aliases, so older scripts that call arianet server ... keep working.

IDs used by --region, --plan, --os and --ssh-key come from the matching list commands.

Catalog​

arianet region list                     # orderable locations; the ID column is the --region value
arianet plan list --region <id> # plans in a region: vCPU, RAM and disk in GB, price
arianet plan get <id> # plan details and pricing
arianet os list --region <id> # OS templates available in a region

List and inspect​

arianet vps list
arianet vps list --status terminated
arianet vps list --page 2 --limit 20
arianet vps get <id>
arianet vps status <id>
arianet vps actions <id> --limit 50

Without --status, list shows active and suspended VPS. Other statuses are creating, pending, failed, terminated, powering_on, powering_off, restarting and reinstalling_os. vps actions shows the operations performed on a VPS (create, restart, reinstall, ...), newest first, with their outcome.

Create​

arianet vps create                                   # interactive wizard
arianet vps create --plan 5 --region 1 --os 3 --hostname web-01
arianet vps create --plan 5 --region 1 --os 3 --ssh-key 2
arianet vps create --plan 5 --region 1 --os 3 --password '<root-password>'
arianet vps create --plan 5 --region 1 --os 3 --no-wait --yes --output json
FlagMeaning
--planPlan ID
--regionRegion (datacenter) ID
--osOS template ID
--hostnameHostname
--ssh-keyLog in with this stored SSH key instead of a password
--passwordRoot password you choose
--currencyCurrency ID to pay with (default: your default wallet)
--idempotency-keyReuse a key to retry an order safely (see below)
--no-waitReturn as soon as the order is accepted
--timeoutLongest wait for the VPS to become active (default 15m)
-y, --yesSkip the confirmation prompt
  • With neither --ssh-key nor --password, a strong random root password is generated and printed once. Save it; it cannot be shown again.
  • Without --plan, --region or --os, an interactive wizard asks for them. The wizard is refused with --output json; pass all three IDs in scripts.
  • By default the command waits until the VPS is active.

Safe retries. Every order carries an idempotency key. If the network fails after the order was sent, running the same command with the same --idempotency-key returns the original result instead of buying a second VPS. The CLI prints the key when it cannot tell you the outcome.

Rate limit. VPS creation is rate limited per token and per account. When the limit is hit the CLI reports how long to wait.

Operate​

arianet vps restart <id>   [--wait] [--timeout 15m] [--yes]
arianet vps power-on <id> [--wait]
arianet vps power-off <id> [--wait] [--yes]
arianet vps reinstall <id> --os <id> [--wait] [--yes]
arianet vps delete <id> [--wait] [--yes]
arianet vps rename <id> --name <new-name> # 1-30 characters
arianet vps toggle-protection <id> [--enable | --disable]

Restart, power, reinstall and delete return as soon as the platform has accepted the operation. Add --wait to follow it to the end: progress goes to stderr, and the exit code is non-zero if the operation fails or the timeout passes. These commands are never retried automatically.

toggle-protection with --enable or --disable sets the state explicitly, which is safe to repeat in scripts; without either flag the state is flipped. A protected VPS can be neither deleted nor reinstalled.

SSH keys​

arianet ssh list [--page 2 --limit 20]
arianet ssh get <id>
arianet ssh add --name laptop --key-file ~/.ssh/id_ed25519.pub --region <id>
arianet ssh add --name laptop --key "ssh-ed25519 AAAA..." --region <id>
arianet ssh update <id> --name <new-name>
arianet ssh delete <id> [--yes]

An SSH key belongs to one region, so --region is required when adding. Use the key when ordering with --ssh-key <id>. arianet cloud ssh-keys is the same command group.

Firewalls​

arianet firewall list
arianet firewall get <id>
arianet firewall create --name web-fw --region <id> [--description "..."]
arianet firewall update <id> [--name <name>] [--description "..."]
arianet firewall delete <id> [--yes]

arianet firewall rule add <id> --direction ingress --proto tcp --port 443 --remote-ip 0.0.0.0/0
arianet firewall rule add <id> --direction ingress --proto tcp --port 22 --remote-ip 203.0.113.7/32 --description office
arianet firewall rule add <id> --direction ingress --proto icmp --remote-ip 0.0.0.0/0
arianet firewall rule remove <id> <rule-id> [--yes]

arianet firewall attach <id> --server 42,43
arianet firewall detach <id> --server 42
  • A new firewall has no rules. Add rules, then attach it to VPS.
  • rule add flags: --direction ingress|egress (default ingress), --proto tcp|udp|icmp|esp|gre (default tcp), --port (a port or range such as 8000-9000, required for tcp and udp), --remote-ip (required; 0.0.0.0/0 allows everyone), --description.
  • The rule ID used by rule remove is the string in the Rule ID column of firewall get.
  • attach and detach accept up to 50 servers per call.

These commands manage VPS firewalls. Arianet Cloud firewalls are managed with arianet cloud firewalls.

Arianet Cloud​

arianet cloud manages Arianet Cloud resources through the Cloud API at <api-url>/cloud/v1 (default https://api.ariaservice.net/cloud/v1) with the same token. The token needs cloud:servers:read for reads and cloud:servers:write for changes.

Common behaviour:

  • Lists accept --label-selector (comma-separated terms that must all hold: key=value, key!=value, key, !key, e.g. "env=prod,tier!=db"), --project-id, and --page / --per-page (at most 100). Without --page, every page is fetched.
  • Creates accept --labels key=value (repeatable or comma separated) and --project-id.
  • update commands change name, labels (--labels, --clear-labels), delete protection (--protection-delete=true|false) and project (--project-id).
  • Operations run asynchronously and return an action; the CLI prints its ID. --wait follows it to the end (progress on stderr, --timeout, default 15m) and exits non-zero if it fails or times out.
  • get also answers to describe and show; list to ls; delete to rm (deletes ask for confirmation unless -y).
  • Reads that hit the rate limit are retried after Retry-After (when it is at most 30 seconds). Changes are never retried automatically.

Catalog and account​

arianet cloud datacenters                         # locations (the --datacenter codes); alias: locations
arianet cloud plans [--datacenter <code>] # server types (the --plan IDs)
arianet cloud images list [--type system|app|snapshot|backup] [--datacenter <code>]
arianet cloud images get <id|image> # e.g. ubuntu-24.04
arianet cloud pricing [--datacenter <code>] # public price list, no token needed
arianet cloud pricing --account # your account's own price rows (needs a token)
arianet cloud limits [--datacenter <code>] # quotas and usage per datacenter

cloud pricing reads the public price list (/cloud/v1/public/pricing), VAT excluded, and sends no token, so it works before arianet configure.

Cloud servers​

arianet cloud servers list [--label-selector env=prod] [--page 1 --per-page 50]
arianet cloud servers get <id>

arianet cloud servers create --name web-1 --datacenter ovh --plan 3 --image ubuntu-24.04 --ssh-key-id 5 --wait
arianet cloud servers create --name web --count 3 --datacenter ovh --plan 3 --image ubuntu-24.04 \
--labels env=prod --firewall 2 --network 4 --no-ipv6
arianet cloud servers create --name db-1 --datacenter ovh --plan 5 --image debian-12 \
--user-data-file cloud-init.yaml --backups --project-id 2 -o json
create flagMeaning
--nameServer name (with --count: name, name-2, ...)
--datacenterDatacenter code (arianet cloud datacenters)
--planPlan ID (arianet cloud plans)
--imageImage (arianet cloud images list)
--ssh-key-idSaved SSH key ID (repeatable)
--ssh-keyPublic key to install (repeatable)
--countCreate this many servers at once
--firewallFirewall ID to apply (repeatable)
--networkPrivate network ID to attach (repeatable)
--volumeVolume ID to attach (repeatable)
--no-ipv4, --no-ipv6No public IPv4 / IPv6 address
--backupsTurn on daily backups
--user-data-filecloud-init user data file
--no-startDo not start the server after creating it
--labels, --project-id, --wait, --timeoutAs above
arianet cloud servers update <id> [--name n] [--labels k=v | --clear-labels] [--protection-delete=true] [--protection-rebuild=true]
arianet cloud servers delete <id> [--reason price] [--note "..."] [--keep-backups] [--delete-snapshots] [--yes] [--wait]

arianet cloud servers power-on|power-off|shutdown|reboot|reset <id> [--wait]
arianet cloud servers rebuild <id> --image ubuntu-24.04 [--wait] # erases the disk
arianet cloud servers change-type <id> --plan <id> [--wait] # aliases: resize, change-plan
arianet cloud servers enable-rescue <id> # prints the rescue password once
arianet cloud servers disable-rescue <id>
arianet cloud servers reset-password <id> # prints the new root password once
arianet cloud servers change-ipv4 <id> [--confirm-paid] # new public IPv4
arianet cloud servers attach-network <id> --network <id> [--subnet <id>] [--ip 10.0.1.5]
arianet cloud servers detach-network <id> --network <id>
arianet cloud servers enable-backup <id> [--window-hour 3] # hour in UTC, 0-23
arianet cloud servers change-backup-window <id> --window-hour 4
arianet cloud servers disable-backup <id>
arianet cloud servers create-backup <id> [--wait]
arianet cloud servers restore-backup <id> --backup <id> [--wait] # erases the disk
arianet cloud servers create-image <id> --name before-upgrade [--description "..."] [--wait]
arianet cloud servers actions <id>
arianet cloud servers costs <id>
  • power-off cuts the power (hard stop); shutdown asks the OS to shut down (ACPI). reboot is graceful, reset is a hard reset.
  • delete --reason is one of price, performance, ip_filtered, no_longer_needed, migrating, support, other (other needs --note). --keep-backups keeps the finished backups as snapshots, billed per GB until you delete them. --delete-snapshots also deletes the server's unprotected snapshots; by default snapshots survive the server.
  • costs shows the server's current hourly and monthly rate per billed piece (plan, primary IPv4, floating and elastic IPs, attached volumes, backup add-on), the totals, and what its snapshots and kept backups would cost after a delete.
  • change-ipv4 asks for --confirm-paid when the change has a fee.
  • A root or rescue password returned by create, rebuild, enable-rescue, reset-password or restore-backup is printed once. Save it.

Volumes​

arianet cloud volumes list|get|update|delete ...
arianet cloud volumes create --name data --size 50 --datacenter ovh
arianet cloud volumes create --name data --size 50 --server 12 --filesystem ext4 --wait
arianet cloud volumes attach <id> --server <id> [--wait]
arianet cloud volumes detach <id>
arianet cloud volumes resize <id> --size 100 [--wait] # grow only, size in GB

Private networks​

arianet cloud networks list|get|update|delete ...
arianet cloud networks create --name backend --datacenter ovh --ip-range 10.0.0.0/16 [--subnet-ip-range 10.0.1.0/24] [--wait]
arianet cloud networks subnets add <network-id> --ip-range 10.0.2.0/24
arianet cloud networks subnets delete <network-id> <subnet-id>
arianet cloud networks routes set <network-id> --route 10.100.0.0/16=10.0.1.5 # destination=gateway, repeatable
arianet cloud networks routes set <network-id> --clear

Cloud firewalls​

arianet cloud firewalls list|get|update|delete ...
arianet cloud firewalls create --name web \
--rule direction=in,protocol=tcp,port=443,source=0.0.0.0/0,source=::/0 \
--rule direction=in,protocol=tcp,port=22,source=203.0.113.4/32 --server 12
arianet cloud firewalls create --name web --rules-file rules.json
arianet cloud firewalls rules set <id> --rule direction=in,protocol=tcp,port=80,source=0.0.0.0/0
arianet cloud firewalls rules set <id> --rules-file rules.json | --clear
arianet cloud firewalls apply-to <id> --server 12 --server 13
arianet cloud firewalls apply-to <id> --label-selector "env=prod,tier!=db" --wait
arianet cloud firewalls remove-from <id> --label-selector env=prod
arianet cloud firewalls set-servers <id> --server 12,13 | --none

A rule is direction=in|out,protocol=tcp|udp|icmp|esp|gre,port=<port or range>,source=<CIDR> (repeat source=, or use destination= for outgoing rules, plus an optional description=). rules set replaces every rule at once. A label-selector target follows the labels: servers that gain matching labels later get the firewall, servers that lose them lose it.

Floating IPs​

arianet cloud floating-ips list|get|update|delete ...
arianet cloud floating-ips create --type ipv4 --datacenter ovh --name vip
arianet cloud floating-ips create --type ipv4 --server 12 --wait
arianet cloud floating-ips assign <id> --server <id> [--wait]
arianet cloud floating-ips unassign <id>
arianet cloud floating-ips dns-ptr <id> --ptr web.example.com | --reset

Load balancers​

arianet cloud load-balancers types
arianet cloud load-balancers list|get|update|delete ...
arianet cloud load-balancers create --name web --datacenter ovh --type lb11 \
--service tcp:80 --service tcp:443 --target label_selector:role=web --wait
arianet cloud load-balancers add-service <id> --protocol http --listen-port 80 --health-protocol http --health-path /healthz
arianet cloud load-balancers update-service <id> --port 80 --protocol tcp --listen-port 80 --destination-port 8081
arianet cloud load-balancers delete-service <id> --listen-port 443
arianet cloud load-balancers set-services <id> --services-file services.json [--algorithm least_connections]
arianet cloud load-balancers add-target <id> --server 12 | --ip <address> | --label-selector role=web [--use-private-ip]
arianet cloud load-balancers remove-target <id> --target-id 17
arianet cloud load-balancers change-algorithm <id> --algorithm round_robin|least_connections
arianet cloud load-balancers change-type <id> --type lb21
arianet cloud load-balancers attach-network <id> --network 4
arianet cloud load-balancers detach-network <id>
arianet cloud load-balancers health <id>

Services listen on tcp, http or https (TLS passthrough). Service flags include --destination-port, --proxyprotocol, --sticky-sessions, --cookie-name and the health check (--health-protocol tcp|http, --health-port, --health-path, --health-domain, --health-status-code, --health-interval, --health-timeout, --health-retries). --no-public-interface on create makes a private-only load balancer.

Actions​

arianet cloud actions list [--resource-type server --resource-id 12] [--status running|success|error] [--since <RFC 3339>]
arianet cloud actions get <id>
arianet cloud actions wait <id> [<id>...] [--timeout 30m]

Hosting, regional VPS, dedicated servers and SMS​

Since v0.6.0

These command groups are available from CLI v0.6.0. Update an older install with arianet upgrade.

These groups call the hosting, regional VPS, dedicated servers and SMS APIs with the same token. Every command takes --region <code> to pick a region (default: the product's default region) and, with -o json, prints the API's answer as is. For any endpoint without a command, each group has api <METHOD> <path> [--data JSON]. Commands that create something also take --data or --file for the whole JSON body.

Hosting​

arianet hosting datacenters | plans [--datacenter <code>] [--kind shared|reseller]
arianet hosting accounts list|get|usage|nameservers|traffic|actions <id>
arianet hosting accounts create --datacenter <code> --plan-id <id> --term monthly --domain example.com --password '...'
arianet hosting accounts change-plan <id> --plan-id <id> | renew <id> | password <id> --password '...' | login <id> | delete <id>
arianet hosting dns list|add|update|delete <account-id> ...
arianet hosting email list|add|update|delete <account-id> ...
arianet hosting databases list|create|delete|grant|users|user-create|user-password|user-delete <account-id> ...
arianet hosting ssh-keys list|add|delete <account-id> ...
arianet hosting actions list|get|wait

Regional VPS​

arianet vps (without regional) keeps managing the VPS servers of /api/v1/servers. Regional VPS servers (such as iran-1) live under arianet vps regional:

arianet vps regional datacenters | plans | images
arianet vps regional servers list|get|delete|start|stop|restart|kill|console|traffic|actions <id>
arianet vps regional servers create --datacenter <code> --plan-id <id> --image ubuntu-24.04 --hostname web-1 --billing-mode hourly [--wait]
arianet vps regional servers reinstall <id> --image <image> | resize <id> --plan-id <id> | reset-password <id>
arianet vps regional actions list|get|wait

A generated root password is printed only once.

Dedicated servers​

arianet baremetal suppliers | ranges | plans | rules | options <catalog> <plan-code>
arianet baremetal quote --catalog eco --plan-code <code> --datacenter <dc> --memory <m> --storage <s> --bandwidth <b>
arianet baremetal orders create ... --rules-version <v> --accept-rules
arianet baremetal orders list|get|cancel <id>
arianet baremetal servers list|get|credentials|renewals|renew|os-templates|reinstall-status <id>
arianet baremetal servers reinstall <id> --template <os>

SMS​

arianet sms lines list | request [--number <n>] [--note "..."]
arianet sms send --from <line-id> --to 09121234567 --to 09351234567 --body "Your code is 1234" [--reference order-981]
arianet sms send --from <line-id> --to 09121234567 --template <id> --at 2026-12-01T09:00:00+03:30
arianet sms messages list [--status failed] [--batch <id>] [--to <n>] [--page 2 --per-page 100] | get <id>
arianet sms batches list|get <id>
arianet sms scheduled list | cancel <id>
arianet sms inbound | prices | report [--from 2026-11-01] [--to 2026-11-30]
arianet sms templates list|get|create|update|delete
arianet sms blocked list [--phone <n>] | add | delete
arianet sms webhook get | set --url <url> | rotate-secret

Balance and invoices​

arianet balance                                  # wallet balance
arianet balance transactions [--page 2]
arianet balance invoices [--status paid] [--page 2 --limit 20]
arianet balance invoices get <number> # one invoice with its line items

Output formats​

The default table output is for people. -o json (--output json) prints the API data as JSON for scripts:

arianet vps list -o json | jq -r '.[] | select(.status == "active") | .id'
arianet cloud servers list --label-selector env=prod -o json | jq -r '.[].id'

With -o json:

  • stdout carries only the JSON result. Progress, --wait output and hints go to stderr; the update notice is not shown.

  • Confirmation prompts are written to stderr. Pass --yes in scripts so nothing waits for input.

  • For cloud commands the response is printed as the API returned it, plus the final actions after a --wait.

  • Errors are written to stderr as

    {"success":false,"error":{"code":"INSUFFICIENT_BALANCE","message":"...","status":402}}

Exit codes​

CodeMeaning
0Success
1Any failure, including a --wait that failed, timed out or could not continue

Scripting examples​

Order a VPS and capture its ID:

out=$(arianet vps create --plan 5 --region 1 --os 3 --hostname web-01 \
--ssh-key 2 --yes --output json) || exit 1
id=$(echo "$out" | jq -r '.id')

Retry safely with a key you control:

key="order-$(date +%Y%m%d)-web-01"
until arianet vps create --plan 5 --region 1 --os 3 --hostname web-01 \
--ssh-key 2 --yes --idempotency-key "$key" --output json; do
sleep 30
done

Create three cloud servers behind a load balancer and wait for everything:

arianet cloud servers create --name web --count 3 --datacenter ovh --plan 3 \
--image ubuntu-24.04 --ssh-key-id 5 --labels role=web --wait
arianet cloud load-balancers create --name web --datacenter ovh --type lb11 \
--service tcp:80 --target label_selector:role=web --wait

Troubleshooting​

Message / codeCause and fix
No API token configuredRun arianet configure or set ARIANET_TOKEN.
UNAUTHORIZEDThe token is wrong, revoked or expired. Check arianet configure show and create a new token.
INSUFFICIENT_SCOPEThe token lacks the scope for this command (see Token scopes).
IP_NOT_ALLOWEDThe token is restricted to other source IP addresses.
INSUFFICIENT_BALANCETop up the wallet, then retry. arianet balance shows the current balance.
NO_DEFAULT_WALLETYou have no default wallet. Pass --currency <id>.
FEATURE_NOT_SUPPORTEDThe region does not offer SSH keys or firewalls. arianet region list shows yes/no per region.
RATE_LIMIT_EXCEEDED / rate_limit_exceededToo many requests. The message says how long to wait.
UPSTREAM_ERROR / UPSTREAM_UNAVAILABLE / WRITES_UNAVAILABLETemporarily unavailable. Wait and retry; a VPS order can be retried with the same --idempotency-key.
VALIDATION_ERROR / invalid_inputAn argument was rejected. The message names the field.

If vps create is interrupted after the order was sent, check arianet vps list before ordering again, or re-run the same command with the printed --idempotency-key.

Support​