5.3 KiB
copilet2api
Cloudflare Worker that proxies GitHub Copilot to OpenAI and Anthropic compatible HTTP APIs.
Warning: This uses unofficial Copilot endpoints. GitHub may change or block them at any time. Excessive automated use may trigger abuse detection and limit your Copilot access. Use responsibly.
Features
- OpenAI-compatible:
GET /v1/models,POST /v1/chat/completions,POST /v1/responses(streaming supported) - Models like
gpt-5.4-mini,gpt-5.3-codexauto-route to Copilot Responses API when using/v1/chat/completions - Anthropic-compatible:
POST /v1/messages(streaming supported) - Client auth via API key (default
sk-shumengya666, configurable viaAPI_KEY) - GitHub token stored as Worker Secret (
GITHUB_TOKEN)
Quick start
1. Install
npm install
2. Configure GitHub token (local)
cp .dev.vars.example .dev.vars
# Edit .dev.vars and set GITHUB_TOKEN (ghu_, gho_, or github_pat_ with Copilot access)
3. Run locally
npm run dev
4. Deploy
npx wrangler secret put GITHUB_TOKEN
npm run deploy
Optionally override the client API key in production:
npx wrangler secret put API_KEY
Authentication
Clients must send one of:
Authorization: Bearer <API_KEY>(default:sk-shumengya666, not shown onGET /)x-api-key: <API_KEY>
Override with wrangler secret put API_KEY or .dev.vars for production.
The Worker uses GITHUB_TOKEN (Wrangler secret) to authenticate with Copilot:
| Token type | Prefix | How it works |
|---|---|---|
| OAuth (recommended) | ghu_, gho_ |
Exchanged via GET /copilot_internal/v2/token |
| Fine-grained PAT | github_pat_ |
Used directly; requires Copilot Requests permission; uses Copilot-Integration-Id: copilot-developer-cli |
Classic PAT (ghp_) is not supported by the Copilot API.
Endpoints
| Method | Path | Description |
|---|---|---|
| GET | / |
Service info |
| GET | /health |
Health check |
| GET | /v1/models |
List Copilot models |
| POST | /v1/chat/completions |
OpenAI chat completions |
| POST | /v1/messages |
Anthropic messages |
Usage examples
gpt-5.4-mini / Codex 模型
这类模型不能走 /chat/completions 直连 Copilot,必须用 Responses API。本 Worker 已支持两种方式:
方式 1(推荐):仍用 Chat Completions,Worker 会自动转发到 /responses:
curl http://localhost:8787/v1/chat/completions \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.4-mini",
"max_tokens": 256,
"messages": [{"role": "user", "content": "Hello"}]
}'
方式 2:直接调用 OpenAI Responses 格式:
curl http://localhost:8787/v1/responses \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-5.4-mini",
"input": "Hello",
"max_output_tokens": 256
}'
注意:max_output_tokens 最小为 16。
流式 / 工具 / 视觉(gpt-5.4-mini 等)
/v1/chat/completions 与 /v1/messages 均已支持:
| 能力 | OpenAI Chat | Anthropic Messages |
|---|---|---|
| 流式 | stream: true |
stream: true |
| 工具 | tools + tool_choice |
tools + tool_choice |
| 图片 | image_url 多模态 content |
image + source.base64 / url |
工具调用时 Chat 返回 finish_reason: tool_calls;Claude 返回 stop_reason: tool_use 与 tool_use 内容块。
curl (OpenAI)
curl http://localhost:8787/v1/chat/completions \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-4o",
"messages": [{"role": "user", "content": "Hello"}]
}'
curl (Anthropic)
curl http://localhost:8787/v1/messages \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "Hello"}]
}'
OpenAI Python SDK
from openai import OpenAI
client = OpenAI(
api_key=os.environ["API_KEY"],
base_url="https://<your-worker>.workers.dev/v1",
)
print(client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "hi"}],
))
Anthropic Python SDK
import anthropic
client = anthropic.Anthropic(
api_key=os.environ["API_KEY"],
base_url="https://<your-worker>.workers.dev",
)
print(client.messages.create(
model="claude-sonnet-4",
max_tokens=1024,
messages=[{"role": "user", "content": "hi"}],
))
Environment variables
| Variable | Source | Description |
|---|---|---|
API_KEY |
wrangler.jsonc vars or secret |
Client API key (default sk-shumengya666, not exposed on GET /) |
GITHUB_TOKEN |
Secret / .dev.vars |
GitHub OAuth or PAT with Copilot |
COPILOT_API_BASE |
vars (optional) | Default https://api.githubcopilot.com; set for Enterprise |
Security notes
- Do not commit
.dev.varsor real tokens to git. - The default API key is public in
wrangler.jsonc. For public deployments, set a strongAPI_KEYsecret and consider Cloudflare Access or IP restrictions. - Anyone with the API key can consume your Copilot quota.
License
MIT