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 | Có | ID model, ví dụ claude-sonnet-5. Xem bảng model |
messages |
mảng | Có | Danh sách {role, content}. role là system, 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¶
| Mã | 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.