DeepSeek's web chat, dressed up as OpenAI, Claude, and Gemini
A Go middleware that reverse-engineers DeepSeek's web interface into standard LLM APIs so your existing clients don't know the difference.
What it does
DS2API sits between your OpenAI/Claude/Gemini SDK and DeepSeek’s web chat, translating requests, handling authentication, and streaming responses back in the expected format. The core is pure Go; a thin Node runtime on Vercel handles one streaming path. It also packs a React admin UI for managing accounts, proxies, and runtime config.
The interesting bit
The project doesn’t just proxy—it reimplements DeepSeek’s client-side proof-of-work (PoW) in Go, manages account pools with per-account concurrency limits, and normalizes tool-calling output across three different API philosophies. The README even documents which Claude Code base-URL quirks will trip you up.
Key highlights
- OpenAI (
/v1/chat/completions,/v1/responses, embeddings, files), Claude (/anthropic/v1/messages), and Gemini (/v1beta/models/*) surfaces - Multi-account rotation with automatic token refresh and queue-based concurrency control
- Pure Go DeepSeekHashV1 PoW implementation (millisecond-level, per the docs)
- Tool-call output sanitized through a “Tool Sieve” to prevent leakage as plain text
- Deploy via Docker, Vercel serverless, Zeabur, or raw binary
Caveats
- Explicitly labeled “for learning, research, and personal experimentation only”; authors disclaim liability for account bans or ToS violations
- Visual model support exists but lacks a search-enabled variant upstream
- Some older tool-call formats (
<tools>,<function_call>, raw JSON) are silently treated as text and won’t execute
Verdict
Worth a look if you need to wire DeepSeek into an existing toolchain that expects standard API shapes. Skip it if you want a blessed, supported, or commercially safe integration.