Saltar al contenido principal
POST
Esta llamada crea una plantilla privada con su primera versión y responde 201 con la plantilla. La petición es multipart/form-data: el manifiesto va en un campo de texto, y cada servicio que ejecuta tu código va en una parte ZIP. Para partir de una aplicación o de un stack que ya tienes, usa Guardar una aplicación como plantilla o Guardar un stack como plantilla. Requiere el scope templates:write cuando se llama con una clave de API. Solo pueden crear plantillas los planes que permiten crear imágenes Docker personalizadas, y cada cuenta tiene como máximo 5 plantillas privadas, personales y de workspace juntas. En un workspace, solo el propietario crea plantillas. Vertra Cloud no revisa una plantilla privada: quien la reciba verá el aviso «No verificado por Vertra». Comprueba antes el manifiesto con Validar manifiesto. El formato está en la referencia del manifiesto. El ZIP de cada servicio se revisa antes de guardarse. Toda la subida se rechaza con TEMPLATE_SECRET_IN_SOURCE cuando contiene un archivo .env que no es un ejemplo, una clave privada o un token conocido; details.files solo enumera las rutas. Las carpetas .vertra/ se descartan, y los archivos .env* nunca entran en una plantilla.
string
requerido
El manifiesto como cadena JSON serializada, siguiendo el esquema del manifiesto. Un servicio cuyo source.type es image apunta a una imagen de tu cuenta por su ID en source.image.
file
Una parte ZIP por cada servicio del manifiesto cuyo source sea code, con el nombre del id del servicio, por ejemplo sources[bot]. Es obligatoria para cada uno de esos servicios.
string
El mensaje de la primera versión, como objeto JSON serializado con pt-br (obligatorio), en y es.
string
El workspace que será propietario de la plantilla. Sin este campo, la plantilla te pertenece.

Response

object
La plantilla, con su primera versión.

Error Responses

string
El código de error que indica el motivo del fallo. Valores posibles:
  • API_KEY_SCOPE_DENIED: La clave de API no tiene el scope templates:write (403).
  • TEMPLATE_MANIFEST_INVALID: El manifiesto no es válido; details.issues enumera cada hallazgo con su path y su code. No se crea nada.
  • TEMPLATE_SOURCE_REQUIRED: Un servicio code no tiene su parte ZIP.
  • TEMPLATE_SECRET_IN_SOURCE: Un ZIP contiene un secreto (un archivo .env, una clave privada o un token); details.files enumera las rutas (400).
  • TEMPLATE_SLUG_TAKEN: El id del manifiesto ya está en uso entre tus plantillas o es una palabra reservada.
  • TEMPLATE_PRIVATE_LIMIT_REACHED: La cuenta ya tiene 5 plantillas privadas.
  • PLAN_DOES_NOT_SUPPORT_CUSTOM_IMAGES: El plan no puede crear imágenes Docker personalizadas, así que tampoco puede crear plantillas.
  • IMAGE_NOT_FOUND: Un servicio image apunta a una imagen que no es tuya o que no tiene ningún build exitoso.
  • WORKSPACE_OWNER_ONLY: Se envió workspace_id y quien llama no es el propietario de ese workspace.
Última modificación el 28 de octubre de 2026