> ## Documentation Index
> Fetch the complete documentation index at: https://docs.squarecloud.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Compartir

> Crea, lista y revoca enlaces compartidos con blob.shares, y elige entre un enlace compartido y un enlace de downloadUrl().

Un **enlace compartido** (share) es un enlace a un objeto que puede **caducar**, **revocarse**, limitar el **número de descargas** y, en Pro y Enterprise, pedir una **contraseña**. Consulta [Enlaces y compartir](/es/blob-reference/links-and-sharing) para ver cómo se comportan los enlaces.

## ¿Enlace compartido o `downloadUrl()`?

|                     | [`downloadUrl()`](/es/sdks/blob/objects#enlaces-de-descarga) | `shares.create()`                                                       |
| ------------------- | ------------------------------------------------------------ | ----------------------------------------------------------------------- |
| Objeto público      | URL permanente del CDN (`expires_at: null`)                  | Redirige a la URL pública permanente (consulta la advertencia de abajo) |
| Objeto privado      | Enlace temporal, hasta 24 horas                              | Enlace compartido, hasta 30 días                                        |
| Revocable           | **No**                                                       | Sí, con `shares.revoke()`                                               |
| Límite de descargas | No                                                           | Sí, `max_downloads`                                                     |
| Contraseña          | No                                                           | Sí, Pro y Enterprise                                                    |

Usa `downloadUrl()` para enlaces de corta duración que repartes tú mismo, y un enlace compartido cuando necesites retirar el enlace o controlar quién lo descarga.

## Crear un enlace compartido

```typescript theme={"system"}
const share = await blob.shares.create(id, {
    expires_in: 86400,     // seconds, 60 to 2592000 (default 86400)
    max_downloads: 10,     // 1 to 10000
    password: "secret123", // 8 to 128 characters, Pro and Enterprise
});

console.log(share.url);
```

| Opción          | Tipo     | Descripción                                                                           |
| --------------- | -------- | ------------------------------------------------------------------------------------- |
| `expires_in`    | `number` | Duración del enlace en segundos, de 60 a 2592000 (30 días). Por defecto 86400.        |
| `max_downloads` | `number` | De 1 a 10000.                                                                         |
| `password`      | `string` | De 8 a 128 caracteres. Pro y Enterprise; los demás planes reciben `UPGRADE_REQUIRED`. |

El resultado tiene `id`, `url`, `expires_at`, `max_downloads`, `password` (si hay una definida), `object` y `object_is_public`.

<Warning>
  Si `object_is_public` es `true`, el enlace compartido redirige a la **URL pública permanente** del objeto: la contraseña, el límite de descargas y la expiración **no protegen nada**, porque el archivo sigue accesible en esa URL. Haz primero el objeto privado y después compártelo:

  ```typescript theme={"system"}
  const [result] = await blob.update(id, { private: true });
  if (result.ok) {
      id = result.id; // the id changes
      const share = await blob.shares.create(id, { max_downloads: 1 });
  }
  ```
</Warning>

## Listar enlaces compartidos

```typescript theme={"system"}
const shares = await blob.shares.list();
```

Devuelve un array de enlaces compartidos, cada uno con `id`, `url`, `object`, `expires_at`, `remaining_downloads`, `password` y `created_at`.

## Revocar un enlace compartido

```typescript theme={"system"}
await blob.shares.revoke(share.id);
```

El enlace deja de funcionar. `revoke()` no se resuelve con ningún valor, y revocar un enlace compartido que no existe falla con `SHARE_NOT_FOUND`.

<Tip>
  Eliminar, mover o renombrar el objeto, o cambiar su visibilidad, también rompe sus enlaces compartidos: apuntan al id antiguo. Crea nuevos enlaces compartidos para el nuevo id.
</Tip>

<Note>
  `shares.create()` y `shares.revoke()` tienen un **único intento**. Solo `shares.list()`, que es una lectura, se [reintenta](/es/sdks/blob/errors#política-de-reintentos).
</Note>

Referencia de la API: [Create Share](/es/blob-reference/endpoint/shares-create), [List Shares](/es/blob-reference/endpoint/shares-list), [Delete Share](/es/blob-reference/endpoint/shares-delete).
