MW BasicRouter
Bảng điều khiển

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.

URL cơ sởhttps://api.basicrouter.ai/api
Tương thích OpenAIhttps://api.basicrouter.ai/api/v1
Anthropic-messageshttps://api.basicrouter.ai/api/v1
Xác thựcAuthorization: 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óaCách sử dụng khuyến nghị
Khóa phát triểnPhát triển cục bộ, môi trường staging, kiểm thử và nguyên mẫu.
Khóa sản xuấtChỉ dành cho khối lượng công việc sản xuất backend.
Khóa tích hợpKhó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ăngMô tảThường được sử dụng bởi
streamingHỗ 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_callingHỗ 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_outputsHỗ 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_modeCó thể trả về đầu ra định dạng JSON.Phản hồi có cấu trúc nhẹ.
visionChấ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_cachingHỗ 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.
reasoningHỗ 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.
logprobsHỗ 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ọ APIVăn bảnĐầu vào hình ảnhGọi công cụĐầu ra có cấu trúcPhát trực tuyếnGhi chú
OpenAI Chat CompletionsTùy thuộc mô hìnhTùy thuộc mô hìnhTùy thuộc mô hìnhLự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 ResponsesTùy thuộc mô hìnhTùy thuộc mô hìnhTùy thuộc mô hìnhĐược khuyến nghị cho quy trình tác nhân kiểu OpenAI mới hơn.
Anthropic MessagesTùy thuộc mô hìnhTùy thuộc mô hìnhTùy thuộc mô hìnhTốt nhất cho ứng dụng khách tương thích Claude và Claude Code.
Tương thích OpenAI của GeminiTùy thuộc mô hìnhTùy thuộc mô hìnhTùy thuộc mô hìnhSử dụng mô hình Gemini thông qua ứng dụng khách kiểu OpenAI.
Tương thích gốc GeminiTùy thuộc mô hìnhTùy thuộc mô hìnhTùy thuộc mô hìnhTốt nhất cho các ứng dụng gốc Gemini hiện có.
Tạo hình ảnh BasicRouterKhôngTùy thuộc mô hìnhKhôngKhôngKhôngSử dụng thăm dò tác vụ không đồng bộ hoặc webhook.
Tạo video BasicRouterKhôngTùy thuộc mô hìnhKhôngKhôngKhôngSử 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.

HeaderGiá trịGhi chú
AuthorizationBearer YOUR_API_KEYBắt buộc cho mọi yêu cầu.
Content-Typeapplication/jsonBắt buộc cho phần thân yêu cầu JSON.

Khuyến nghị bảo mật khóa

  1. 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.
  2. 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.
  3. 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.
  4. 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ỉ.
  5. 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"
Trường hợp sử dụngBí danh khuyến nghịYêu cầu
Lập trình chungmwf/coding-autoGọ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 nhanhmwf/coding-fastĐộ trễ thấp và phát trực tuyến.
Phân tích kho lưu trữ lớnmwf/coding-longNgữ cảnh dài và đầu ra ổn định.
Trợ lý lập trình nhạy cảm chi phímwf/low-costGiá 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ácmwf/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ị:

  1. Mở cài đặt Cursor.
  2. Thêm hoặc bật cấu hình khóa API tương thích OpenAI.
  3. Đặt ghi đè OpenAI base URL thành https://api.basicrouter.ai/api/v1.
  4. Thêm một mô hình tùy chỉnh như mwf/coding-auto, mwf/coding-fast, hoặc mwf/coding-long.
  5. 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ạiSử dụng mô hình có tool_calling: true trong trang Mô hình.
Phát trực tuyến bị gián đoạnThử lại với backoff hoặc sử dụng bí danh định tuyến có dự phòng.
Lỗi 401Kiểm tra khóa API và base URL.
Lỗi mô hình 404Xá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ầuLý do
Cấu trúc yêu cầu tương thích Anthropic MessagesClaude Code mong đợi tin nhắn kiểu Anthropic.
Hỗ trợ phát trực tuyếnClaude 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àiHữu ích cho các tác vụ cấp kho lưu trữ.
Dự phòng ổn địnhHữ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ìnhTrường hợp sử dụng
mwf/coding-autoMô hình tác nhân lập trình mặc định.
mwf/coding-longNgữ cảnh kho lưu trữ lớn.
mwf/coding-fastLặ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ựcXác nhận env_key trỏ đến BASICROUTER_API_KEY.
Không tìm thấy mô hìnhThê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 ResponsesChỉ 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 CompletionsChuyể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 HermesMô hình
Tạo mã chungmwf/coding-auto
Thực thi tác vụ độ trễ thấpmwf/coding-fast
Quét kho ngữ cảnh dàimwf/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ăngBắt buộc cho
Phát trực tuyếnTrả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àiKho lưu trữ lớn và thay đổi nhiều tệp.
Đầu ra có cấu trúcLập kế hoạch, phân tách tác vụ, quy trình tự động.
Đầu vào hình ảnhPhâ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ànhMô tả
Môi trường riêng biệtSử 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ênXoay 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áchChỉ 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óaXem 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ọcMục đích
Nhà cung cấpLọ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ứcLọ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ăngLọ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ụ.

Đảm bảo tính khả dụng cao
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ểmMô tả
Tính khả dụng caoChuyể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ạchHệ 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ạtHỗ 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 trungCấ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:

  1. Đi đến trang cài đặt chiến lược BasicRouter.
  2. Tìm cài đặt Mô hình dự phòng mặc định.
  3. Chọn mô hình dự phòng toàn cục của bạn từ danh sách thả xuống.
  4. 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:

  1. router.fallBackModels cấ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ẻ.
  2. 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.
  3. 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.
⚠ Lưu ý quan trọng
  • 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ụcKhuyến nghị
Khóa APISử dụng khóa sản xuất chuyên dụng với nhãn rõ ràng.
Mô hìnhXá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ếnCấ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ánXá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áoTheo 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ênNguồn tín dụngMô tả
1Gói hàng thángNăng lực sử dụng hàng tháng đi kèm được tiêu thụ trước tiên.
2Gói tài nguyênCác gói đã mua thêm được tiêu thụ sau tín dụng gói hàng tháng.
3Ví trả theo mức dùngSố 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ứcCơ sở giá phổ biến
Văn bảnToken đầ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 ảnhMô 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.
VideoMô 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úngToken đầu vào hoặc số bản ghi nhúng.
Âm thanhThờ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ềuMô tả
Khóa APINhóm mức sử dụng theo ứng dụng, dịch vụ hoặc môi trường.
Mô hìnhSo sánh chi phí và khối lượng theo mô hình đã chọn.
Mô hình đã giải quyếtXem xét mô hình thực tế được sử dụng sau định tuyến hoặc dự phòng.
Phương thứcTá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 gianXem 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ệuNhó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ạngMô tả
AuthorizationBearer <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
  • 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ườngKiểuBắt buộcMô tả
modelStringTên mô hình.
messagesMessage[]Tin nhắn hội thoại.
streamBooleanKhôngChế độ phát trực tuyến, mặc định false.
temperatureDoubleKhôngNhiệt độ lấy mẫu.
max_tokensIntegerKhôngToken đầu ra tối đa.
top_pDoubleKhôngLấy mẫu hạt nhân.
presence_penaltyDoubleKhông
frequency_penaltyDoubleKhông
toolsTool[]KhôngĐịnh nghĩa công cụ.
tool_choiceString|ObjectKhôngauto / none / required / hàm cụ thể.
response_formatObjectKhông{type, json_schema:{name,schema,strict}}; text/json_object/json_schema.
parallel_tool_callsBooleanKhông
metadataMapKhôngSiêu dữ liệu truyền qua.

Các trường Message:

TrườngKiểuMô tả
roleStringsystem / user / assistant / tool.
contentString|ArrayVă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_idStringLiên kết đến tool_calls khi role=tool.
tool_callsToolCall[]Có mặt khi role=assistant thực hiện gọi công cụ.
TrườngKiểuMô tả
typeStringCố định function.
functionObjectĐịnh nghĩa hàm.
function.nameStringTên hàm.
function.descriptionStringMô tả hàm.
function.parametersObjectJSON 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ườngKiểuMô tả
idStringID hoàn thành.
objectStringCố định chat.completion.
createdLongDấu thời tạo (giây).
modelStringTên mô hình.
choicesChoice[]{index, message:{role, content, tool_calls?}, finish_reason}.
usageObject{prompt_tokens, completion_tokens, total_tokens}.
TrườngKiểuMô tả
idStringID gọi công cụ.
typeStringCố định function.
functionObjectChi tiết gọi hàm.
function.nameStringTên hàm.
function.argumentsObjectĐố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ườngKiểuBắt buộcMô tả
modelStringTên mô hình.
inputString|ArrayChuỗi thuần (tin nhắn người dùng) hoặc mảng đối tượng tin nhắn.
instructionsStringKhôngPrompt hệ thống.
streamBooleanKhôngMặc định false.
max_output_tokensIntegerKhôngToken đầu ra tối đa.
temperatureDoubleKhôngMặc định 1.
top_pDoubleKhông
toolsTool[]KhôngCấp cao nhất {type, name, description, parameters}.
tool_choiceString|ObjectKhôngauto/none/required/{type,name}.
textObjectKhông{format:{type, name, schema, strict}}; text/json_object/json_schema.
metadataMapKhông
previous_response_idStringKhôngID phản hồi trước đó cho hội thoại nhiều lượt.
parallel_tool_callsBooleanKhô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ườngKiểuMô tả
idStringID phản hồi.
objectStringCố định response.
modelStringTên mô hình.
statusStringvd. completed.
created_atLongDấu thời gian tạo (giây).
outputArrayCá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}.
usageObject{input_tokens, output_tokens, total_tokens}. Đối với mô hình Claude, input_tokens bao gồm cache_readoutput_tokens bao gồm cache_write.

Streaming tuân theo các sự kiện của API Responses:

Sự kiệnMô tả
response.createdBắt đầu luồng phản hồi.
response.output_text.deltaBản cập nhật văn bản đầu ra tăng dần.
response.completedKế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-keyanthropic-version: 2023-06-01. Các khối nội dung hỗ trợ text, image, tool_use, tool_result, thinkingredacted_thinking.

TrườngKiểuBắt buộcTrường JSONMô tả
modelStringmodelTên mô hình.
messagesMessage[]messagesTin nhắn hội thoại.
systemString|ArrayKhôngsystemPrompt hệ thống, chuỗi hoặc [{type,text}].
maxTokensIntegermax_tokensToken đầu ra tối đa.
streamBooleanKhôngstreamPhát trực tuyến.
temperatureDoubleKhôngtemperature
topPDoubleKhôngtop_p
topKIntegerKhôngtop_k
toolsTool[]KhôngtoolsĐịnh nghĩa công cụ (input_schema).
toolChoiceObjectKhôngtool_choice
metadataMapKhôngmetadata
thinkingObjectKhôngthinkingCấu hình suy nghĩ mở rộng.
stopSequencesObjectKhôngstop_sequences
anthropicBetaObjectKhônganthropic_betaHeader tính năng beta.
TrườngKiểuMô tả
roleStringVai trò tin nhắn, ví dụ user / assistant.
contentString|ContentBlock[]Văn bản thuần hoặc một mảng các khối nội dung.
TrườngKiểuMô tả
typeStringMột trong text, image, tool_use, tool_result, thinking, redacted_thinking.
textStringCó mặt khi type là text.
sourceObjectCó 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ườngKiểuMô tả
nameStringTên hàm.
descriptionStringMô tả hàm.
input_schemaObjectJSON Schema cho đầu vào.
cache_controlObjectĐ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ườngKiểuMô tả
idStringID tin nhắn.
typeStringCố định message.
roleStringCố định assistant.
modelStringTên mô hình.
contentContentBlock[]Các khối nội dung phản hồi (ví dụ {type:"text", text}, {type:"tool_use", ...}).
stop_reasonStringví dụ end_turn, tool_use, max_tokens.
usageObject{input_tokens, output_tokens}.
Sự kiệnMô tả
message_startBắt đầu luồng tin nhắn.
content_block_startBắt đầu một khối nội dung mới.
content_block_deltaCập nhật tăng dần cho một khối nội dung.
content_block_stopKết thúc một khối nội dung.
message_deltaCập nhật tăng dần cho tin nhắn.
message_stopKế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ườngKiểuMô tả
idStringID mô hình.
objectStringCố định model.
display_nameStringTên hiển thị.
createdLongDấu thời gian tạo (giây).
owned_byStringChủ sở hữu / nhà cung cấp.
input_modalitiesString[]vd. ["text","image"].
output_modalitiesString[]vd. ["text"].
context_lengthIntegerĐộ 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ườngKiểuMô tả
idStringID mô hình.
objectStringCố định image_model.
displayNameStringTên hiển thị.
descriptionStringMô tả mô hình.
iconStringURL biểu tượng.
createdLongDấu thời gian tạo (giây).
maxCountIntegerSố hình ảnh tối đa mỗi yêu cầu.
fileMaxIntegerSố hình ảnh tham chiếu tối đa.
resolutionsString[]Các độ phân giải được hỗ trợ, vd. ["720p","1080p"].
ratiosString[]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ườngKiểuMô tả
idStringID mô hình.
objectStringCố định video_model.
displayNameStringTên hiển thị.
descriptionStringMô tả mô hình.
iconStringURL biểu tượng.
createdLongDấu thời gian tạo (giây).
allowedVideoTypesVideoTypeOption[]Danh sách videoType được hỗ trợ.
videoDurationMinIntegerSố giây tối thiểu mỗi clip.
videoDurationMaxIntegerSố giây tối đa mỗi clip.
videoDurationSuggestInteger[]Các bước thời lượng đề xuất, vd. [5,8,10].
resolutionsString[]Các độ phân giải được hỗ trợ.
ratiosString[]Các tỷ lệ khung hình được hỗ trợ.
resolutionOptionsResolutionOption[]Các tổ hợp cấu trúc độ phân giải+tỷ lệ+kích thước.
fileMaxIntegerSố tài sản tham chiếu tối đa.

Các trường VideoTypeOption:

TrườngKiểuMô tả
codeIntegerGiá trị videoType để truyền vào /v1/video-generations.
nameStringTê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ườngKiểuBắt buộcMô tả
textStringPrompt.
modelStringTên mô hình.
imageUrlsString[]KhôngURL hình ảnh tham chiếu (hình ảnh thành hình ảnh).
countIntegerKhôngSố hình ảnh (≥0).
resolutionStringKhôngĐộ phân giải (xem /v1/image-models).
ratioStringKhôngTỷ lệ khung hình.
callbackUrlStringKhôngURL 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. statuspending / 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ườngKiểuMô tả
taskIdStringID tác vụ.
statusStringpending / success / failed.
errorMessageStringLý do thất bại, null nếu thành công.
imagesStringMảng URL hình ảnh được chuỗi hóa JSON, vd. "[\"https://.../1.png\"]".
textStringMô 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ườngKiểuBắt buộcMô tả
textStringPrompt.
modelStringTên mô hình.
videoTypeInteger1 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.
imageUrlsString[]KhôngURL tài sản hình ảnh.
videoUrlsVideoUrl[]|String[]KhôngURL tài sản video.
audioUrlsString[]KhôngURL tài sản âm thanh.
resolutionStringKhôngĐộ phân giải.
ratioStringKhôngTỷ lệ khung hình.
durationLongKhôngGiây (>0).
callbackUrlStringKhôngURL 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@图片 1, mục thứ 1 trong videoUrls@视频 1, mục thứ 1 trong audioUrls@音频 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. statuspending / 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ườngKiểuMô tả
statusStringpending / success / failed.
videoUrlStringURL video đã tạo.
lastFrameUrlStringURL khung cuối (trong trường hợp hình ảnh thành video); null nếu không có.
messageStringLý 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ườngKiểuMô tả
totalCreditBigDecimalTổng số dư.
totalResourceCreditBigDecimalTổng số dư các gói tài nguyên.
wallets.monthlyPlanWalletDetailGói tháng (null nếu không có).
wallets.resourcePacksWalletDetail[]Danh sách gói tài nguyên.
wallets.payAsYouGoBigDecimalSố dư trả theo mức dùng.

Các trường WalletDetailVO:

TrườngKiểuMô tả
idStringID ví.
creditBigDecimalSố dư tín dụng.
nameStringTê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ểuBắt buộcMặc địnhMô tả
pageIntegerKhông1Số trang, bắt đầu từ 1.
sizeIntegerKhông20Kích thước trang (phân trang theo priceSnapshotId).
startTimeLocalDateTimeKhôngThời gian bắt đầu, định dạng yyyy-MM-ddTHH:mm:ss, lọc theo snapshot orderCreatedAt.
endTimeLocalDateTimeKhôngThờ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ườngKiểuMô tả
recordsUsageDetailVO[]Bản ghi trang hiện tại.
totalLongTổng số.
currentLongTrang hiện tại.
sizeLongKích thước trang.
pagesLongTổng số trang.

Các trường UsageDetailVO:

TrườngKiểuMô tả
priceSnapshotIdStringID snapshot giá.
taskIdStringID tác vụ.
creditBigDecimalSố tiền tính phí.
modelStringTên mô hình.
modelTypeStringtext / image / video.
inputTokensLongToken đầu vào; null với image/video.
outputTokensLongToken đầu ra.
totalTokensLongTổng token.
cacheReadTokensLongToken đọc cache.
cacheWriteTokensLongToken ghi cache.
imageCountIntegerSố lượng hình ảnh; đặt cho mô hình hình ảnh.
imageResolutionStringĐộ phân giải hình ảnh, vd. 720P.
imageRatioStringTỷ lệ khung hình hình ảnh, vd. 1:1.
videoResolutionStringĐộ phân giải video, vd. 1080p.
videoRatioStringTỷ lệ khung hình video, vd. 16:9.
videoDurationSecLongThời lượng video tính bằng giây.
orderCreatedAtLocalDateTimeThời gian tạo đơn hàng (snapshot orderCreatedAt).
creditDetailsCreditDetailItem[]Chi tiết đơn hàng trong snapshot này (từ credit_order_t).

Các trường CreditDetailItem:

TrườngKiểuMô tả
creditBigDecimalSố tiền tính phí bởi đơn hàng này.
deductionSourceStringNguồn khấu trừ (Balance / Monthly Package / Resource Package).
packageNameStringTê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ểuBắt buộcMặc địnhMô tả
pageIntegerKhông1Số trang.
sizeIntegerKhông20Kích thước trang.
startTimeStringKhôngThời gian bắt đầu, yyyy-MM-dd HH:mm:ss, bao gồm.
endTimeStringKhôngThờ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ườngKiểuMô tả
recordsTransactionVO[]Giao dịch trang hiện tại.
totalLongTổng số.
currentLongTrang hiện tại.
sizeLongKích thước trang.
pagesLongTổng số trang.

Các trường TransactionVO:

TrườngKiểuMô tả
orderNoStringMã đơn hàng.
thirdPartyOrderNoStringMã đơn hàng bên thứ ba.
amountBigDecimalSố tiền đơn hàng.
actualAmountBigDecimalSố tiền thực tế đã thanh toán.
discountBigDecimalSố tiền chiết khấu.
paymentMethodStringPhương thức thanh toán (wechat / alipay / ustd / stripe / wallyt v.v.).

Các trường TransactionVO (tiếp theo):

TrườngKiểuMô tả
serviceFeeAmountBigDecimalSố tiền phí dịch vụ.
paymentChannelStringNền tảng thanh toán.
sourceStringNguồn đơn hàng (recharge / package_purchase v.v.).
packageNameStringTên gói (đặt cho mua gói; null cho nạp tiền thông thường).
createdAtLocalDateTimeThờ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 HTTPLoại lỗiMã ví dụThử lại
400invalid_request_errorinvalid_request, unsupported_parameter, invalid_messages, invalid_image_urlKhông
401authentication_errormissing_api_key, invalid_api_keyKhông
402billing_errorinsufficient_credits, payment_required, quota_exceededKhông
403permission_errormodel_access_denied, endpoint_access_denied, key_scope_deniedKhông
404not_found_errormodel_not_found, response_not_found, task_not_foundKhông
408timeout_errorgateway_timeout, provider_timeout
409conflict_erroridempotency_conflict, task_already_cancelledTùy thuộc
422validation_errorschema_validation_failed, unsupported_modalityKhông
429rate_limit_erroraccount_rpm_exceeded, account_tpm_exceeded, provider_rate_limited
500internal_errorinternal_error
502provider_errorprovider_bad_gateway, provider_invalid_response
503service_unavailablemodel_unavailable, provider_unavailable, insufficient_capacity
504timeout_errorprovider_timeout, gateway_timeout

Mã lỗi phổ biến

Ý nghĩaHành động đề xuất
missing_api_keyKhông có API key được cung cấp.Thêm header Authorization.
invalid_api_keyAPI key không hợp lệ hoặc đã bị thu hồi.Tạo hoặc xoay vòng API key.
model_not_foundID 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_deniedAPI 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_parameterYê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_modalityModal đầ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_limitedNhà 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_creditsTài khoản không đủ tín dụng.Nạp ví, mua gói, hoặc nâng cấp gói.
provider_timeoutNhà 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_unavailableMô 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_errorYê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.
Loại mô hình

claude-fable-5

AWS · Anthropic · 1M 上下文

Image 输入Text 输入Openai chatOpenai responsesAnthropic
可用
输入10 积分
输出50 积分
缓存读取1 积分
缓存写入12.50 积分

claude-opus-4.6

AWS · Anthropic · 1M 上下文

Image 输入Text 输入Openai chatOpenai responsesAnthropic
可用
输入5 积分
输出25 积分
缓存读取0.50 积分
缓存写入10 积分

claude-opus-4.7

AWS · Anthropic · 1M 上下文

Image 输入Text 输入Openai chatOpenai responsesAnthropic
可用
输入5 积分
输出25 积分
缓存读取0.50 积分
缓存写入10 积分

claude-opus-4.8

AWS · Anthropic · 1M 上下文

Image 输入Text 输入Openai chatOpenai responsesAnthropic
可用
输入5 积分
输出25 积分
缓存读取0.50 积分
缓存写入10 积分

claude-opus-5

AWS · Anthropic · 1M 上下文

Text 输入Image 输入Openai chatOpenai responsesAnthropic
可用
输入5 积分
输出25 积分
缓存读取0.50 积分
缓存写入10 积分

claude-sonnet-4.6

AWS · Anthropic · 1M 上下文

Image 输入Text 输入Openai chatOpenai responsesAnthropic
可用
输入3 积分
输出15 积分
缓存读取0.30 积分
缓存写入6 积分

claude-sonnet-5

AWS · Anthropic · 1M 上下文

Image 输入Text 输入Openai chatOpenai responsesAnthropic
可用
输入2 积分
输出10 积分
缓存读取0.20 积分
缓存写入4 积分

deepseek-v3.2

TencentCloud · Alibaba Cloud · Deepseek · 128K 上下文

Openai chatOpenai responsesAnthropic
可用
输入0.57 积分
输出1.71 积分
缓存读取0.11 积分
缓存写入0.11 积分

deepseek-v4-flash

TencentCloud · Deepseek · 1M 上下文

Text 输入Openai chatOpenai responsesAnthropic
可用
输入0.14 积分
输出0.28 积分
缓存读取0.03 积分
缓存写入0.03 积分

deepseek-v4-pro

TencentCloud · Deepseek · 1M 上下文

Text 输入Openai chatOpenai responsesAnthropic
可用
输入1.74 积分
输出3.48 积分
缓存读取0.14 积分
缓存写入0.14 积分

dola-seed-2-0-mini

BytePlus · Bytedance · 262K 上下文

Image 输入Video 输入Text 输入Openai chatOpenai responses
可用
输入0.20 积分
输出0.80 积分
缓存读取0.04 积分
缓存写入0.01 积分

dola-seed-2-0-mini-white

BytePlus · Bytedance · 262K 上下文

Image 输入Video 输入Text 输入Openai chatOpenai responses
可用
输入0.20 积分
输出0.80 积分
缓存读取0.04 积分
缓存写入0.01 积分

dola-seed-2-1-turbo

BytePlus · Bytedance · 262K 上下文

Image 输入Text 输入Video 输入Openai chatOpenai responses
可用
输入0.50 积分
输出2.50 积分
缓存读取0.10 积分
缓存写入0.01 积分

dola-seed-2.0-code

BytePlus · Bytedance · 262K 上下文

Image 输入Video 输入Text 输入Openai chatOpenai responses
可用
输入0.50 积分
输出3 积分
缓存读取0.10 积分
缓存写入0.01 积分

dola-seed-2.0-lite

BytePlus · Bytedance · 262K 上下文

Image 输入Video 输入Text 输入Openai chatOpenai responses
可用
输入0.50 积分
输出4 积分
缓存读取0.10 积分
缓存写入0.01 积分

dola-seed-2.0-pro

BytePlus · Bytedance · 262K 上下文

Image 输入Video 输入Text 输入Openai chatOpenai responses
可用
输入1 积分
输出6 积分
缓存读取0.20 积分
缓存写入0.01 积分

doubao-seed3d-1.0

即将推出

gemini-3-flash-preview

Google · Gemini · 1.0M 上下文

Image 输入Video 输入Text 输入Openai chat
可用
输入0.50 积分
输出3 积分
缓存读取0.05 积分
缓存写入0.05 积分

gemini-3.1-pro-preview

Google · Gemini · 1.0M 上下文

Image 输入Text 输入Video 输入Openai chat
可用
输入4 积分
输出18 积分
缓存读取0.40 积分
缓存写入0.40 积分

gemini-omni-flash-preview

Google · Gemini

文生视频按秒
即将推出
单价 / 秒0.10 积分 / 秒

glm-5

TencentCloud · Zai · 200K 上下文

Openai chatAnthropic
可用
输入1 积分
输出3.20 积分
缓存读取0.20 积分
缓存写入0.20 积分

glm-5-turbo

TencentCloud · Zai · 200K 上下文

Text 输入Openai chatAnthropic
可用
输入1.20 积分
输出4 积分
缓存读取0.24 积分
缓存写入0.24 积分

glm-5.1

TencentCloud · Zai · 200K 上下文

Text 输入Openai chatAnthropic
可用
输入1.40 积分
输出4.40 积分
缓存读取0.26 积分
缓存写入0.26 积分

glm-5.2

TencentCloud · Zai · 1M 上下文

Text 输入Openai chatOpenai responsesAnthropic
可用
输入1.40 积分
输出4.40 积分
缓存读取0.26 积分
缓存写入0.26 积分

glm-5v-turbo

TencentCloud · Zai · 200K 上下文

Image 输入Openai chatAnthropic
可用
输入1.20 积分
输出4 积分
缓存读取0.24 积分
缓存写入0.24 积分

gpt-5-nano

MicrosoftAzure · Openai · 400K 上下文

Image 输入Text 输入Openai chatOpenai responses
可用
输入0.05 积分
输出0.40 积分
缓存读取- 积分
缓存写入- 积分

gpt-5.4

MicrosoftAzure · Openai · 1.1M 上下文

Image 输入Text 输入Openai chatOpenai responses
可用
输入5 积分
输出22.50 积分
缓存读取0.50 积分
缓存写入0.50 积分

gpt-5.5

MicrosoftAzure · Openai · 1.1M 上下文

Image 输入Text 输入Openai chatOpenai responses
可用
输入5 积分
输出30 积分
缓存读取0.50 积分
缓存写入0.50 积分

gpt-5.6-luna

MicrosoftAzure · Openai · 1.1M 上下文

Text 输入Image 输入Openai chatOpenai responses
可用
输入2 积分
输出9 积分
缓存读取0.20 积分
缓存写入2.50 积分

gpt-5.6-sol

MicrosoftAzure · Openai · 1.1M 上下文

Text 输入Image 输入Openai chatOpenai responses
可用
输入10 积分
输出45 积分
缓存读取1 积分
缓存写入12.50 积分

gpt-5.6-terra

MicrosoftAzure · Openai · 1.1M 上下文

Text 输入Image 输入Openai chatOpenai responses
可用
输入5 积分
输出22.50 积分
缓存读取0.50 积分
缓存写入6.25 积分

gpt-image-2

MicrosoftAzure · Openai

图像生成1K/2K/4K按张
可用
单价 / 张0.41 积分

HappyHorse-1.0-i2v

Alibaba Cloud · HappyHorse

文生视频按秒
可用
单价 / 秒0.14 积分 / 秒

HappyHorse-1.0-i2v-white

Alibaba Cloud · HappyHorse

文生视频按秒
可用
单价 / 秒0.14 积分 / 秒

HappyHorse-1.0-r2v

Alibaba Cloud · HappyHorse

文生视频按秒
可用
单价 / 秒0.14 积分 / 秒

HappyHorse-1.0-r2v-white

Alibaba Cloud · HappyHorse

文生视频按秒
可用
单价 / 秒0.14 积分 / 秒

HappyHorse-1.0-t2v

Alibaba Cloud · HappyHorse

文生视频按秒
可用
单价 / 秒0.24 积分 / 秒

HappyHorse-1.0-t2v-white

Alibaba Cloud · HappyHorse

文生视频按秒
可用
单价 / 秒0.14 积分 / 秒

imagen 4 fast

Google · Gemini

图像生成2K按张
可用
单价 / 张0.02 积分

imagen 4 standard

Google · Gemini

图像生成2K按张
可用
单价 / 张0.04 积分

imagen 4 ultra

Google · Gemini

图像生成2K按张
可用
单价 / 张0.06 积分

kimi-k2.5

TencentCloud · Moonshot AI · 256K 上下文

Image 输入Video 输入Openai chatAnthropic
可用
输入0.60 积分
输出3 积分
缓存读取0.10 积分
缓存写入0.10 积分

kimi-k2.6

TencentCloud · Moonshot AI · 256K 上下文

Image 输入Text 输入Openai chatAnthropic
可用
输入0.86 积分
输出3.57 积分
缓存读取0.14 积分
缓存写入0.14 积分

kimi-k2.7-code

TencentCloud · Moonshot AI · 256K 上下文

Image 输入Video 输入Openai chatAnthropic
可用
输入0.95 积分
输出4 积分
缓存读取0.19 积分
缓存写入0.19 积分

kimi-k2.7-code-highspeed

TencentCloud · Moonshot AI · 256K 上下文

Image 输入Video 输入Openai chatOpenai responsesAnthropic
可用
输入1.90 积分
输出8 积分
缓存读取0.38 积分
缓存写入0.38 积分

kimi-k3

TencentCloud · Moonshot AI · 1M 上下文

Image 输入Text 输入Video 输入Openai chatOpenai responsesAnthropic
可用
输入3 积分
输出15 积分
缓存读取0.30 积分
缓存写入0.30 积分

kling-image-o1

Kling · Kling

图像生成2K/3K按张
可用
单价 / 张0.03 积分

kling-v3-omni-image

Kling · Kling

图像生成1K/2K/4K按张
可用
单价 / 张0.03 积分

kling-v3-omni-video

Kling · Kling

文生视频按秒
可用
单价 / 秒0.13 积分 / 秒

minimax-m2.5

TencentCloud · MiniMax · 200K 上下文

Text 输入Openai chatOpenai responsesAnthropic
可用
输入0.30 积分
输出1.20 积分
缓存读取0.03 积分
缓存写入0.03 积分

minimax-m2.7

TencentCloud · MiniMax · 200K 上下文

Text 输入Openai chatOpenai responsesAnthropic
可用
输入0.30 积分
输出1.20 积分
缓存读取0.06 积分
缓存写入0.06 积分

minimax-m3

TencentCloud · MiniMax · 1M 上下文

Image 输入Video 输入Text 输入Openai chatOpenai responsesAnthropic
可用
输入0.60 积分
输出2.40 积分
缓存读取0.12 积分
缓存写入0.12 积分

nano banana 2

Google · Gemini

图像生成1K/2K/4K按张
可用
单价 / 张0.07 积分

nano banana pro

Google · Gemini

图像生成1K/2K按张
可用
单价 / 张0.14 积分

qwen-image-2.0-pro

Alibaba Cloud · Qwen

图像生成2K按张
可用
单价 / 张0.07 积分

qwen-image-2.0-s-white

Alibaba Cloud · Qwen

图像生成2K按张
可用
单价 / 张0.07 积分

qwen-image-3.0-pro

Alibaba Cloud · Qwen

图像生成1K/2K按张
即将推出
单价 / 张0.07 积分

qwen-image-max

Alibaba Cloud · Qwen

图像生成2K按张
可用
单价 / 张0.07 积分

qwen-image-max-white

Alibaba Cloud · Qwen

图像生成2K按张
可用
单价 / 张0.07 积分

qwen-image-plus

Alibaba Cloud · Qwen

图像生成2K按张
可用
单价 / 张0.03 积分

qwen3-max

Alibaba Cloud · Qwen · 256K 上下文

Text 输入Openai chatOpenai responsesAnthropic
可用
输入1.20 积分
输出6 积分
缓存读取- 积分
缓存写入- 积分

qwen3-max-white

Alibaba Cloud · Qwen · 256K 上下文

Text 输入Openai chatOpenai responsesAnthropic
可用
输入2.40 积分
输出12 积分
缓存读取- 积分
缓存写入- 积分

qwen3-vl-flash

Alibaba Cloud · Qwen · 256K 上下文

Image 输入Video 输入Text 输入Openai chatOpenai responsesAnthropic
可用
输入0.07 积分
输出0.60 积分
缓存读取0.01 积分
缓存写入0.10 积分

qwen3-vl-plus

Alibaba Cloud · Qwen · 256K 上下文

Image 输入Video 输入Text 输入Openai chatOpenai responsesAnthropic
可用
输入0.60 积分
输出4.80 积分
缓存读取- 积分
缓存写入- 积分

qwen3.5-plus

Alibaba Cloud · Qwen · 1M 上下文

Image 输入Video 输入Text 输入Openai chatOpenai responsesAnthropic
可用
输入0.50 积分
输出3 积分
缓存读取0.05 积分
缓存写入0.63 积分

qwen3.5-plus-white

Alibaba Cloud · Qwen · 1M 上下文

Image 输入Video 输入Text 输入Openai chatOpenai responsesAnthropic
可用
输入0.40 积分
输出0.24 积分
缓存读取0.04 积分
缓存写入0.50 积分

qwen3.6-plus

Alibaba Cloud · Qwen · 1M 上下文

Image 输入Video 输入Text 输入Openai chatOpenai responsesAnthropic
可用
输入0.50 积分
输出3 积分
缓存读取0.05 积分
缓存写入0.63 积分

qwen3.7-max

Alibaba Cloud · Qwen · 1M 上下文

Text 输入Openai chatOpenai responsesAnthropic
可用
输入2.50 积分
输出7.50 积分
缓存读取0.50 积分
缓存写入0.50 积分

qwen3.7-plus

Alibaba Cloud · Qwen · 1M 上下文

Image 输入Video 输入Text 输入Openai chatOpenai responsesAnthropic
可用
输入0.40 积分
输出1.60 积分
缓存读取0.08 积分
缓存写入0.50 积分

qwen3.8-max

Alibaba Cloud · Qwen · 1M 上下文

Image 输入Video 输入Text 输入Openai chatOpenai responses
可用
输入2 积分
输出6 积分
缓存读取0.25 积分
缓存写入0.25 积分

seedance-1-5-pro

BytePlus · Bytedance

文生视频按秒
可用
单价 / 秒0.05 积分 / 秒

seedance-1-5-pro-white

BytePlus · Bytedance

文生视频按秒
可用
单价 / 秒0.05 积分 / 秒

seedance-2.0

BytePlus · Bytedance

文生视频按秒
可用
单价 / 秒0.15 积分 / 秒

seedance-2.0-fast

BytePlus · Bytedance

文生视频按秒
可用
单价 / 秒0.06 积分 / 秒

seedance-2.0-fast-white

BytePlus · Bytedance

文生视频按秒
可用
单价 / 秒0.06 积分 / 秒

seedance-2.0-white

BytePlus · Bytedance

文生视频按秒
可用
单价 / 秒0.07 积分 / 秒

seedance-2.5

BytePlus · Bytedance

文生视频按秒
即将推出
单价 / 秒0.11 积分 / 秒

seedream-4.5

BytePlus · Bytedance

图像生成2K/4K按张
可用
单价 / 张0.04 积分

seedream-4.5-white

BytePlus · Bytedance

图像生成2K/4K按张
可用
单价 / 张0.04 积分

seedream-5.0

BytePlus · Bytedance

图像生成2K/3K按张
可用
单价 / 张0.04 积分

seedream-5.0-white

BytePlus · Bytedance

图像生成2K/3K按张
可用
单价 / 张0.04 积分

veo 3.1

Google · Gemini

文生视频按秒
可用
单价 / 秒0.40 积分 / 秒

veo 3.1 lite

Google · Gemini

文生视频按秒
可用
单价 / 秒0.05 积分 / 秒

wan2.5-i2v-preview

Alibaba Cloud · Wan

文生视频按秒
可用
单价 / 秒0.10 积分 / 秒

wan2.6-i2v-flash

Alibaba Cloud · Wan

文生视频按秒
可用
单价 / 秒0.05 积分 / 秒

wan2.6-r2v-flash

Alibaba Cloud · Wan

文生视频按秒
可用
单价 / 秒0.05 积分 / 秒

wan2.6-t2v

Alibaba Cloud · Wan

文生视频按秒
可用
单价 / 秒0.10 积分 / 秒

wan2.6-t2v-white

Alibaba Cloud · Wan

文生视频按秒
可用
单价 / 秒0.10 积分 / 秒

wan2.7-i2v

Alibaba Cloud · Wan

文生视频按秒
可用
单价 / 秒0.10 积分 / 秒

wan2.7-i2v-s-white

Alibaba Cloud · Wan

文生视频按秒
可用
单价 / 秒0.26 积分 / 秒

wan2.7-i2v-white

Alibaba Cloud · Wan

文生视频按秒
可用
单价 / 秒0.10 积分 / 秒

wan2.7-image

Alibaba Cloud · Wan

图像生成2K按张
可用
单价 / 张0.03 积分

wan2.7-image-pro

Alibaba Cloud · Wan

图像生成2K按张
可用
单价 / 张0.07 积分