Tài liệu BasicRouter
Bắt đầu nhanh
BasicRouter mang đến cho các đội ngũ sản xuất một API ổn định duy nhất để truy cập mô hình, định tuyến, dự phòng, theo dõi mức sử dụng và thanh toán dựa trên tín dụng. Nguồn cung cấp token LLM được lấy từ các tài khoản nhà cung cấp gốc đám mây doanh nghiệp đáng tin cậy, với bảo vệ quyền riêng tư, độ ổn định cao và khả năng truy vết yêu cầu được tích hợp sẵn trong cổng kết nối.
https://api.basicrouter.ai/apihttps://api.basicrouter.ai/api/v1https://api.basicrouter.ai/api/v1Authorization: Bearer <key>Tạo khóa API
Tạo khóa API BasicRouter trong bảng điều khiển. Giữ khóa trên máy chủ của bạn và không bao giờ tiết lộ trong mã trình duyệt hoặc ứng dụng khách di động.
Chiến lược khóa được khuyến nghị:
| Loại khóa | Cách sử dụng khuyến nghị |
|---|---|
| Khóa phát triển | Phát triển cục bộ, môi trường staging, kiểm thử và nguyên mẫu. |
| Khóa sản xuất | Chỉ dành cho khối lượng công việc sản xuất backend. |
| Khóa tích hợp | Khóa dành riêng cho các công cụ như Cursor, Claude Code, Codex, Hermes hoặc OpenClaw. |
| Khóa khách hàng / đối tượng thuê | Cách ly khóa tùy chọn cho khách hàng doanh nghiệp, lưu lượng đối tượng thuê hoặc các đơn vị kinh doanh. |
Xoay vòng khóa khi quyền truy cập nhóm thay đổi. Thu hồi các khóa không còn được sử dụng.
Trỏ SDK của bạn tới BasicRouter
Hầu hết các ứng dụng khách tương thích OpenAI chỉ cần một URL cơ sở và khóa API mới.
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.BASICROUTER_API_KEY,
baseURL: "https://api.basicrouter.ai/api/v1"
});
Gửi một yêu cầu hoàn thành trò chuyện
curl --request POST \
--url https://api.basicrouter.ai/api/v1/chat/completions \
--header "Authorization: Bearer $BASICROUTER_API_KEY" \
--header "Content-Type: application/json" \
--data '{
"model": "claude-sonnet-5",
"messages": [
{ "role": "user", "content": "Explain BasicRouter in one sentence." }
]
}'
Kiểm tra mức sử dụng và số dư
curl --request GET \
--url https://api.basicrouter.ai/api/v1/billing/balance \
--header "Authorization: Bearer $BASICROUTER_API_KEY"
Khám phá mô hình
Sử dụng trang Mô hình hoặc API Mô hình để kiểm tra các mô hình văn bản có sẵn. Siêu dữ liệu mô hình bao gồm nhà cung cấp, nhà cung cấp dịch vụ, phương thức, độ dài ngữ cảnh, họ API được hỗ trợ, khả năng được hỗ trợ, tình trạng sẵn có, giới hạn cấp tài khoản và giá tín dụng.
Điểm cuối: GET /v1/models Mục đích: Liệt
kê các mô hình sẵn có cho tài khoản hiện tại.
curl --request GET \
--url https://api.basicrouter.ai/api/v1/models \
--header "Authorization: Bearer $BASICROUTER_API_KEY"
Ma trận khả năng
| Khả năng | Mô tả | Thường được sử dụng bởi |
|---|---|---|
streaming | Hỗ trợ phát trực tuyến sự kiện do máy chủ gửi. | Ứng dụng trò chuyện, tác nhân lập trình, UX thời gian thực. |
tool_calling | Hỗ trợ gọi công cụ hoặc hàm. | Tác nhân, tự động hóa quy trình, trợ lý lập trình. |
structured_outputs | Hỗ trợ đầu ra ràng buộc theo lược đồ hoặc JSON. | Trích xuất dữ liệu, tự động hóa quy trình, ứng dụng doanh nghiệp. |
json_mode | Có thể trả về đầu ra định dạng JSON. | Phản hồi có cấu trúc nhẹ. |
vision | Chấp nhận đầu vào hình ảnh. | Trò chuyện đa phương thức, phân tích UI, ảnh chụp tài liệu. |
prompt_caching | Hỗ trợ đầu vào được lưu vào bộ nhớ đệm hoặc tái sử dụng ngữ cảnh. | Tác nhân ngữ cảnh dài, lời nhắc hệ thống lặp lại. |
reasoning | Hỗ trợ điều khiển suy luận rõ ràng khi có sẵn. | Quy hoạch phức tạp, lập trình, quy trình phân tích. |
logprobs | Hỗ trợ đầu ra xác suất token. | Đánh giá, xếp hạng, quy trình NLP nâng cao. |
Ma trận tương thích họ API
| Họ API | Văn bản | Đầu vào hình ảnh | Gọi công cụ | Đầu ra có cấu trúc | Phát trực tuyến | Ghi chú |
|---|---|---|---|---|---|---|
| OpenAI Chat Completions | Có | Tùy thuộc mô hình | Tùy thuộc mô hình | Tùy thuộc mô hình | Có | Lựa chọn mặc định tốt nhất cho các tác nhân và SDK tương thích OpenAI. |
| OpenAI Responses | Có | Tùy thuộc mô hình | Tùy thuộc mô hình | Tùy thuộc mô hình | Có | Được khuyến nghị cho quy trình tác nhân kiểu OpenAI mới hơn. |
| Anthropic Messages | Có | Tùy thuộc mô hình | Tùy thuộc mô hình | Tùy thuộc mô hình | Có | Tốt nhất cho ứng dụng khách tương thích Claude và Claude Code. |
| Tạo hình ảnh BasicRouter | Không | Tùy thuộc mô hình | Không | Không | Không | Sử dụng thăm dò tác vụ không đồng bộ hoặc webhook. |
| Tạo video BasicRouter | Không | Tùy thuộc mô hình | Không | Không | Không | Sử dụng thăm dò tác vụ không đồng bộ hoặc webhook. |
Xác thực
Mọi yêu cầu API đều sử dụng bearer token. Lưu khóa trong biến môi trường phía máy chủ, xoay vòng khi quyền truy cập nhóm thay đổi và ghi lại ID yêu cầu để gỡ lỗi.
| Header | Giá trị | Ghi chú |
|---|---|---|
Authorization | Bearer YOUR_API_KEY | Bắt buộc cho mọi yêu cầu. |
Content-Type | application/json | Bắt buộc cho phần thân yêu cầu JSON. |
Khuyến nghị bảo mật khóa
- Giữ khóa API trên máy chủ. Không tiết lộ khóa trong mã trình duyệt hoặc ứng dụng khách di động.
- Sử dụng các khóa riêng biệt cho phát triển, staging, sản xuất và tích hợp bên thứ ba.
- Phạm vi hóa khóa theo môi trường, dịch vụ, khách hàng hoặc đối tượng thuê khi có sẵn.
- Xoay vòng khóa sau khi nhân viên nghỉ việc, quyền truy cập nhà cung cấp thay đổi hoặc nghi ngờ rò rỉ.
- Lưu khóa trong trình quản lý bí mật hoặc biến môi trường, không phải mã nguồn.
Tác nhân lập trình
BasicRouter hoạt động với các tác nhân lập trình và công cụ phát triển AI hỗ trợ các
điểm cuối API tương thích OpenAI hoặc tương thích Anthropic. Sử dụng các bí danh định
tuyến như mwf/coding-auto để BasicRouter có thể định tuyến đến mô hình
lập trình tốt nhất sẵn có mà không yêu cầu nhà phát triển thay đổi cấu hình công cụ.
Thiết lập tương thích OpenAI chung
Sử dụng thiết lập này cho Cursor, Codex, Hermes, OpenClaw, Continue, Aider, Cline, các tác nhân dựa trên LangChain, các tác nhân dựa trên LlamaIndex và các runtime tác nhân tương thích OpenAI tùy chỉnh.
export OPENAI_BASE_URL="https://api.basicrouter.ai/api/v1"
export OPENAI_API_KEY="$BASICROUTER_API_KEY"
export OPENAI_MODEL="mwf/coding-auto"
Thiết lập tương thích Anthropic chung
Sử dụng thiết lập này cho các máy khách tương thích Claude và các công cụ mong đợi định dạng Anthropic Messages.
export ANTHROPIC_BASE_URL="https://api.basicrouter.ai/api/anthropic"
export ANTHROPIC_API_KEY="$BASICROUTER_API_KEY"
export ANTHROPIC_MODEL="mwf/coding-auto"
Mô hình tác nhân được khuyến nghị
| Trường hợp sử dụng | Bí danh khuyến nghị | Yêu cầu |
|---|---|---|
| Lập trình chung | mwf/coding-auto | Gọi công cụ, phát trực tuyến, khả năng lập trình mạnh. |
| Trò chuyện lập trình nhanh | mwf/coding-fast | Độ trễ thấp và phát trực tuyến. |
| Phân tích kho lưu trữ lớn | mwf/coding-long | Ngữ cảnh dài và đầu ra ổn định. |
| Trợ lý lập trình nhạy cảm chi phí | mwf/low-cost | Giá thấp hơn và chất lượng lập trình chấp nhận được. |
| Ảnh chụp màn hình UI / lập trình thị giác | mwf/vision-chat | Đầu vào hình ảnh và đầu ra văn bản. |
Hướng dẫn nhanh Cursor
Sử dụng điểm cuối tương thích OpenAI.
Base URL: https://api.basicrouter.ai/api/v1
API Key: BASICROUTER_API_KEY
Model: mwf/coding-auto
Các bước khuyến nghị:
- Mở cài đặt Cursor.
- Thêm hoặc bật cấu hình khóa API tương thích OpenAI.
- Đặt ghi đè OpenAI base URL thành
https://api.basicrouter.ai/api/v1. - Thêm một mô hình tùy chỉnh như
mwf/coding-auto,mwf/coding-fast, hoặcmwf/coding-long. - Sử dụng mô hình hỗ trợ phát trực tuyến và gọi công cụ để có hành vi tác nhân tốt nhất.
Khắc phục sự cố:
| Vấn đề | Khắc phục đề xuất |
|---|---|
| Mô hình không hiển thị | Thêm tên mô hình thủ công như một mô hình tùy chỉnh. |
| Gọi công cụ thất bại | Sử dụng mô hình có tool_calling: true trong trang Mô hình. |
| Phát trực tuyến bị gián đoạn | Thử lại với backoff hoặc sử dụng bí danh định tuyến có dự phòng. |
| Lỗi 401 | Kiểm tra khóa API và base URL. |
| Lỗi mô hình 404 | Xác nhận mô hình được bật cho tài khoản. |
Hướng dẫn nhanh Claude Code
Sử dụng điểm cuối cổng tương thích Anthropic.
export ANTHROPIC_BASE_URL="https://api.basicrouter.ai/api/anthropic"
export ANTHROPIC_API_KEY="$BASICROUTER_API_KEY"
export ANTHROPIC_MODEL="mwf/coding-auto"
BasicRouter hỗ trợ đường dẫn tương thích Anthropic này cho Claude Code và khả năng tương thích SDK Anthropic:
POST /api/v1/messages
Các yêu cầu khuyến nghị:
| Yêu cầu | Lý do |
|---|---|
| Cấu trúc yêu cầu tương thích Anthropic Messages | Claude Code mong đợi tin nhắn kiểu Anthropic. |
| Hỗ trợ phát trực tuyến | Claude Code dựa vào trải nghiệm phát trực tuyến. |
| Hỗ trợ gọi công cụ | Bắt buộc cho quy trình lập trình tác nhân. |
| Ngữ cảnh dài | Hữu ích cho các tác vụ cấp kho lưu trữ. |
| Dự phòng ổn định | Hữu ích cho các phiên lập trình dài. |
Hướng dẫn nhanh Codex
Sử dụng BasicRouter như một nhà cung cấp mô hình tương thích OpenAI tùy chỉnh.
Cấu hình nhà cung cấp ví dụ:
[model_providers.basicrouter]
name = "BasicRouter"
base_url = "https://api.basicrouter.ai/api/v1"
env_key = "BASICROUTER_API_KEY"
wire_api = "responses"
model_provider = "basicrouter"
model = "mwf/coding-auto"
Biến môi trường:
export BASICROUTER_API_KEY="br_xxx"
Các mô hình khuyến nghị:
| Mô hình | Trường hợp sử dụng |
|---|---|
mwf/coding-auto | Mô hình tác nhân lập trình mặc định. |
mwf/coding-long | Ngữ cảnh kho lưu trữ lớn. |
mwf/coding-fast | Lặp nhanh và các thay đổi nhỏ. |
Khắc phục sự cố:
| Vấn đề | Khắc phục đề xuất |
|---|---|
| Lỗi xác thực | Xác nhận env_key trỏ đến BASICROUTER_API_KEY. |
| Không tìm thấy mô hình | Thêm bí danh trong Bảng điều khiển BasicRouter hoặc sử dụng ID mô hình trực tiếp. |
| Lỗi API Responses | Chỉ sử dụng wire_api = "responses" cho các mô hình và
điểm cuối hỗ trợ Responses. |
| Mô hình chỉ hỗ trợ Chat Completions | Chuyển sang wire API tương thích chat nếu máy khách hỗ trợ. |
Hướng dẫn nhanh Hermes
Sử dụng điểm cuối tương thích OpenAI trừ khi triển khai Hermes của bạn được cấu hình cho giao thức khác.
export OPENAI_BASE_URL="https://api.basicrouter.ai/api/v1"
export OPENAI_API_KEY="$BASICROUTER_API_KEY"
export OPENAI_MODEL="mwf/coding-auto"
Chính sách mô hình khuyến nghị:
| Tải công việc Hermes | Mô hình |
|---|---|
| Tạo mã chung | mwf/coding-auto |
| Thực thi tác vụ độ trễ thấp | mwf/coding-fast |
| Quét kho ngữ cảnh dài | mwf/coding-long |
| Tác vụ nền nhạy cảm chi phí | mwf/low-cost |
Hướng dẫn nhanh OpenClaw
Sử dụng điểm cuối tương thích OpenAI cho cấu hình runtime tác nhân kiểu OpenAI.
export OPENAI_BASE_URL="https://api.basicrouter.ai/api/v1"
export OPENAI_API_KEY="$BASICROUTER_API_KEY"
export OPENAI_MODEL="mwf/coding-auto"
Nếu OpenClaw hỗ trợ nhiều nhà cung cấp, cấu hình BasicRouter như một nhà cung cấp tương thích OpenAI và sử dụng bí danh định tuyến BasicRouter để chọn mô hình.
{
"provider": "openai-compatible",
"base_url": "https://api.basicrouter.ai/api/v1",
"api_key_env": "BASICROUTER_API_KEY",
"model": "mwf/coding-auto"
}
Danh sách kiểm tra khả năng tương thích tác nhân
| Khả năng | Bắt buộc cho |
|---|---|
| Phát trực tuyến | Trải nghiệm terminal/trình soạn thảo tốt. |
| Gọi công cụ | Lập trình tác nhân, chỉnh sửa tệp, thực thi lệnh. |
| Ngữ cảnh dài | Kho lưu trữ lớn và thay đổi nhiều tệp. |
| Đầu ra có cấu trúc | Lập kế hoạch, phân tách tác vụ, quy trình tự động. |
| Đầu vào hình ảnh | Phân tích ảnh chụp màn hình UI và quy trình thiết kế thành mã. |
| Dự phòng | Ổn định sản xuất và tác vụ dài. |
Sử dụng bảng điều khiển
Bảng điều khiển BasicRouter là mặt phẳng điều khiển vận hành cho truy cập API, tính khả dụng của mô hình, chính sách định tuyến, hiển thị mức sử dụng và quản lý thanh toán. Nó cung cấp cho quản trị viên tài khoản một chế độ xem tập trung về các khóa, mô hình, yêu cầu, tín dụng và điều khiển cấp tài khoản cho lưu lượng mô hình sản xuất.
Quản lý khóa API
Tạo, xoay vòng, thu hồi và gắn nhãn khóa API từ bảng điều khiển. Sử dụng các khóa riêng biệt cho phát triển, dàn dựng, sản xuất và các dịch vụ riêng lẻ để mức sử dụng có thể được kiểm toán và cô lập theo môi trường hoặc ứng dụng.
| Thực hành | Mô tả |
|---|---|
| Môi trường riêng biệt | Sử dụng các khóa API khác nhau cho lưu lượng phát triển, dàn dựng và sản xuất. |
| Sử dụng nhãn mô tả | Gắn nhãn khóa theo ứng dụng, dịch vụ, môi trường hoặc tích hợp. |
| Xoay vòng thường xuyên | Xoay vòng khóa khi quyền truy cập thay đổi hoặc thông tin đăng nhập có thể đã bị lộ. |
| Tránh lộ ở phía máy khách | Chỉ giữ khóa API trên các hệ thống phía máy chủ. Không để lộ khóa trong mã máy khách trình duyệt hoặc di động. |
| Theo dõi mức sử dụng khóa | Xem xét khối lượng yêu cầu, mức tiêu thụ tín dụng và các mẫu lỗi theo khóa. |
Danh sách mô hình
Sử dụng trang Mô hình để xem xét các mô hình sẵn có cho tài khoản. Mỗi mục mô hình có thể bao gồm nhà cung cấp, nhà cung cấp dịch vụ, phương thức, họ API được hỗ trợ, độ dài ngữ cảnh, cờ khả năng, tình trạng sẵn có và thông tin giá.
| Bộ lọc | Mục đích |
|---|---|
| Nhà cung cấp | Lọc theo nhà cung cấp mô hình như OpenAI, Anthropic, Google, Qwen, DeepSeek hoặc các nhà cung cấp khác. |
| Nhà cung cấp dịch vụ | Lọc theo nhà cung cấp dịch vụ hoặc nhà cung cấp đám mây. |
| Phương thức | Lọc theo hỗ trợ văn bản, hình ảnh, video, nhúng, âm thanh hoặc đa phương thức. |
| Khả năng | Lọc theo hỗ trợ phát trực tuyến, gọi công cụ, đầu ra có cấu trúc, thị giác, bộ nhớ đệm prompt, hoặc suy luận. |
| Tình trạng sẵn có | Xác định các mô hình hiện có sẵn cho tài khoản. |
Cho các ứng dụng sản xuất, xác minh khả năng mô hình trước khi bật lưu lượng. Một số tham số và tính năng phụ thuộc vào mô hình và có thể không được hỗ trợ trên tất cả các họ API.
Sử dụng & nhật ký
Chế độ xem Sử dụng & Nhật ký cung cấp hiển thị vận hành cho lưu lượng API. Các nhóm có thể kiểm tra khối lượng yêu cầu, mô hình đã chọn, mục tiêu định tuyến đã giải quyết, mức tiêu thụ tín dụng, độ trễ, mã lỗi và ID yêu cầu.
- Khắc phục sự cố yêu cầu thất bại.
- Nhận diện các tải công việc chi phí cao.
- So sánh mức sử dụng mô hình giữa các ứng dụng và môi trường.
- Xác thực hành vi định tuyến và dự phòng.
- Điều tra vấn đề độ trễ hoặc tính khả dụng của nhà cung cấp.
- Cung cấp ID yêu cầu khi liên hệ hỗ trợ.
Mỗi phản hồi API bao gồm hoặc tiết lộ một ID yêu cầu BasicRouter. Lưu ID này trong nhật ký ứng dụng của bạn để làm cho việc gỡ lỗi sản xuất và leo thang hỗ trợ hiệu quả hơn.
Dự phòng
Dự phòng là cơ chế khả năng phục hồi của BasicRouter. Khi mô hình chính hoặc chính sách định tuyến thất bại, hệ thống tự động chuyển sang mô hình dự phòng để tiếp tục xử lý yêu cầu. Điều này giữ cho ứng dụng của bạn phản hồi tốt và giảm thiểu rủi ro gián đoạn dịch vụ.
Dự phòng hoạt động như một lưới an toàn, giữ cho ứng dụng của bạn chạy trơn tru ngay cả khi xảy ra lỗi mô hình, giới hạn hạn ngạch hoặc biến động mạng.
Tại sao dự phòng quan trọng
Trong sản xuất, các dịch vụ mô hình có thể gặp một số vấn đề không thể đoán trước:
- Lỗi dịch vụ mô hình: API thượng nguồn tạm thời không khả dụng hoặc hết thời gian chờ.
- Biến động hiệu suất: tải mô hình cao dẫn đến phản hồi chậm hoặc thất bại.
- Lỗi định tuyến: tất cả các mô hình ứng viên được chọn bằng định tuyến thông minh đều không khả dụng.
Dự phòng giữ cho ứng dụng của bạn sẵn có bằng cách cung cấp một đường dẫn dự phòng đáng tin cậy.
Ưu điểm cốt lõi
| Ưu điểm | Mô tả |
|---|---|
| Tính khả dụng cao | Chuyển đổi dự phòng tự động giữ cho dịch vụ chạy và giảm thiểu tác động của gián đoạn. |
| Chuyển đổi minh bạch | Hệ thống chuyển đổi mô hình tự động — không cần thay đổi mã ứng dụng. |
| Cấu hình linh hoạt | Hỗ trợ cả cấu hình theo yêu cầu và cấp tài khoản cho các trường hợp sử dụng khác nhau. |
| Tối ưu chi phí | Chọn một mô hình tiết kiệm chi phí hơn làm dự phòng để kiểm soát chi phí khẩn cấp. |
| Quản lý tập trung | Cấu hình một lần ở cấp tài khoản và nó tự động áp dụng cho mọi yêu cầu. |
Cấu hình mô hình dự phòng toàn cục
BasicRouter hỗ trợ thiết lập mô hình dự phòng toàn cục từ backend bảng điều khiển. Tất cả các yêu cầu tự động sử dụng mô hình này làm dự phòng khi thất bại.
Cách cấu hình:
- Đi đến trang cài đặt chiến lược BasicRouter.
- Tìm cài đặt Mô hình dự phòng mặc định.
- Chọn mô hình dự phòng toàn cục của bạn từ danh sách thả xuống.
- Lưu cài đặt để áp dụng ngay lập tức.
Ưu điểm của cấu hình toàn cục:
- Không cần thay đổi mã: cấu hình một lần và áp dụng toàn cục, không cần lặp lại cài đặt trên mỗi yêu cầu.
- Quản lý tập trung: quản lý chính sách dự phòng tại một nơi để dễ điều chỉnh và theo dõi hơn.
- Bảo trì đơn giản: giảm độ phức tạp của mã và khả năng xảy ra lỗi cấu hình.
- Ghi đè linh hoạt: cấu hình dự phòng cấp yêu cầu có ưu tiên và có thể ghi đè cài đặt toàn cục cho các kịch bản cụ thể.
Cấu hình dự phòng cấp yêu cầu
Cho các kịch bản kinh doanh cụ thể, bạn có thể chỉ định một mô hình dự phòng trên từng yêu cầu để ghi đè cấu hình toàn cục.
Chỉ định mô hình dự phòng với tham số router.fallBackModels:
{
"model": "claude-sonnet-4",
"messages": [
{
"role": "user",
"content": "Explain what quantum computing is"
}
],
"router": {
"fallBackModels": ["glm-5.2"]
}
}
Quy tắc ưu tiên
Khi có nhiều cấu hình dự phòng, ưu tiên chạy từ cao nhất đến thấp nhất:
router.fallBackModelscấp yêu cầu: mô hình dự phòng được chỉ định trên một yêu cầu riêng lẻ.- Mô hình dự phòng mặc định toàn cục: mô hình dự phòng toàn cục được cấu hình trong bảng điều khiển.
- Không có dự phòng: nếu không cấu hình cái nào, yêu cầu trả về lỗi khi thất bại.
- Nếu tất cả các mô hình dự phòng thất bại, hệ thống trả về lý do thất bại từ mô hình cuối cùng được thử.
- Khi xảy ra dự phòng, phản hồi chỉ ra mô hình thực sự được sử dụng, giúp dễ theo dõi và phân tích.
Quản trị tài khoản
Tùy thuộc vào loại tài khoản, bảng điều khiển có thể bao gồm kích hoạt mô hình cấp tài khoản, điều khiển đại lý phân phối hoặc nhà phân phối, cấu hình thanh toán và cài đặt truy cập. Quản trị viên có thể sử dụng các điều khiển này để căn chỉnh quyền truy cập mô hình, hiển thị mức sử dụng và trách nhiệm thanh toán với các ứng dụng, tài khoản khách hàng hoặc đơn vị kinh doanh.
Danh sách kiểm tra vận hành sản xuất
| Mục | Khuyến nghị |
|---|---|
| Khóa API | Sử dụng khóa sản xuất chuyên dụng với nhãn rõ ràng. |
| Mô hình | Xác nhận tình trạng sẵn có, giá, độ dài ngữ cảnh và các khả năng yêu cầu của mô hình. |
| Định tuyến | Cấu hình bí danh định tuyến hoặc chính sách dự phòng cho các tải công việc quan trọng. |
| Nhật ký | Đảm bảo ID yêu cầu được ghi lại trong nhật ký ứng dụng. |
| Thanh toán | Xác nhận số dư ví, tình trạng gói và quy tắc khấu trừ tín dụng. |
| Giới hạn tỷ lệ | Xem xét RPM, TPM, đồng thời và giới hạn tác vụ phương tiện cấp tài khoản. |
| Cảnh báo | Theo dõi tăng trưởng sử dụng, số dư tín dụng, lỗi và tính khả dụng của nhà cung cấp. |
Thanh toán & tín dụng
BasicRouter sử dụng mô hình thanh toán dựa trên tín dụng cho các tải công việc mô hình văn bản, hình ảnh, video và các loại khác được hỗ trợ. Tín dụng cung cấp một đơn vị thống nhất cho việc sử dụng đa mô hình và đa nhà cung cấp để các nhóm có thể quản lý mức tiêu thụ một cách nhất quán trên các phương thức và họ API.
Giá mô hình chi tiết có sẵn trên trang Mô hình hoặc qua các API siêu dữ liệu mô hình. Giá có thể thay đổi theo mô hình, nhà cung cấp, phương thức, độ phân giải, loại token, độ dài đầu ra, thời gian tác vụ, loại tài khoản và thỏa thuận thương mại.
Nạp tiền & ví
Tài khoản có thể thêm tín dụng ví trả theo mức dùng cho sử dụng linh hoạt. Tín dụng ví được sử dụng sau khi tín dụng gói hàng tháng và gói tài nguyên đã được tiêu thụ, trừ khi một quy tắc thanh toán tùy chỉnh áp dụng cho tài khoản.
Tín dụng ví không hết hạn trừ khi được chỉ định khác trong điều khoản thương mại áp dụng. Phí dịch vụ được tính khi nạp lại ví trả theo mức dùng.
Gói hàng tháng và gói tài nguyên
Mỗi người dùng hoặc tài khoản có thể chọn một gói hàng tháng đang hoạt động. Gói hàng tháng cung cấp một lượng năng lực sử dụng xác định, điều khoản thương mại và cấu hình truy cập cấp tài khoản cho kỳ thanh toán.
Người dùng cũng có thể mua nhiều gói tài nguyên để có thêm năng lực sử dụng. Gói tài nguyên có thể tách biệt mức sử dụng cam kết khỏi số dư ví trả theo mức dùng và hữu ích cho sử dụng khối lượng lớn văn bản, hình ảnh, video hoặc tải công việc chuyên biệt.
Thứ tự khấu trừ
Trừ khi cấu hình quy tắc thanh toán tùy chỉnh, tín dụng được khấu trừ theo thứ tự sau:
| Ưu tiên | Nguồn tín dụng | Mô tả |
|---|---|---|
| 1 | Gói hàng tháng | Năng lực sử dụng hàng tháng đi kèm được tiêu thụ trước tiên. |
| 2 | Gói tài nguyên | Các gói đã mua thêm được tiêu thụ sau tín dụng gói hàng tháng. |
| 3 | Ví trả theo mức dùng | Số dư ví được tiêu thụ sau tín dụng gói và gói tài nguyên. |
Cho các tài khoản có điều khoản thương mại tùy chỉnh, thứ tự khấu trừ, quy tắc hết hạn, mức sử dụng đi kèm và giá có thể khác. Quy tắc cụ thể theo tài khoản được hiển thị trong bảng điều khiển hoặc cung cấp qua thỏa thuận thương mại.
Định giá tùy chỉnh
Giá có thể được tùy chỉnh cho mỗi người dùng hoặc tài khoản. Khách hàng doanh nghiệp, tài khoản đại lý phân phối, tài khoản nhà phân phối và khách hàng khối lượng lớn có thể đủ điều kiện cho giá tùy chỉnh. Liên hệ bộ phận bán hàng để nhận báo giá.
Giá tùy chỉnh có thể được cấu hình theo tài khoản, mô hình, nhà cung cấp, phương thức, khu vực, khối lượng sử dụng hoặc thỏa thuận thương mại. Khi giá tùy chỉnh được bật, bảng điều khiển và API thanh toán phản ánh giá và quy tắc khấu trừ cụ thể theo tài khoản khi có sẵn.
Đơn vị giá
Các phương thức mô hình khác nhau sử dụng các đơn vị đo lường khác nhau. BasicRouter quy đổi các đơn vị này thành tín dụng theo quy tắc giá của mô hình.
| Phương thức | Cơ sở giá phổ biến |
|---|---|
| Văn bản | Token đầu vào, token đầu ra, token đọc bộ nhớ đệm, token ghi bộ nhớ đệm, token suy luận hoặc các danh mục token cụ thể theo mô hình. |
| Hình ảnh | Mô hình, độ phân giải, số hình ảnh đã tạo, mức sử dụng hình ảnh đầu vào, chế độ chỉnh sửa hoặc cài đặt chất lượng. |
| Video | Mô hình, độ phân giải đầu ra, giây đã tạo, tỷ lệ khung hình, mức sử dụng hình ảnh hoặc video đầu vào và loại tác vụ. |
| Nhúng | Token đầu vào hoặc số bản ghi nhúng. |
| Âm thanh | Thời lượng đầu vào, thời lượng đầu ra, độ dài bản chép hoặc các đơn vị âm thanh cụ thể theo mô hình. |
Đơn vị giá có thể thay đổi theo mô hình. Luôn tham khảo trang chi tiết mô hình hoặc siêu dữ liệu giá trước khi bật một mô hình trong sản xuất.
Gán mức sử dụng
Mức sử dụng BasicRouter có thể được xem xét theo tài khoản, khóa API, mô hình, phương thức hoặc phạm vi thời gian. Điều này cho phép các nhóm gán chi phí cho ứng dụng, môi trường, khách hàng hoặc đơn vị kinh doanh nội bộ.
| Chiều | Mô tả |
|---|---|
| Khóa API | Nhóm mức sử dụng theo ứng dụng, dịch vụ hoặc môi trường. |
| Mô hình | So sánh chi phí và khối lượng theo mô hình đã chọn. |
| Mô hình đã giải quyết | Xem xét mô hình thực tế được sử dụng sau định tuyến hoặc dự phòng. |
| Phương thức | Tách biệt mức sử dụng văn bản, hình ảnh, video, nhúng và âm thanh. |
| Phạm vi thời gian | Xem xét các kỳ báo cáo hàng ngày, hàng tháng hoặc tùy chỉnh. |
| Siêu dữ liệu | Nhóm mức sử dụng theo siêu dữ liệu yêu cầu tùy chỉnh như ID khách hàng, ID người thuê, ID người dùng hoặc môi trường. |
Số dư tín dụng
Kiểm tra xem có bao nhiêu tín dụng sẵn có trên tài khoản của bạn. Số dư được chia thành ba ví được khấu trừ theo thứ tự: hạn mức gói hàng tháng, gói tài nguyên đã mua và ví trả theo mức dùng. Tổng tài nguyên kết hợp (gói hàng tháng + gói tài nguyên, không bao gồm trả theo mức dùng) cũng có sẵn để theo dõi mức sử dụng đi kèm tách biệt khỏi chi tiêu nạp tiền.
Để truy xuất theo chương trình, xem
GET /v1/billing/balance trong Tài liệu
API.
Chi tiết sử dụng
Xem xét danh sách theo trang, theo thời gian của các bản ghi sử dụng riêng lẻ để báo cáo, theo dõi và phân bổ chi phí nội bộ. Mỗi bản ghi hiển thị mô hình, loại mô hình (văn bản, hình ảnh hoặc video), tín dụng đã khấu trừ và phân tích từng ví mà mỗi khoản khấu trừ được rút từ. Kết quả có thể được lọc theo một phạm vi thời gian cụ thể.
Để truy xuất theo chương trình, xem
GET /v1/usage trong Tài liệu API.
Lịch sử giao dịch
Sử dụng lịch sử giao dịch để xem xét các biến động tín dụng, bao gồm nạp tiền, phân bổ gói, cấp gói tài nguyên, khấu trừ mức sử dụng, điều chỉnh và hiệu chỉnh hành chính.
Để truy xuất theo chương trình, xem
GET /v1/billing/transactions trong Tài
liệu API.
Yêu cầu thất bại và hoàn tiền
Lỗi xác thực, lỗi xác thực danh tính và lỗi quyền thường không được tính phí vì không có thực thi mô hình nào xảy ra. Các yêu cầu đến một mô hình thượng nguồn hoặc tạo đầu ra một phần có thể tiêu thụ tín dụng tùy thuộc vào mô hình, nhà cung cấp và trạng thái phản hồi.
Cho các tác vụ hình ảnh và video không đồng bộ, hành vi thanh toán phụ thuộc vào việc tác vụ đã được chấp nhận, bắt đầu, hoàn thành, thất bại hay hủy. Phản hồi chi tiết tác vụ bao gồm thông tin sử dụng khi tín dụng đã được tiêu thụ.
Nạp tiền, gói hàng tháng, gói tài nguyên và tín dụng đã tiêu thụ không thể hoàn lại trừ khi được chỉ định khác trong thỏa thuận thương mại áp dụng hoặc yêu cầu bởi pháp luật.
Tài liệu API
Quy ước chung
URL cơ sở
Tất cả các điểm cuối được phục vụ dưới tiền tố /v1.
Xác thực
Các lệnh gọi đến điểm cuối /v1/* sử dụng xác thực
Khóa API (không phải JWT). Khóa API được truyền qua header sau:
| Header | Định dạng | Mô tả |
|---|---|---|
Authorization | Bearer <api_key> | Kiểu OpenAI. Điểm cuối tương thích Anthropic cũng chấp nhận
x-api-key với anthropic-version: 2023-06-01. |
Các khóa bị thiếu hoặc không hợp lệ trả về 401.
Kiểm tra trước số dư
Tất cả các điểm cuối gọi mô hình chạy kiểm tra trước số dư trước khi thực thi:
- Số dư không đủ trả về
Insufficient credit, được ánh xạ tới:- Giao thức OpenAI: HTTP
400,code = insufficient_quota - Giao thức Anthropic: HTTP
402,type = billing_error
- Giao thức OpenAI: HTTP
- Một số điểm cuối cũng ước tính chi phí tối thiểu theo mô hình cho lần kiểm tra thứ hai.
POST https://api.basicrouter.ai/api/v1/chat/completions
Điểm cuối tương thích OpenAI Chat Completions. Hỗ trợ phát trực tuyến và không phát trực tuyến, gọi công cụ, chế độ JSON và đầu vào đa phương thức.
| Trường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
model | String | Có | Tên mô hình. |
messages | Message[] | Có | Tin nhắn hội thoại. |
stream | Boolean | Không | Chế độ phát trực tuyến, mặc định false. |
temperature | Double | Không | Nhiệt độ lấy mẫu. |
max_tokens | Integer | Không | Token đầu ra tối đa. |
top_p | Double | Không | Lấy mẫu hạt nhân. |
presence_penalty | Double | Không | — |
frequency_penalty | Double | Không | — |
tools | Tool[] | Không | Định nghĩa công cụ. |
tool_choice | String|Object | Không | auto / none / required / hàm cụ thể. |
response_format | Object | Không | {type, json_schema:{name,schema,strict}};
text/json_object/json_schema. |
parallel_tool_calls | Boolean | Không | — |
metadata | Map | Không | Siêu dữ liệu truyền qua. |
Các trường Message:
| Trường | Kiểu | Mô tả |
|---|---|---|
role | String | system / user / assistant /
tool. |
content | String|Array | Văn bản thuần hoặc mảng khối nội dung đa phương thức
([{type:"text",text},{type:"image_url",image_url:{url}}]). |
tool_call_id | String | Liên kết đến tool_calls khi role=tool. |
tool_calls | ToolCall[] | Có mặt khi role=assistant thực hiện gọi công cụ. |
| Trường | Kiểu | Mô tả |
|---|---|---|
type | String | Cố định function. |
function | Object | Định nghĩa hàm. |
function.name | String | Tên hàm. |
function.description | String | Mô tả hàm. |
function.parameters | Object | JSON Schema cho đầu vào. |
curl --request POST \
--url https://api.basicrouter.ai/api/v1/chat/completions \
--header "Authorization: Bearer $BASICROUTER_API_KEY" \
--header "Content-Type: application/json" \
--data '{
"model": "glm-5.2",
"messages": [{"role": "user", "content": "Describe Hangzhou in one sentence."}],
"stream": false,
"temperature": 0.7
}'
{
"id": "chatcmpl-xxx",
"object": "chat.completion",
"created": 1721380000,
"model": "glm-5.2",
"choices": [
{
"index": 0,
"message": {"role": "assistant", "content": "Hangzhou is ..."},
"finish_reason": "stop"
}
],
"usage": {"prompt_tokens": 12, "completion_tokens": 18, "total_tokens": 30}
}
Các trường phản hồi (không phát trực tuyến):
| Trường | Kiểu | Mô tả |
|---|---|---|
id | String | ID hoàn thành. |
object | String | Cố định chat.completion. |
created | Long | Dấu thời tạo (giây). |
model | String | Tên mô hình. |
choices | Choice[] | {index, message:{role, content, tool_calls?}, finish_reason}. |
usage | Object | {prompt_tokens, completion_tokens, total_tokens}. |
| Trường | Kiểu | Mô tả |
|---|---|---|
id | String | ID gọi công cụ. |
type | String | Cố định function. |
function | Object | Chi tiết gọi hàm. |
function.name | String | Tên hàm. |
function.arguments | Object | Đối số hàm. |
Ví dụ phản hồi phát trực tuyến:
data: {"object":"chat.completion.chunk","choices":[{"delta":{"role":"assistant","content":"..."}}]}
data: {"object":"chat.completion.chunk","choices":[{"delta":{"content":"..."}}]}
data: [DONE]
POST https://api.basicrouter.ai/api/v1/responses
Điểm cuối tương thích OpenAI Responses. Sử dụng input thay vì
messages, instructions thay vì tin nhắn hệ thống và khối
text thay vì response_format.
| Trường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
model | String | Có | Tên mô hình. |
input | String|Array | Có | Chuỗi thuần (tin nhắn người dùng) hoặc mảng đối tượng tin nhắn. |
instructions | String | Không | Prompt hệ thống. |
stream | Boolean | Không | Mặc định false. |
max_output_tokens | Integer | Không | Token đầu ra tối đa. |
temperature | Double | Không | Mặc định 1. |
top_p | Double | Không | — |
tools | Tool[] | Không | Cấp cao nhất {type, name, description, parameters}. |
tool_choice | String|Object | Không | auto/none/required/{type,name}. |
text | Object | Không | {format:{type, name, schema, strict}};
text/json_object/json_schema. |
metadata | Map | Không | — |
previous_response_id | String | Không | ID phản hồi trước đó cho hội thoại nhiều lượt. |
parallel_tool_calls | Boolean | Không | — |
curl --request POST \
--url https://api.basicrouter.ai/api/v1/responses \
--header "Authorization: Bearer $BASICROUTER_API_KEY" \
--header "Content-Type: application/json" \
--data '{
"model": "glm-5.2",
"input": "Describe Hangzhou in one sentence.",
"instructions": "Be concise.",
"stream": false
}'
{
"id": "resp_xxx",
"object": "response",
"model": "glm-5.2",
"status": "completed",
"created_at": 1721380000,
"output": [
{
"id": "msg_xxx",
"type": "message",
"role": "assistant",
"content": [{"type": "output_text", "text": "Hangzhou is ..."}],
"status": "completed"
}
],
"usage": {"input_tokens": 12, "output_tokens": 18, "total_tokens": 30}
}
Các trường phản hồi (không streaming):
| Trường | Kiểu | Mô tả |
|---|---|---|
id | String | ID phản hồi. |
object | String | Cố định response. |
model | String | Tên mô hình. |
status | String | vd. completed. |
created_at | Long | Dấu thời gian tạo (giây). |
output | Array | Các mục đầu ra. Mục tin nhắn:
{id, type:"message", role, content:[{type:"output_text",
text}], status}. Mục gọi công cụ:
{type:"function_call", id, name, call_id, arguments, status}. |
usage | Object | {input_tokens, output_tokens, total_tokens}. Đối với mô hình
Claude, input_tokens bao gồm cache_read và
output_tokens bao gồm cache_write. |
Streaming tuân theo các sự kiện của API Responses:
| Sự kiện | Mô tả |
|---|---|
response.created | Bắt đầu luồng phản hồi. |
response.output_text.delta | Bản cập nhật văn bản đầu ra tăng dần. |
response.completed | Kết thúc luồng phản hồi. |
POST https://api.basicrouter.ai/api/v1/messages
Điểm cuối tương thích Anthropic Messages. Chấp nhận header x-api-key và
anthropic-version: 2023-06-01. Các khối nội dung hỗ trợ text,
image, tool_use, tool_result,
thinking và redacted_thinking.
| Trường | Kiểu | Bắt buộc | Trường JSON | Mô tả |
|---|---|---|---|---|
model | String | Có | model | Tên mô hình. |
messages | Message[] | Có | messages | Tin nhắn hội thoại. |
system | String|Array | Không | system | Prompt hệ thống, chuỗi hoặc [{type,text}]. |
maxTokens | Integer | Có | max_tokens | Token đầu ra tối đa. |
stream | Boolean | Không | stream | Phát trực tuyến. |
temperature | Double | Không | temperature | — |
topP | Double | Không | top_p | — |
topK | Integer | Không | top_k | — |
tools | Tool[] | Không | tools | Định nghĩa công cụ (input_schema). |
toolChoice | Object | Không | tool_choice | — |
metadata | Map | Không | metadata | — |
thinking | Object | Không | thinking | Cấu hình suy nghĩ mở rộng. |
stopSequences | Object | Không | stop_sequences | — |
anthropicBeta | Object | Không | anthropic_beta | Header tính năng beta. |
| Trường | Kiểu | Mô tả |
|---|---|---|
role | String | Vai trò tin nhắn, ví dụ user / assistant. |
content | String|ContentBlock[] | Văn bản thuần hoặc một mảng các khối nội dung. |
| Trường | Kiểu | Mô tả |
|---|---|---|
type | String | Một trong text, image, tool_use,
tool_result, thinking,
redacted_thinking. |
text | String | Có mặt khi type là text. |
source | Object | Có mặt khi type là image. |
Ví dụ khối hình ảnh:
{ "type": "image", "source": { "type": "base64", "media_type": "...", "data": "..." } }
{ "type": "image", "source": { "type": "url", "url": "..." } }
| Trường | Kiểu | Mô tả |
|---|---|---|
name | String | Tên hàm. |
description | String | Mô tả hàm. |
input_schema | Object | JSON Schema cho đầu vào. |
cache_control | Object | Điều khiển bộ nhớ đệm tùy chọn. |
curl --request POST \
--url https://api.basicrouter.ai/api/v1/messages \
--header "Authorization: Bearer $BASICROUTER_API_KEY" \
--header "anthropic-version: 2023-06-01" \
--header "Content-Type: application/json" \
--data '{
"model": "claude-sonnet-4.6",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "Describe Hangzhou in one sentence."}]
}'
{
"id": "msg_xxx",
"type": "message",
"role": "assistant",
"model": "claude-sonnet-4.6",
"content": [{"type": "text", "text": "Hangzhou is ..."}],
"stop_reason": "end_turn",
"usage": {"input_tokens": 12, "output_tokens": 18}
}
Các trường phản hồi (không phát trực tuyến):
| Trường | Kiểu | Mô tả |
|---|---|---|
id | String | ID tin nhắn. |
type | String | Cố định message. |
role | String | Cố định assistant. |
model | String | Tên mô hình. |
content | ContentBlock[] | Các khối nội dung phản hồi (ví dụ {type:"text", text},
{type:"tool_use", ...}). |
stop_reason | String | ví dụ end_turn, tool_use,
max_tokens. |
usage | Object | {input_tokens, output_tokens}. |
| Sự kiện | Mô tả |
|---|---|
message_start | Bắt đầu luồng tin nhắn. |
content_block_start | Bắt đầu một khối nội dung mới. |
content_block_delta | Cập nhật tăng dần cho một khối nội dung. |
content_block_stop | Kết thúc một khối nội dung. |
message_delta | Cập nhật tăng dần cho tin nhắn. |
message_stop | Kết thúc luồng tin nhắn. |
GET https://api.basicrouter.ai/api/v1/models
Trả về tất cả các mô hình API trực tuyến, đã được kích hoạt.
curl --request GET \
--url https://api.basicrouter.ai/api/v1/models \
--header "Authorization: Bearer $BASICROUTER_API_KEY"
{
"object": "list",
"data": [
{
"id": "glm-5.2",
"object": "model",
"display_name": "glm-5.2",
"created": 1721380000,
"owned_by": "Zai",
"input_modalities": ["text", "image"],
"output_modalities": ["text"],
"context_length": 128000
}
]
}
Các trường của mỗi mục mô hình (data[]):
| Trường | Kiểu | Mô tả |
|---|---|---|
id | String | ID mô hình. |
object | String | Cố định model. |
display_name | String | Tên hiển thị. |
created | Long | Dấu thời gian tạo (giây). |
owned_by | String | Chủ sở hữu / nhà cung cấp. |
input_modalities | String[] | vd. ["text","image"]. |
output_modalities | String[] | vd. ["text"]. |
context_length | Integer | Độ dài ngữ cảnh tối đa. |
GET https://api.basicrouter.ai/api/v1/models/{model}
Trả về một mô hình đơn với cùng cấu trúc như một mục danh sách. Trả về HTTP 404 khi mô hình không tồn tại.
curl --request GET \
--url https://api.basicrouter.ai/api/v1/models/gpt-5.5 \
--header "Authorization: Bearer $BASICROUTER_API_KEY"
Phản hồi thành công: một đối tượng mô hình đơn với cùng các trường như một mục danh
sách /v1/models.
Khi mô hình không tồn tại, trả về HTTP 404:
{"error": {"message": "The model 'xxx' does not exist", "type": "invalid_request_error", "code": "invalid_model_error"}}
GET https://api.basicrouter.ai/api/v1/image-models
Truy vấn các độ phân giải, tỷ lệ và số lượng tối đa được hỗ trợ bởi một mô hình hình
ảnh trước khi gọi /v1/image-generations. Không cần xác thực.
| Trường | Kiểu | Mô tả |
|---|---|---|
id | String | ID mô hình. |
object | String | Cố định image_model. |
displayName | String | Tên hiển thị. |
description | String | Mô tả mô hình. |
icon | String | URL biểu tượng. |
created | Long | Dấu thời gian tạo (giây). |
maxCount | Integer | Số hình ảnh tối đa mỗi yêu cầu. |
fileMax | Integer | Số hình ảnh tham chiếu tối đa. |
resolutions | String[] | Các độ phân giải được hỗ trợ, vd.
["720p","1080p"]. |
ratios | String[] | Các tỷ lệ khung hình được hỗ trợ, vd.
["1:1","3:2"]. |
curl --request GET \
--url https://api.basicrouter.ai/api/v1/image-models \
--header "Authorization: Bearer $BASICROUTER_API_KEY"
{
"object": "list",
"data": [
{
"id": "gpt-image-2",
"object": "image_model",
"displayName": "GPT Image 1",
"description": "...",
"icon": "...",
"created": 1721380000,
"maxCount": 4,
"fileMax": 10,
"resolutions": ["720p", "1080p"],
"ratios": ["1:1", "3:2"]
}
]
}
GET https://api.basicrouter.ai/api/v1/video-models
Truy vấn các giá trị videoType được hỗ trợ, phạm vi thời lượng, độ phân
giải và tỷ lệ cho một mô hình video trước khi gọi /v1/video-generations.
Không cần xác thực.
| Trường | Kiểu | Mô tả |
|---|---|---|
id | String | ID mô hình. |
object | String | Cố định video_model. |
displayName | String | Tên hiển thị. |
description | String | Mô tả mô hình. |
icon | String | URL biểu tượng. |
created | Long | Dấu thời gian tạo (giây). |
allowedVideoTypes | VideoTypeOption[] | Danh sách videoType được hỗ trợ. |
videoDurationMin | Integer | Số giây tối thiểu mỗi clip. |
videoDurationMax | Integer | Số giây tối đa mỗi clip. |
videoDurationSuggest | Integer[] | Các bước thời lượng đề xuất, vd. [5,8,10]. |
resolutions | String[] | Các độ phân giải được hỗ trợ. |
ratios | String[] | Các tỷ lệ khung hình được hỗ trợ. |
resolutionOptions | ResolutionOption[] | Các tổ hợp cấu trúc độ phân giải+tỷ lệ+kích thước. |
fileMax | Integer | Số tài sản tham chiếu tối đa. |
Các trường VideoTypeOption:
| Trường | Kiểu | Mô tả |
|---|---|---|
code | Integer | Giá trị videoType để truyền vào
/v1/video-generations. |
name | String | Tên loại đã địa phương hóa (văn bản thành video / hình ảnh thành video / ...). |
curl --request GET \
--url https://api.basicrouter.ai/api/v1/video-models \
--header "Authorization: Bearer $BASICROUTER_API_KEY"
{
"object": "list",
"data": [
{
"id": "sora-2",
"object": "video_model",
"displayName": "Sora 2",
"description": "...",
"icon": "...",
"created": 1721380000,
"allowedVideoTypes": [
{"code": 1, "name": "text-to-video"},
{"code": 2, "name": "image-to-video"},
{"code": 3, "name": "image-to-video (first/last frame)"}
],
"videoDurationMin": 5,
"videoDurationMax": 10,
"videoDurationSuggest": [5, 8, 10],
"resolutions": ["1080p", "720p"],
"ratios": ["16:9", "9:16"],
"fileMax": 5
}
]
}
POST https://api.basicrouter.ai/api/v1/image-generations
Gửi không đồng bộ một tác vụ tạo hình ảnh. Trả về taskId ngay lập tức;
truy xuất kết quả bằng cách polling GET /v1/image-generations/{taskId} hoặc
qua webhook callbackUrl.
Các giá trị model, resolution / ratio được hỗ
trợ, giới hạn trên count, và giới hạn tải lên hình ảnh tham chiếu
(fileMax) phải được lấy từ
GET /v1/image-models trước. Chỉ các giá trị
được quảng cáo bởi spec của mô hình đó mới được chấp nhận.
| Trường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
text | String | Có | Prompt. |
model | String | Có | Tên mô hình. |
imageUrls | String[] | Không | URL hình ảnh tham chiếu (hình ảnh thành hình ảnh). |
count | Integer | Không | Số hình ảnh (≥0). |
resolution | String | Không | Độ phân giải (xem /v1/image-models). |
ratio | String | Không | Tỷ lệ khung hình. |
callbackUrl | String | Không | URL webhook cấp tác vụ. |
curl --request POST \
--url https://api.basicrouter.ai/api/v1/image-generations \
--header "Authorization: Bearer $BASICROUTER_API_KEY" \
--header "Content-Type: application/json" \
--data '{
"model": "seedream-4.5",
"text": "A cat drinking water by the river",
"count": 1,
"resolution": "2k",
"ratio": "1:1",
"imageUrls": []
}'
{
"code": 200,
"message": "image task is commit",
"data": {"taskId": "img_xxx"}
}
Phản hồi lỗi:
// Insufficient credit
{ "code": 500, "message": "Insufficient credit" }
// Model not found
{ "code": 404, "message": "Model not found: xxx" }
GET https://api.basicrouter.ai/api/v1/image-generations/{taskId}
Poll một tác vụ tạo hình ảnh. status là pending /
success / failed. images là một mảng URL hình ảnh
được chuỗi hóa JSON; text mang theo bất kỳ mô tả văn bản nào được mô hình
đính kèm (vd. đầu ra đa phương thức Gemini), null nếu không có.
curl --request GET \
--url https://api.basicrouter.ai/api/v1/image-generations/img_xxx \
--header "Authorization: Bearer $BASICROUTER_API_KEY"
{
"code": 200,
"message": "success",
"data": {
"taskId": "img_xxx",
"status": "success",
"errorMessage": null,
"images": "[\"https://.../1.png\"]",
"text": null
}
}
Các trường phản hồi data:
| Trường | Kiểu | Mô tả |
|---|---|---|
taskId | String | ID tác vụ. |
status | String | pending / success / failed. |
errorMessage | String | Lý do thất bại, null nếu thành công. |
images | String | Mảng URL hình ảnh được chuỗi hóa JSON, vd.
"[\"https://.../1.png\"]". |
text | String | Mô tả văn bản do mô hình đính kèm (vd. đầu ra đa phương thức Gemini);
null nếu không có. |
Không tìm thấy tác vụ:
{ "code": 500, "message": "task not found" }
Nếu callbackUrl được cung cấp khi gửi, máy chủ sẽ đẩy kết quả cuối cùng
success / failed qua webhook với cùng cấu trúc
data.
Ví dụ hoàn chỉnh (gửi + poll)
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;
public class ImageGenerationExample {
private static final String BASE = "https://api.basicrouter.ai/api/v1";
private static final String API_KEY = System.getenv("BASICROUTER_API_KEY");
public static void main(String[] args) throws Exception {
HttpClient http = HttpClient.newBuilder()
.connectTimeout(Duration.ofSeconds(10)).build();
// 1. Submit the task.
String body = "{"
+ "\"model\":\"seedream-4.5\","
+ "\"text\":\"A cat drinking water by the river\","
+ "\"count\":1,"
+ "\"resolution\":\"2k\","
+ "\"ratio\":\"1:1\","
+ "\"imageUrls\":[]"
+ "}";
HttpResponse<String> submit = http.send(
HttpRequest.newBuilder(URI.create(BASE + "/image-generations"))
.header("Authorization", "Bearer " + API_KEY)
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(body)).build(),
HttpResponse.BodyHandlers.ofString());
String taskId = extract(submit.body(), "taskId");
System.out.println("taskId = " + taskId);
// 2. Poll until terminal status.
String status = "pending";
while ("pending".equals(status)) {
Thread.sleep(15_000L);
HttpResponse<String> poll = http.send(
HttpRequest.newBuilder(URI.create(BASE + "/image-generations/" + taskId))
.header("Authorization", "Bearer " + API_KEY).GET().build(),
HttpResponse.BodyHandlers.ofString());
status = extract(poll.body(), "status");
System.out.println("status = " + status);
}
if (!"success".equals(status)) {
throw new RuntimeException("image generation failed: " + status);
}
// images is a JSON-stringified array of URLs.
String images = extract(pollResult(http, taskId), "images");
System.out.println("images = " + images);
}
// Minimal JSON field extractor — use Jackson/Gson in production.
private static String extract(String json, String field) {
int i = json.indexOf("\"" + field + "\":");
if (i < 0) return null;
i += field.length() + 3;
if (json.charAt(i) == '\"') {
int end = json.indexOf('\"', i + 1);
return json.substring(i + 1, end);
}
int end = i;
while (end < json.length() && "0123456789.".indexOf(json.charAt(end)) >= 0) end++;
return json.substring(i, end);
}
private static String pollResult(HttpClient http, String taskId) throws Exception {
return http.send(HttpRequest.newBuilder(URI.create(BASE + "/image-generations/" + taskId))
.header("Authorization", "Bearer " + API_KEY).GET().build(),
HttpResponse.BodyHandlers.ofString()).body();
}
}
import os
import time
import requests
BASE = "https://api.basicrouter.ai/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['BASICROUTER_API_KEY']}"}
# 1. Submit the task.
resp = requests.post(
f"{BASE}/image-generations",
headers={**HEADERS, "Content-Type": "application/json"},
json={
"model": "seedream-4.5",
"text": "A cat drinking water by the river",
"count": 1,
"resolution": "2k",
"ratio": "1:1",
"imageUrls": [],
},
)
resp.raise_for_status()
task_id = resp.json()["data"]["taskId"]
print(f"taskId = {task_id}")
# 2. Poll until terminal status.
while True:
time.sleep(15)
poll = requests.get(f"{BASE}/image-generations/{task_id}", headers=HEADERS)
poll.raise_for_status()
data = poll.json()["data"]
status = data["status"]
print(f"status = {status}")
if status != "pending":
break
if status != "success":
raise RuntimeError(f"image generation failed: {data.get('errorMessage')}")
# images is a JSON-stringified array of URLs.
import json
images = json.loads(data["images"])
print(f"images = {images}")
POST https://api.basicrouter.ai/api/v1/video-generations
Gửi không đồng bộ một tác vụ tạo video. Trả về taskId ngay lập tức; truy
xuất kết quả bằng cách polling GET /v1/video-generations/{taskId} hoặc qua
webhook callbackUrl.
Các giá trị model, videoType được phép, phạm vi thời lượng
(videoDurationMin/Max), resolution / ratio được
hỗ trợ, và giới hạn tải lên tài sản tham chiếu (fileMax) phải được lấy từ
GET /v1/video-models trước. Chỉ các mã
videoType được liệt kê trong allowedVideoTypes của mô hình đó
mới được chấp nhận.
| Trường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
text | String | Có | Prompt. |
model | String | Có | Tên mô hình. |
videoType | Integer | Có | 1 văn bản thành video / 2 hình ảnh thành video (khung đầu) / 3 hình ảnh thành video (khung đầu+cuối) / 4 hình ảnh thành video (tham chiếu) / 5 tất cả tham chiếu. |
imageUrls | String[] | Không | URL tài sản hình ảnh. |
videoUrls | VideoUrl[]|String[] | Không | URL tài sản video. |
audioUrls | String[] | Không | URL tài sản âm thanh. |
resolution | String | Không | Độ phân giải. |
ratio | String | Không | Tỷ lệ khung hình. |
duration | Long | Không | Giây (>0). |
callbackUrl | String | Không | URL webhook cấp tác vụ. |
Ví dụ cho từng videoType:
1. Văn bản thành video (videoType=1)
Tạo video chỉ từ prompt văn bản; không cần tài sản tham chiếu.
curl --request POST \
--url https://api.basicrouter.ai/api/v1/video-generations \
--header "Authorization: Bearer $BASICROUTER_API_KEY" \
--header "Content-Type: application/json" \
--data '{
"videoType": 1,
"text": "A cat jumping on a bed",
"resolution": "480p",
"ratio": "16:9",
"duration": 4,
"model": "seedance-2.0"
}'
2. Hình ảnh thành video - khung đầu (videoType=2)
Cung cấp một khung hình bắt đầu đơn trong imageUrls; mô hình tạo video bắt
đầu từ khung hình đó.
curl --request POST \
--url https://api.basicrouter.ai/api/v1/video-generations \
--header "Authorization: Bearer $BASICROUTER_API_KEY" \
--header "Content-Type: application/json" \
--data '{
"videoType": 2,
"text": "Happily shaking head",
"resolution": "480p",
"ratio": "16:9",
"duration": 4,
"model": "seedance-2.0",
"imageUrls": ["https://basicrouter-flie.oss-accelerate.aliyuncs.com/test/first-frame.png"]
}'
3. Hình ảnh thành video - khung đầu và khung cuối (videoType=3)
Cung cấp cả khung đầu và khung cuối trong imageUrls (thứ tự:
[đầu, cuối]); mô hình tạo video chuyển tiếp giữa hai khung hình.
curl --request POST \
--url https://api.basicrouter.ai/api/v1/video-generations \
--header "Authorization: Bearer $BASICROUTER_API_KEY" \
--header "Content-Type: application/json" \
--data '{
"videoType": 3,
"text": "Put on the hat",
"resolution": "480p",
"ratio": "16:9",
"duration": 4,
"model": "seedance-2.0",
"imageUrls": [
"https://basicrouter-flie.oss-accelerate.aliyuncs.com/test/first-frame.png",
"https://basicrouter-flie.oss-accelerate.aliyuncs.com/test/last-frame.png"
]
}'
4. Hình ảnh thành video - tham chiếu (videoType=4)
Cung cấp một hoặc nhiều hình ảnh tham chiếu trong imageUrls; mô hình sử
dụng phong cách/nội dung của chúng làm tham chiếu (không phải là khung đầu/cuối bắt
buộc) để tạo video.
curl --request POST \
--url https://api.basicrouter.ai/api/v1/video-generations \
--header "Authorization: Bearer $BASICROUTER_API_KEY" \
--header "Content-Type: application/json" \
--data '{
"videoType": 4,
"text": "Two cats playing together",
"resolution": "480p",
"ratio": "16:9",
"duration": 4,
"model": "kling-v3-omni-video",
"imageUrls": [
"https://basicrouter-flie.oss-accelerate.aliyuncs.com/test/ref-1.png",
"https://basicrouter-flie.oss-accelerate.aliyuncs.com/test/ref-2.png"
]
}'
5. Tất cả tham chiếu (videoType=5)
Tham chiếu hình ảnh / video / âm thanh hỗn hợp. Tham chiếu tài sản theo vị trí trong
prompt: mục thứ 1 trong imageUrls là @图片 1, mục thứ 1 trong
videoUrls là @视频 1, mục thứ 1 trong
audioUrls là @音频 1. videoUrls cũng chấp nhận
chuỗi URL đơn giản.
curl --request POST \
--url https://api.basicrouter.ai/api/v1/video-generations \
--header "Authorization: Bearer $BASICROUTER_API_KEY" \
--header "Content-Type: application/json" \
--data '{
"videoType": 5,
"text": "Use the first-person framing of @视频 1 and @音频 1 as background music. First-person tea ad; start frame is @图片 1 ... end frame is @图片 2.",
"model": "seedance-2.0",
"imageUrls": [
"https://ark-project.tos-cn-beijing.volces.com/doc_image/r2v_tea_pic1.jpg",
"https://ark-project.tos-cn-beijing.volces.com/doc_image/r2v_tea_pic2.jpg"
],
"videoUrls": ["https://ark-project.tos-cn-beijing.volces.com/doc_video/r2v_tea_video1.mp4"],
"audioUrls": ["https://ark-project.tos-cn-beijing.volces.com/doc_audio/r2v_tea_audio1.mp3"],
"resolution": "1080p",
"ratio": "16:9",
"duration": 11
}'
Phản hồi gửi (tất cả năm loại):
{
"code": 200,
"message": "success",
"data": {"taskId": "vid_xxx"}
}
GET https://api.basicrouter.ai/api/v1/video-generations/{taskId}
Poll một tác vụ tạo video. status là pending /
success / failed; videoUrl là URL video đã tạo và
lastFrameUrl là URL khung cuối (trong trường hợp hình ảnh thành video).
curl --request GET \
--url https://api.basicrouter.ai/api/v1/video-generations/vid_xxx \
--header "Authorization: Bearer $BASICROUTER_API_KEY"
{
"code": 200,
"message": "success",
"data": {
"status": "success",
"videoUrl": "https://.../out.mp4",
"lastFrameUrl": null,
"message": null
}
}
Các trường phản hồi data:
| Trường | Kiểu | Mô tả |
|---|---|---|
status | String | pending / success / failed. |
videoUrl | String | URL video đã tạo. |
lastFrameUrl | String | URL khung cuối (trong trường hợp hình ảnh thành video); null nếu
không có. |
message | String | Lý do thất bại, null nếu thành công. |
Nếu callbackUrl được cung cấp khi gửi, máy chủ sẽ đẩy kết quả cuối cùng
qua webhook với cùng cấu trúc data.
Ví dụ hoàn chỉnh (gửi + poll)
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;
public class VideoGenerationExample {
private static final String BASE = "https://api.basicrouter.ai/api/v1";
private static final String API_KEY = System.getenv("BASICROUTER_API_KEY");
public static void main(String[] args) throws Exception {
HttpClient http = HttpClient.newBuilder()
.connectTimeout(Duration.ofSeconds(10)).build();
// 1. Submit the task (videoType=1: text-to-video).
String body = "{"
+ "\"videoType\":1,"
+ "\"text\":\"A cat jumping on a bed\","
+ "\"resolution\":\"480p\","
+ "\"ratio\":\"16:9\","
+ "\"duration\":4,"
+ "\"model\":\"seedance-2.0\""
+ "}";
HttpResponse<String> submit = http.send(
HttpRequest.newBuilder(URI.create(BASE + "/video-generations"))
.header("Authorization", "Bearer " + API_KEY)
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(body)).build(),
HttpResponse.BodyHandlers.ofString());
String taskId = extract(submit.body(), "taskId");
System.out.println("taskId = " + taskId);
// 2. Poll until terminal status. Video tasks take longer — poll every 20s.
String status = "pending";
String lastBody = null;
while ("pending".equals(status)) {
Thread.sleep(20_000L);
HttpResponse<String> poll = http.send(
HttpRequest.newBuilder(URI.create(BASE + "/video-generations/" + taskId))
.header("Authorization", "Bearer " + API_KEY).GET().build(),
HttpResponse.BodyHandlers.ofString());
lastBody = poll.body();
status = extract(lastBody, "status");
System.out.println("status = " + status);
}
if (!"success".equals(status)) {
throw new RuntimeException("video generation failed: " + status);
}
String videoUrl = extract(lastBody, "videoUrl");
System.out.println("videoUrl = " + videoUrl);
}
// Minimal JSON field extractor — use Jackson/Gson in production.
private static String extract(String json, String field) {
int i = json.indexOf("\"" + field + "\":");
if (i < 0) return null;
i += field.length() + 3;
if (json.charAt(i) == '\"') {
int end = json.indexOf('\"', i + 1);
return json.substring(i + 1, end);
}
int end = i;
while (end < json.length() && "0123456789.".indexOf(json.charAt(end)) >= 0) end++;
return json.substring(i, end);
}
}
import os
import time
import requests
BASE = "https://api.basicrouter.ai/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['BASICROUTER_API_KEY']}"}
# 1. Submit the task (videoType=1: text-to-video).
resp = requests.post(
f"{BASE}/video-generations",
headers={**HEADERS, "Content-Type": "application/json"},
json={
"videoType": 1,
"text": "A cat jumping on a bed",
"resolution": "480p",
"ratio": "16:9",
"duration": 4,
"model": "seedance-2.0",
},
)
resp.raise_for_status()
task_id = resp.json()["data"]["taskId"]
print(f"taskId = {task_id}")
# 2. Poll until terminal status. Video tasks take longer — poll every 20s.
while True:
time.sleep(20)
poll = requests.get(f"{BASE}/video-generations/{task_id}", headers=HEADERS)
poll.raise_for_status()
data = poll.json()["data"]
status = data["status"]
print(f"status = {status}")
if status != "pending":
break
if status != "success":
raise RuntimeError(f"video generation failed: {data.get('message')}")
print(f"videoUrl = {data['videoUrl']}")
if data.get("lastFrameUrl"):
print(f"lastFrameUrl = {data['lastFrameUrl']}")
GET https://api.basicrouter.ai/api/v1/billing/balance
Trả về số dư tài khoản chia thành ba ví: gói tháng, gói tài nguyên và tín dụng trả theo mức dùng.
curl --request GET \
--url https://api.basicrouter.ai/api/v1/billing/balance \
--header "Authorization: Bearer $BASICROUTER_API_KEY"
{
"totalCredit": 128.50,
"totalResourceCredit": 30.00,
"wallets": {
"monthlyPlan": {"id": "pkg_xxx", "credit": 50.00, "name": "Monthly plan"},
"resourcePacks": [
{"id": "rp_xxx", "credit": 30.00, "name": "Video resource pack"}
],
"payAsYouGo": 48.50
}
}
Các trường phản hồi:
| Trường | Kiểu | Mô tả |
|---|---|---|
totalCredit | BigDecimal | Tổng số dư. |
totalResourceCredit | BigDecimal | Tổng số dư các gói tài nguyên. |
wallets.monthlyPlan | WalletDetail | Gói tháng (null nếu không có). |
wallets.resourcePacks | WalletDetail[] | Danh sách gói tài nguyên. |
wallets.payAsYouGo | BigDecimal | Số dư trả theo mức dùng. |
Các trường WalletDetailVO:
| Trường | Kiểu | Mô tả |
|---|---|---|
id | String | ID ví. |
credit | BigDecimal | Số dư tín dụng. |
name | String | Tên ví. |
GET https://api.basicrouter.ai/api/v1/usage
Chi tiết thanh toán cuộc gọi mô hình phân trang, được chụp nhanh theo giá
(priceSnapshotId), sắp xếp theo thời gian tạo đơn hàng giảm dần. Chỉ các
bản ghi tính phí bình thường (reason = model usage) được trả về.
Tham số truy vấn:
| Tham số | Kiểu | Bắt buộc | Mặc định | Mô tả |
|---|---|---|---|---|
page | Integer | Không | 1 | Số trang, bắt đầu từ 1. |
size | Integer | Không | 20 | Kích thước trang (phân trang theo priceSnapshotId). |
startTime | LocalDateTime | Không | — | Thời gian bắt đầu, định dạng yyyy-MM-ddTHH:mm:ss, lọc theo
snapshot orderCreatedAt. |
endTime | LocalDateTime | Không | — | Thời gian kết thúc, định dạng yyyy-MM-ddTHH:mm:ss. |
curl --request GET \
--url "https://api.basicrouter.ai/api/v1/usage?page=1&size=20&startTime=2026-07-01T00:00:00&endTime=2026-07-31T23:59:59" \
--header "Authorization: Bearer $BASICROUTER_API_KEY"
Bọc phản hồi:
{
"code": 0,
"message": "success",
"data": { ... }
}
| Trường | Kiểu | Mô tả |
|---|---|---|
records | UsageDetailVO[] | Bản ghi trang hiện tại. |
total | Long | Tổng số. |
current | Long | Trang hiện tại. |
size | Long | Kích thước trang. |
pages | Long | Tổng số trang. |
Các trường UsageDetailVO:
| Trường | Kiểu | Mô tả |
|---|---|---|
priceSnapshotId | String | ID snapshot giá. |
taskId | String | ID tác vụ. |
credit | BigDecimal | Số tiền tính phí. |
model | String | Tên mô hình. |
modelType | String | text / image / video. |
inputTokens | Long | Token đầu vào; null với image/video. |
outputTokens | Long | Token đầu ra. |
totalTokens | Long | Tổng token. |
cacheReadTokens | Long | Token đọc cache. |
cacheWriteTokens | Long | Token ghi cache. |
imageCount | Integer | Số lượng hình ảnh; đặt cho mô hình hình ảnh. |
imageResolution | String | Độ phân giải hình ảnh, vd. 720P. |
imageRatio | String | Tỷ lệ khung hình hình ảnh, vd. 1:1. |
videoResolution | String | Độ phân giải video, vd. 1080p. |
videoRatio | String | Tỷ lệ khung hình video, vd. 16:9. |
videoDurationSec | Long | Thời lượng video tính bằng giây. |
orderCreatedAt | LocalDateTime | Thời gian tạo đơn hàng (snapshot orderCreatedAt). |
creditDetails | CreditDetailItem[] | Chi tiết đơn hàng trong snapshot này (từ credit_order_t). |
Các trường CreditDetailItem:
| Trường | Kiểu | Mô tả |
|---|---|---|
credit | BigDecimal | Số tiền tính phí bởi đơn hàng này. |
deductionSource | String | Nguồn khấu trừ (Balance / Monthly Package /
Resource Package). |
packageName | String | Tên gói; null nếu không có gói. |
Quy ước giá trị null: chỉ các trường liên quan đến từng modelType mới được
điền; các trường còn lại là null. text điền các trường token;
image điền imageCount/imageResolution/imageRatio;
video điền videoResolution/videoRatio/videoDurationSec.
Ví dụ phản hồi:
{
"code": 200,
"message": "success",
"data": {
"records": [
{
"priceSnapshotId": "snap_9f3c1a2b",
"taskId": "task_5e8a1c33",
"credit": 0.0342,
"model": "glm-5.2",
"modelType": "text",
"inputTokens": 1280,
"outputTokens": 642,
"totalTokens": 1922,
"cacheReadTokens": 0,
"cacheWriteTokens": 0,
"imageCount": null,
"imageResolution": null,
"imageRatio": null,
"videoResolution": null,
"videoRatio": null,
"videoDurationSec": null,
"orderCreatedAt": "2026-07-18T14:23:11",
"creditDetails": [
{
"credit": 0.0342,
"deductionSource": "balance",
"packageName": ""
}
]
},
{
"priceSnapshotId": "snap_a12f77c0",
"taskId": "task_c71e44a2",
"credit": 1.8000,
"model": "seedance-2.0",
"modelType": "video",
"inputTokens": null,
"outputTokens": null,
"totalTokens": null,
"cacheReadTokens": null,
"cacheWriteTokens": null,
"imageCount": null,
"imageResolution": null,
"imageRatio": null,
"videoResolution": "1080p",
"videoRatio": "16:9",
"videoDurationSec": 8,
"orderCreatedAt": "2026-07-17T22:41:09",
"creditDetails": [
{
"credit": 1.5000,
"deductionSource": "Monthly Package",
"packageName": "基础月度套餐"
},
{
"credit": 0.3000,
"deductionSource": "Resource Package",
"packageName": "byteplus视频资源包"
}
]
}
],
"total": 128,
"current": 1,
"size": 20,
"pages": 7
}
}
GET https://api.basicrouter.ai/api/v1/billing/transactions
Danh sách phân trang các giao dịch nạp tiền đã thanh toán (status=2) của
người dùng hiện tại, sắp xếp theo created_at giảm dần.
| Tham số | Kiểu | Bắt buộc | Mặc định | Mô tả |
|---|---|---|---|---|
page | Integer | Không | 1 | Số trang. |
size | Integer | Không | 20 | Kích thước trang. |
startTime | String | Không | — | Thời gian bắt đầu, yyyy-MM-dd HH:mm:ss, bao gồm. |
endTime | String | Không | — | Thời gian kết thúc, yyyy-MM-dd HH:mm:ss, bao gồm. |
curl --request GET \
--url "https://api.basicrouter.ai/api/v1/billing/transactions?page=1&size=20&startTime=2026-07-01%2000:00:00&endTime=2026-07-31%2023:59:59" \
--header "Authorization: Bearer $BASICROUTER_API_KEY"
Bọc phản hồi:
{
"code": 0,
"message": "success",
"data": { ... }
}
| Trường | Kiểu | Mô tả |
|---|---|---|
records | TransactionVO[] | Giao dịch trang hiện tại. |
total | Long | Tổng số. |
current | Long | Trang hiện tại. |
size | Long | Kích thước trang. |
pages | Long | Tổng số trang. |
Các trường TransactionVO:
| Trường | Kiểu | Mô tả |
|---|---|---|
orderNo | String | Mã đơn hàng. |
thirdPartyOrderNo | String | Mã đơn hàng bên thứ ba. |
amount | BigDecimal | Số tiền đơn hàng. |
actualAmount | BigDecimal | Số tiền thực tế đã thanh toán. |
discount | BigDecimal | Số tiền chiết khấu. |
paymentMethod | String | Phương thức thanh toán (wechat / alipay /
ustd / stripe / wallyt v.v.). |
Các trường TransactionVO (tiếp theo):
| Trường | Kiểu | Mô tả |
|---|---|---|
serviceFeeAmount | BigDecimal | Số tiền phí dịch vụ. |
paymentChannel | String | Nền tảng thanh toán. |
source | String | Nguồn đơn hàng (recharge /
package_purchase v.v.). |
packageName | String | Tên gói (đặt cho mua gói; null cho nạp tiền thông thường). |
createdAt | LocalDateTime | Thời gian tạo. |
{
"code": 200,
"message": "success",
"data": {
"records": [
{
"orderNo": "R20260718abc123",
"thirdPartyOrderNo": "wx_pay_xxx",
"amount": 50.00,
"actualAmount": 48.50,
"discount": 1.50,
"paymentMethod": "wechat",
"serviceFeeAmount": 0.00,
"paymentChannel": "wechat",
"source": "recharge",
"packageName": null,
"createdAt": "2026-07-18T14:23:11"
}
],
"total": 28,
"current": 1,
"size": 20,
"pages": 2
}
}
Vận hành
Lỗi
BasicRouter trả về mã lỗi ổn định để ứng dụng có thể xử lý thử lại, dự phòng, vấn đề thanh toán và gỡ lỗi một cách nhất quán.
Các điểm cuối tương thích nhà cung cấp cố gắng giữ nguyên hình dạng lỗi của họ API gốc khi có thể. Các điểm cuối native BasicRouter sử dụng đối tượng lỗi BasicRouter.
Ánh xạ trạng thái HTTP và mã lỗi
| Trạng thái HTTP | Loại lỗi | Mã ví dụ | Thử lại |
|---|---|---|---|
| 400 | invalid_request_error | invalid_request, unsupported_parameter,
invalid_messages, invalid_image_url | Không |
| 401 | authentication_error | missing_api_key, invalid_api_key | Không |
| 402 | billing_error | insufficient_credits, payment_required,
quota_exceeded | Không |
| 403 | permission_error | model_access_denied, endpoint_access_denied,
key_scope_denied | Không |
| 404 | not_found_error | model_not_found, response_not_found,
task_not_found | Không |
| 408 | timeout_error | gateway_timeout, provider_timeout | Có |
| 409 | conflict_error | idempotency_conflict, task_already_cancelled | Tùy thuộc |
| 422 | validation_error | schema_validation_failed, unsupported_modality | Không |
| 429 | rate_limit_error | account_rpm_exceeded, account_tpm_exceeded,
provider_rate_limited | Có |
| 500 | internal_error | internal_error | Có |
| 502 | provider_error | provider_bad_gateway, provider_invalid_response | Có |
| 503 | service_unavailable | model_unavailable, provider_unavailable,
insufficient_capacity | Có |
| 504 | timeout_error | provider_timeout, gateway_timeout | Có |
Mã lỗi phổ biến
| Mã | Ý nghĩa | Hành động đề xuất |
|---|---|---|
missing_api_key | Không có API key được cung cấp. | Thêm header Authorization. |
invalid_api_key | API key không hợp lệ hoặc đã bị thu hồi. | Tạo hoặc xoay vòng API key. |
model_not_found | ID mô hình không tồn tại hoặc không được bật cho tài khoản. | Kiểm tra trang Mô hình hoặc gọi GET /v1/models. |
model_access_denied | API key hoặc tài khoản không có quyền truy cập mô hình. | Bật mô hình hoặc liên hệ quản trị viên. |
unsupported_parameter | Yêu cầu bao gồm tham số không được hỗ trợ bởi điểm cuối hoặc mô hình đã chọn. | Xóa tham số hoặc chọn mô hình tương thích. |
unsupported_modality | Modal đầu vào hoặc đầu ra không được hỗ trợ bởi mô hình đã chọn. | Chọn mô hình hỗ trợ modal đó. |
account_rpm_exceeded | Đã vượt giới hạn số yêu cầu mỗi phút của tài khoản. | Thử lại với backoff hoặc yêu cầu giới hạn cao hơn. |
account_tpm_exceeded | Đã vượt giới hạn số token mỗi phút của tài khoản. | Thử lại với backoff, giảm token, hoặc yêu cầu giới hạn cao hơn. |
provider_rate_limited | Nhà cung cấp upstream đã giới hạn tốc độ yêu cầu. | Thử lại hoặc bật dự phòng. |
insufficient_credits | Tài khoản không đủ tín dụng. | Nạp ví, mua gói, hoặc nâng cấp gói. |
provider_timeout | Nhà cung cấp upstream không phản hồi kịp thời. | Thử lại hoặc bật dự phòng. |
model_unavailable | Mô hình tạm thời không khả dụng. | Thử lại hoặc dùng bí danh định tuyến. |
content_policy_error | Yêu cầu hoặc đầu ra bị chặn bởi chính sách an toàn. | Sửa đầu vào hoặc chọn luồng phù hợp. |
Hỗ trợ
Nhận trợ giúp với BasicRouter
Tìm câu trả lời cho các câu hỏi phổ biến về API, thanh toán, định tuyến và tích hợp. Đối với vấn đề sản xuất, hãy gửi ID yêu cầu, nhãn API key, điểm cuối, mô hình và dấu thời gian để đội ngũ có thể truy vết yêu cầu nhanh chóng.
FAQ
Nhấp vào một câu hỏi để mở rộng câu trả lời.
Liên hệ
Chọn hộp thư phù hợp nhất cho yêu cầu.
Dành cho sự cố, giới hạn tốc độ, câu hỏi thanh toán, vấn đề định tuyến sản xuất, di chuyển SDK, tương thích nhà cung cấp, câu hỏi thiết kế điểm cuối, gói doanh nghiệp, sử dụng cam kết, hoặc yêu cầu định tuyến nhà cung cấp tùy chỉnh.











