← all repositories
CJackHwang/ds2api

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.

ds2api
Velocity · 7d
+34
★ / day
Trend
steady
star history

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.

heatdrop uses Google Analytics to see which pages get read — nothing else. Your call. How we handle data.