Pular para o conteúdo

Atribui ou move o IP elástico

POST /cloud/network/elastic-ips/{id}/assign

Escopo do token: ips:write · aceita Idempotency-Key · continua em segundo plano. Recurso: IPs elásticos.

server_id é um servidor da mesma região (422 cloud.other_region fora dela) ou null (sem servidor). Com o IP já roteado para outro servidor o status é moving; o job move a rota. Apontar para um servidor numa região sem routed_by_gateway é recusado (409 cloud.elastic_ips_unavailable); tirar do servidor vale em qualquer região. 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/elastic-ips/576fc46b-b2e5-41e7-b9a9-af387899f09a/assign" \
-H "Authorization: Bearer $HALVER_API_TOKEN" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"server_id": "307d7f63-0f00-4d4b-bc28-839d359e13a3"
}'
  • id string (uuid) obrigatório

    Exemplo: 576fc46b-b2e5-41e7-b9a9-af387899f09a.

  • 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.

  • server_id string (uuid) obrigatório pode ser nulo

    Servidor da mesma região, ou null para deixar o IP sem servidor.

Exemplo de corpo
{
"server_id": "307d7f63-0f00-4d4b-bc28-839d359e13a3"
}

Mudança em andamento.

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.
  • Retry-After: Segundos sugeridos até consultar de novo (GET /cloud/operations/{id} ou o recurso): a operação segue em segundo plano e avança a cada 10 s.
Campos da resposta
  • address string obrigatório

    IPv4 público (/32).

  • apply_error string obrigatório

    Última resposta do gateway a uma mudança que não passou (“” quando não há).

  • contract_id string (uuid) obrigatório pode ser nulo
  • created_at string (date-time) obrigatório
  • first_invoice_id string (uuid) obrigatório pode ser nulo
  • id string (uuid) obrigatório
  • monthly_cents integer (int64) obrigatório
  • region object obrigatório
    • code string obrigatório
    • id string (uuid) obrigatório
    • name string obrigatório
  • server_hostname string obrigatório
  • server_id string (uuid) obrigatório pode ser nulo

    Servidor para onde o IP vai (null = sem servidor).

  • status string obrigatório

    pending_payment = primeira fatura em cobrança; configuring/moving/releasing = mudança indo para o gateway; failed = o gateway recusou ou não aplicou a tempo (veja apply_error). Um de: pending_payment, configuring, active, moving, releasing, failed.

  • suspended_at string (date-time) obrigatório pode ser nulo

    Rota retirada por falta de pagamento; o endereço continua reservado e a rota volta quando a fatura é paga.

Exemplo de resposta
{
"address": "198.51.100.20",
"apply_error": "",
"contract_id": "751e7c9a-fae2-4027-9be3-5728dfce8982",
"created_at": "2026-10-20T18:00:00Z",
"first_invoice_id": "36d56e13-ffa3-4af3-acc1-14aa538fb0ab",
"id": "576fc46b-b2e5-41e7-b9a9-af387899f09a",
"monthly_cents": 79900,
"region": {
"code": "br-mg-1",
"id": "8c48d558-f6ba-472a-b7f4-e834d7d06d10",
"name": "Minas Gerais"
},
"server_hostname": "web-01",
"server_id": "307d7f63-0f00-4d4b-bc28-839d359e13a3",
"status": "active",
"suspended_at": null
}

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
404 Recurso não encontrado (ou fora do escopo do usuário). elastic_ip.not_found
409 Conflito (unicidade ou operação concorrente em andamento). idempotency.in_progress, cloud.elastic_ips_unavailable
422 Entrada válida, mas viola uma regra de negócio. idempotency.key_reused, cloud.other_region
Exemplo de erro
{
"type": "about:blank",
"title": "Forbidden",
"status": 403,
"detail": "o token não tem o escopo ips:write; crie um token com esse escopo em Desenvolvedores › Tokens de API",
"code": "api_token.insufficient_scope",
"request_id": "6f1c0b2a9e4d7c3b5a8f0e1d"
}