PaperPod
Isolated, agent-native sandboxes for code execution, live preview URLs, browser automation, 50+ tools (ffmpeg, sqlite, pandoc, imagemagick), LLM inference, and persistent memory — all via CLI or HTTP, no SDK or API keys required. Billed per second of compute usage and topup via stripe or x402.
Quick Start
curl -X POST https://paperpod.dev/login -d '{"email":"you@email.com"}' # Verify and get token
npm install -g @paperpod/cli
ppod login <token> && ppod help
Authentication
Step 1: Get a token
curl -X POST https://paperpod.dev/login -d '{"email":"you@email.com"}'
# Check email → click magic link → copy token (pp_sess_...)
Step 2: Use the token (pick one method)
| Method |
How |
Best for |
| CLI login |
ppod login pp_sess_... |
Everyday, Interactive use |
| Env var |
export PAPERPOD_TOKEN=pp_sess_... |
Scripts, CI/CD |
| Per-request |
-H "Authorization: Bearer pp_sess_..." |
HTTP one-shots |
Tokens expire in 15 days. On EXPIRED_TOKEN error, re-authenticate via POST /login.
CLI (Recommended)
The CLI is the easiest way to use PaperPod. It handles streaming, sessions, and reconnection automatically.
CLI Commands
| Category |
Command |
Description |
| Sandbox |
ppod exec <cmd> |
Run shell command |
|
ppod write <path> [file] |
Write file (stdin if no file) |
|
ppod read <path> |
Read file |
|
ppod ls <path> |
List directory |
| Processes |
ppod start <cmd> |
Start background process |
|
ppod ps |
List processes |
|
ppod kill <id> |
Stop process |
| Ports |
ppod expose <port> |
Get public URL (-q for URL only) |
| Browser |
ppod browser:screenshot <url> |
Capture webpage |
|
ppod browser:pdf <url> |
Generate PDF |
|
ppod browser:scrape <url> [sel] |
Scrape elements (default: body) |
|
ppod browser:markdown <url> |
Extract markdown |
|
ppod browser:content <url> |
Get rendered HTML |
|
ppod browser:test <url> '<json>' |
Run Playwright tests |
|
ppod browser:acquire |
Acquire reusable session |
|
ppod browser:connect <id> |
Connect to existing session |
|
ppod browser:sessions |
List active sessions |
|
ppod browser:limits |
Check browser limits |
| AI |
ppod ai <prompt> |
Text generation |
|
ppod ai:embed <text> |
Generate embeddings |
|
ppod ai:image <prompt> |
Generate image |
|
ppod ai:transcribe <audio> |
Transcribe audio |
|
ppod ai:models |
List available AI models |
| Code |
ppod interpret <code> |
Rich output (charts) |
| Memory |
ppod mem:write <path> |
Persist data |
|
ppod mem:read <path> |
Read persisted data |
|
ppod mem:ls |
List memory files |
|
ppod mem:rm <path> |
Delete from memory |
|
ppod mem:usage |
Check quota |
| Account |
ppod balance |
Check credits |
|
ppod status |
Connection info |
|
ppod help |
Show all commands |
|
ppod <cmd> --help |
Help for specific command |
Update CLI: npm update -g @paperpod/cli
CLI Examples
# Execute code
ppod exec "python -c 'print(2+2)'"
ppod exec "npm init -y && npm install express"
# Start server + expose (--bind 0.0.0.0 required for public access)
ppod start "python -m http.server 8080 --bind 0.0.0.0"
ppod expose 8080 # → https://8080-{sandbox-id}-p8080_v1.paperpod.work (stable URL)
# Browser with tracing
ppod browser:screenshot https://example.com --trace debug.zip
# Persistent storage (survives sandbox reset)
echo '{"step":3}' | ppod mem:write state.json
# Built-in tools (50+ available: ffmpeg, sqlite3, pandoc, imagemagick, git, jq, ripgrep...)
ppod exec "ffmpeg -i input.mp4 -vf scale=640:480 output.mp4" # Video processing
ppod exec "sqlite3 data.db 'SELECT * FROM users'" # Database queries
ppod exec "convert image.png -resize 50% thumbnail.png" # Image manipulation
HTTP Endpoints
Use HTTP for one-shot tasks or when CLI isn't available. Run curl https://paperpod.dev/docs or visit https://paperpod.dev/docs for full API reference.
Quick Reference
| Endpoint |
Purpose |
POST /execute |
Run code (python, javascript, shell) |
POST /execute/stream |
Stream output (SSE) |
POST /files/write |
Write file |
POST /files/read |
Read file |
POST /files/list |
List directory |
POST /process/start |
Start background process |
POST /process/list |
List processes |
POST /expose |
Get preview URL for port |
POST /memory/write |
Persist data |
POST /memory/read |
Read persisted data |
POST /browser/screenshot |
Capture screenshot |
POST /browser/pdf |
Generate PDF |
POST /browser/markdown |
Extract markdown |
POST /ai/generate |
Text generation |
POST /ai/embed |
Embeddings |
POST /ai/image |
Image generation |
GET /ai/models |
List models |
HTTP Example
# Execute shell command
curl -X POST https://paperpod.dev/execute \
-H "Authorization: Bearer $PAPERPOD_TOKEN" \
-d '{"code": "ls -la", "language": "shell"}'
Capabilities
| Category |
What you can do |
| Code Execution |
Python, JavaScript, shell commands |
| Processes |
Background servers, long-running jobs |
| Preview URLs |
Expose ports → https://8080-{sandbox-id}-p8080_v1.paperpod.work |
| Agent Memory |
10MB persistent storage (R2) |
| Browser |
Screenshots, PDFs, scraping (Playwright) |
| AI Models |
Text, embeddings, images, transcription |
| Files |
Read/write, git, bulk operations |
Pre-installed Tools (50+)
| Category |
Tools |
| Runtimes |
python, node, npm, bun, pip |
| Version Control |
git, gh (GitHub CLI) |
| HTTP & Networking |
curl, httpie, jq, dig, ss |
| Search & Text |
ripgrep (rg), find, sed, awk, tree |
| Media & Docs |
ffmpeg, imagemagick, pandoc |
| Build & Data |
make, sqlite3, tar, gzip, zip, unzip |
Key Notes
- Sandboxes are isolated — each user gets their own container with a full Linux environment; you can only affect your own ephemeral sandbox
- Sandbox is ephemeral — use Agent Memory (
/memory/*) for persistence
- Working directory is
/workspace — relative paths like file.txt resolve to /workspace/file.txt
- Servers must bind to
0.0.0.0 for public access
- Ports 3000-3010 are reserved — use 8080, 5000, 4000, etc.
- Browser sessions — Each command creates an ephemeral session. Use
browser:acquire for multi-command session reuse, --trace to capture Playwright traces
Billing
$0.0001/sec compute + browser, $0.02/1K neurons AI. New accounts get $5 free (~14 hours), no credit card required.
Discovery
ppod help — CLI command reference
GET https://paperpod.dev/ — API schema (JSON)
GET https://paperpod.dev/docs — Full documentation
Advanced: WebSocket (not recommended for normal workflows). For programmatic integrations or custom apps, connect via WebSocket. GET https://paperpod.dev/docs to learn more.
1---2name: paperpod3description: Isolated agent runtime for code execution, live preview URLs, browser automation, 50+ tools (ffmpeg, sqlite, pandoc, imagemagick), LLM inference, and persistent memory — all via CLI or HTTP, no SDK or API keys required.4---56# PaperPod78Isolated, agent-native sandboxes for code execution, live preview URLs, browser automation, 50+ tools (ffmpeg, sqlite, pandoc, imagemagick), LLM inference, and persistent memory — all via CLI or HTTP, no SDK or API keys required. Billed per second of compute usage and topup via stripe or x402.910## Quick Start1112```bash13curl -X POST https://paperpod.dev/login -d '{"email":"you@email.com"}' # Verify and get token14npm install -g @paperpod/cli15ppod login <token> && ppod help16```1718## Authentication1920**Step 1: Get a token**21```bash22curl -X POST https://paperpod.dev/login -d '{"email":"you@email.com"}'23# Check email → click magic link → copy token (pp_sess_...)24```2526**Step 2: Use the token** (pick one method)2728| Method | How | Best for |29|--------|-----|----------|30| **CLI login** | `ppod login pp_sess_...` | Everyday, Interactive use |31| **Env var** | `export PAPERPOD_TOKEN=pp_sess_...` | Scripts, CI/CD |32| **Per-request** | `-H "Authorization: Bearer pp_sess_..."` | HTTP one-shots |3334Tokens expire in **15 days**. On `EXPIRED_TOKEN` error, re-authenticate via `POST /login`.3536---3738## CLI (Recommended)3940The CLI is the easiest way to use PaperPod. It handles streaming, sessions, and reconnection automatically.4142### CLI Commands4344| Category | Command | Description |45|----------|---------|-------------|46| **Sandbox** | `ppod exec <cmd>` | Run shell command |47| | `ppod write <path> [file]` | Write file (stdin if no file) |48| | `ppod read <path>` | Read file |49| | `ppod ls <path>` | List directory |50| **Processes** | `ppod start <cmd>` | Start background process |51| | `ppod ps` | List processes |52| | `ppod kill <id>` | Stop process |53| **Ports** | `ppod expose <port>` | Get public URL (-q for URL only) |54| **Browser** | `ppod browser:screenshot <url>` | Capture webpage |55| | `ppod browser:pdf <url>` | Generate PDF |56| | `ppod browser:scrape <url> [sel]` | Scrape elements (default: body) |57| | `ppod browser:markdown <url>` | Extract markdown |58| | `ppod browser:content <url>` | Get rendered HTML |59| | `ppod browser:test <url> '<json>'` | Run Playwright tests |60| | `ppod browser:acquire` | Acquire reusable session |61| | `ppod browser:connect <id>` | Connect to existing session |62| | `ppod browser:sessions` | List active sessions |63| | `ppod browser:limits` | Check browser limits |64| **AI** | `ppod ai <prompt>` | Text generation |65| | `ppod ai:embed <text>` | Generate embeddings |66| | `ppod ai:image <prompt>` | Generate image |67| | `ppod ai:transcribe <audio>` | Transcribe audio |68| | `ppod ai:models` | List available AI models |69| **Code** | `ppod interpret <code>` | Rich output (charts) |70| **Memory** | `ppod mem:write <path>` | Persist data |71| | `ppod mem:read <path>` | Read persisted data |72| | `ppod mem:ls` | List memory files |73| | `ppod mem:rm <path>` | Delete from memory |74| | `ppod mem:usage` | Check quota |75| **Account** | `ppod balance` | Check credits |76| | `ppod status` | Connection info |77| | `ppod help` | Show all commands |78| | `ppod <cmd> --help` | Help for specific command |7980**Update CLI:** `npm update -g @paperpod/cli`8182### CLI Examples8384```bash85# Execute code86ppod exec "python -c 'print(2+2)'"87ppod exec "npm init -y && npm install express"88# Start server + expose (--bind 0.0.0.0 required for public access)89ppod start "python -m http.server 8080 --bind 0.0.0.0"90ppod expose 8080 # → https://8080-{sandbox-id}-p8080_v1.paperpod.work (stable URL)91# Browser with tracing92ppod browser:screenshot https://example.com --trace debug.zip93# Persistent storage (survives sandbox reset)94echo '{"step":3}' | ppod mem:write state.json95# Built-in tools (50+ available: ffmpeg, sqlite3, pandoc, imagemagick, git, jq, ripgrep...)96ppod exec "ffmpeg -i input.mp4 -vf scale=640:480 output.mp4" # Video processing97ppod exec "sqlite3 data.db 'SELECT * FROM users'" # Database queries98ppod exec "convert image.png -resize 50% thumbnail.png" # Image manipulation99```100---101102## HTTP Endpoints103104Use HTTP for one-shot tasks or when CLI isn't available. Run `curl https://paperpod.dev/docs` or visit https://paperpod.dev/docs for full API reference.105106### Quick Reference107108| Endpoint | Purpose |109|----------|---------|110| `POST /execute` | Run code (python, javascript, shell) |111| `POST /execute/stream` | Stream output (SSE) |112| `POST /files/write` | Write file |113| `POST /files/read` | Read file |114| `POST /files/list` | List directory |115| `POST /process/start` | Start background process |116| `POST /process/list` | List processes |117| `POST /expose` | Get preview URL for port |118| `POST /memory/write` | Persist data |119| `POST /memory/read` | Read persisted data |120| `POST /browser/screenshot` | Capture screenshot |121| `POST /browser/pdf` | Generate PDF |122| `POST /browser/markdown` | Extract markdown |123| `POST /ai/generate` | Text generation |124| `POST /ai/embed` | Embeddings |125| `POST /ai/image` | Image generation |126| `GET /ai/models` | List models |127128### HTTP Example129130```bash131# Execute shell command132curl -X POST https://paperpod.dev/execute \133 -H "Authorization: Bearer $PAPERPOD_TOKEN" \134 -d '{"code": "ls -la", "language": "shell"}'135```136---137138## Capabilities139140| Category | What you can do |141|----------|-----------------|142| **Code Execution** | Python, JavaScript, shell commands |143| **Processes** | Background servers, long-running jobs |144| **Preview URLs** | Expose ports → `https://8080-{sandbox-id}-p8080_v1.paperpod.work` |145| **Agent Memory** | 10MB persistent storage (R2) |146| **Browser** | Screenshots, PDFs, scraping (Playwright) |147| **AI Models** | Text, embeddings, images, transcription |148| **Files** | Read/write, git, bulk operations |149150### Pre-installed Tools (50+)151152| Category | Tools |153|----------|-------|154| **Runtimes** | python, node, npm, bun, pip |155| **Version Control** | git, gh (GitHub CLI) |156| **HTTP & Networking** | curl, httpie, jq, dig, ss |157| **Search & Text** | ripgrep (rg), find, sed, awk, tree |158| **Media & Docs** | ffmpeg, imagemagick, pandoc |159| **Build & Data** | make, sqlite3, tar, gzip, zip, unzip |160161## Key Notes162163- **Sandboxes are isolated** — each user gets their own container with a full Linux environment; you can only affect your own ephemeral sandbox164- **Sandbox is ephemeral** — use Agent Memory (`/memory/*`) for persistence165- **Working directory is `/workspace`** — relative paths like `file.txt` resolve to `/workspace/file.txt`166- **Servers must bind to `0.0.0.0`** for public access167- **Ports 3000-3010 are reserved** — use 8080, 5000, 4000, etc.168- **Browser sessions** — Each command creates an ephemeral session. Use `browser:acquire` for multi-command session reuse, `--trace` to capture Playwright traces169170## Billing171172**$0.0001/sec** compute + browser, **$0.02/1K neurons** AI. New accounts get **$5 free** (~14 hours), no credit card required.173174## Discovery175176- `ppod help` — CLI command reference177- `GET https://paperpod.dev/` — API schema (JSON)178- `GET https://paperpod.dev/docs` — Full documentation179180---181182## Advanced: WebSocket (not recommended for normal workflows). For programmatic integrations or custom apps, connect via WebSocket. `GET https://paperpod.dev/docs` to learn more. 183