Tài liệu tích hợp API
API tương thích chuẩn OpenAI Chat Completions — dùng được với mọi SDK hỗ trợ OpenAI.
Bắt đầu nhanh
Ba bước để có bài viết đầu tiên:
- Tạo tài khoản — API key sinh ngay trên dashboard.
- Chờ quản trị viên duyệt tài khoản và cấp token — key chỉ hoạt động sau bước này.
- Gọi API:
curl https://fbagent.work999.com/api/v1/chat/completions \
-H "Authorization: Bearer sk-fba-xxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"messages": [
{"role": "system", "content": "Bạn là chuyên gia content marketing tiếng Việt."},
{"role": "user", "content": "Viết bài SEO 500 từ về: cách chọn máy lọc không khí"}
],
"max_tokens": 1200,
"temperature": 0.7
}'
Xác thực
Mọi request cần header:
Authorization: Bearer <API_KEY>
API key dạng sk-fba-…, lấy tại Dashboard. Tạo key mới bất kỳ lúc nào — key cũ vô hiệu ngay khi key mới sinh ra.
Tạo nội dung
POST /api/v1/chat/completions
| Tham số | Kiểu | Mô tả |
|---|---|---|
messages | array — bắt buộc | Hội thoại chuẩn OpenAI. Hỗ trợ role system, user, assistant. |
max_tokens | int — mặc định 1024 | Trần token output, tối đa 4096. Bài 1000 từ tiếng Việt cần 1500–1800. |
temperature | float — mặc định 0.7 | Độ sáng tạo, 0–2. Content SEO nên đặt 0.6–0.8. |
top_p | float — mặc định 0.95 | Nucleus sampling. |
stream | bool — mặc định false | Trả kết quả dần qua SSE. |
stop | string / array | Chuỗi dừng sinh, tùy chọn. |
Response chuẩn OpenAI — trường usage.total_tokens là số token trừ vào tài khoản:
{
"choices": [{
"message": {"role": "assistant", "content": "Nội dung được tạo…"},
"finish_reason": "stop"
}],
"usage": {"prompt_tokens": 45, "completion_tokens": 812, "total_tokens": 857}
}
Header phản hồi kèm X-Tokens-Used và X-Tokens-Remaining để bạn theo dõi số dư không cần gọi thêm.
Endpoint phụ
| Endpoint | Mô tả |
|---|---|
GET /api/v1/me | Số dư, giới hạn tốc độ, mức dùng 24 giờ. |
GET /api/v1/models | Danh sách model khả dụng. |
GET /api/v1/status | Tình trạng hàng chờ hệ thống — công khai, không cần key. |
Tạo ảnh
POST /api/v1/images/generations
Tạo ảnh minh họa 512×512 từ mô tả. Prompt nên viết bằng tiếng Anh — model ảnh không hiểu tiếng Việt.
| Tham số | Kiểu | Mô tả |
|---|---|---|
prompt | string — bắt buộc | Mô tả ảnh bằng tiếng Anh, tối đa 500 ký tự. Càng cụ thể càng đẹp. |
response_format | string — mặc định url | url trả link ảnh (lưu 7 ngày) hoặc b64_json trả ảnh mã hóa base64. |
curl https://fbagent.work999.com/api/v1/images/generations \
-H "Authorization: Bearer sk-fba-xxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"prompt": "bowl of Vietnamese pho with beef and herbs, top view, natural light"}'
Response:
{
"created": 1783590000,
"data": [{"url": "https://fbagent.work999.com/gen/AbC123xyz.png"}],
"usage": {"tokens_charged": 500}
}
- Mỗi ảnh trừ số token cố định (mặc định 500 — xem giá hiện tại qua
GET /api/v1/me, trườngimage_token_cost). - Giới hạn riêng cho ảnh: mặc định 3 ảnh/phút mỗi tài khoản (trường
img_rpm_limittrong/api/v1/me). Vượt trả429kèmRetry-After. - Ảnh mất khoảng 15–30 giây tùy tải hệ thống — đặt timeout client tối thiểu 120 giây.
- Link ảnh lưu 7 ngày; cần giữ lâu dài hãy tải về hoặc dùng
b64_json.
Streaming
Thêm "stream": true để nhận nội dung dần theo Server-Sent Events — phù hợp hiển thị chữ chạy realtime:
curl -N https://fbagent.work999.com/api/v1/chat/completions \
-H "Authorization: Bearer sk-fba-xxxxxxxx" \
-d '{"messages":[{"role":"user","content":"Viết caption về trà sữa"}],"stream":true}'
Mỗi dòng data: chứa một phần nội dung, kết thúc bằng data: [DONE]. Token tính đầy đủ như chế độ thường.
SDK OpenAI
Python
# pip install openai
from openai import OpenAI
client = OpenAI(base_url="https://fbagent.work999.com/api/v1", api_key="sk-fba-xxxxxxxx")
resp = client.chat.completions.create(
model="qwen3-4b",
messages=[{"role": "user", "content": "Viết mô tả 100 từ cho son môi đỏ cam"}],
max_tokens=400,
)
print(resp.choices[0].message.content)
print("Token đã dùng:", resp.usage.total_tokens)
Node.js
// npm install openai
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://fbagent.work999.com/api/v1",
apiKey: "sk-fba-xxxxxxxx",
});
const resp = await client.chat.completions.create({
model: "qwen3-4b",
messages: [{ role: "user", content: "Viết tiêu đề SEO cho bài về du lịch Phú Quốc" }],
max_tokens: 200,
});
console.log(resp.choices[0].message.content);
PHP
$ch = curl_init("https://fbagent.work999.com/api/v1/chat/completions");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer sk-fba-xxxxxxxx",
"Content-Type: application/json"
],
CURLOPT_POSTFIELDS => json_encode([
"messages" => [["role" => "user", "content" => "Viết mô tả nồi chiên không dầu"]],
"max_tokens" => 500
])
]);
$data = json_decode(curl_exec($ch), true);
echo $data["choices"][0]["message"]["content"];
Tính phí token
- Mỗi request trừ
usage.total_tokens— tổng token input và output. - Tiếng Việt: 1 từ xấp xỉ 1.4–1.6 token. Bài 1000 từ cần 1500–1800 token output.
- Số dư hết, API trả
402 insufficient_tokens— liên hệ quản trị viên để nạp thêm. - Kiểm tra số dư qua
GET /api/v1/mehoặc trên Dashboard.
Rate limit & hàng chờ
- Mỗi tài khoản có giới hạn request/phút — mặc định 10, quản trị viên điều chỉnh được. Vượt hạn mức, API trả
429 rate_limit_exceededkèm headerRetry-After. - Hệ thống xử lý tối đa 8 request đồng thời. Request kế tiếp xếp hàng FIFO — tối đa 32 request chờ, mỗi request chờ tối đa 120 giây.
- Hàng chờ đầy, API trả
429 queue_full— retry với backoff tăng dần: 5s, 15s, 30s. - Xem tình trạng hàng chờ realtime:
GET /api/v1/status.
Mã lỗi
| HTTP | Code | Cách xử lý |
|---|---|---|
| 401 | invalid_api_key | Key sai hoặc thiếu header Authorization. |
| 402 | insufficient_tokens | Hết token — liên hệ quản trị viên. |
| 403 | account_pending | Tài khoản chưa được duyệt. |
| 403 | account_blocked | Tài khoản bị khóa. |
| 400 | invalid_request | Body sai định dạng hoặc input quá dài. |
| 429 | rate_limit_exceeded | Chờ theo Retry-After rồi gọi lại. |
| 429 | queue_full | Hệ thống cao điểm — retry với backoff. |
| 502 | upstream_error | Model lỗi tạm thời — retry sau vài giây. |
Định dạng lỗi thống nhất:
{"error": {"code": "rate_limit_exceeded", "message": "Vượt giới hạn 10 request/phút…"}}
Mẹo viết prompt content tiếng Việt
- Cố định vai trò bằng
systemmessage: "Bạn là chuyên gia content marketing tiếng Việt, viết chuẩn SEO." - Nêu rõ độ dài, cấu trúc heading, tone giọng và từ khóa cần chứa.
- Bài dài trên 800 từ: đặt
max_tokens2000–2500 để không bị cắt giữa chừng. - Nội dung nhất quán dùng
temperature0.6 — nội dung sáng tạo dùng 0.8–0.9. - Sinh hàng loạt: gửi tuần tự hoặc vài request song song, xử lý 429 bằng retry và backoff.