Pular para o conteúdo

Adiciona uma chave SSH

POST /cloud/ssh-keys

Escopo do token: ssh_keys:write · aceita Idempotency-Key. Recurso: Chaves SSH.

ed25519, ECDSA ou RSA de 2048 bits ou mais; uma linha de authorized_keys sem opções. 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/ssh-keys" \
-H "Authorization: Bearer $HALVER_API_TOKEN" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"name": "notebook da Ana",
"public_key": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIExemploDeChavePublicaNaoUseEm0123456789 ana@notebook"
}'
  • 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.

  • name string
  • public_key string obrigatório
Exemplo de corpo
{
"name": "notebook da Ana",
"public_key": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIExemploDeChavePublicaNaoUseEm0123456789 ana@notebook"
}

Chave criada.

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
  • created_at string (date-time) obrigatório
  • fingerprint string obrigatório
  • id string (uuid) obrigatório
  • name string obrigatório
  • public_key string obrigatório
Exemplo de resposta
{
"created_at": "2026-10-20T18:00:00Z",
"fingerprint": "SHA256:k3Q0Exemplo8bW1tq6Nf5d7xJ0r2YpZsA9cVvLmEx1gU",
"id": "f14f67d8-9ae9-4217-991b-854a52150ae7",
"name": "notebook da Ana",
"public_key": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIExemploDeChavePublicaNaoUseEm0123456789 ana@notebook"
}

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
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 ssh_keys:write; crie um token com esse escopo em Desenvolvedores › Tokens de API",
"code": "api_token.insufficient_scope",
"request_id": "6f1c0b2a9e4d7c3b5a8f0e1d"
}