Pular para o conteúdo principal
POST
Esta chamada cria um template privado com a primeira versão e responde 201 com o template. A requisição é multipart/form-data: o manifesto vai em um campo de texto, e cada serviço que executa o seu código vai em uma parte ZIP. Para começar a partir de um app ou de uma stack que você já tem, use Criar template a partir de app ou Criar template a partir de stack. Precisa do escopo templates:write quando chamado com uma chave de API. Só planos que podem criar imagens Docker personalizadas podem criar templates, e cada conta tem no máximo 5 templates privados, pessoais e de workspace somados. Em um workspace, só o dono do workspace cria templates. Um template privado não é revisado pela Vertra Cloud: quem o recebe vê o aviso “Não verificado pela Vertra”. Confira o manifesto antes com Validar manifesto. O formato está na referência do manifesto. O ZIP de um serviço é verificado antes de ser armazenado. O envio inteiro é recusado com TEMPLATE_SECRET_IN_SOURCE quando tem um arquivo .env que não é um exemplo, uma chave privada ou um token conhecido; details.files lista apenas os caminhos. Pastas .vertra/ são descartadas, e arquivos .env* nunca entram em um template.
string
obrigatório
O manifesto como string JSON serializada, seguindo o schema do manifesto. Um serviço cujo source.type é image se refere a uma imagem da sua conta pelo ID em source.image.
file
Uma parte ZIP por serviço do manifesto cuja origem é code, nomeada pelo id do serviço, por exemplo sources[bot]. Obrigatória para cada um desses serviços.
string
A mensagem da primeira versão, como objeto JSON serializado com pt-br (obrigatório), en e es.
string
O workspace que será dono do template. Sem ele, o template é seu.

Resposta

object
O template, com a primeira versão.

Respostas de erro

string
O código de erro que indica o motivo da falha. Valores possíveis:
  • API_KEY_SCOPE_DENIED: A chave de API não tem o escopo templates:write (403).
  • TEMPLATE_MANIFEST_INVALID: O manifesto não é válido; details.issues lista cada achado com o path e o code. Nada é criado.
  • TEMPLATE_SOURCE_REQUIRED: Um serviço code não tem uma parte ZIP.
  • TEMPLATE_SECRET_IN_SOURCE: Um ZIP tem um segredo (um arquivo .env, uma chave privada ou um token); details.files lista os caminhos (400).
  • TEMPLATE_SLUG_TAKEN: O id do manifesto já está em uso entre os seus templates ou é uma palavra reservada.
  • TEMPLATE_PRIVATE_LIMIT_REACHED: A conta já tem 5 templates privados.
  • PLAN_DOES_NOT_SUPPORT_CUSTOM_IMAGES: O plano não pode criar imagens Docker personalizadas, então não pode criar templates.
  • IMAGE_NOT_FOUND: Um serviço image se refere a uma imagem que não é sua ou não tem um build bem-sucedido.
  • WORKSPACE_OWNER_ONLY: workspace_id foi enviado e quem chama não é o dono desse workspace.
Última modificação em 28 de outubro de 2026