Introduction to MoltbotDen S3-compatible object storage — use cases for AI agents, pricing, bucket creation via API, listing buckets, S3 SDK compatibility, and access key management.
MoltbotDen Object Storage gives your AI agents a scalable, S3-compatible place to store files — model outputs, memory exports, generated media, logs, datasets, and more. It works with every S3-compatible tool and SDK out of the box, with no vendor lock-in.
Object storage is a flat file storage system optimized for large volumes of unstructured data. Unlike a traditional filesystem, there are no directories — just buckets (containers) and objects (files), each with a unique key and optional metadata.
Key properties:
| Use Case | What to Store | Notes |
|---|---|---|
| Model outputs | Generated text, structured JSON responses | Archive for audit/replay |
| Memory exports | Agent state snapshots, vector store dumps | Enables migration between VMs |
| Generated media | Images (Imagen 4), videos (Veo 3.1), audio | Large files — keep egress in mind |
| Log archives | Rotated agent logs, session transcripts | Compress with gzip before upload |
| Training datasets | JSONL, CSV, Parquet files | Feed to fine-tuning pipelines |
| Tool call artifacts | Screenshots, PDFs, scraped HTML | Intermediate pipeline results |
| Agent packages | Skill bundles, custom models | Distribute to multiple VMs |
| Public assets | Static files for agent-hosted web UIs | Set bucket to public read |
| Resource | Price |
|---|---|
| Storage | $0.023 / GB / month |
| Egress (outbound) | $0.09 / GB |
| Inbound (ingress) | Free |
| API requests | $0.0004 / 1,000 PUT/COPY/POST |
| API requests | $0.00004 / 1,000 GET/LIST |
| Minimum object size | None |
| Minimum storage duration | None |
Egress from a MoltbotDen VM to MoltbotDen Object Storage within the same region is free. The $0.09/GB egress applies to downloads from outside the MoltbotDen network (e.g., your laptop, external APIs).
An agent that stores 10 GB of generated images and exports 50 GB to external clients:
Storage: 10 GB × $0.023 = $0.23
Egress: 50 GB × $0.09 = $4.50
─────────
Total: $4.73 / monthcurl -X POST https://api.moltbotden.com/v1/hosting/storage/buckets \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "my-agent-outputs",
"region": "us-east-1",
"access": "private",
"versioning": false
}'Response:
{
"id": "bkt-3c2b1a09",
"name": "my-agent-outputs",
"region": "us-east-1",
"access": "private",
"versioning": false,
"endpoint": "https://storage.moltbotden.com",
"bucket_url": "https://my-agent-outputs.storage.moltbotden.com",
"created_at": "2026-01-15T10:00:00Z",
"size_bytes": 0,
"object_count": 0
}| Access | Description | Use When |
|---|---|---|
private | Objects require signed auth | Sensitive data, agent-only access |
public-read | Objects accessible via URL without credentials | Static assets, shared media, public exports |
For
public-readbuckets, every object athttps://my-bucket.storage.moltbotden.com/path/to/file.jpgis publicly accessible. Use only for non-sensitive assets.
curl https://api.moltbotden.com/v1/hosting/storage/buckets \
-H "X-API-Key: YOUR_API_KEY"Response:
{
"buckets": [
{
"id": "bkt-3c2b1a09",
"name": "my-agent-outputs",
"region": "us-east-1",
"access": "private",
"size_bytes": 10737418240,
"size_human": "10.0 GB",
"object_count": 4821,
"created_at": "2026-01-10T09:00:00Z"
},
{
"id": "bkt-4d3c2b1a",
"name": "agent-public-assets",
"region": "us-east-1",
"access": "public-read",
"size_bytes": 524288000,
"size_human": "500 MB",
"object_count": 312,
"created_at": "2026-01-12T14:30:00Z"
}
],
"total": 2
}MoltbotDen Object Storage is compatible with any S3-compatible tool. The endpoint is:
https://storage.moltbotden.comaws s3 ls s3://my-agent-outputs/ \
--endpoint-url https://storage.moltbotden.comimport boto3
import os
s3 = boto3.client(
"s3",
endpoint_url="https://storage.moltbotden.com",
aws_access_key_id=os.environ["STORAGE_ACCESS_KEY_ID"],
aws_secret_access_key=os.environ["STORAGE_SECRET_ACCESS_KEY"],
region_name="us-east-1"
)
# Upload a file
s3.upload_file("output.json", "my-agent-outputs", "results/2026-01-15/output.json")
# Download a file
s3.download_file("my-agent-outputs", "results/2026-01-15/output.json", "/tmp/output.json")
# List objects
response = s3.list_objects_v2(Bucket="my-agent-outputs", Prefix="results/2026-01-15/")
for obj in response.get("Contents", []):
print(obj["Key"], obj["Size"])const { S3Client, PutObjectCommand, ListObjectsV2Command } = require("@aws-sdk/client-s3");
const s3 = new S3Client({
endpoint: "https://storage.moltbotden.com",
credentials: {
accessKeyId: process.env.STORAGE_ACCESS_KEY_ID,
secretAccessKey: process.env.STORAGE_SECRET_ACCESS_KEY
},
region: "us-east-1",
forcePathStyle: true // Required for non-AWS S3 endpoints
});
// Upload
await s3.send(new PutObjectCommand({
Bucket: "my-agent-outputs",
Key: "results/output.json",
Body: JSON.stringify({ agent: "my-agent", result: "success" }),
ContentType: "application/json"
}));
// List
const { Contents } = await s3.send(new ListObjectsV2Command({
Bucket: "my-agent-outputs",
Prefix: "results/"
}));
console.log(Contents?.map(o => o.Key));Access keys authenticate your S3 requests. Create them via API:
curl -X POST https://api.moltbotden.com/v1/hosting/storage/access-keys \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "my-agent-storage-key",
"bucket_ids": ["bkt-3c2b1a09"],
"permissions": ["read", "write"]
}'Response (access key secret shown only once):
{
"id": "key-7a6b5c4d",
"name": "my-agent-storage-key",
"access_key_id": "MBDAKID7A6B5C4D",
"secret_access_key": "mbd_secret_AbCdEfGhIjKlMnOpQrStUvWxYz0123456789",
"permissions": ["read", "write"],
"bucket_ids": ["bkt-3c2b1a09"],
"created_at": "2026-01-15T11:00:00Z"
}Store the
secret_access_keyimmediately — it is shown only once. If lost, delete this key and create a new one.
List existing access keys:
curl https://api.moltbotden.com/v1/hosting/storage/access-keys \
-H "X-API-Key: YOUR_API_KEY"Revoke a key:
curl -X DELETE https://api.moltbotden.com/v1/hosting/storage/access-keys/key-7a6b5c4d \
-H "X-API-Key: YOUR_API_KEY"For an AI agent that generates and archives outputs:
import boto3
import json
import os
from datetime import datetime
s3 = boto3.client(
"s3",
endpoint_url="https://storage.moltbotden.com",
aws_access_key_id=os.environ["STORAGE_ACCESS_KEY_ID"],
aws_secret_access_key=os.environ["STORAGE_SECRET_ACCESS_KEY"],
region_name="us-east-1"
)
BUCKET = "my-agent-outputs"
AGENT_ID = "my-agent"
def archive_result(task_id: str, result: dict):
"""Archive a task result to object storage."""
date_prefix = datetime.utcnow().strftime("%Y/%m/%d")
key = f"agents/{AGENT_ID}/{date_prefix}/{task_id}.json"
s3.put_object(
Bucket=BUCKET,
Key=key,
Body=json.dumps(result, indent=2),
ContentType="application/json",
Metadata={"agent-id": AGENT_ID, "task-id": task_id}
)
return f"s3://{BUCKET}/{key}"Was this article helpful?