# Fil One: Full Reference for AI Agents and Developers > Fil One is the storage layer for AI agents. S3-compatible object storage built on > Filecoin with no egress penalties, no per-request charges, and flat pricing at > $5.99/TB/month. Free 30-day trial, no credit card required. --- ## What is Fil One? Fil One provides S3-compatible object storage built on Filecoin. Each region is run by an independent storage operator: Europe (France) as `eu-west-1`, the default, and US East (Michigan) as `us-east-1`. More regions are on the way. Storage is designed for 11 nines of durability. Object lock (governance or compliance retention, set at bucket creation) and versioning protect data from being overwritten or deleted. Reads are free: there are no egress penalties and no per-request charges, so agent workloads that read data often pay only for what they store. --- ## AI agent use cases ### 1. RAG document corpus and vector store backing Store the raw or pre-processed documents that back a retrieval-augmented generation pipeline. Fil One handles the high-write ingestion phase (chunking, embedding creation) and the high-read retrieval phase (fetching source documents for context injection) with no per-request charges. ```python import os, boto3 s3 = boto3.client( "s3", endpoint_url="https://s3.eu-west-1.filonecontent.com", aws_access_key_id=os.environ["FIL_ONE_ACCESS_KEY"], aws_secret_access_key=os.environ["FIL_ONE_SECRET_KEY"], region_name="eu-west-1", ) # Ingest a document chunk s3.put_object( Bucket="rag-corpus", Key=f"chunks/{doc_id}/{chunk_index}.txt", Body=chunk_text.encode(), Metadata={"embedding-model": "text-embedding-3-small", "doc-id": doc_id}, ) # Retrieve source for citation obj = s3.get_object(Bucket="rag-corpus", Key=f"chunks/{doc_id}/{chunk_index}.txt") source_text = obj["Body"].read().decode() ``` ### 2. Agent memory and persistent state Persist episodic memory, conversation history, task queues, scratchpads, and structured world-state between agent runs. Fil One is a durable key-value store accessible from any process with S3 credentials, with no database required. ```python import os, json, boto3 class AgentMemory: def __init__(self, bucket: str, agent_id: str): self.s3 = boto3.client( "s3", endpoint_url="https://s3.eu-west-1.filonecontent.com", aws_access_key_id=os.environ["FIL_ONE_ACCESS_KEY"], aws_secret_access_key=os.environ["FIL_ONE_SECRET_KEY"], region_name="eu-west-1", ) self.bucket = bucket self.prefix = f"agents/{agent_id}/memory" def save(self, key: str, data: dict): self.s3.put_object( Bucket=self.bucket, Key=f"{self.prefix}/{key}.json", Body=json.dumps(data).encode(), ) def load(self, key: str) -> dict | None: try: obj = self.s3.get_object( Bucket=self.bucket, Key=f"{self.prefix}/{key}.json" ) return json.loads(obj["Body"].read()) except self.s3.exceptions.NoSuchKey: return None ``` ### 3. Model artifact hosting Store and serve fine-tuned model weights, GGUF/ONNX files, LoRA adapters, tokenizer configs, and quantized checkpoints. Generate pre-signed URLs so agent runtimes or inference servers can pull artifacts directly without exposing credentials. ```python # Upload a fine-tuned model checkpoint s3.upload_file( "model-finetuned-v2.gguf", "model-artifacts", "runs/v2/model.gguf", ) # Generate a pre-signed URL valid for 1 hour (for inference server pull) url = s3.generate_presigned_url( "get_object", Params={"Bucket": "model-artifacts", "Key": "runs/v2/model.gguf"}, ExpiresIn=3600, ) ``` ### 4. Inference trace archival and evaluation datasets Archive prompts, completions, tool call traces, and structured outputs for offline evaluation, fine-tuning data collection, or compliance logging. Write as JSONL and read back in bulk with no egress cost. ```python import json def archive_trace(trace: dict, run_id: str, step: int): key = f"traces/{run_id}/{step:06d}.json" s3.put_object( Bucket="inference-logs", Key=key, Body=json.dumps(trace).encode(), ContentType="application/json", ) def load_traces_for_eval(run_id: str) -> list[dict]: paginator = s3.get_paginator("list_objects_v2") traces = [] for page in paginator.paginate(Bucket="inference-logs", Prefix=f"traces/{run_id}/"): for obj in page.get("Contents", []): body = s3.get_object(Bucket="inference-logs", Key=obj["Key"])["Body"] traces.append(json.loads(body.read())) return traces ``` ### 5. Training and evaluation datasets Store JSONL, Parquet, CSV, or HDF5 datasets and stream them back to training jobs. No egress penalty means iterating over datasets repeatedly costs only the storage price. ```python import os import pyarrow.parquet as pq import pyarrow.fs as pafs # PyArrow native S3 access (pass custom endpoint via S3FileSystem) fs = pafs.S3FileSystem( endpoint_override="s3.eu-west-1.filonecontent.com", access_key=os.environ["FIL_ONE_ACCESS_KEY"], secret_key=os.environ["FIL_ONE_SECRET_KEY"], scheme="https", ) table = pq.read_table("my-datasets/train/sft-v3.parquet", filesystem=fs) ``` --- ## Connection reference | Parameter | Value | |-----------|-------| | Endpoint URL | `https://s3.eu-west-1.filonecontent.com` (default region) | | Region | `eu-west-1` (Europe, France) | | Other regions | `us-east-1` (US East, Michigan) at `https://s3.us-east-1.filonecontent.com` | | Auth | AWS Signature V4 (Access Key ID + Secret Access Key) | | Protocol | HTTPS only; HTTP is rejected | | Addressing | Path-style required; virtual-hosted-style is not supported | Fil One is compatible with any S3-compatible client or SDK: - **Python:** boto3, s3fs, fsspec, PyArrow S3FileSystem - **Node.js/TypeScript:** @aws-sdk/client-s3, @aws-sdk/lib-storage (multipart) - **Go:** aws-sdk-go-v2 - **Rust:** aws-sdk-rust, object_store - **CLI:** AWS CLI v2, rclone, s5cmd - **Terraform:** aws provider (s3 resources with custom endpoint) - **LangChain:** S3FileLoader, S3DirectoryLoader ### Environment variable pattern (recommended) ```bash export FIL_ONE_ENDPOINT=https://s3.eu-west-1.filonecontent.com export FIL_ONE_REGION=eu-west-1 export FIL_ONE_ACCESS_KEY=your_access_key_id export FIL_ONE_SECRET_KEY=your_secret_access_key ``` --- ## Data protection - **Durability:** designed for 11 nines - **Object lock:** governance or compliance retention, enabled when the bucket is created. Useful for keeping inference logs and evaluation datasets unaltered for a fixed period - **Versioning:** keep every version of an object, so an overwritten checkpoint or dataset can be restored - **Encryption:** data is encrypted at rest, with keys held by the regional storage operator. To hold your own keys, encrypt client-side before upload --- ## Pricing | Plan | Price | Notes | |------|-------|-------| | Pay as you go | $5.99/TB/month | No egress penalties (subject to reasonable use), no API request or retrieval fees; $5.99 monthly minimum | | Free trial | $0 | 30 days, 1 TB storage and 2 TB egress included, no credit card required; upgrade to keep downloading after the egress allowance | | Reserved capacity | Custom | 1, 3 or 5-year terms; capacity assurance; deployment SLAs; guided migration and invoicing | No egress penalties means agent workloads that read data frequently (RAG pipelines, evaluation loops, inference servers pulling weights) pay only for storage, not for bandwidth. For comparison, published list rates (checked 2026-09-23): | Provider | Storage | Egress | |----------|---------|--------| | Fil One | $5.99/TB/month | $0 | | Wasabi | $7.99/TB/month | $0 | | Backblaze B2 | $6.95/TB/month | Free up to 3x stored data, then $10/TB | | Cloudflare R2 | $15/TB/month | $0 | | AWS S3 Standard (eu-west-1) | $23/TB/month (first 50 TB, tiered) | $90/TB (first 10 TB, tiered; first 100 GB free) | --- ## S3 API compatibility Fil One implements the core of the S3 REST API. Supported in all regions: - Bucket: ListBuckets - Object: PutObject, GetObject (including range requests and `VersionId`), DeleteObject, HeadObject, ListObjectsV2, ListObjectVersions - Multipart: CreateMultipartUpload, UploadPart, CompleteMultipartUpload, AbortMultipartUpload, ListMultipartUploads - Presigned URLs: presigned GetObject and PutObject Region-dependent: - CreateBucket and DeleteBucket work in `us-east-1`. In `eu-west-1`, create and delete buckets from the dashboard - CopyObject, object retention, and legal hold are confirmed in `us-east-1` The full, current list is in the [S3 compatibility reference](https://docs.fil.one/reference/s3-compatibility). --- ## Pages and documentation - [Homepage](https://www.fil.one): product overview, feature comparison, pricing, FAQ - [Pricing](https://www.fil.one/pricing): flat per-TB rate and a cost calculator comparing Fil One with AWS S3, Wasabi, Backblaze B2, and Cloudflare R2 - [Bring a workload](https://www.fil.one/workloads): AI training and models, data lakes and ETL, backup and archive, media, and security logs - [Host a zone](https://www.fil.one/host): S3 object storage installed in a GPU cloud's own facility, sold under the partner's brand - [Partners](https://www.fil.one/partners): channel, technology, and MSP partner programs - [About](https://www.fil.one/about): the team and company behind Fil One - [Documentation](https://docs.fil.one): quickstart, SDK examples, API reference, security, billing, limits - [Talk to sales](https://www.fil.one/contact-sales): enterprise and high-volume inquiries; also at sales@fil.one - [Privacy Policy](https://www.fil.one/privacy) - [Terms of Service](https://www.fil.one/terms)