Hướng dẫn kết nối
Cấu hình Cursor, Antigravity, VS Code, Windsurf, Cline và các công cụ CLI để trỏ về API của bạn.
- Base URL —
https://thuehay.com/v1 - API Key — key dạng
sk-duan-..., lấy tại /user/api-keys - Model — tên model chính xác, xem tại /docs hoặc gọi
GET /v1/models
Cursor
Cursor hỗ trợ endpoint OpenAI-compatible qua cơ chế BYOK.
-
Mở cài đặt: vào
Cursor Settings→Models→ cuộn xuống mụcAPI Keys.
Phím tắt mở nhanh:Ctrl+Shift+0(Windows/Linux) hoặcCmd+Shift+0(macOS). -
Dán API key: ở ô
OpenAI API Key, dán keysk-duan-...của bạn và bật công tắc Use OpenAI API Key. -
Ghi đè Base URL: bật Override OpenAI Base URL và nhập:
https://thuehay.com/v1 -
Thêm model: bấm Add model, nhập tên model khớp chính xác với API của bạn (vd:
gpt-4o-mini).⚠️ Không đặt tên model bắt đầu bằngclaude-nếu bạn chỉ dán key ở ô OpenAI — Cursor sẽ gửi key đó vào ô Anthropic và báo lỗi "Model name is not valid". Hãy dùng tên alias không có tiền tố, ví dụduan-gpt-4o-mini. - Khởi động lại Cursor, mở chat mới và chọn model vừa thêm trong dropdown.
- Khi bật Override OpenAI Base URL, mọi request họ OpenAI-family (kể cả model do Cursor quản lý) đều đi qua endpoint của bạn. Muốn dùng lại model của Cursor thì tắt công tắc này.
- Tính năng Tab autocomplete vẫn dùng hạ tầng riêng của Cursor, không đi qua API của bạn.
- Nếu dùng Cursor trong Team/Enterprise có bật Restrict Personal API Keys, bạn cần admin bật quyền OpenAI trong
Team Dashboard → Settings → Models. - Cursor vẫn thu phí nền tảng (Cursor Token Rate) cho các request dùng key của bạn.
Antigravity (Google)
antigravity.openai-compatible.endpoint trong ~/.antigravity/settings.json không có tác dụng — request vẫn đi về Google.
Giải pháp: dùng Antigravity CLI (
agy) hoặc Antigravity SDK, cả hai đều cho phép trỏ về endpoint Gemini-compatible của chúng ta.
Phương án 1 — Antigravity CLI (khuyến nghị)
-
Tạo file cấu hình:
Windows:mkdir -p ~/.gemini/antigravity-cli cat > ~/.gemini/antigravity-cli/settings.json <<'EOF' { "modelProvider": "gemini" } EOF%USERPROFILE%\.gemini\antigravity-cli\settings.json -
Xuất biến môi trường:
export GEMINI_API_KEY="sk-duan-xxxxxxxx" export GOOGLE_GEMINI_BASE_URL="https://thuehay.com" export GEMINI_API_KEY_AUTH_MECHANISM=bearerĐặt base URL là origin trần, KHÔNG cóBiến/v1hay/v1beta— CLI tự thêm/v1betavào sau. Nếu thêm/v1betabạn sẽ gặp lỗi 404.GEMINI_API_KEY_AUTH_MECHANISM=bearerbuộc CLI gửi key dạngAuthorization: Bearerthay vìx-goog-api-key(mặc định) — hệ thống hỗ trợ cả hai. -
Chạy thử:
Khi dùng model Gemini, nhớ thêmagy --model gemini-2.5-flash --effort low--effort(low / medium / high).
Phương án 2 — Kiểm tra kết nối bằng curl
Luôn kiểm tra bằng curl trước khi cấu hình IDE/CLI — phần lớn lỗi "API problem" chỉ là do sai tên model hoặc sai định dạng request.
curl -X POST "https://thuehay.com/v1beta/models/gemini-2.5-flash:generateContent" \
-H "Authorization: Bearer sk-duan-xxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"contents": [
{ "role": "user", "parts": [{ "text": "Reply with exactly: ok" }] }
]
}'
Phương án 3 — Antigravity SDK (Python)
import asyncio
from google.antigravity import Agent, LocalOpenAIAgentConfig
async def main():
config = LocalOpenAIAgentConfig(
model="gpt-4o-mini",
base_url="https://thuehay.com/v1",
api_key="sk-duan-xxxxxxxx",
)
async with Agent(config) as agent:
response = await agent.chat("Xin chào!")
async for token in response:
print(token, end="", flush=True)
asyncio.run(main())
SDK dùng giao thức OpenAI nên dùng /v1 (khác với CLI dùng /v1beta).
VS Code
Dùng extension Continue, Cline, Roo Code hoặc GitHub Copilot Chat (BYO key).
Continue
{
"models": [
{
"title": "DuanAPI GPT-4o Mini",
"provider": "openai",
"model": "gpt-4o-mini",
"apiBase": "https://thuehay.com/v1",
"apiKey": "sk-duan-xxxxxxxx"
}
]
}
Cline / Roo Code
- Mở panel extension (biểu tượng Cline ở thanh bên phải).
- Bấm biểu tượng ⚙️ bánh răng (API Provider) → chọn OpenAI Compatible.
- Điền:
- Base URL:
https://thuehay.com/v1 - API Key:
sk-duan-xxxxxxxx - Model ID:
gpt-4o-mini
- Base URL:
- Lưu và bắt đầu chat.
Cherry Studio / LM Studio / AnythingLLM / LobeChat
Ở mọi app này, chọn provider OpenAI / OpenAI Compatible rồi điền Base URL + API key như trên.
/v1. Nếu gặp lỗi 404, hãy thử cả hai dạng (có/không /v1) — mỗi app xử lý khác nhau.
Windsurf
- Mở
Windsurf Settings→ tab API Keys (biểu tượng chìa khóa). - Chọn provider OpenAI Compatible hoặc mục Add custom provider.
- Điền Base URL
https://thuehay.com/v1, API keysk-duan-...và tên model. - Lưu → chọn model trong dropdown chat.
x-api-key thay vì Authorization. Nếu bị lỗi 401, hãy chọn chế độ OpenAI (dùng Bearer) thay vì Custom.Cline / Roo Code / Continue
Cả ba đều dùng cấu hình OpenAI-compatible giống nhau.
Base URL: https://thuehay.com/v1API Key: sk-duan-xxxxxxxx
Model ID: gpt-4o-mini
- Chọn provider OpenAI Compatible (không phải "OpenAI" — provider OpenAI gốc sẽ ép base URL).
- Bật Use custom base URL nếu app có tùy chọn này.
- Tắt Use custom context window / max tokens nếu app hỏi — để app tự suy ra.
CLI & SDK
Python (OpenAI SDK)
from openai import OpenAI
client = OpenAI(
api_key="sk-duan-xxxxxxxx",
base_url="https://thuehay.com/v1",
)
resp = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "Viết haiku về AI"}],
)
print(resp.choices[0].message.content)
Node.js
import OpenAI from "openai";
const client = new OpenAI({
apiKey: "sk-duan-xxxxxxxx",
baseURL: "https://thuehay.com/v1",
});
const r = await client.chat.completions.create({
model: "gpt-4o-mini",
messages: [{ role: "user", content: "Hello" }],
});
console.log(r.choices[0].message.content);
cURL
curl "https://thuehay.com/v1/chat/completions" \
-H "Authorization: Bearer sk-duan-xxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-4o-mini",
"messages": [{"role": "user", "content": "Xin chào"}]
}'
Anthropic SDK
from anthropic import Anthropic
client = Anthropic(
api_key="sk-duan-xxxxxxxx",
base_url="https://thuehay.com/v1",
)
msg = client.messages.create(
model="claude-3-5-sonnet",
max_tokens=1024,
messages=[{"role": "user", "content": "Xin chào"}],
)
print(msg.content[0].text)
Gemini SDK
from google import genai
client = genai.Client(
api_key="sk-duan-xxxxxxxx",
http_options={"base_url": "https://thuehay.com"},
)
resp = client.models.generate_content(
model="gemini-2.5-flash",
contents="Xin chào",
)
print(resp.text)
Gemini SDK dùng đường dẫn /v1beta — endpoint này đã được hỗ trợ sẵn, không cần adapter phía bạn.
Xử lý sự cố
401 Unauthorized
Key sai hoặc đã bị thu hồi. Kiểm tra lại key tại /user/api-keys. Nếu dùng Cursor, nhớ bật công tắc Use OpenAI API Key.
402 / insufficient quota
Số dư không đủ. Nạp thêm tại /user/billing hoặc dùng GET /v1/usage để xem số dư hiện tại.
400 model_not_found
Tên model không tồn tại trong bảng giá của hệ thống. Gọi GET /v1/models để lấy đúng danh sách, và dùng đúng y hệt (phân biệt hoa thường, có/không tiền tố vendor).
404 Not Found
Sai đường dẫn base URL. Với OpenAI-compatible, base URL phải kết thúc bằng /v1. Với Antigravity/Gemini CLI, base URL là origin trần (không /v1, không /v1beta).
429 rate limit
Vượt giới hạn request/phút của gói. Xem header X-RateLimit-Reset để biết thời điểm reset, hoặc nâng cấp gói tại /pricing.
Streaming bị treo / không nhận dữ liệu
Đảm bảo request gửi "stream": true. Với SSE, dùng curl -N để xem realtime. Một số proxy cần header X-Accel-Buffering: no — endpoint của chúng ta đã tự set.
Cursor: "Model name is not valid"
Đổi tên model, đảm bảo không bắt đầu bằng claude-. Cursor chọn ô key theo tiền tố tên model — model tên claude-... sẽ dùng key Anthropic mà bạn chưa điền.
Antigravity CLI báo 404
Đặt GOOGLE_GEMINI_BASE_URL là origin trần (vd https://thuehay.com). Không thêm /v1beta — CLI tự thêm. Cũng nhớ tạo file settings.json với {"modelProvider": "gemini"}, nếu không GEMINI_API_KEY sẽ bị bỏ qua.