Atualizar Plano do Projeto

Altera o plano do projeto para um novo plano.

Permissões necessárias

A alteração exige project.plan.update em project:<project-id>. owner tem acesso completo; assistant, member e API Keys da organização precisam desse grant. Se a alteração de plano envolver dados de cobrança, consulte também project.billing.read quando a automação precisar ler custos.

PATCH /v1/project/:id/plan

Limite de requisições: 5 por minuto (contado por IP de origem).

Parâmetros de Path

ParâmetroTipoDescrição
idstringID do projeto

Headers

HeaderObrigatórioDescrição
x-api-key ou AuthorizationSimAPI Key da organização ou token de usuário
x-organization-idCom token de usuárioOrganização ativa do projeto. Dispensável com API Key da organização
Content-Type: application/jsonSimNecessário por haver body JSON

Body

CampoTipoObrigatórioDescrição
planstringSimIdentificador do plano

Planos Disponíveis

PlanoDescrição
staticPlano estático
basicPlano básico
premiumPlano premium
premium_plusPlano premium plus
businessPlano business
deep_learning_basicDeep Learning básico (com GPU)
deep_learning_premiumDeep Learning premium (com GPU)
db-starter, db-basic, db-premium, db-enterprisePlanos de bancos de dados e Key-Value

Os planos free e db-free e os planos de Analytics, Cache e Queue não são aceitos nesta rota. Em projetos Key-Value, a troca só é aceita entre planos com a mesma quantidade de instâncias e o mesmo armazenamento cobrado; nos demais casos a API responde 409.

Exemplo

{
  "plan": "premium"
}

Resposta

{
  "status": "success",
  "message": "updated with success"
}

Erros

StatusQuando ocorre
400Corpo inválido (por exemplo, plan ausente, free, db-free ou fora da lista aceita)
404Projeto não encontrado, plano inexistente ou projeto já está com o plano informado (the project already setted with this plan)
409O projeto está no plano free ou db-free; o projeto tem contrato mensal ou anual (cant change plan with contract); o projeto é um Job agendado, que não aceita troca de plano; ou não há capacidade disponível no novo plano (INSUFFICIENT_PLAN_CAPACITY)
503A capacidade do plano está temporariamente indisponível (PLAN_CAPACITY_TEMPORARILY_UNAVAILABLE); tente novamente em instantes

Renovação automática do contrato

Liga ou desliga a renovação automática de um projeto com contrato mensal ou anual.

PATCH /v1/project/:id/renew-automatic-contract

Aceita sessão de usuário ou API Key da organização e exige project.plan.update em project:<project-id>. Limite de requisições: 5 por minuto (contado por IP de origem).

Body

CampoTipoObrigatórioDescrição
renew_automatic_contractbooleanSimtrue para renovar automaticamente ao fim do contrato; false para não renovar
{
  "renew_automatic_contract": false
}

Resposta

{
  "status": "success",
  "message": "renew automatic contract updated with success"
}

Erros

StatusQuando ocorre
400Corpo inválido, ou o projeto usa cobrança por hora, que não tem renovação de contrato
404Projeto não encontrado

Exemplos

curl -X PATCH "https://api.zenifra.com/v1/project/507f1f77bcf86cd799439011/plan" \
  -H "x-api-key: sua-api-key" \
  -H "x-organization-id: sua-organization-id" \
  -H "Content-Type: application/json" \
  -d '{"plan": "premium"}'

Python

import requests

API_KEY = "sua-api-key"
ORGANIZATION_ID = "sua-organization-id"
PROJECT_ID = "507f1f77bcf86cd799439011"

response = requests.patch(
    f"https://api.zenifra.com/v1/project/{PROJECT_ID}/plan",
    headers={"x-api-key": API_KEY, "x-organization-id": ORGANIZATION_ID},
    json={"plan": "premium"}
)
print(response.json())

Observações

  • A mudança de plano pode levar alguns minutos para ser aplicada
  • A troca de plano só é aceita em projetos com cobrança por hora; a cobrança passa a usar o preço do novo plano a partir da troca
  • Ao mudar para um plano sem auto-scaling ou sem health check, esses recursos são desligados automaticamente
  • Planos com GPU (deep_learning_basic, deep_learning_premium) têm preços próprios; consulte GET /v1/project/plans

Última atualização em

Nessa página