Se ejecuta enWrit CloudDesktop
En esta página
Datasets, almacenamiento & archivos
Cada ejecución deja algo detrás: filas en un dataset, una tabla consultable por workflow, y archivos. Esta página es el mapa de dónde aterriza esa salida, cómo consultarla y buscarla, cuánto tiempo se conserva, y los topes que aplica el almacén de archivos.
Todo aquí está acotado a tu organización: un id que no es tuyo responde
404, nunca un 403 que confirmaría que existe.
datasets ▸ uno por fuente
Datasets
Un dataset es la salida acumulada de una fuente — un crawl o un workflow. La lista te dice de
dónde viene cada uno y qué tan fresco está: cada entrada lleva un source_type
(crawl o workflow), su run_count y su marca de tiempo
last_updated.
| Endpoint | Función |
|---|---|
GET /api/v1/datasets | Lista tus datasets con source_type, run_count, last_updated. |
GET /api/v1/datasets/{id}/records | Recorre los registros de un dataset, página a página. |
GET /api/v1/datasets/search | Una consulta sobre todos tus datasets a la vez (semántica abajo). |
DELETE /api/v1/datasets/{id} · …/records | Borra un dataset, o solo sus registros. Requiere el scope datasets:delete. |
tablas ▸ filas por ejecución
Tablas de workflow
Cada workflow expone además su salida como una tabla. Una ejecución que extrajo una
lista aporta una fila por registro — una ejecución que raspó 40 productos añade
40 filas, no un solo bloque. Cada fila lleva su procedencia: run_id,
run_at y status, y las entradas con las que se llamó la ejecución
aparecen como columnas input.<name>, con los valores secretos censurados.
| Endpoint | Función |
|---|---|
GET /api/v1/workflows/{id}/data | La tabla en sí: filtrar, ordenar, paginar. |
GET /api/v1/workflows/{id}/data/facets | Valores distintos por columna, para construir filtros. |
GET /api/v1/workflows/{id}/data/export | La misma tabla como descarga (formatos abajo). |
| Param | Significado |
|---|---|
q | Coincidencia por subcadena en todos los campos de datos y las entradas. |
filter | Pares column:substring, repetibles. |
filters | Cláusulas JSON, para condiciones que filter no puede expresar. |
sort_by / sort_dir | Una columna de datos, una columna input.<name>, o run_at | status | duration_ms. |
limit / offset | limit de 1 a 500, 50 por defecto. |
include_inputs | Añade las columnas input.<name> a la respuesta. |
collection | Pivota un array anidado en una fila por elemento. |
búsqueda ▸ sobre todo
Búsqueda
GET /api/v1/datasets/search ejecuta una consulta sobre todos los datasets que
tienes. La misma llamada se escribe datasets.search en cada SDK:
const hits = await client.datasets.search("invoice 2291", { limit: 20 }); hits = client.datasets.search("invoice 2291", limit=20) hits, err := client.Datasets.Search(ctx, "invoice 2291", nil) let hits = agent.datasets().search("invoice 2291").await?; curl "http://127.0.0.1:8131/v1/datasets/search?q=invoice+2291" \
-H "Authorization: Bearer $WRIT_TOKEN" La semántica es deliberadamente pequeña, y conviene conocerla con exactitud:
- Los términos separados por espacios se combinan con Y; cada término coincide por prefijo, sin distinguir mayúsculas.
- Los operadores de frase y booleanos no están soportados a propósito; una consulta acepta como máximo 8 términos.
- Los candidatos se limitan a las 500 coincidencias más recientes — la respuesta marca
truncatedcuando se alcanza el tope. - Los fragmentos muestran 80 caracteres de contexto alrededor de la coincidencia;
limitva de 1 a 200, 50 por defecto.
export ▸ cuatro formatos
Formatos de exportación
Tablas y datasets se renderizan en cuatro formatos:
| Formato | Por defecto para |
|---|---|
json | Las respuestas de la API. |
csv | Las descargas. |
markdown | — |
html | — |
retención ▸ cuánto tiempo
Retención
| Registro | Se conserva |
|---|---|
| Ejecuciones | 90 días |
| Logs | 90 días |
| Cambios detectados | 90 días |
| Eventos de auditoría | 400 días (~13 meses) |
Estas son las ventanas por defecto.
archivos ▸ el lado de los bytes
Archivos
Los archivos viven en un almacenamiento de objetos por tenant, direccionados por un handle
estable file_…, y se sirven por la Files API en /api/v1/files (subida,
listado, lectura, descarga, borrado). Una descarga es un 302 a un enlace firmado, de
un solo objeto, que expira en 600 s — el host de almacenamiento y sus
credenciales nunca quedan expuestos.
- Tope por archivo: 100 MB — se aplica a cada archivo, sea cual sea su origen.
- Los archivos producidos por
workflow_output,ai_sessionostreamingson efímeros: TTL de 24 h, salvo que los promuevas a la biblioteca. - Los tipos de contenido ejecutables se rechazan por defecto.
- El control de propiedad responde
404para todo lo que no es tuyo — nunca un403que delataría que existe.
cuota ▸ por plan
Cuota de almacenamiento
Cada plan lleva una cuota de almacenamiento de archivos para la organización:
| Plan | Almacenamiento |
|---|---|
| Free | 1 GB |
| Starter | 2 GB |
| Pro | 5 GB |
| Growth | 50 GB |
| Scale | 200 GB |
| Enterprise | 1000 GB |
Una cuota llena responde un 402 de almacenamiento — un error
distinto del 402 de créditos. Liberar espacio (o un plan mayor) arregla el
primero; los fondos arreglan el segundo.
byo ▸ tu propio bucket
Trae tu propio almacenamiento
Por defecto los bytes residen en el almacén gestionado de Writ. Puedes en cambio apuntar Writ a
un bucket compatible con S3 que tú controlas — s3, minio,
r2 o spaces — en Settings → Storage. La clave secreta
es de solo escritura (cifrada en reposo, nunca devuelta), una prueba de conexión del lado del
servidor sondea el bucket antes de activarlo, y cambiar el proveedor por defecto nunca rompe la
descarga de los archivos ya guardados.
Qué sigue
- Workflows: de dónde salen las filas.
- Referencia API: formas de petición y respuesta, códigos de estado.
- Automatizaciones & webhooks: empuja la salida hacia delante en vez de consultarla.
- Facturación & uso: qué significa un
402de créditos y las tres salidas.