---
title: "Publica una versión del sitio desde archivos en JSON"
method: POST
path: "/sites/{siteId}/deploys/files"
tags: ["Sites"]
---

# Publica una versión del sitio desde archivos en JSON

`POST /sites/{siteId}/deploys/files`

## Request

- Base URL: `https://api.met.meteor.com.co/api/v1`
- URL: `https://api.met.meteor.com.co/api/v1/sites/{siteId}/deploys/files`
- Auth: one of:
  - `bearer` (a scheme the document does not define)
  - HTTP bearer

Lo mismo que el zip, archivo por archivo: `content` en `utf8` para texto o en `base64` para binarios. El cuerpo entero tiene un tope de 10 MB; un sitio más grande va por zip. Cada llamada crea una versión completa: no se suman archivos a una anterior.

Topes: zip de 50 MB, 2000 archivos, 25 MB por archivo y 200 MB en total descomprimido. Extensiones: html, htm, css, js, mjs, map, json, txt, xml, svg, png, jpg, jpeg, gif, webp, avif, ico, woff, woff2, ttf, otf, eot, mp4, webm, mp3, pdf, webmanifest. Las rutas van sin `/` inicial, sin `..`, sin `\` y sin carpetas ocultas (salvo `.well-known/`). Si todo viene dentro de una carpeta (`dist/`), se quita. Basta una ruta inválida para que responda 400 con la lista de rechazados en `errors` y no se suba nada.

## Path parameters

- `siteId` number, required

## Request body

- CreateStaticDeployFilesDto
  - `activate` boolean: `true` (default): el deploy queda en línea apenas termina de subir.
  - `files` StaticFileInputDto[], required
    - `content` string, required: Contenido del archivo, en el `encoding` indicado.
    - `encoding` 'utf8' | 'base64': `utf8` para texto (HTML, CSS, JS) y `base64` para binarios (imágenes, fuentes).
    - `path` string, required: Ruta del archivo dentro del sitio, sin `/` inicial: `index.html`, `css/main.css`.

## Response `201`

- object: Sobre en el que viaja toda respuesta correcta de la API. El recurso está en `data`. Los SDKs oficiales lo desenvuelven por ti; un cliente hecho a mano tiene que leer `.data`.
  - `success` true, required: Siempre `true` en una respuesta 2xx.
  - `data` SiteDeployResponseDto, required
    - `activated_at` string, nullable, required: Última vez que se puso en línea; `null` si nunca.
    - `created_at` string, required
    - `error` string, nullable, required: Motivo de un deploy `failed`; `null` en los demás.
    - `file_count` number, required
    - `id` string, required
    - `is_active` boolean, required: Si es la versión que está en línea ahora.
    - `site_id` number, required
    - `source` 'zip' | 'files', required
    - `status` 'uploading' | 'ready' | 'failed', required: `ready` = se puede activar. `failed` = la subida no terminó (ver `error`).
    - `total_bytes` number, required: Suma de los archivos, descomprimidos, en bytes.
    - `url` string, required: URL del sitio. Muestra ESTE deploy solo si `is_active`.

## Other responses

- `400`: La request no es válida: un campo no pasa validación, falta un parámetro requerido o el recurso no admite la transición solicitada.
- `401`: API key ausente, inválida, revocada o expirada — o el workspace está bloqueado.
- `403`: La key está autenticada pero no puede ejecutar esta operación: scope faltante, capacidad deshabilitada, modo test restringido o recurso fuera de su cartera.
- `404`: El recurso no existe o no está disponible dentro del alcance de la key. No revela la existencia de recursos de otros tenants.
- `409`: La operación entra en conflicto con el estado actual o con un Idempotency-Key en uso. No reintentes con el mismo key y un body distinto.
- `429`: Se superó el límite por minuto de la key o la cuota del plan. Respeta `Retry-After`; el SDK ya reintenta solo.
- `500`: Error del servidor o del Met que ejecutaba. El SDK reintenta los 5xx con backoff.

---

[API](https://skmtc.dev/meteor/apis/met-public-api.md) · [All operations](https://skmtc.dev/meteor/apis/met-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/meteor/apis/met-public-api/revisions/fc6d3aad75de?raw)
