Bỏ qua

Chat Completions

POST https://revidapi.com/v1/chat/completions

Tương thích định dạng OpenAI. Mọi thư viện nói chuyện được với OpenAI đều dùng được endpoint này, chỉ cần đổi base_url thành https://revidapi.com/v1.

Xác thực

Gửi một trong hai header:

Authorization: Bearer sk_KEY_CUA_BAN
X-API-Key: sk_KEY_CUA_BAN

Tham số

Trường Kiểu Bắt buộc Mô tả
model chuỗi ID model, ví dụ claude-sonnet-5. Xem bảng model
messages mảng Danh sách {role, content}. rolesystem, user hoặc assistant
stream bool Không true để nhận từng mẩu qua SSE
max_tokens số Không Giới hạn độ dài câu trả lời. Đặt giá trị này là cách chắc chắn nhất để khỏi bị trả tiền cho một câu trả lời dài ngoài ý muốn
temperature số Không 0–2
top_p số Không 0–1
tools mảng Không Khai báo hàm theo chuẩn OpenAI
tool_choice chuỗi/đối tượng Không auto, none, hoặc chỉ định một hàm
parallel_tool_calls bool Không Cho phép gọi nhiều hàm một lượt

Ví dụ cơ bản

curl https://revidapi.com/v1/chat/completions \
  -H "Authorization: Bearer sk_KEY_CUA_BAN" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-sonnet-5",
    "max_tokens": 1024,
    "messages": [
      {"role": "system", "content": "Bạn trả lời ngắn gọn bằng tiếng Việt."},
      {"role": "user", "content": "Giải thích HTTP 429 trong hai câu."}
    ]
  }'

Phản hồi:

{
  "id": "chatcmpl-...",
  "object": "chat.completion",
  "model": "claude-sonnet-5",
  "choices": [
    {
      "index": 0,
      "finish_reason": "stop",
      "message": {"role": "assistant", "content": "429 nghĩa là..."}
    }
  ],
  "usage": {
    "prompt_tokens": 42,
    "completion_tokens": 58,
    "total_tokens": 100
  }
}

Nhận từng mẩu (stream)

Đặt "stream": true. Server trả Server-Sent Events, mỗi dòng bắt đầu bằng data:, kết thúc bằng data: [DONE].

from openai import OpenAI

client = OpenAI(api_key="sk_KEY_CUA_BAN",
                base_url="https://revidapi.com/v1")

for phan in client.chat.completions.create(
    model="claude-sonnet-5",
    messages=[{"role": "user", "content": "Kể một câu chuyện ngắn."}],
    max_tokens=800,
    stream=True,
):
    mau = phan.choices[0].delta.content
    if mau:
        print(mau, end="", flush=True)

Gọi hàm (tools)

curl https://revidapi.com/v1/chat/completions \
  -H "Authorization: Bearer sk_KEY_CUA_BAN" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-sonnet-5",
    "max_tokens": 1024,
    "messages": [{"role": "user", "content": "Thời tiết Hà Nội thế nào?"}],
    "tools": [{
      "type": "function",
      "function": {
        "name": "xem_thoi_tiet",
        "description": "Lấy thời tiết hiện tại của một thành phố",
        "parameters": {
          "type": "object",
          "properties": {"thanh_pho": {"type": "string"}},
          "required": ["thanh_pho"]
        }
      }
    }]
  }'

Model trả về tool_calls. Bạn chạy hàm ở phía mình, rồi gửi kết quả lại dưới dạng message role: "tool" như chuẩn OpenAI.

Không phải model nào cũng gọi được hàm. Cột Gọi hàm trong bảng model cho biết model nào hỗ trợ.

Gửi ảnh

Với model có cột Ảnh là ✅:

{
  "model": "claude-sonnet-5",
  "max_tokens": 1024,
  "messages": [{
    "role": "user",
    "content": [
      {"type": "text", "text": "Trong ảnh có gì?"},
      {"type": "image_url",
       "image_url": {"url": "data:image/jpeg;base64,/9j/4AAQ..."}}
    ]
  }]
}

Mã lỗi

Nghĩa Nên làm gì
400 Body sai — thiếu model, messages rỗng, JSON hỏng Sửa request
401 Thiếu key hoặc key không hợp lệ Kiểm tra header
402 Không đủ credit Nạp thêm
404 Model không có trong bảng bán Gọi GET /v1/models xem tên đúng
429 Quá nhiều lượt cùng lúc Chờ rồi thử lại
503 Nguồn model đang lỗi Thử lại sau, hoặc chọn model khác

Lỗi thì không mất tiền. Mọi lượt gọi không trả được câu trả lời đều được hoàn credit tự động. Bạn kiểm chứng được bằng GET /v1/credits — sổ credit ghi rõ từng lượt trừ và từng lượt hoàn.

Chúng tôi không tự đổi model thay bạn. Nếu bạn gọi claude-opus-5 mà nguồn đang lỗi, chúng tôi báo lỗi và hoàn tiền — chứ không lặng lẽ trả lời bằng một model rẻ hơn.