Pular para o conteúdo

Cria uma rede privada

POST /cloud/network/private-networks

Escopo do token: networks:write · aceita Idempotency-Key. Recurso: Redes privadas.

Uma VLAN da região (de 1000 a 3999, sem repetir VLAN de bloco ou de outra rede da região) e uma sub-rede /24 do bloco de rede privada da região. O job define a VLAN no OPNsense (configuring → active). O cliente configura a VLAN (802.1Q) no sistema; o tráfego é livre e não é filtrado. Limite de 5 por conta. Numa região sem switch_automated é recusado (409 cloud.private_networks_unavailable). Aceita Idempotency-Key.

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.

Janela do terminal
curl -X POST "https://dash.halver.com.br/api/v1/cloud/network/private-networks" \
-H "Authorization: Bearer $HALVER_API_TOKEN" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"description": "Banco de dados",
"region_id": "7991b4f0-3bd8-47f3-bd3c-30b5d9ac664e"
}'
  • Idempotency-Key string

    Chave de idempotência (draft-ietf-httpapi-idempotency-key-header-07): de 1 a 255 caracteres ASCII visíveis, como string de Structured Field ("…") ou texto puro; gere uma nova (um UUID) para cada operação. Vale por 24 horas, por conta e credencial (o token, ou o usuário no painel). A mesma chave com a mesma requisição (método, caminho, query e corpo) repete a resposta guardada (status e corpo) com Idempotent-Replayed: true, sem cobrar nem criar de novo; com outra requisição responde 422 idempotency.key_reused; enquanto a primeira roda, 409 idempotency.in_progress com Retry-After. Toda resposta fica guardada, inclusive 5xx (uma falha pode vir depois de uma cobrança); só 401, 403, 409 e 429, que dizem que nada rodou, liberam a chave. Uma chave presa por uma requisição que morreu é liberada depois de 10 minutos. Veja Idempotência.

application/json, obrigatório.

  • description string obrigatório

    Até 80 caracteres.

  • region_id string (uuid) obrigatório
Exemplo de corpo
{
"description": "Banco de dados",
"region_id": "7991b4f0-3bd8-47f3-bd3c-30b5d9ac664e"
}

Rede privada.

Cabeçalhos:

  • Idempotent-Replayed: true quando a resposta foi repetida de uma requisição anterior com a mesma Idempotency-Key. Convenção desta API, como a de outras; o rascunho da IETF não define cabeçalho de repetição.
Campos da resposta
  • apply_error string obrigatório
  • created_at string (date-time) obrigatório
  • description string obrigatório
  • id string (uuid) obrigatório
  • region object obrigatório
    • code string obrigatório
    • id string (uuid) obrigatório
    • name string obrigatório
  • servers array de object obrigatório
    • address string obrigatório

      Endereço sugerido ao servidor na sub-rede.

    • apply_error string obrigatório

      Última resposta do switch a uma mudança que não passou (“” quando nenhuma).

    • hostname string obrigatório
    • id string (uuid) obrigatório
    • server_id string (uuid) obrigatório
    • status string obrigatório

      A porta do switch do servidor, configurada pelo job cloud-network: connecting = a VLAN indo para a porta; failed = o switch recusou ou não aplicou a tempo; removing = a VLAN saindo da porta. Um de: connecting, active, failed, removing.

  • status string obrigatório

    Um de: configuring, active, deleting, failed.

  • subnet string obrigatório

    Sub-rede da rede (ex. 10.240.0.0/24).

  • vlan_id integer obrigatório

    VID que o cliente configura no sistema (802.1Q).

Exemplo de resposta
{
"apply_error": "",
"created_at": "2026-10-20T18:00:00Z",
"description": "Banco de dados",
"id": "b7ad1a4c-5186-49fc-a761-c6de92f6ceea",
"region": {
"code": "br-mg-1",
"id": "8c48d558-f6ba-472a-b7f4-e834d7d06d10",
"name": "Minas Gerais"
},
"servers": [
{
"address": "198.51.100.20",
"apply_error": "",
"hostname": "web-01",
"id": "6b7b19c5-375a-43fa-a24b-74fc1462808d",
"server_id": "307d7f63-0f00-4d4b-bc28-839d359e13a3",
"status": "connecting"
}
],
"status": "active",
"subnet": "10.20.30.0/24",
"vlan_id": 3001
}

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
400 Requisição inválida (JSON malformado, campo desconhecido, parâmetro inválido ou falha de validação). validation_failed, request.invalid_json, idempotency.invalid_key
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
409 Conflito (unicidade ou operação concorrente em andamento). idempotency.in_progress, cloud.private_networks_unavailable
422 Entrada válida, mas viola uma regra de negócio. idempotency.key_reused
Exemplo de erro
{
"type": "about:blank",
"title": "Forbidden",
"status": 403,
"detail": "o token não tem o escopo networks:write; crie um token com esse escopo em Desenvolvedores › Tokens de API",
"code": "api_token.insufficient_scope",
"request_id": "6f1c0b2a9e4d7c3b5a8f0e1d"
}