Tài liệu API
Gọi mọi tính năng AI qua API Key, tính phí theo用量, tích hợp chỉ với vài dòng code.
Xác thực
Mọi request API phải bao gồm header Authorization.
Authorization: Bearer sk-xxxxxxxxxxxxxxxx
Lấy API Key từ trang "API Key" trong bảng điều khiển. Một key cho mỗi tài khoản. Để đặt lại, dùng bảng điều khiển; key cũ lập tức bị vô hiệu hóa sau khi đặt lại.
Tạo tác vụ
https://nsfwrouter.xyz/api/v1/tasks/create
Gửi tác vụ AI đến cụm GPU để thực thi. Tác vụ xử lý bất đồng bộ, trả về ID. Lấy kết quả qua API truy vấn hoặc Webhook.
| Tham số | Loại | Bắt buộc | Mô tả |
|---|---|---|---|
| tool_id | int | Có | ID công cụ, lấy từ danh sách công cụ |
| params | object | Có | Tham số tác vụ, JSON object, trường tùy công cụ |
| webhook_url | string | Không | URL callback khi tác vụ hoàn thành |
| priority | int | Không | Độ ưu tiên tác vụ 1-10, mặc định 5 |
| idempotency_key | string | Không | Key idempotency, chống gửi trùng |
| execution_options | object | Không | Tùy chọn thực thi, JSON object |
curl -X POST https://nsfwrouter.xyz/api/v1/tasks/create \
-H "Authorization: Bearer sk-xxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"tool_id": 1,
"params": {
"image": "https://example.com/photo.jpg",
"prompt": "a beautiful landscape"
},
"webhook_url": "https://your-server.com/webhook"
}'
{
"code": 0,
"message": "success",
"data": {
"task": {
"id": 123,
"status": 0,
"consume_coins": 5
},
"message": "task_submitted"
}
}
Số dư tài khoản được kiểm tra trước khi gọi. Số dư không đủ trả về lỗi insufficient_coins. Coin bị trừ ngay khi tác vụ gửi thành công.
Truy vấn chi tiết tác vụ
https://nsfwrouter.xyz/api/v1/tasks/query
Truy vấn chi tiết và trạng thái tác vụ qua ID. Khi tác vụ đang xử lý, trạng thái mới nhất được lấy từ cụm GPU. Truy vấn lặp lại trong 10 giây trả về kết quả cache từ database, không lặp lại request remote.
| Tham số | Loại | Bắt buộc | Mô tả |
|---|---|---|---|
| id | int | Có | ID tác vụ |
{
"code": 0,
"message": "success",
"data": {
"task": {
"id": 123,
"status": 1,
"task_output_json": [
{
"type": "image",
"url": "https://cdn.example.com/outputs/abc123.png",
"file_name": "abc123.png",
"file_size": 1024000,
"mime_type": "image/png",
"width": 1024,
"height": 1024
}
],
"consume_coins": 5,
"created_at": 1718200000,
"completed_at": 1718200015
}
}
}
| status | Ý nghĩa |
|---|---|
| 0 | Đang xử lý |
| 1 | Hoàn thành |
| -1 | Đã hủy |
| -2 | Thất bại |
Danh sách tác vụ
https://nsfwrouter.xyz/api/v1/tasks
Truy vấn phân trang danh sách tác vụ của tài khoản hiện tại, hỗ trợ lọc theo công cụ, trạng thái và khoảng thời gian.
| Tham số | Loại | Bắt buộc | Mô tả |
|---|---|---|---|
| page | int | Không | Số trang, mặc định 1 |
| page_size | int | Không | Kích thước trang, mặc định 20, tối đa 50 |
| tool_id | int | Không | Lọc theo công cụ |
| status | int | Không | Lọc theo trạng thái (0/1/-1/-2) |
| days | int | Không | Khoảng thời gian truy vấn (ngày), mặc định 30 |
{
"code": 0,
"message": "success",
"data": {
"list": [
{
"id": 123,
"tool_id": 1,
"status": 1,
"task_output_json": [
{
"type": "image",
"url": "https://cdn.example.com/outputs/abc123.png",
"file_name": "abc123.png",
"file_size": 1024000,
"mime_type": "image/png",
"width": 1024,
"height": 1024
}
],
"error": null,
"consume_coins": 5,
"created_at": 1718200000,
"completed_at": 1718200015
},
{
"id": 122,
"tool_id": 3,
"status": 0,
"task_output_json": [],
"error": null,
"consume_coins": 10,
"created_at": 1718199000,
"completed_at": 0
}
],
"page": 1,
"page_size": 20
}
}
| Trường | Loại | Mô tả |
|---|---|---|
| type | string | Loại kết quả: image hoặc video |
| url | string | URL CDN file kết quả |
| file_name | string | Tên file |
| file_size | int | Kích thước file (byte) |
| mime_type | string | Loại MIME, vd: image/png, video/mp4 |
| width | int | Chiều rộng (pixel) |
| height | int | Chiều cao (pixel) |
Số dư tài khoản
https://nsfwrouter.xyz/api/v1/account/balance
Truy vấn số dư coin, tổng nạp và tổng tiêu của tài khoản hiện tại.
{
"code": 0,
"message": "success",
"data": {
"remain_coins": 5000,
"total_coins": 10000,
"used_coins": 5000
}
}
Webhook callback
Nếu webhook_url được cung cấp khi tạo tác vụ, POST request sẽ được gửi đến URL đó khi tác vụ hoàn thành, thất bại hoặc bị hủy. Body request là JSON.
Content-Type: application/json
Accept: application/json
User-Agent: OpenAPI-Webhook/1.0
{
"event": "task.finished",
"task": {
"id": 123,
"status": 1,
"task_output_json": [
{
"type": "image",
"url": "https://cdn.example.com/outputs/abc123.png",
"file_name": "abc123.png",
"file_size": 1024000,
"mime_type": "image/png",
"width": 1024,
"height": 1024
}
],
"consume_coins": 5,
"created_at": 1718200000,
"completed_at": 1718200015
}
}
Server của bạn phải trả về HTTP 2xx để xác nhận nhận thành công. Nếu trả non-2xx hoặc timeout (10 giây), hệ thống tự động thử lại tối đa 5 lần với chiến lược exponential backoff (60s → 120s → 240s → 480s → 960s).
Mã lỗi
Mọi response lỗi dùng định dạng thống nhất: {"code": mã_lỗi, "message": "định_danh_lỗi", "data": {}}
| Mã lỗi | message | Mô tả |
|---|---|---|
| 20001 | api_key_required | Không cung cấp API Key |
| 20001 | invalid_api_key | API Key không hợp lệ |
| 20001 | ip_not_allowed | IP không trong whitelist |
| 20001 | permission_denied | Không có quyền truy cập |
| 30001 | tool_not_found | Không tìm thấy công cụ |
| 30001 | task_not_found | Không tìm thấy tác vụ |
| 30001 | insufficient_coins | Số dư coin không đủ |
| 30001 | task_submit_failed | Gửi tác vụ thất bại |
| 30001 | task_query_failed | Truy vấn tác vụ thất bại |
| 30001 | task_already_exists | Tác vụ đã tồn tại (idempotency hit) |
| 40001 | tool_id_required | Thiếu tham số tool_id |
| 40001 | param_error | Lỗi tham số |
| 40001 | webhook_url_invalid | Định dạng webhook_url không hợp lệ |
| 40001 | params_must_be_json_object_or_array | params phải là object hoặc array JSON |
| 40001 | execution_options_must_be_json_object_or_array | execution_options phải là object hoặc array JSON |
| Phạm vi | Danh mục |
|---|---|
| 1xxxx | Lỗi hệ thống |
| 2xxxx | Lỗi xác thực |
| 3xxxx | Lỗi logic nghiệp vụ |
| 4xxxx | Lỗi tham số |
| 5xxxx | Lỗi phụ thuộc bên ngoài |