API tương thích OpenAI

TokenCode hoàn toàn tương thích với giao thức OpenAI API, bạn có thể sử dụng trực tiếp OpenAI SDK hoặc bất kỳ client nào tương thích giao thức OpenAI để kết nối.

Base URL

text
https://tokencode.dev/v1

Xác thực

Tất cả endpoint đều yêu cầu xác thực:

  • Bearer Token: Authorization: Bearer <your-api-key>
  • API Key Header: x-api-key: <your-api-key>

Liệt kê mô hình

Trả về danh sách mô hình hiện có.

bash
curl https://tokencode.dev/v1/models \
  -H "Authorization: Bearer sk-your-api-key"

Ví dụ phản hồi:

json
{
  "object": "list",
  "data": [
    { "id": "gpt-5.5", "object": "model", "owned_by": "openai" },
    { "id": "claude-sonnet-4-6", "object": "model", "owned_by": "anthropic" },
    { "id": "gemini-2.5-pro", "object": "model", "owned_by": "google" }
  ]
}

Chat Completions

Endpoint hoàn thành hội thoại tương thích OpenAI. Hỗ trợ tất cả mô hình thượng-stream, không giới hạn mô hình OpenAI.

bash
curl https://tokencode.dev/v1/chat/completions \
  -H "Authorization: Bearer sk-your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-5.5",
    "messages": [
      {"role": "system", "content": "Bạn là một trợ giúp hữu ích."},
      {"role": "user", "content": "Giải thích về điện toán lượng tử"}
    ],
    "temperature": 0.7,
    "max_tokens": 1024
  }'

Tham số yêu cầu:

Tham số Kiểu Bắt buộc Mô tả
model string ID mô hình (ví dụ gpt-5.5, claude-sonnet-4-6)
messages array Mảng đối tượng tin nhắn
stream boolean Không Bật phản hồi luồng
temperature number Không Nhiệt độ lấy mẫu (0-2)
max_tokens integer Không Số Token tối đa được tạo
top_p number Không Xác suất lấy mẫu nhân
n integer Không Số lượng ứng viên được tạo
stop string/array Không Chuỗi dừng
presence_penalty number Không Hình phạt hiện diện (-2 đến 2)
frequency_penalty number Không Hình phạt tần suất (-2 đến 2)
tools array Không Định nghĩa công cụ Function Calling
tool_choice string/object Không Chiến lược gọi công cụ

Ví dụ phản hồi:

json
{
  "id": "chatcmpl-abc123",
  "object": "chat.completion",
  "created": 1700000000,
  "model": "gpt-5.5",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "Điện toán lượng tử là một phương pháp sử dụng nguyên lý cơ học lượng tử..."
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 25,
    "completion_tokens": 128,
    "total_tokens": 153
  }
}

Phản hồi luồng

Khi đặt "stream": true, phản hồi sử dụng định dạng SSE:

text
data: {"id":"chatcmpl-abc123","object":"chat.completion.chunk","choices":[{"delta":{"content":"Đ"},"index":0}]}

data: {"id":"chatcmpl-abc123","object":"chat.completion.chunk","choices":[{"delta":{"content":"iện"},"index":0}]}

data: [DONE]

Embeddings

Tạo vector nhúng văn bản.

bash
curl https://tokencode.dev/v1/embeddings \
  -H "Authorization: Bearer sk-your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "text-embedding-3-small",
    "input": "Hello world"
  }'

Tham số yêu cầu:

Tham số Kiểu Bắt buộc Mô tả
model string ID mô hình nhúng
input string/array Văn bản cần nhúng
encoding_format string Không Định dạng mã hóa (float hoặc base64)

Tự động chuyển đổi giao thức

Một trong những lợi thế cốt lõi của TokenCode là tự động chuyển đổi giao thức. Khi bạn gọi mô hình không phải OpenAI (như Claude, Gemini) qua endpoint tương thích OpenAI, nền tảng tự động hoàn thành:

  1. Chuyển đổi yêu cầu: Chuyển body yêu cầu định dạng OpenAI sang định dạng gốc của mô hình đích
  2. Chuyển đổi phản hồi: Chuyển phản hồi gốc của mô hình đích sang định dạng OpenAI trả về
  3. Thích ứng luồng: Phản hồi luồng cũng tự động chuyển đổi định dạng

Điều này có nghĩa là bạn có thể sử dụng cùng một bộ mã OpenAI SDK để gọi tất cả mô hình mà không cần quan tâm đến sự khác biệt giao thức bên dưới.

Sử dụng OpenAI SDK

python
from openai import OpenAI

client = OpenAI(
    api_key="sk-your-api-key",
    base_url="https://tokencode.dev/v1"
)

# Gọi mô hình OpenAI
response = client.chat.completions.create(
    model="gpt-5.5",
    messages=[{"role": "user", "content": "Xin chào"}]
)

# Gọi mô hình Claude — cùng mã, tự động chuyển đổi giao thức
response = client.chat.completions.create(
    model="claude-sonnet-4-6",
    messages=[{"role": "user", "content": "Xin chào"}]
)

# Gọi mô hình Gemini — cùng cách thức
response = client.chat.completions.create(
    model="gemini-2.5-pro",
    messages=[{"role": "user", "content": "Xin chào"}]
)

Phản hồi lỗi

Tất cả lỗi tuân theo định dạng lỗi OpenAI:

json
{
  "error": {
    "message": "Invalid API key",
    "type": "invalid_request_error",
    "code": "invalid_api_key"
  }
}
Mã trạng thái HTTP Ý nghĩa
400 Tham số yêu cầu không hợp lệ
401 Xác thực thất bại — API Key không hợp lệ
403 Quyền không đủ — Mô hình không khả dụng
429 Giới hạn tốc độ hoặc số dư không đủ
500 Lỗi nội bộ máy chủ
502 Dịch vụ thượng-stream bất thường