Um token, criado no painel do cliente
Enviado como um bearer token. Pode ser restrito a somente leitura ou a um único serviço; os tokens são independentes da senha, e revogar um deles nunca encerra a sessão.
JSON sobre HTTPS. Nenhum SDK necessário, nenhuma conta de desenvolvedor separada, e nenhum endpoint que exista no painel mas não aqui.
Criar um servidor
curl -X POST https://api.vpsoffshore.com/v1/servers \
-H "Authorization: Bearer $TOKEN" \
-d '{"plan":"reef","image":"debian-13"}'Retorna um build id imediatamente. A máquina responde por SSH cerca de sessenta segundos depois, e o endereço já está roteado antes de as credenciais serem enviadas.
20 endpoints
URL Base https://api.vpsoffshore.com/v1. Versionado no caminho; a v1 continuará funcionando quando a v2 existir, e a data em que deixar de funcionar será anunciada com um ano de antecedência.
Servidores
Armazenamento
Rede
Catálogo
Faturamento
Tudo o que o painel pode fazer está aqui, e nada aqui está ausente do painel. Quando os dois divergem, isso é um bug — avise pelo painel e ele é corrigido em vez de documentado como comportamento esperado.
Como se comporta
Uma API é julgada pelos seus caminhos ruins, não pelos bons. Três dos quatro itens abaixo tratam do que acontece quando algo dá errado.
Um token, criado no painel do cliente
Enviado como um bearer token. Pode ser restrito a somente leitura ou a um único serviço; os tokens são independentes da senha, e revogar um deles nunca encerra a sessão.
JSON na entrada, JSON na saída, sem necessidade de SDK
HTTPS simples, sem envelope personalizado, sem fallback em XML e sem ritual de assinatura. Se o curl consegue fazer, já existe um cliente pronto. Bibliotecas oficiais existem para Go, Python e TypeScript, e nenhuma delas é obrigatória.
Limites de taxa que não são atingidos por acidente
600 requisições por minuto por token, 60 para chamadas de criação. Cada resposta traz o orçamento restante em um cabeçalho, e ultrapassá-lo retorna 429 com o número de segundos a aguardar — nunca uma queda silenciosa.
Erros que dizem o que fazer
Um 4xx traz um código legível por máquina, uma frase em linguagem natural e o campo com o problema. Preferimos retornar um erro longo a um erro curto que exige adivinhação.
As duas coisas escritas uma única vez
Vale a pena ler os dois antes da primeira chamada, e não depois da primeira falha.
Autenticar
curl https://api.vpsoffshore.com/v1/servers \
-H "Authorization: Bearer $TOKEN"
Os tokens são criados no painel e podem ser restritos a somente leitura ou a um único serviço. Eles são independentes da senha, e revogar um deles não encerra a sessão em nenhum lugar.
Ler o limite de taxa
X-RateLimit-Remaining: 574
X-RateLimit-Reset: 41
Em toda resposta, não apenas na que falha. Exceder o limite retorna 429 com os segundos de espera, nunca um descarte silencioso e nunca uma resposta reduzida.
Um erro indica o campo
{"error":"plan_unknown",
"message":"No plan named 'reff'. Did you mean 'reef'?",
"field":"plan"}
Um código legível por máquina, uma frase em linguagem humana e o campo responsável pelo erro. Erros longos saem mais baratos do que erros curtos que é preciso adivinhar.
Consultar uma configuração
curl https://api.vpsoffshore.com/v1/servers/$ID \
-H "Authorization: Bearer $TOKEN" | jq .state
Passa de building para running. Não é preciso registrar nenhum webhook antes de criar o que quer que seja, e fazer polling uma vez por segundo está dentro do limite.
Nada a solicitar
Nenhuma conta de desenvolvedor, nenhuma aprovação, nenhum sandbox que se comporte de forma diferente da produção.