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 with | What arianet upgrade does |
|---|---|
| Homebrew | Runs brew upgrade ariaservice/arianet/arianet and shows its output. |
| apt / dpkg | Runs 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 zip | Downloads 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 variable | Meaning |
|---|---|
ARIANET_TOKEN | API token |
ARIANET_API_URL | API base URL (default https://api.ariaservice.net) |
ARIANET_NO_UPDATE_NOTIFIER | Set to any value to turn off the new-release notice |
Global flags
| Flag | Meaning |
|---|---|
-o, --output | table (default) or json |
--token | API token for this command only |
--api-url | API 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.
| Commands | Scope |
|---|---|
region list | regions:read |
os list | os:read |
plan list, plan get | plans:read |
vps list/get/status/actions | servers:read |
vps create/delete/restart/power-*/reinstall/rename/toggle-protection | servers:write |
balance, balance transactions | balance:read |
balance invoices | invoices:read |
auth tokens list, auth tokens revoke | tokens:read, tokens:write (auth whoami and auth logout need none) |
ssh list/get, ssh add/update/delete | ssh-keys:read, ssh-keys:write |
firewall list/get, other firewall commands | firewalls:read, firewalls:write |
cloud ... reads / changes | cloud:servers:read / cloud:servers:write |
cloud pricing | none (public) |
hosting ... reads / changes | hosting:accounts:read / hosting:accounts:write |
vps regional ... reads / changes | vps:servers:read / vps:servers:write |
baremetal ... reads / changes | baremetal:servers:read / baremetal:servers:write |
sms send, scheduled cancel, blocked add/delete, webhook / sms messages, batches, scheduled list, inbound, prices, report | sms:messages:write / sms:messages:read |
sms lines list (sms lines request: a token without scopes) | sms:lines:read |
sms templates list / other sms templates | sms: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
| Flag | Meaning |
|---|---|
--plan | Plan ID |
--region | Region (datacenter) ID |
--os | OS template ID |
--hostname | Hostname |
--ssh-key | Log in with this stored SSH key instead of a password |
--password | Root password you choose |
--currency | Currency ID to pay with (default: your default wallet) |
--idempotency-key | Reuse a key to retry an order safely (see below) |
--no-wait | Return as soon as the order is accepted |
--timeout | Longest wait for the VPS to become active (default 15m) |
-y, --yes | Skip the confirmation prompt |
- With neither
--ssh-keynor--password, a strong random root password is generated and printed once. Save it; it cannot be shown again. - Without
--plan,--regionor--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
attachit to VPS. rule addflags:--direction ingress|egress(defaultingress),--proto tcp|udp|icmp|esp|gre(defaulttcp),--port(a port or range such as8000-9000, required for tcp and udp),--remote-ip(required;0.0.0.0/0allows everyone),--description.- The rule ID used by
rule removeis the string in the Rule ID column offirewall get. attachanddetachaccept 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. updatecommands 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.
--waitfollows it to the end (progress on stderr,--timeout, default15m) and exits non-zero if it fails or times out. getalso answers todescribeandshow;listtols;deletetorm(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 flag | Meaning |
|---|---|
--name | Server name (with --count: name, name-2, ...) |
--datacenter | Datacenter code (arianet cloud datacenters) |
--plan | Plan ID (arianet cloud plans) |
--image | Image (arianet cloud images list) |
--ssh-key-id | Saved SSH key ID (repeatable) |
--ssh-key | Public key to install (repeatable) |
--count | Create this many servers at once |
--firewall | Firewall ID to apply (repeatable) |
--network | Private network ID to attach (repeatable) |
--volume | Volume ID to attach (repeatable) |
--no-ipv4, --no-ipv6 | No public IPv4 / IPv6 address |
--backups | Turn on daily backups |
--user-data-file | cloud-init user data file |
--no-start | Do not start the server after creating it |
--labels, --project-id, --wait, --timeout | As 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-offcuts the power (hard stop);shutdownasks the OS to shut down (ACPI).rebootis graceful,resetis a hard reset.delete --reasonis one ofprice,performance,ip_filtered,no_longer_needed,migrating,support,other(otherneeds--note).--keep-backupskeeps the finished backups as snapshots, billed per GB until you delete them.--delete-snapshotsalso deletes the server's unprotected snapshots; by default snapshots survive the server.costsshows 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-ipv4asks for--confirm-paidwhen the change has a fee.- A root or rescue password returned by
create,rebuild,enable-rescue,reset-passwordorrestore-backupis 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
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,
--waitoutput and hints go to stderr; the update notice is not shown. -
Confirmation prompts are written to stderr. Pass
--yesin scripts so nothing waits for input. -
For cloud commands the response is printed as the API returned it, plus the final
actionsafter a--wait. -
Errors are written to stderr as
{"success":false,"error":{"code":"INSUFFICIENT_BALANCE","message":"...","status":402}}
Exit codes
| Code | Meaning |
|---|---|
0 | Success |
1 | Any 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 / code | Cause and fix |
|---|---|
No API token configured | Run arianet configure or set ARIANET_TOKEN. |
UNAUTHORIZED | The token is wrong, revoked or expired. Check arianet configure show and create a new token. |
INSUFFICIENT_SCOPE | The token lacks the scope for this command (see Token scopes). |
IP_NOT_ALLOWED | The token is restricted to other source IP addresses. |
INSUFFICIENT_BALANCE | Top up the wallet, then retry. arianet balance shows the current balance. |
NO_DEFAULT_WALLET | You have no default wallet. Pass --currency <id>. |
FEATURE_NOT_SUPPORTED | The region does not offer SSH keys or firewalls. arianet region list shows yes/no per region. |
RATE_LIMIT_EXCEEDED / rate_limit_exceeded | Too many requests. The message says how long to wait. |
UPSTREAM_ERROR / UPSTREAM_UNAVAILABLE / WRITES_UNAVAILABLE | Temporarily unavailable. Wait and retry; a VPS order can be retried with the same --idempotency-key. |
VALIDATION_ERROR / invalid_input | An 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
- VPS API: API endpoints · Cloud API: Cloud API · Terraform provider
- Product page: ariaservice.net/developers/cli
- Control panel: cloud.ariaservice.net
- Issues: github.com/ariaservice/arianet-cli/issues