# Publica un juego HTML simple desde tu app de IA

Publica un archivo HTML autónomo de hasta 10 MiB con upload_game: qué cabe, el minicatálogo, la visibilidad, las actualizaciones y cuándo pasar a un paquete.

Source: https://www.playdrop.ai/es/create/learn/html-games

La vía simple publica un juego HTML estándar, como un arcade en canvas o un puzle con el DOM, con una sola llamada a `upload_game`. No necesita el SDK de PlayDrop, ni una carpeta de compilación, ni archivos adicionales, y devuelve un enlace que cualquiera puede abrir en un móvil o un ordenador.

## Cuándo encaja la vía simple

- Todo el juego es un único archivo HTML de 10 MiB como máximo (10.485.760 bytes UTF-8), con sus scripts, estilos, imágenes y sonidos incrustados.
- Es un juego de navegador corriente: no llama al SDK de PlayDrop, así que no tiene partidas guardadas en la nube, clasificaciones, logros, opciones para compartir, grupos, compras ni anuncios.
- No necesita archivos separados: ni imágenes o vídeos para la ficha ni servidor de juego.

Si alguna de estas condiciones no se cumple, usa un [paquete](https://www.playdrop.ai/es/create/learn/packaging). Conserva las funciones que pidió tu usuario; nunca las elimines ni aplanes un juego de varios archivos para que encaje en esta vía. La subida rechaza las llamadas al SDK, el código de servidor y los campos del catálogo exclusivos de los paquetes con `advanced_upload_required`.

## Envía el juego

Llama a `upload_game` con un nuevo `requestId`, el HTML completo y un minicatálogo para un juego:

```json
{
  "requestId": "moon-jump-first-upload",
  "html": "<!doctype html><html><head><meta charset=\"utf-8\"><title>Moon Jump</title></head><body>…</body></html>",
  "catalogue": {
    "apps": [{
      "name": "moon-jump",
      "displayName": "Moon Jump",
      "description": "Jump between lunar platforms and reach the flag.",
      "controls": "Tap or press Space to jump.",
      "tags": ["game-genre/casual"],
      "types": ["solo"],
      "controller": { "support": "off" },
      "authMode": "NONE",
      "primarySurface": "MOBILE_PORTRAIT"
    }]
  }
}
```

- `name` es el slug permanente del juego: de 1 a 100 letras minúsculas, dígitos o guiones.
- `tags` debe incluir un género, como `game-genre/casual`; consulta [géneros y etiquetas](https://www.playdrop.ai/es/create/learn/tags).
- `types` declara cómo se juega; un juego de un solo archivo suele ser `["solo"]`. Los tamaños de grupo y el juego en línea son exclusivos de los paquetes.
- `controller.support` indica la compatibilidad real con mandos, incluido `off`.
- `authMode` decide el inicio de sesión: `NONE` u `OPTIONAL` permite jugar a cualquiera; si se omite, el valor por defecto es `REQUIRED`. Inclúyelo en cada actualización.
- `primarySurface` indica la orientación para la que está diseñado el juego; las subidas simples aparecen para ordenador, horizontal y vertical.

Los demás campos aceptados son `subtitle`, `emoji`, `color`, `license`, `creation`, `releaseNotes`, `inspirationPrompt`, `makingOf`, `sourceRepository`, `sourceLocale`, `offlineSupported` e `instant`. PlayDrop asigna el número de versión.

## Elige quién puede jugar

- Omite `visibility` para seguir el ajuste de la cuenta del creador en un juego nuevo (Público, salvo que haya elegido No listado o Privado); una actualización conserva el público actual del juego.
- `"private"` guarda una versión que solo puede abrir el creador, para probarla. Publica después esa misma versión con `publish_game_version`; no la vuelvas a subir.
- `"unlisted"` la publica para cualquiera con el enlace, sin que aparezca en listados; `"public"` la publica para que pueda descubrirse.

Haz lo que te pidió tu usuario y nunca hagas un juego más visible de lo que pretendía. Consulta [quién puede jugar](https://www.playdrop.ai/es/create/learn/distribution).

## Lee el recibo

El recibo incluye `gameId`, `slug`, `version`, `status`, `visibility` y `url`, el enlace de esa versión exacta para el propietario. Los juegos públicos y no listados reciben también `shareUrl`, la página permanente del juego; esa es la que debes dar a tu usuario. Para una versión privada, dale `url`. `instant` e `instantReason` indican si el juego es apto como [juego instantáneo](https://www.playdrop.ai/es/create/learn/instant-games).

## Actualiza el juego

Llama a `list_games`, pasa el `gameId` del juego y conserva su `name`. Vuelve a enviar el HTML completo y el minicatálogo completo: cada subida es una instantánea completa, y los campos omitidos no estarán en la nueva versión. El enlace no cambia. Un juego que se subió por primera vez como paquete debe seguir usando la vía de paquete, para no perder sus archivos ni sus funciones.

## Pasa a un paquete más adelante

Añadir partidas guardadas en la nube, una clasificación, imágenes para la ficha o un servidor convierte el juego en un paquete. Es una actualización normal del mismo juego: conserva el `name`, súbelo con `prepare_catalogue_upload` y establece `expectedCurrentVersion` con la versión actual de `list_games`. Lee [empaquetado](https://www.playdrop.ai/es/create/learn/packaging).

## Guías relacionadas

- [Publicar desde tu app de IA](https://www.playdrop.ai/es/create/learn/mcp-publishing): Cómo publican los agentes de IA en PlayDrop mediante MCP: vía simple y paquete, pruebas privadas, publish_game_version, actualizaciones, límites y errores.
- [Empaquetado y .play](https://www.playdrop.ai/es/create/learn/packaging): Organiza una carpeta, ZIP o .play compilado con catalogue.json en la raíz, declara medios de la ficha y servidores, y súbelo con prepare_catalogue_upload.
- [Visibilidad y alcance](https://www.playdrop.ai/es/create/learn/distribution): Quién abre tu juego, el ajuste de cuenta, las versiones y cómo atraen jugadores Boost, el intercambio de partidas, los juegos instantáneos y la búsqueda.
