Claude Code báo "invalid x-api-key": yêu cầu của bạn đã đi đến Anthropic
Wokey Team · 2026-09-24
Trả lời ngắn: nếu bạn thấy invalid x-api-key, yêu cầu của bạn đã đi đến chính api.anthropic.com của Anthropic, chứ không phải gateway bạn đã cấu hình. Wokey không bao giờ trả về thông báo đó; lỗi khóa của Wokey là invalid_api_key, có dấu gạch dưới. Vì vậy đừng vội đổi khóa. Hãy tìm hiểu vì sao base URL chưa được áp dụng.
Trước tiên, xem ai đã trả lời
Đối chiếu JSON trong thông báo lỗi với bảng này để biết yêu cầu thực sự đã đến đâu. Mỗi dòng là một phản hồi gốc được ghi lại bằng curl:
| Phản hồi chứa | Bên trả lời | Ý nghĩa |
|---|---|---|
"message":"invalid x-api-key" |
Anthropic | Một khóa sk- đã được gửi dưới dạng Authorization: Bearer, hoặc giá trị x-api-key trông không giống một khóa |
"message":"API key is invalid." |
Anthropic | Một khóa sk- không do Anthropic cấp đã được gửi dưới dạng x-api-key |
"message":"x-api-key header is required" |
Anthropic | Không có khóa nào được gửi |
"message":"Invalid bearer token" |
Anthropic | Giá trị bearer không bắt đầu bằng sk- |
"code":"invalid_api_key" |
Wokey | Yêu cầu đã đến Wokey, nhưng khóa bị thiếu, gõ sai hoặc đã bị xóa |
Phản hồi đầy đủ của Anthropic trông như sau. Lưu ý "type":"error" ở lớp ngoài và thường có một request_id:
{"type":"error","error":{"type":"authentication_error","message":"invalid x-api-key"},"request_id":"req_011C..."}
Phản hồi của Wokey không có type: "error" ở lớp ngoài, và code dùng dấu gạch dưới:
{"error":{"code":"invalid_api_key","message":"Invalid API key. Make sure you copied the complete Wokey API key, or create a new one at https://wokey.ai/api.","type":"invalid_request_error"}}
Khóa Wokey bắt đầu bằng sk-. Đặt nó vào ANTHROPIC_AUTH_TOKEN (gửi dưới dạng bearer token) mà để yêu cầu đi đến Anthropic, bạn sẽ nhận invalid x-api-key. Đặt nó vào ANTHROPIC_API_KEY (gửi dưới dạng x-api-key), bạn sẽ nhận API key is invalid. Nguyên nhân trong cả hai trường hợp là như nhau.
Vì sao base URL chưa được áp dụng
1. Biến không có trong tiến trình đang chạy claude. Lệnh export chỉ có tác dụng trong terminal hiện tại. Một biến được đặt ở terminal khác, một biến được thêm vào ~/.zshrc mà chưa mở terminal mới, hay một trình soạn thảo mở từ Dock hoặc menu Start đều sẽ không nhìn thấy nó. Trong terminal khởi chạy claude, hãy kiểm tra cả hai biến đều có mặt:
env | grep ANTHROPIC
2. Tên biến bị sai. Claude Code chỉ đọc ANTHROPIC_BASE_URL. ANTHROPIC_API_BASE, ANTHROPIC_BASE, CLAUDE_BASE_URL và OPENAI_BASE_URL đều bị bỏ qua, và yêu cầu âm thầm đi đến địa chỉ chính thức.
3. settings.json có khóa nhưng không có địa chỉ. Nếu khối env của ~/.claude/settings.json đặt ANTHROPIC_AUTH_TOKEN mà không có ANTHROPIC_BASE_URL, khóa sẽ được gửi đến Anthropic. Hãy luôn đặt hai biến này cùng nhau:
{
"env": {
"ANTHROPIC_BASE_URL": "https://api.wokey.ai",
"ANTHROPIC_AUTH_TOKEN": "your Wokey API key"
}
}
4. Bạn đang dùng tiện ích VS Code. Bước kiểm tra đăng nhập của tiện ích không đọc biến shell. Hãy đặt chúng trong claudeCode.environmentVariables ở thiết lập người dùng của VS Code; xem hướng dẫn tiện ích VS Code.
5. Bạn đang dùng ứng dụng Claude desktop. Ứng dụng desktop không đọc ANTHROPIC_BASE_URL lẫn settings.json. Hãy đặt gateway tại Developer → Configure Third-Party Inference; xem khắc phục sự cố ứng dụng desktop với API bên thứ ba.
6. Bạn đang gọi SDK từ mã của mình. SDK Python và TypeScript của Anthropic mặc định dùng địa chỉ chính thức. Hãy truyền base_url một cách tường minh (baseURL trong TypeScript), cũng không kèm /v1:
from anthropic import Anthropic
client = Anthropic(base_url="https://api.wokey.ai", api_key="your Wokey API key")
Xác nhận trong Claude Code
Chạy /status trong Claude Code. Tab Status phải có một dòng Anthropic base URL được đặt thành https://api.wokey.ai. Nếu không có dòng này, Claude Code đang dùng địa chỉ chính thức và một trong các nguyên nhân ở trên đang xảy ra.
So sánh bằng curl
Trong cùng terminal khởi chạy claude, hãy chạy:
curl -X POST "$ANTHROPIC_BASE_URL/v1/messages" \
-H "Authorization: Bearer $ANTHROPIC_AUTH_TOKEN" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{"model":"claude-sonnet-5","max_tokens":1,"messages":[{"role":"user","content":"."}]}'
Kết quả cho bạn biết:
curl: (3) URL rejected: No host part in the URL:ANTHROPIC_BASE_URLđang trống; biến chưa bao giờ được đặt.- Bắt đầu bằng
{"id":"msg_: gateway và khóa đều ổn. Vấn đề nằm ở cấu hình mà Claude Code đọc; hãy lần lượt kiểm tra nguyên nhân 3 đến 5 ở trên. invalid_api_key: yêu cầu đã đến Wokey, nên lúc này đúng là do khóa. Hãy kiểm tra trong bảng điều khiển xem khóa đã được sao chép đầy đủ và chưa bị xóa.
Gặp lỗi này với API chính thức
Nếu bạn dùng trực tiếp API của Anthropic, invalid x-api-key mang đúng nghĩa đen: khóa sai hoặc đã bị thu hồi, hoặc bị sao chép kèm một ký tự xuống dòng hay khoảng trắng thừa. Claude Code chặn khóa có chứa ký tự xuống dòng trước khi gửi, với thông báo lỗi kiểu Invalid X-Api-Key header value from ANTHROPIC_API_KEY: it contains a line break.
Câu hỏi thường gặp
Wokey có trả về "invalid x-api-key" không?
Không. Thông báo đó đến từ chính API của Anthropic. Khi khóa bị thiếu hoặc sai, Wokey trả về 401 với {"error":{"code":"invalid_api_key",...}}. Nếu bạn thấy "invalid x-api-key", yêu cầu chưa hề đến Wokey vì ANTHROPIC_BASE_URL chưa được áp dụng.
Làm sao kiểm tra Claude Code đang dùng base URL nào?
Chạy /status trong Claude Code và xem dòng Anthropic base URL. Với Wokey, dòng đó phải là https://api.wokey.ai. Nếu không có dòng này hoặc nó hiển thị địa chỉ của Anthropic, biến môi trường chưa đến được tiến trình đang chạy.
echo hiển thị biến rồi, sao vẫn lỗi?
Thường là biến được đặt mà không có export, hoặc Claude Code được khởi chạy từ một terminal khác, một IDE hoặc biểu tượng trên desktop vốn không nhìn thấy biến đó. Cách khắc phục chắc chắn nhất là đặt ANTHROPIC_BASE_URL và ANTHROPIC_AUTH_TOKEN trong khối env của ~/.claude/settings.json.
Nếu tiện ích VS Code hoặc ứng dụng desktop báo lỗi này thì sao?
Với tiện ích VS Code, hãy đặt các biến trong claudeCode.environmentVariables ở thiết lập người dùng. Ứng dụng Claude desktop bỏ qua biến môi trường: hãy cấu hình gateway tại Developer → Configure Third-Party Inference, rồi nhấn Save & Restart.
Có thể dùng khóa Wokey trực tiếp với Anthropic không?
Không. Khóa Wokey có dạng sk- theo sau là 32 ký tự hex và chỉ hoạt động tại api.wokey.ai. Gửi đến Anthropic, nó sẽ nhận 401.