---
title: "Crear preview inmutable de un cambio"
method: POST
path: "/ecommerce/page-previews"
tags: ["Páginas HTML"]
---

# Crear preview inmutable de un cambio

`POST /ecommerce/page-previews`

## Request

- Base URL: `https://api.service.getjusto.com/v3`
- URL: `https://api.service.getjusto.com/v3/ecommerce/page-previews`
- Auth: none declared

Operación limitada al sitio autorizado; requiere permiso admin en la API. En MCP se valida website.edit. Consulta creation-skill para el flujo completo. Las cargas y previews son temporales; Con el experimento website-page-editor/enabled, apply guarda un borrador compartido; publish publica explícitamente con revision, baseRevision y operationId estable entre reintentos. Sin el experimento, apply conserva su publicación directa. Ambos requieren confirmed: true. Preview acepta zipUploadId (ZIP de HTML e imágenes), htmlUploadId o html, exactamente uno. ZIP hasta 100 MB comprimidos/descomprimidos, 128 entradas, un HTML y hasta 30 imágenes. ZIP usa sus imágenes y no admite el parámetro assets; recompila Tailwind. Al editar, omitir assets/dynamicFields conserva sus mapas; enviarlos los reemplaza por completo. Solo páginas completas con un componente HTML. replace_page elimina todos los componentes anteriores. Si cambia cualquier componente desde su lectura, requiere otro preview.

## Request body

- object
  - `target` union, required
    - object
      - `operation` 'create_page', required
      - `page` object, required
        - `name` string, required
        - `path` string, required: Ruta pública que empieza con /, por ejemplo /nuestra-cocina. Usa letras, números, guiones, guiones bajos o /. No es la ruta del archivo HTML.
        - `title` string
        - `description` union: Descripción para Google y al compartir el enlace, entre 70 y 160 caracteres. Envía "" para usar la descripción global del sitio.
          - ''
          - string
        - `disabled` boolean
        - `noIndex` boolean
    - object
      - `operation` 'replace_page', required
      - `pageId` string, required
      - `revision` string, required: Copia content.revision de get_website_page; no la calcules.
  - `zipUploadId` string: ID de un ZIP ya subido mediante create_page_uploads con application/zip. Incluye HTML e imágenes; no requiere mapa assets. Envía exactamente uno de zipUploadId, htmlUploadId o html.
  - `htmlUploadId` string: Alternativa a html: ID de un archivo HTML ya subido. Envía exactamente uno de html, htmlUploadId o zipUploadId.
  - `html` string: Fragmento HTML completo. Alternativa al ZIP: no requiere upload. Excluye htmlUploadId y zipUploadId.
  - `assets` object: Mapa completo de rutas del HTML a uploadId/assetId de imágenes. Al editar, omitir conserva el mapa anterior; {} lo vacía. Usa los IDs devueltos por uploads o list_website_assets.
  - `dynamicFields` object: Opcional: valores de los campos {{ ... }}. Al editar, omitir conserva los valores actuales; si se envía reemplaza el mapa completo.

## Response `200`

Resultado de la operación. Los listados devuelven items y nextOffset; uploads devuelve uploads con uploadId, path, uploadUrl, method, headers y expiresAt; preview devuelve previewId, previewUrl, expiresAt, assets, replacesEntirePage, published=false y publishRequiresConfirmation=true; apply devuelve pageId, pageUrl y previewId. get devuelve page y content: format html incluye solo revision, sin HTML ni descargas; format unsupported incluye revision, canReplace y un aviso sin exponer componentes. Los listados incluyen content.format. content devuelve format, revision, downloadUrl, expiresAt y files para HTML; unsupported devuelve el aviso y un ZIP en blanco con isBlank=true, HTML/CSS compilado vacíos, mapas vacíos y el target para reemplazar la página. HTML compatible lleva isBlank=false. El ZIP incluye HTML, CSS compilado, assets gestionados, Tailwind y manifiesto; las dependencias externas se enumeran. La descarga vence en 10 minutos.

- object
  - `success` boolean
  - `data` object

## Other responses

- `400`: Parámetros, archivo, HTML o referencias inválidas; preview vencido, ruta duplicada o conflicto de edición.
- `401`: Token inválido.
- `403`: Sin permisos para este sitio.

## Changes

- **2026-11-01** `4b46b8f3312f`: 1 info
  - added the new optional request property `target/anyOf[subschema #1]/page/description`
- **2026-10-31** `4ad06bd631ce`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/getjusto/apis/justo-api/changes/ecommerce/page-previews/post.md)

---

[API](https://skmtc.dev/getjusto/apis/justo-api.md) - [All operations](https://skmtc.dev/getjusto/apis/justo-api/llms.txt) - [OpenAPI document](https://skmtc.dev/getjusto/apis/justo-api/revisions/c810bd8246fd?raw)
