Visão da rede da conta
GET /cloud/network
Escopo do token: networks:read. Recurso: Rede da conta.
Regiões onde a conta tem servidores (e as outras com datacenter), com o que cada uma oferece agora (IP elástico e preço, firewall, rede privada), as cotas e se a conta tem cartão salvo. Um recurso só é oferecido onde tem efeito: IPs elásticos e firewall pedem routed_by_gateway na região (o OPNsense é o gateway dos servidores) e um gateway cadastrado; redes privadas pedem switch_automated (a plataforma configura as portas do switch). IPs elásticos e redes privadas também pedem um bloco com espaço.
Exemplo de requisição
Seção intitulada “Exemplo de requisição”Os exemplos leem o token da variável de ambiente HALVER_API_TOKEN (um token sc_live_… criado em Desenvolvedores › Tokens de API). Nunca escreva o token no código.
curl "https://dash.halver.com.br/api/v1/cloud/network" \ -H "Authorization: Bearer $HALVER_API_TOKEN"package main
import ( "fmt" "io" "net/http" "os" "time")
func main() { req, err := http.NewRequest(http.MethodGet, "https://dash.halver.com.br/api/v1/cloud/network", nil) if err != nil { panic(err) } req.Header.Set("Authorization", "Bearer "+os.Getenv("HALVER_API_TOKEN")) client := &http.Client{Timeout: 30 * time.Second} resp, err := client.Do(req) if err != nil { panic(err) } defer resp.Body.Close() out, err := io.ReadAll(resp.Body) if err != nil { panic(err) } fmt.Println(resp.Status) fmt.Println(string(out))}import os
import requests
resp = requests.get( "https://dash.halver.com.br/api/v1/cloud/network", headers={ "Authorization": f"Bearer {os.environ['HALVER_API_TOKEN']}", }, timeout=30,)resp.raise_for_status()print(resp.json())Respostas
Seção intitulada “Respostas”Visão da rede.
Campos da resposta
-
quotasobject obrigatório-
elastic_ipsobject obrigatório-
limitinteger obrigatório -
usedinteger obrigatório
-
-
firewallsobject obrigatório-
limitinteger obrigatório -
usedinteger obrigatório
-
-
private_networksobject obrigatório-
limitinteger obrigatório -
usedinteger obrigatório
-
-
-
regionsarray de object obrigatório-
codestring obrigatório -
elastic_ip_monthly_centsinteger (int64) obrigatórioPreço mensal do próximo IP elástico da região.
-
elastic_ipsboolean obrigatórioIPs elásticos funcionam na região (o OPNsense é o gateway dos servidores) e há endereço livre.
-
firewallsboolean obrigatórioO firewall funciona na região (o OPNsense é o gateway dos servidores).
-
idstring (uuid) obrigatório -
namestring obrigatório -
private_networksboolean obrigatórioRedes privadas funcionam na região (a plataforma configura o switch) e o bloco de rede privada tem espaço.
-
routed_by_gatewayboolean obrigatórioA rede da região faz IPs elásticos e firewall terem efeito (o OPNsense é o gateway dos servidores e está cadastrado), haja ou não endereço livre agora. Mover um IP elástico pede só isso.
-
serversinteger obrigatórioServidores da conta na região.
-
switch_automatedboolean obrigatórioA plataforma configura as portas do switch da região, então redes privadas têm efeito, haja ou não espaço no bloco agora. Colocar um servidor numa rede pede só isso.
-
-
verifiedboolean obrigatórioA conta tem cartão salvo (IP elástico com preço exige).
{ "quotas": { "elastic_ips": { "limit": 50, "used": 1 }, "firewalls": { "limit": 50, "used": 1 }, "private_networks": { "limit": 50, "used": 1 } }, "regions": [ { "code": "br-mg-1", "elastic_ip_monthly_cents": 89900, "elastic_ips": false, "firewalls": false, "id": "3223951b-6c79-422b-8451-3e493d69ee02", "name": "Minas Gerais", "private_networks": false, "routed_by_gateway": false, "servers": 1, "switch_automated": false } ], "verified": true}Todo erro vem como application/problem+json (RFC 9457), com um code estável, a mensagem em português em detail, o motivo de cada campo em errors (nos erros de validação) e o request_id, que você informa ao suporte. Veja a lista completa de códigos.
| Status | Quando | Códigos |
|---|---|---|
| 401 | Não autenticado (token ausente, inválido ou expirado; credenciais inválidas). | auth.unauthorized |
| 403 | Autenticado, mas sem permissão para a área ou a operação. | api_token.insufficient_scope |
{ "type": "about:blank", "title": "Forbidden", "status": 403, "detail": "o token não tem o escopo networks:read; crie um token com esse escopo em Desenvolvedores › Tokens de API", "code": "api_token.insufficient_scope", "request_id": "6f1c0b2a9e4d7c3b5a8f0e1d"}