This project implements multiple API endpoints to provide compatibility with different AI tools and frameworks:
These endpoints follow the OpenAI API specification and are compatible with tools that expect OpenAI's API format:
POST /chat/completions- Chat completion endpoint for conversational AIPOST /v1/chat/completions- Same as above with v1 prefix for tool compatibilityGET /models- List available models from GitHub CopilotGET /v1/models- Same as above with v1 prefixPOST /embeddings- Generate text embeddingsPOST /v1/embeddings- Same as above with v1 prefix
These endpoints follow the Anthropic API specification and are compatible with tools that expect Claude's API format:
POST /v1/messages- Main Anthropic messages endpoint for chat completionPOST /v1/messages/count_tokens- Token counting endpoint for input estimation
GET /- Server health check endpoint
All endpoints proxy requests to GitHub Copilot's API while maintaining compatibility with the respective API formats. The server automatically handles authentication, request/response translation, and model selection.
This fork includes Anthropic-compatible endpoints that make it work seamlessly with Claude Code, Anthropic's official CLI for Claude. The server provides /v1/messages endpoints that translate between Anthropic's API format and GitHub Copilot's OpenAI-compatible interface.
-
Start the server:
bun run dev start --port 4143 --business --verbose
-
Configure Claude Code environment variables:
export ANTHROPIC_API_KEY="dummy-key" export ANTHROPIC_BASE_URL="http://localhost:4143" export ANTHROPIC_MODEL="claude-sonnet-4" set -e CLAUDE_CODE_USE_BEDROCK
-
Use Claude Code normally - it will route through GitHub Copilot while maintaining full compatibility with Anthropic's API format.
A wrapper around GitHub Copilot API to make it OpenAI compatible, making it usable for other tools like AI assistants, local interfaces, and development utilities.
copilot-api-demo.mp4
- Bun (>= 1.2.x)
- GitHub account with Copilot subscription (Individual or Business)
To install dependencies, run:
bun installBuild image
docker build -t copilot-api .Run the container
docker run -p 4141:4141 copilot-apiCopilot API now uses a subcommand structure with two main commands:
start: Start the Copilot API server (default command). This command will also handle authentication if needed.auth: Run GitHub authentication flow without starting the server. This is typically used if you need to generate a token for use with the--github-tokenoption, especially in non-interactive environments.
The following command line options are available for the start command:
| Option | Description | Default | Alias |
|---|---|---|---|
| --port | Port to listen on | 4141 | -p |
| --verbose | Enable verbose logging | false | -v |
| --business | Use a business plan GitHub account | false | none |
| --enterprise | Use an enterprise plan GitHub account | false | none |
| --manual | Enable manual request approval | false | none |
| --rate-limit | Rate limit in seconds between requests | none | -r |
| --wait | Wait instead of error when rate limit is hit | false | -w |
| --github-token | Provide GitHub token directly (must be generated using the auth subcommand) |
none | -g |
| Option | Description | Default | Alias |
|---|---|---|---|
| --verbose | Enable verbose logging | false | -v |
# Basic usage with start command
bun run dev start
# Run on custom port with verbose logging
bun run dev start --port 4143 --verbose
# Use with a business plan GitHub account
bun run dev start --business
# Use with an enterprise plan GitHub account
bun run dev start --enterprise
# Enable manual approval for each request
bun run dev start --manual
# Set rate limit to 30 seconds between requests
bun run dev start --rate-limit 30
# Wait instead of error when rate limit is hit
bun run dev start --rate-limit 30 --wait
# Provide GitHub token directly
bun run dev start --github-token ghp_YOUR_TOKEN_HERE
# Run only the auth flow
bun run dev auth
# Run auth flow with verbose logging
bun run dev auth --verboseThe project can be run from source in several ways:
bun run devbun run start- Consider using free models (e.g., Gemini, Mistral, Openrouter) as the
weak-model - Use architect mode sparingly
- Disable
yes-alwaysin your aider configuration - Be mindful that Claude 3.7 thinking mode consumes more tokens
- Enable the
--manualflag to review and approve each request before processing - If you have a GitHub business or enterprise plan account with Copilot, use the
--businessor--enterpriseflag respectively
When using the --manual flag, the server will prompt you to approve each incoming request:
? Accept incoming request? > (y/N)
This helps you control usage and monitor requests in real-time.