Ir al contenido

Object Storage

POST /v1/object-storage/buckets · scope objectstorage:write · reversible · idempotente

Devuelve el mismo recurso que GET /v1/object-storage/buckets/{bucket}. El alta del backend responde la fila cruda del registro —otra forma, con otro formato de fecha— así que se relee antes de contestar: cuesta una llamada y compra que el alta y la lectura devuelvan el mismo objeto.

Ventana de terminal
curl https://api.truo.cloud/v1/object-storage/buckets \
-X POST \
-H "Authorization: Bearer $TRUO_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"respaldos"}'

operationId: objectstorage.buckets.create

DELETE /v1/object-storage/buckets/{bucket} · scope objectstorage:write · destructiva — no tiene vuelta atras · idempotente

Un bucket con objetos no se borra: el request falla y no toca nada. ?purge=true lo borra con todo el contenido, y eso no se puede deshacer — no hay papelera ni versiones. Si querés saber cuántos objetos se van a perder, vaciálo primero con POST .../empty, que devuelve la cuenta.

Ventana de terminal
curl https://api.truo.cloud/v1/object-storage/buckets/respaldos \
-X DELETE \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: objectstorage.buckets.delete

POST /v1/object-storage/buckets/{bucket}/empty · scope objectstorage:write · destructiva — no tiene vuelta atras · asincrona · idempotente

Borra todos los objetos y conserva el bucket con su configuración. No se puede deshacer. Sobre un bucket grande puede tardar: el borrado va objeto por objeto contra el almacenamiento.

Ventana de terminal
curl https://api.truo.cloud/v1/object-storage/buckets/respaldos/empty \
-X POST \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: objectstorage.buckets.empty

GET /v1/object-storage/buckets/{bucket} · scope objectstorage:read

Ventana de terminal
curl https://api.truo.cloud/v1/object-storage/buckets/respaldos \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: objectstorage.buckets.get

GET /v1/object-storage/buckets · scope objectstorage:read

Incluye los buckets creados directamente por el protocolo S3, que no tienen fila de registro: se listan igual —ocultarlos escondería datos que existen— con created_at en null y acceso privado.

Ventana de terminal
curl https://api.truo.cloud/v1/object-storage/buckets \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: objectstorage.buckets.list

GET /v1/object-storage/buckets/{bucket}/metrics · scope objectstorage:read

Almacenamiento, egress y requests del rango pedido. Las series traen un punto por día UTC y vienen vacías mientras no haya datos, en vez de rellenarse con ceros que se confundirían con un día sin tráfico.

Ventana de terminal
curl https://api.truo.cloud/v1/object-storage/buckets/respaldos/metrics \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: objectstorage.buckets.metrics

PATCH /v1/object-storage/buckets/{bucket} · scope objectstorage:write · reversible · idempotente

Publicar el bucket le acuña una URL de lectura anónima (public_url) y la conserva si después se vuelve privado: republicar devuelve la misma URL, no una nueva.

Ventana de terminal
curl https://api.truo.cloud/v1/object-storage/buckets/respaldos \
-X PATCH \
-H "Authorization: Bearer $TRUO_TOKEN" \
-H "Content-Type: application/json" \
-d '{"access":"private"}'

operationId: objectstorage.buckets.update

POST /v1/object-storage/keys · scope objectstorage:keys · reversible · idempotente

Es el único endpoint que devuelve secret_access_key, y lo devuelve una sola vez: no se guarda en claro de nuestro lado y no hay forma de recuperarlo después. Si se pierde, la salida es borrar la llave y emitir otra. Las llaves conviven: emitir una no revoca las anteriores. Acotá cada una a un bucket con scope para que perder una no comprometa el resto.

Ventana de terminal
curl https://api.truo.cloud/v1/object-storage/keys \
-X POST \
-H "Authorization: Bearer $TRUO_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"backups-produccion"}'

operationId: objectstorage.keys.create

DELETE /v1/object-storage/keys/{key_id} · scope objectstorage:keys · destructiva — no tiene vuelta atras · idempotente

La revocación es inmediata. Revocar una llave invalida también las URLs prefirmadas que se firmaron con ella, aunque no hayan expirado: la firma se valida contra la llave, y una llave revocada ya no existe. Es la única forma de cortar una URL prefirmada antes de tiempo.

Ventana de terminal
curl https://api.truo.cloud/v1/object-storage/keys/AKIA7QF2K3M9XZ4NPRTV \
-X DELETE \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: objectstorage.keys.delete

GET /v1/object-storage/keys · scope objectstorage:read

Solo las activas, y nunca el secreto.

Ventana de terminal
curl https://api.truo.cloud/v1/object-storage/keys \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: objectstorage.keys.list

POST /v1/object-storage/buckets/{bucket}/objects/delete · scope objectstorage:write · destructiva — no tiene vuelta atras · idempotente

Borrado en lote por key. Es un POST y no un DELETE porque la lista de keys va en el cuerpo: un DELETE con body no lo mandan igual todos los clientes HTTP. No se puede deshacer. deleted puede ser menor que la cantidad de keys pedidas: las que no existían no cuentan.

Ventana de terminal
curl https://api.truo.cloud/v1/object-storage/buckets/respaldos/objects/delete \
-X POST \
-H "Authorization: Bearer $TRUO_TOKEN" \
-H "Content-Type: application/json" \
-d '{"keys":["fotos/logo.png"]}'

operationId: objectstorage.objects.delete

GET /v1/object-storage/buckets/{bucket}/objects · scope objectstorage:read

Un nivel a la vez, como un explorador de archivos: las entradas con is_folder: true son prefijos, y se navegan pasando su key como prefix. No acepta limit: el backend fija el tamaño de página (hasta 1000 entradas) y recortar acá perdería objetos en silencio al avanzar el cursor.

Ventana de terminal
curl https://api.truo.cloud/v1/object-storage/buckets/respaldos/objects \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: objectstorage.objects.list

POST /v1/object-storage/buckets/{bucket}/presign · scope objectstorage:read · reversible

Devuelve un link que funciona sin credenciales hasta que expira. method: "GET" para descargar (requiere objectstorage:read), method: "PUT" para subir (requiere objectstorage:write). La URL es una credencial de portador: funciona para cualquiera que la tenga y la única forma de cortarla antes de que venza es revocar la llave S3 que la firmó. Pedí el TTL más corto que te sirva. Hereda además el alcance de esa llave: si está acotada a un bucket o es de solo lectura, la URL no puede más que ella.

Ventana de terminal
curl https://api.truo.cloud/v1/object-storage/buckets/respaldos/presign \
-X POST \
-H "Authorization: Bearer $TRUO_TOKEN" \
-H "Content-Type: application/json" \
-d '{"key":"fotos/logo.png"}'

operationId: objectstorage.objects.presign

GET /v1/object-storage · scope objectstorage:read

Uso, endpoint y estado. Es singleton por cuenta: no hay listado ni id que pasar. El almacenamiento y el conteo de objetos salen del último snapshot diario, no de un escaneo en vivo, así que un objeto recién subido puede tardar en reflejarse en los totales.

Ventana de terminal
curl https://api.truo.cloud/v1/object-storage \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: objectstorage.tenant.get