List models
GET /v1/models returns every available model ID for OpenAI-compatible clients.
This proxy is OpenAI-compatible. Use the base URL below with any API key value unless your tool refuses an
empty key. In that case, use a placeholder such as local-proxy-key.
https://proxy-snd6ew.fly.dev/v1
https://proxy-snd6ew.fly.dev/v1gpt-5-4/chat/completionsGET /v1/models returns every available model ID for OpenAI-compatible clients.
POST /v1/chat/completions accepts OpenAI-style model, messages, and optional stream.
POST /v1/chat/with-image accepts model, an image URL or base64 data URI, optional question, and optional stream.
POST /v1/chat/upload-image accepts multipart file, optional question, and optional model.
GET /health reports service health, warm account count, success rate, and counters.
GET /bank reports headless account pool mode, target, warm accounts, and status reasons.
Use Claude models for the best image analysis results. Images can be sent as public URLs, base64 data URIs, or multipart uploads. Supported formats are PNG, JPEG, WEBP, and GIF.
fetch("https://proxy-snd6ew.fly.dev/v1/chat/with-image", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
model: "claude-opus-4-8",
image: "https://example.com/image.jpg",
question: "What do you see in this image?",
stream: false
})
})
The browser workspace gives any selected model a simple filesystem it can use during chat. The model can request tools by returning JSON. The app runs the tools, sends the results back to the model, and then the model continues its answer.
{
"workspace_tools": [
{ "tool": "list_files" },
{ "tool": "get_file_tree" },
{ "tool": "get_context" },
{ "tool": "list_attachments" },
{ "tool": "search_files", "query": "button", "regex": false },
{ "tool": "read_file", "path": "src/example.js" },
{ "tool": "read_file_chunk", "path": "src/example.js", "start_line": 1, "line_count": 120 },
{ "tool": "save_file", "path": "src/example.js", "content": "console.log('hello');", "project": "optional project name" },
{ "tool": "write_file", "path": "src/example.js", "content": "console.log('hello');", "project": "optional project name" },
{ "tool": "apply_patch", "path": "src/example.js", "find": "old text", "replace": "new text" },
{ "tool": "replace_all", "path": "src/example.js", "find": "old", "replace": "new" },
{ "tool": "append_file", "path": "README.md", "content": "\nMore notes." },
{ "tool": "prepend_file", "path": "README.md", "content": "# Title\n\n" },
{ "tool": "format_file", "path": "src/example.js" },
{ "tool": "delete_file", "path": "old-file.txt" },
{ "tool": "delete_folder", "path": "old-folder" },
{ "tool": "save_attachment", "attachment_id": "id", "path": "uploads/file.txt" },
{ "tool": "describe_image", "attachment_id": "id", "prompt": "Describe this UI screenshot." },
{ "tool": "run_check", "path": "src/example.js" },
{ "tool": "run_python", "path": "src/example.py" },
{ "tool": "preview_file", "path": "docs/example.docx" },
{ "tool": "pin_preview_file", "path": "docs/example.docx" },
{ "tool": "unpin_preview_file", "path": "docs/example.docx" },
{ "tool": "preview_project" },
{ "tool": "undo_workspace_change" },
{ "tool": "web_search", "query": "current docs or facts", "limit": 5 }
]
}
run_python executes .py workspace files in the browser with Pyodide. The first run
downloads the Pyodide runtime, then text workspace files are mounted under /workspace so local
imports can resolve when the imported files exist in the workspace.
.docx files can be imported for AI reading and editing. The workspace stores editable extracted
text with common Word formatting like headings, lists, tables, formulas, bold, italic, underline,
strikethrough, superscript, subscript, and alignment. It previews as a document page and generates a real
Word document when downloaded.
Use pin_preview_file when the AI should keep a previewable workspace file available in the
bottom preview bar for quick right-side preview access.
Exact menu labels change across versions. The setup pattern is the same: choose an OpenAI-compatible, custom, or local provider, then enter the proxy base URL, a placeholder API key, and a model ID.
local-proxy-key as the API key if a key is required.gpt-5-4, claude-sonnet-4-6, or gemini-3-pro.Claude Code needs an Anthropic Messages-compatible gateway. Use this only if your proxy/gateway supports Claude Code traffic:
{
"env": {
"ANTHROPIC_BASE_URL": "https://proxy-snd6ew.fly.dev",
"ANTHROPIC_AUTH_TOKEN": "local-proxy-key",
"ANTHROPIC_MODEL": "claude-sonnet-4-6"
}
}
Add a model entry using an OpenAI-compatible provider:
{
"models": [
{
"title": "Proxy GPT-5.4",
"provider": "openai",
"model": "gpt-5-4",
"apiBase": "https://proxy-snd6ew.fly.dev/v1",
"apiKey": "local-proxy-key"
}
]
}
Use OpenAI-compatible settings. If your shell or version uses different names, map them to the same values:
OPENAI_API_BASE=https://proxy-snd6ew.fly.dev/v1
OPENAI_API_KEY=local-proxy-key
aider --model gpt-5-4
Choose a custom OpenAI-compatible provider and set these fields:
baseURL: https://proxy-snd6ew.fly.dev/v1
apiKey: local-proxy-key
model: gpt-5-4
Any OpenAI-compatible script can call chat completions directly:
fetch("https://proxy-snd6ew.fly.dev/v1/chat/completions", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Authorization": "Bearer local-proxy-key"
},
body: JSON.stringify({
model: "gpt-5-4",
messages: [{ role: "user", content: "Hello" }]
})
})
UnlimitedSurf AI is a Roblox Studio plugin that brings an agentic AI assistant directly into your game editor. It scans a lightweight tree summary of your place first, then lets the AI pull scripts, properties, plans, notes, attachments, and rig details only when needed.
For quick setup, copy this single block into your coding tool or notes.
OpenAI-compatible API setup
Base URL: https://proxy-snd6ew.fly.dev/v1
API key: unused
Default model: gpt-5-4
Chat endpoint: /chat/completions
Models endpoint: /models
Image URL/base64 endpoint: /chat/with-image
Image upload endpoint: /chat/upload-image
Health check: https://proxy-snd6ew.fly.dev/health
Account pool: https://proxy-snd6ew.fly.dev/bank
Available model IDs:
gpt-5-5
gpt-5-4
gpt-5-3
gpt-5-1
gpt-5
gpt-5-mini
gpt-4o
gpt-4o-mini
claude-opus-4-8
claude-opus-4-7
claude-opus-4-6
claude-opus-4-5
claude-opus-4-1
claude-sonnet-4-6
gemini-3-1-pro
gemini-3-pro
gemini-3-flash
gemini-2.5-flash
deepseek-v4-pro
deepseek-v4-flash
deepseek-r1
grok-4
qwen-3-max
llama-3-3-70b-versatile
Text chat body:
{
"model": "claude-opus-4-8",
"messages": [{ "role": "user", "content": "Hello!" }],
"stream": false
}
Image body:
{
"model": "claude-opus-4-8",
"image": "https://example.com/image.jpg",
"question": "What do you see?",
"stream": false
}