Одночасна підтримка двох протоколів: /v1/chat/completions та /v1/messages. Claude Code, Cursor, Cline підключаються напряму. Без npm-залежностей, розгортання у Docker одним кліком.
Незалежно від того, який протокол використовує ваш клієнт — OpenAI чи Anthropic — спрямуйте його на той самий екземпляр Windsurf API.
$ curl http://localhost:3003/v1/chat/completions \ -H "Authorization: Bearer sk-ws-demo" \ -d '{ "model": "gpt-5.2", "messages": [ {"role":"user","content":"hello"} ], "stream": true }' # → Server-Sent Events (формат OpenAI chunk)
$ curl http://localhost:3003/v1/messages \ -H "x-api-key: sk-ws-demo" \ -d '{ "model": "claude-opus-4.6", "messages": [ {"role":"user","content":"hello"} ], "stream": true }' # → SSE (формат Anthropic message_delta)
/v1/messages, Cursor і OpenAI SDK — через /v1/chat/completions, не заважаючи один одному.
Від Claude Opus до GPT-5, від Gemini 3 до DeepSeek R1 — моделі від дев'яти провайдерів через єдиний інтерфейс.
gemini-2.5-flash (gpt-4o-mini Windsurf уже зняв із підтримки). Решта моделей потребують підписки Windsurf Pro./v1/models автоматично виявить нові моделі.src/models.js через scripts/gen-docs-models.js і завжди синхронізований з бекендом.
Запит від клієнта проходить переклад протоколу, вибір акаунта з пулу, симуляцію інструментів та очищення шляхів. Далі Language Server перетворює його на Protobuf і надсилає у хмару Windsurf. Відповідь повертається тим самим маршрутом і передається у потоковому режимі.
Перейдіть на /dashboard — темний веб-інтерфейс із потоковими логами в реальному часі, входом в акаунт одним кліком, чорними та білими списками моделей і виявленням блокувань.
Аптайм, стан пулу акаунтів, успішність за моделями
Пряма реєстрація через email/пароль з автоматичним отриманням токена
Додавання, видалення, вимкнення, перевірка балансу credits
Глобальні та індивідуальні білі/чорні списки моделей для кожного акаунта
Глобальні та індивідуальні HTTP/SOCKS5-проксі для кожного акаунта
Реальний SSE-потік, фільтри за рівнем, підсвічування ключових слів
Метрики та графіки в розрізі моделей/акаунтів
Розпізнавання шаблонів помилок, автоматичне відстеження стану акаунтів
git pull + перезапуск PM2 одним кліком
Список учасників
Два способи на вибір.
$ curl -fsSL https://deb.nodesource.com/setup_20.x | bash - $ apt install -y nodejs
$ git clone https://github.com/MYMDO/WindsurfAPI.git $ cd WindsurfAPI $ bash install-ls.sh
.envPORT=3003 API_KEY= # порожнє = без перевірки DEFAULT_MODEL=claude-4.5-sonnet-thinking LS_BINARY_PATH=/opt/windsurf/language_server_linux_x64 DASHBOARD_PASSWORD= # порожнє = адмінпанель без пароля
$ npm install -g pm2 $ pm2 start src/index.js --name windsurf-api $ pm2 save && pm2 startup
bash update.sh$ git clone https://github.com/MYMDO/WindsurfAPI.git $ cd WindsurfAPI $ cp .env.example .env
$ docker compose up -d --build $ docker compose logs -f
.docker-data/data зберігає акаунти та конфігурацію, .docker-data/opt/windsurf містить бінарник LS. Контейнер автоматично завантажить його при першому запуску.
Змініть BASE_URL, додайте API KEY — і готово.
→ /v1/messages · протокол Anthropic
export ANTHROPIC_BASE_URL="http://YOUR_IP:3003" export ANTHROPIC_API_KEY="sk-ws-your-key" claude
→ /v1/chat/completions · протокол OpenAI
# Settings → Models → Custom OpenAI Base URL: http://YOUR_IP:3003/v1 API Key: sk-ws-your-key Model: claude-opus-4.6
→ провайдер Anthropic або OpenAI на вибір
# Provider: OpenAI Compatible Base URL: http://YOUR_IP:3003/v1 API Key: sk-ws-your-key
→ /v1/chat/completions
from openai import OpenAI client = OpenAI( base_url="http://YOUR_IP:3003/v1", api_key="sk-ws-your-key", )
gemini-2.5-flash (gpt-4o-mini вже знято з підтримки). Усі моделі Claude, GPT-5, Gemini 3, GLM 5.x, Kimi K2.x та інші потребують підписки Windsurf Pro. Адмінпанель автоматично визначає й позначає tier кожного акаунта.language_server_linux_x64) — тому функція чату доступна лише на Linux. Для Windows рекомендуємо WSL2 або повноцінну Linux VM.~/Library/Application Support/Windsurf/.../language_server_macos_arm~/.windsurf/bin/language_server_linux_x64/v1/models автоматично виявить найновіший каталог моделей із хмари./v1/messages та /v1/chat/completions.Кожен PR супроводжується аналізом root-cause; кожен root-cause — це момент, коли хтось о третій ночі лаяв Claude в Issues. Ваги розставлені за кількістю та точністю внесків, а не за кількістю рядків коду.
Чотири влучні удари. Переписав обхід Opus 4.7 injection-guard, вистраждав ітерацію redact-маркерів до U+2026, виправив помилкове пониження Pro/Trial tier у inferTier, скоротив tool preamble з 1600 до 330 символів. Кожен PR — пряме влучання в root-cause.
Основний maintainer усього механізму cascade reuse / fingerprint / trajectory offset. Від виправлення нульового потрапляння в кеш — до усунення повторного виконання старих кроків і вибуху мультимодального контексту Opus 4.7. Три заходи на тій самій технічній лінії, кожен — точно у ціль.
Повний набір Docker-адаптацій без залежностей: Dockerfile / docker-compose.yml / постійне зберігання DATA_DIR / виправлення CRLF pipefail / резервний перезапуск LS. Перевів проєкт зі «звичайного pm2» на «docker compose up».
Реверс-інжиніринг реального ланцюжка автентифікації Auth1, який використовує сайт Windsurf — відновлення 4-крокового процесу, пакетний імпорт і читання з буфера обміну. Закрив прогалину, що залишилася відколи шлях через Firebase перестав бути основним.
Повна інтернаціоналізація Dashboard — 14 комітів замінили кожен жорстко закодований китайський рядок на виклик I18n.t(), плюс check-i18n.js для запобігання прогалинам. Перетворив напівготовий переклад на справжнє двомовне перемикання.
З першим внеском розв'язав deadlock розгортання. Дві причини нескінченного Restart усіх контейнерів після docker-compose (відсутня nginx zone + забутий import у config.js), хірургічно закриті в +3 / -2 рядках.
Перший зовнішній учасник. MODEL_TIER_ACCESS.pro був знімком (snapshot), зафіксованим під час завантаження модуля — динамічно злиті з хмари claude-opus-4-7-* ніколи не потрапляли в Pro-список. Виправив одним рядком getter. Відтворення у три curl-запити написане на рівні підручника.
Першопроходець ранніх рев'ю коду — один PR охопив 15 багів безпеки, конкурентності та керування ресурсами: екранування XSS, пул grpc HTTP/2, ліміт фрейму 16 МБ, varint BigInt. Хоча PR не було злито напряму, напрямки виявилися правильними і пізніше реалізовані окремо.
Хочете потрапити до цього списку? Створіть тикет в Issues або одразу беріться за справу в Pull requests — раді кожному внеску.