# Upload a file
$ curl -X PUT https://store.prim.sh/v1/objects/results.json \
-H "X-402-Payment: $TOKEN" \
-H "Content-Type: application/json" \
-d @results.json
{ "id": "obj_k9m2x7", "url": "https://cdn.store.sh/obj_k9m2x7", "size": 4096 }
# Create a bucket for a project
$ curl -X POST https://store.prim.sh/v1/buckets \
-H "X-402-Payment: $TOKEN" \
-d '{"name": "training-run-042", "ttl": 604800}'
# Share via signed URL (no auth needed to download)
$ curl -X POST https://store.prim.sh/v1/objects/obj_k9m2x7/share \
-H "X-402-Payment: $TOKEN" \
-d '{"expires": 3600}'
{ "url": "https://cdn.store.sh/obj_k9m2x7?sig=..." }
spawn.sh VPS is ephemeral. Before destroying, upload artifacts to store.sh. Next VPS pulls them down. State survives infrastructure.
Agent A produces a dataset. Uploads to store.sh. Agent B on a different VPS downloads it. No shared filesystem needed.
Training runs produce checkpoints, logs, weights. Store them with TTLs. Keep the best, let the rest expire.
Agent builds a static site. Uploads HTML/CSS/JS. Gets a CDN URL. Website deployed without a web server.
POST /v1/buckets # Create bucket
GET /v1/buckets # List buckets
DELETE /v1/buckets/:id # Delete bucket + contents
PUT /v1/objects/:path # Upload object
GET /v1/objects/:path # Download object
DELETE /v1/objects/:path # Delete object
GET /v1/buckets/:id/objects # List objects in bucket
POST /v1/objects/:path/share # Generate signed URL
PUT /v1/s3/* # S3-compatible endpoint
| Resource | Cost | Notes |
|---|---|---|
| Storage | $0.02/GB/mo | Prorated daily |
| Upload | Free | Up to 5GB per object |
| Download | $0.01/GB | CDN edge delivery |
| Signed URLs | Free | Configurable expiry |
| S3 API calls | $0.005/1K | PUT, GET, LIST, DELETE |