Detalha uma operação
GET /cloud/operations/{id}
Escopo do token: servers:read. Recurso: Operações.
O contrato de espera: consulte até status ser succeeded ou failed, respeitando Retry-After enquanto pending ou running.
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/operations/38b54c25-1f8d-40fe-8cb1-649ddb710f23" \ -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/operations/38b54c25-1f8d-40fe-8cb1-649ddb710f23", 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/operations/38b54c25-1f8d-40fe-8cb1-649ddb710f23", headers={ "Authorization": f"Bearer {os.environ['HALVER_API_TOKEN']}", }, timeout=30,)resp.raise_for_status()print(resp.json())Parâmetros
Seção intitulada “Parâmetros”Parâmetros do caminho
Seção intitulada “Parâmetros do caminho”-
idstring (uuid) obrigatórioExemplo:
38b54c25-1f8d-40fe-8cb1-649ddb710f23.
Respostas
Seção intitulada “Respostas”Operação.
Cabeçalhos:
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
-
errorstring obrigatórioResumo da etapa que falhou (vazio sem falha).
-
finished_atstring (date-time) obrigatório pode ser nulo -
idstring (uuid) obrigatório -
requested_atstring (date-time) obrigatório -
server_idstring (uuid) obrigatório -
started_atstring (date-time) obrigatório pode ser nulo -
statusstring obrigatórioUm de:
pending,running,succeeded,failed. -
stepsarray de object obrigatório-
finished_atstring (date-time) obrigatório pode ser nulo -
messagestring obrigatório -
namestring obrigatórioUm de:
prepare,erase,install,configure,reboot,ready,release. -
started_atstring (date-time) obrigatório pode ser nulo -
statusstring obrigatórioUm de:
pending,running,done,failed.
-
-
typestring obrigatórioUm de:
deploy,reinstall,wipe,delete.
{ "error": "", "finished_at": null, "id": "38b54c25-1f8d-40fe-8cb1-649ddb710f23", "requested_at": "2026-10-20T18:00:00Z", "server_id": "307d7f63-0f00-4d4b-bc28-839d359e13a3", "started_at": null, "status": "succeeded", "steps": [ { "finished_at": null, "message": "", "name": "prepare", "started_at": null, "status": "done" } ], "type": "deploy"}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 |
| 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). | operation.not_found |
{ "type": "about:blank", "title": "Forbidden", "status": 403, "detail": "o token não tem o escopo servers:read; crie um token com esse escopo em Desenvolvedores › Tokens de API", "code": "api_token.insufficient_scope", "request_id": "6f1c0b2a9e4d7c3b5a8f0e1d"}