Hermes Proxy — API Documentation

Public base: https://macbook-pro-von-loomis.tail2eb3c3.ts.net  ·  This proxy is the bridge the browser uses.

Endpoints

GET/

HTML landing page with status pill and quick links.

GET/docs

This page.

GET/health

Liveness + upstream reachability check. Returns JSON. Useful for Coolify health checks and uptime monitors.

curl http://hermes-server-lg.loomyloo.app/macbook-pro-von-loomis.tail2eb3c3.ts.net/health

GET/test

End-to-end test. Calls /agents/lumina/v1/models through the proxy and reports success/failure for each link in the chain (proxy → Funnel → agent). Returns JSON.

curl https://hermes-server-lg.loomyloo.app/test

GET/agents

List all configured agents, their aliases, models, and full URLs.

curl https://hermes-server-lg.loomyloo.app/agents

GET/agents/<name>/v1/models

List models for a specific agent. <name> is one of:

AliasAgentModel ID returned
luminaLumina Green (Main Agent)hermes-agent
chillyChillychilly
velvetVelvet Greenvelvet-green
velvet-greenVelvet Greenvelvet-green
solunaSoluna Greensoluna
loomyLoomy Bot Greenloomy
curl https://hermes-server-lg.loomyloo.app/agents/lumina/v1/models

POST/agents/<name>/v1/chat/completions

OpenAI-compatible chat completion. Same request/response shape as the upstream agent.

curl -X POST https://hermes-server-lg.loomyloo.app/agents/lumina/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "hermes-agent",
    "messages": [{"role":"user","content":"Reply: HELLO"}],
    "stream": false
  }'

For streaming responses, set "stream": true in the body. The proxy streams the SSE response back unchanged.

POST/agents/<name>/v1/audio/transcriptions

Whisper-style audio-to-text. Send multipart/form-data with a file field.

curl -X POST https://hermes-server-lg.loomyloo.app/agents/lumina/v1/audio/transcriptions \
  -F file=@recording.webm \
  -F model=whisper-1

POST/agents/<name>/v1/embeddings

Text → vector embeddings.

curl -X POST https://hermes-server-lg.loomyloo.app/agents/lumina/v1/embeddings \
  -H "Content-Type: application/json" \
  -d '{"input":"hello world","model":"hermes-agent"}'

ALL/agents/<name>/*

Catch-all. Any path under /agents/<name>/ is forwarded to the upstream agent. New endpoints the agent adds will Just Work.

Errors

StatusMeaning
200Success
401Upstream agent rejected the API key (misconfigured HERMES_API_KEY on this server)
404Unknown agent alias
500HERMES_API_KEY not set on this server
502Upstream unreachable (Funnel flap — retry)

Where this fits

The browser never holds the API key. The chat app (e.g. Loomyloo-AI) calls this proxy; this proxy holds HERMES_API_KEY in its environment variables and forwards to the public Tailscale Funnel URL.