Skip to main content
Every account has a per-user S3-compatible bucket. This example uploads a CSV, runs a Python job that reads it, and downloads the result.

Upload a file

CLI

lyceum storage load data.csv --key inputs/data.csv

REST API

curl -X POST "https://api.lyceum.technology/api/v2/external/storage/upload?key=inputs/data.csv" \
  -H "Authorization: Bearer $LYCEUM_API_KEY" \
  -F "file=@data.csv"

Direct S3 access via temporary credentials

For larger transfers or programmatic clients, fetch short-lived MinIO/S3 credentials and use any standard S3 client:
import boto3, requests

api_key = "lk_..."

creds = requests.post(
    "https://api.lyceum.technology/api/v2/external/storage/credentials",
    headers={"Authorization": f"Bearer {api_key}"},
).json()

s3 = boto3.client(
    "s3",
    endpoint_url=creds["endpoint"],
    aws_access_key_id=creds["access_key"],
    aws_secret_access_key=creds["secret_key"],
    aws_session_token=creds["session_token"],
    region_name=creds["region"],
)

s3.upload_file("data.csv", creds["bucket_name"], "inputs/data.csv")

List, download, delete

lyceum storage ls inputs/ -r
lyceum storage download inputs/data.csv
curl "https://api.lyceum.technology/api/v2/external/storage/list-files?prefix=inputs/" \
  -H "Authorization: Bearer $LYCEUM_API_KEY"

curl "https://api.lyceum.technology/api/v2/external/storage/download/inputs/data.csv" \
  -H "Authorization: Bearer $LYCEUM_API_KEY" \
  -o data.csv

curl -X DELETE "https://api.lyceum.technology/api/v2/external/storage/delete/inputs/data.csv" \
  -H "Authorization: Bearer $LYCEUM_API_KEY"
Delete a whole prefix with DELETE /storage/delete-folder/{folder_prefix}.