---
title: "Subir un asset suelto (máx 25MB)"
method: POST
path: "/workspaces/{workspaceId}/assets"
tags: ["Files"]
---

# Subir un asset suelto (máx 25MB)

`POST /workspaces/{workspaceId}/assets`

## Request

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

Sube un archivo suelto a la mediateca, con tope de **25 MB**. A diferencia de `/items/{itemId}/files`, no queda adjunto a ningún item.

## Path parameters

- `workspaceId` number, required

## 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` WorkspaceAssetWithUrlDto, required
    - `created_at` string, required
    - `created_by` number, nullable, required: Usuario que lo subió. `null` si lo generó una automatización.
    - `folder_id` string, nullable, required: Carpeta que lo contiene. `null` = está en la raíz de la Mediateca.
    - `id` string, required: UUID del asset. También es el nombre del archivo en Storage.
    - `metadata` object, required: Datos extra del productor del asset. Forma libre.
    - `mime_type` string, nullable, required
    - `name` string, required: Nombre visible, editable. No condiciona la ruta en Storage.
    - `size_bytes` number, nullable, required: Peso del archivo en bytes.
    - `source` 'upload' | 'item_upload' | 'generated' | 'flow_run', required: De dónde salió: `upload` lo subió una persona, `item_upload` llegó como adjunto de un item, `generated` lo produjo un modelo y `flow_run` es la salida pesada de un nodo de flujo.
    - `storage_path` string, required: **La fuente de verdad del archivo**: su ruta dentro del bucket. `url` se deriva de esto en cada respuesta, así que guarda el path, no la URL.
    - `updated_at` string, required
    - `url` string, required: URL del **archivo original**, a tamaño completo. Los assets de la Mediateca se sirven desde un prefijo público, así que no caduca. Úsala tal cual solo para el visor a pantalla completa y para la descarga. Para pintarla en chico —una miniatura de grilla, un avatar, una fila de lista— pide la versión ya dimensionada por Storage (`/render/image/public/…?width=…&height=…`) con la medida real de la caja: un JPEG de 870 KB baja a ~15 KB a 400×400. Y si el asset es un video, no lo precargues en una grilla: no hay transformación que lo achique.
    - `workspace_id` number, required

## 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/5d9ca294295c?raw)
