Skip to main content
POST
This call creates a private template with its first version and answers 201 with the template. The request is multipart/form-data: the manifest goes in a text field, and every service that runs your code goes in a ZIP part. To start from an application or a stack you already have, use Create Template from App or Create Template from Stack. Needs the templates:write scope when called with an API key. Only plans that can create custom Docker images can create templates, and each account holds at most 5 private templates, personal and workspace ones together. In a workspace, only the workspace owner creates templates. A private template is not reviewed by Vertra Cloud: whoever receives it sees the notice “Not verified by Vertra”. Check the manifest first with Validate Manifest. The format is in the manifest reference. The ZIP of a service is checked before it is stored. The whole upload is refused with TEMPLATE_SECRET_IN_SOURCE when it holds a .env file that is not an example, a private key or a known token; details.files lists only the paths. .vertra/ folders are dropped, and .env* files never enter a template.
string
required
The manifest as a JSON-serialized string, following the manifest schema. A service whose source.type is image refers to an image of your account by its ID in source.image.
file
One ZIP part per service of the manifest whose source is code, named after the service id, for example sources[bot]. Required for each of those services.
string
The message of the first version, as a JSON-serialized object with pt-br (required), en and es.
string
The workspace that will own the template. Without it, the template belongs to you.

Response

object
The template, with its first version.

Error Responses

string
The error code indicating the reason for the failure. Possible values:
  • API_KEY_SCOPE_DENIED: The API key does not have the templates:write scope (403).
  • TEMPLATE_MANIFEST_INVALID: The manifest is not valid; details.issues lists each finding with its path and code. Nothing is created.
  • TEMPLATE_SOURCE_REQUIRED: A code service has no ZIP part.
  • TEMPLATE_SECRET_IN_SOURCE: A ZIP holds a secret (an .env file, a private key or a token); details.files lists the paths (400).
  • TEMPLATE_SLUG_TAKEN: The id of the manifest is already in use among your templates or is a reserved word.
  • TEMPLATE_PRIVATE_LIMIT_REACHED: The account already has 5 private templates.
  • PLAN_DOES_NOT_SUPPORT_CUSTOM_IMAGES: The plan cannot create custom Docker images, so it cannot create templates.
  • IMAGE_NOT_FOUND: An image service refers to an image that is not yours or has no successful build.
  • WORKSPACE_OWNER_ONLY: workspace_id was sent and the caller is not the owner of that workspace.
Last modified on October 28, 2026