开发者文档Developer docsDokumentasi developer개발자 문서開発者ドキュメント

TokenMaster APITokenMaster APITokenMaster APITokenMaster APITokenMaster API

一个 OpenAI 兼容接口,调用海外与国产主流大模型。换掉 base URL 和 API Key,现有代码、SDK 和客户端工具就能直接使用。One OpenAI-compatible API for leading global and Chinese models. Swap the base URL and API key and your existing code, SDKs and tools keep working.Satu API yang kompatibel dengan OpenAI untuk model-model global dan Tiongkok terkemuka. Ganti base URL dan API key, dan kode, SDK, serta tools Anda yang sudah ada tetap berfungsi.글로벌 및 중국 주요 모델을 하나의 OpenAI 호환 API로 제공합니다. base URL과 API 키만 바꾸면 기존 코드, SDK, 도구를 그대로 사용할 수 있습니다.世界と中国の主要モデルに対応した、OpenAI 互換の単一 API です。ベース URL と API キーを差し替えるだけで、既存のコード、SDK、ツールがそのまま動作します。

基础地址Base URLBase URLBase URLベース URL{{BASE}}/v1
数据格式FormatFormat형식形式JSON · SSE
身份认证AuthAutentikasi인증認証Bearer tm-…
兼容 OpenAIOpenAI-compatibleKompatibel dengan OpenAIOpenAI 호환OpenAI 互換

Chat Completions 协议,支持流式、工具调用、结构化输出、图像输入。Chat Completions protocol with streaming, tools, structured output and images.Protokol Chat Completions dengan streaming, tools, output terstruktur, dan gambar.스트리밍, 도구, 구조화된 출력, 이미지를 지원하는 Chat Completions 프로토콜.Chat Completions プロトコルに対応。ストリーミング、ツール、構造化出力、画像入力をサポートします。

一个 Key,全部模型One key, every modelSatu key, semua model키 하나로 모든 모델ひとつのキーで全モデル

改 model 参数即可在 GPT、Claude、Gemini、DeepSeek、Qwen、Kimi 等之间切换。Change model to switch between GPT, Claude, Gemini, DeepSeek, Qwen, Kimi and more.Ubah model untuk beralih antara GPT, Claude, Gemini, DeepSeek, Qwen, Kimi, dan lainnya.model만 바꾸면 GPT, Claude, Gemini, DeepSeek, Qwen, Kimi 등을 전환할 수 있습니다.model を変更するだけで、GPT、Claude、Gemini、DeepSeek、Qwen、Kimi などを切り替えられます。

预充值,按 token 计费Prepaid, per tokenPrabayar, per token선불, 토큰 단위 과금プリペイド、トークン単位

每次请求实时扣费,余额不足自动拦截,不会产生欠费。Charged in real time per request; requests stop before your balance runs out.Ditagih secara real-time per permintaan; permintaan dihentikan sebelum saldo Anda habis.요청마다 실시간으로 과금되며, 잔액이 소진되기 전에 요청이 중단됩니다.リクエストごとにリアルタイムで課金されます。残高が尽きる前にリクエストは停止します。

快速开始QuickstartMulai cepat빠른 시작クイックスタート

三步发出第一个请求,全程约 3 分钟。Three steps, about three minutes.Tiga langkah, sekitar tiga menit.3단계, 약 3분이면 됩니다.3ステップ、約3分で完了します。

01

注册并充值Sign up & top upDaftar & isi saldo가입 및 충전登録とチャージ

在控制台注册,充值最低 $10。Create an account in the console and add at least $10.Buat akun di konsol dan isi saldo minimal $10.콘솔에서 계정을 만들고 $10 이상 충전하세요.コンソールでアカウントを作成し、$10 以上をチャージします。

02

创建 API KeyCreate an API keyBuat API keyAPI 키 생성API キーを作成

控制台 → API Keys → 创建新 Key。Key 只显示一次,请立即保存。Console → API keys → Create key. It is shown once — save it right away.Konsol → API key → Buat key. Key hanya ditampilkan sekali — segera simpan.콘솔 → API 키 → 키 생성. 키는 한 번만 표시되니 바로 저장하세요.コンソール → API キー → キーを作成。キーは一度しか表示されないため、すぐに保存してください。

03

发送请求Send a requestKirim permintaan요청 보내기リクエストを送信

把 Key 存为环境变量,用下面任意一种方式调用。Store the key in an environment variable and call the API.Simpan key di variabel lingkungan (environment variable) dan panggil API.키를 환경 변수에 저장하고 API를 호출하세요.キーを環境変数に保存し、API を呼び出します。

设置环境变量Set the environment variableAtur variabel lingkungan환경 변수 설정環境変数を設定

export TOKENMASTER_API_KEY="tm-your-key"

发送第一个请求First requestPermintaan pertama첫 요청最初のリクエスト

curl {{BASE}}/v1/chat/completions \
  -H "Authorization: Bearer $TOKENMASTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/gpt-6-luna",
    "messages": [{"role": "user", "content": "Introduce yourself in one sentence"}]
  }'
想换模型?只改 model,例如 anthropic/claude-sonnet-5.5、deepseek/deepseek-v4-pro、moonshotai/kimi-k2.6。完整列表见模型广场或 GET /v1/models。To switch models, change only model — e.g. anthropic/claude-sonnet-5.5, deepseek/deepseek-v4-pro, moonshotai/kimi-k2.6. See the catalog or GET /v1/models.Untuk beralih model, cukup ubah model — mis. anthropic/claude-sonnet-5.5, deepseek/deepseek-v4-pro, moonshotai/kimi-k2.6. Lihat katalog atau GET /v1/models.모델을 바꾸려면 model만 변경하세요 — 예: anthropic/claude-sonnet-5.5, deepseek/deepseek-v4-pro, moonshotai/kimi-k2.6. 카탈로그 또는 GET /v1/models를 참고하세요.モデルを切り替えるには model だけを変更します(例:anthropic/claude-sonnet-5.5、deepseek/deepseek-v4-pro、moonshotai/kimi-k2.6)。カタログまたは GET /v1/models を参照してください。

身份认证AuthenticationAutentikasi인증認証

所有 /v1/* 请求都在 Authorization 请求头里携带 API Key:Every /v1/* request sends your API key in the Authorization header:Setiap permintaan /v1/* mengirimkan API key Anda di header Authorization:모든 /v1/* 요청은 Authorization 헤더에 API 키를 담아 보냅니다:すべての /v1/* リクエストでは、Authorization ヘッダーで API キーを送信します:

HTTP
Authorization: Bearer tm-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  • Key 以 tm- 开头,创建时只显示一次;平台只保存哈希,无法找回,丢失请新建。Keys start with tm- and are shown once at creation. We store only a hash, so a lost key cannot be recovered — create a new one.Key diawali dengan tm- dan hanya ditampilkan sekali saat dibuat. Kami hanya menyimpan hash-nya, sehingga key yang hilang tidak dapat dipulihkan — buat key baru.키는 tm-로 시작하며 생성 시 한 번만 표시됩니다. 해시만 저장하므로 분실한 키는 복구할 수 없습니다. 새 키를 생성하세요.キーは tm- で始まり、作成時に一度だけ表示されます。保存しているのはハッシュのみのため、紛失したキーは復元できません。新しいキーを作成してください。
  • 同一账户可创建多个 Key(例如按环境或项目区分),共享同一个余额;用量明细可按 Key 区分。One account can hold many keys (per environment or project). They share one balance.Satu akun dapat memiliki banyak key (per environment atau proyek). Semuanya berbagi satu saldo.하나의 계정에 여러 키(환경 또는 프로젝트별)를 둘 수 있으며, 모든 키가 하나의 잔액을 공유합니다.1つのアカウントで複数のキー(環境やプロジェクトごと)を保持できます。残高はすべてのキーで共有されます。
  • 发现泄露立即在控制台「吊销」,吊销后立刻失效。Revoke a leaked key in the console; it stops working immediately.Cabut key yang bocor di konsol; key tersebut langsung berhenti berfungsi.유출된 키는 콘솔에서 폐기하세요. 즉시 사용이 중지됩니다.漏洩したキーはコンソールで失効させてください。直ちに使用できなくなります。
不要把 Key 放进浏览器或手机 App 代码。任何拿到 Key 的人都能消耗你的余额。请从你自己的服务端调用 TokenMaster。Never ship a key in browser or mobile code. Anyone holding it can spend your balance. Call TokenMaster from your own server.Jangan pernah menyertakan key di kode browser atau aplikasi mobile. Siapa pun yang memilikinya dapat menghabiskan saldo Anda. Panggil TokenMaster dari server Anda sendiri.브라우저나 모바일 코드에 키를 절대 포함하지 마세요. 키를 가진 사람은 누구나 잔액을 사용할 수 있습니다. TokenMaster는 자체 서버에서 호출하세요.キーをブラウザやモバイルアプリのコードに含めないでください。キーを入手した第三者があなたの残高を使用できてしまいます。TokenMaster は必ず自社サーバーから呼び出してください。

SDK 与工具接入SDKs & toolsSDK & toolsSDK 및 도구SDK とツール

任何支持「OpenAI 兼容接口」的 SDK、框架或客户端都可以接入,统一填写三项:Anything that supports an "OpenAI-compatible" endpoint works. Configure three values:Semua yang mendukung endpoint "OpenAI-compatible" dapat digunakan. Konfigurasikan tiga nilai:"OpenAI 호환" 엔드포인트를 지원하는 도구라면 모두 사용할 수 있습니다. 다음 세 가지 값을 설정하세요:「OpenAI 互換」エンドポイントに対応したものであれば何でも使えます。設定するのは次の3項目です:

配置项SettingPengaturan설정設定項目填写ValueNilai값値
Base URL / API Base{{BASE}}/v1
API Key控制台创建的 tm-…Your tm-… keyKey tm-… Andatm-… 키お客様の tm-… キー
Model模型 ID,如 anthropic/claude-sonnet-5.5A model ID such as anthropic/claude-sonnet-5.5ID model seperti anthropic/claude-sonnet-5.5anthropic/claude-sonnet-5.5 같은 모델 IDanthropic/claude-sonnet-5.5 などのモデル ID

LangChain

# pip install langchain-openai
import os
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
    base_url="{{BASE}}/v1",
    api_key=os.environ["TOKENMASTER_API_KEY"],
    model="deepseek/deepseek-v4-pro",
    max_tokens=1024,
)
print(llm.invoke("Write a haiku about Manila").content)

桌面客户端与低代码平台Desktop clients & low-code platformsKlien desktop & platform low-code데스크톱 클라이언트 및 로우코드 플랫폼デスクトップクライアントとローコードプラットフォーム

Cherry Studio、LobeChat、Dify、Continue 等工具:在模型服务商设置里选择「OpenAI 兼容」或「自定义 OpenAI」,按上表填写 Base URL、API Key,并手动添加要使用的模型 ID。部分工具要求 Base URL 不带 /v1,如果连接失败,请两种写法都试一次。Cherry Studio, LobeChat, Dify, Continue and similar tools: pick the "OpenAI-compatible" or "Custom OpenAI" provider, fill in the base URL and key from the table, then add the model IDs you want. Some tools expect the base URL without /v1; try both if the connection test fails.Cherry Studio, LobeChat, Dify, Continue, dan tools serupa: pilih penyedia "OpenAI-compatible" atau "Custom OpenAI", isi base URL dan key dari tabel, lalu tambahkan ID model yang Anda inginkan. Beberapa tools mengharapkan base URL tanpa /v1; coba keduanya jika uji koneksi gagal.Cherry Studio, LobeChat, Dify, Continue 등의 도구에서는 "OpenAI 호환" 또는 "Custom OpenAI" 제공업체를 선택하고, 표의 base URL과 키를 입력한 뒤 원하는 모델 ID를 추가하세요. 일부 도구는 /v1이 없는 base URL을 요구하므로, 연결 테스트에 실패하면 두 가지 모두 시도해 보세요.Cherry Studio、LobeChat、Dify、Continue などのツールでは、「OpenAI 互換」または「カスタム OpenAI」プロバイダーを選び、表のベース URL とキーを入力してから、使いたいモデル ID を追加します。ツールによってはベース URL に /v1 を含めない形式を求めるものがあります。接続テストに失敗する場合は両方をお試しください。

GET/v1/models

返回当前可调用的模型。只有已开售(有价格)的模型才会出现;价格见模型广场。Lists the models you can call right now. Only models with published prices appear; see the catalog for prices.Menampilkan daftar model yang dapat Anda panggil saat ini. Hanya model dengan harga yang telah dipublikasikan yang muncul; lihat katalog untuk harga.지금 호출할 수 있는 모델 목록을 반환합니다. 가격이 공개된 모델만 표시되며, 가격은 카탈로그에서 확인하세요.現在呼び出し可能なモデルを一覧表示します。価格が公開されているモデルのみが表示されます。価格はカタログをご覧ください。

curl {{BASE}}/v1/models -H "Authorization: Bearer $TOKENMASTER_API_KEY"

模型 ID 规则Model IDsID model모델 IDモデル ID

  • 格式为 厂商/模型,全小写,例如 google/gemini-3.8-flash、alibaba/qwen3.7-plus、zhipu/glm-5.2。Format is vendor/model, lowercase — e.g. google/gemini-3.8-flash, alibaba/qwen3.7-plus, zhipu/glm-5.2.Formatnya vendor/model, huruf kecil — mis. google/gemini-3.8-flash, alibaba/qwen3.7-plus, zhipu/glm-5.2.형식은 소문자 vendor/model입니다 — 예: google/gemini-3.8-flash, alibaba/qwen3.7-plus, zhipu/glm-5.2.形式は小文字の vendor/model です(例:google/gemini-3.8-flash、alibaba/qwen3.7-plus、zhipu/glm-5.2)。
  • 特殊 ID tokenmaster/auto:由平台自动挑选模型,见智能路由。Special ID tokenmaster/auto lets us pick the model — see Smart routing.ID khusus tokenmaster/auto membiarkan kami memilih model — lihat Perutean pintar.특수 ID tokenmaster/auto는 모델을 자동 선택합니다 — 스마트 라우팅 참고.特別な ID tokenmaster/auto を使うとモデルを自動で選びます(スマートルーティング参照)。
  • 模型广场里标注「即将开售」的模型暂不可调用,会返回 400。Models marked "Coming soon" in the catalog cannot be called yet and return 400.Model yang ditandai "Segera hadir" di katalog belum dapat dipanggil dan mengembalikan 400.카탈로그에서 "출시 예정"으로 표시된 모델은 아직 호출할 수 없으며 400을 반환합니다.カタログで「近日公開」と表示されているモデルはまだ呼び出せず、400 を返します。
  • 目前 /v1/chat/completions 支持文本类(含多模态输入)模型;图像生成、视频、语音、向量模型接口即将开放。/v1/chat/completions currently serves text models (including multimodal input). Image, video, speech and embedding endpoints are coming./v1/chat/completions saat ini melayani model teks (termasuk input multimodal). Endpoint gambar, video, suara, dan embedding akan segera hadir./v1/chat/completions는 현재 텍스트 모델(멀티모달 입력 포함)을 지원합니다. 이미지, 영상, 음성, 임베딩 엔드포인트는 준비 중입니다./v1/chat/completions は現在テキストモデル(マルチモーダル入力を含む)に対応しています。画像、動画、音声、埋め込みのエンドポイントは今後提供予定です。
  • 部分海外厂商有服务地区限制,详见安全与合规。Some providers restrict regions — see Security & compliance.Beberapa penyedia membatasi wilayah — lihat Keamanan & kepatuhan.일부 제공업체는 지역을 제한합니다 — 보안 및 규정 준수를 참고하세요.一部のプロバイダーは提供地域を制限しています。セキュリティとコンプライアンスを参照してください。

智能路由Smart routingPerutean pintar스마트 라우팅スマートルーティング tokenmaster/auto

不知道该选哪个模型?让平台替你选:简单问题交给便宜模型,复杂任务交给强模型,同样的预算能跑更多请求。Not sure which model to pick? Let us choose per request: simple asks go to cheaper models, hard tasks to stronger ones — the same budget goes further.Bingung memilih model? Biarkan kami memilih per permintaan: pertanyaan sederhana ke model yang lebih murah, tugas sulit ke model yang lebih kuat — anggaran yang sama jadi lebih awet.어떤 모델을 골라야 할지 모르겠다면 저희가 요청마다 골라 드립니다. 간단한 질문은 저렴한 모델, 어려운 작업은 강력한 모델로 보내 같은 예산으로 더 많이 처리합니다.どのモデルを選べばいいか迷ったら、リクエストごとにお任せください。簡単な質問は安いモデル、難しいタスクは高性能モデルに回すので、同じ予算でより多く処理できます。

  • 用法:把 model 写成 tokenmaster/auto(简写 auto 也可以),其余参数不变,流式、工具调用、图像输入都照常支持。Usage: set model to tokenmaster/auto (or just auto). Everything else stays the same — streaming, tools and image input all work.Cara pakai: isi model dengan tokenmaster/auto (atau cukup auto). Parameter lain tetap sama — streaming, tool calling, dan input gambar tetap berfungsi.사용법: model을 tokenmaster/auto(또는 auto)로 지정하세요. 나머지는 그대로이며 스트리밍, 도구 호출, 이미지 입력 모두 지원됩니다.使い方:model に tokenmaster/auto(または auto)を指定するだけです。ストリーミング、ツール呼び出し、画像入力もそのまま使えます。
  • 怎么选:先判断任务类型和难度,再在候选模型里权衡质量和价格,选性价比最高的一个;所选模型不可用时自动换下一个。当前候选:How it picks: it classifies the task and its difficulty, then weighs quality against price across the candidates and picks the best value; if that model is unavailable it falls back to the next. Current candidates: Cara memilih: jenis dan tingkat kesulitan tugas dinilai, lalu kualitas dan harga ditimbang di antara kandidat untuk memilih yang paling sepadan; bila model itu tidak tersedia, beralih ke berikutnya. Kandidat saat ini: 선택 방식: 작업 유형과 난이도를 판단한 뒤 후보 모델 중 품질과 가격을 비교해 가장 효율적인 모델을 고릅니다. 해당 모델을 쓸 수 없으면 다음 모델로 전환합니다. 현재 후보: 選び方:タスクの種類と難易度を判定し、候補モデルの品質と価格を比較して最もコスパの良いモデルを選びます。利用できない場合は次のモデルに切り替えます。現在の候補:
  • 计费:按实际回答的那个模型的单价计费,智能路由本身不收费。响应里的 model 字段和 x-tm-routed-model 响应头会告诉你用了哪个模型;控制台「用量明细」里这类请求带 auto 标记。Billing: you pay the per-token price of the model that actually answered; routing itself is free. The response model field and the x-tm-routed-model header name that model, and these requests carry an auto tag under Usage in the console.Penagihan: Anda membayar harga per token dari model yang benar-benar menjawab; peruteannya gratis. Field model pada respons dan header x-tm-routed-model menyebut model tersebut, dan permintaan ini bertanda auto di Penggunaan pada konsol.과금: 실제로 답한 모델의 토큰 단가로 청구되며 라우팅 자체는 무료입니다. 응답의 model 필드와 x-tm-routed-model 헤더로 사용된 모델을 알 수 있고, 콘솔 사용 내역에는 auto 표시가 붙습니다.課金:実際に回答したモデルのトークン単価で課金され、ルーティング自体は無料です。レスポンスの model フィールドと x-tm-routed-model ヘッダーで使用モデルがわかり、コンソールの利用明細には auto が付きます。
  • 预授权:请求前按候选模型中的最高单价冻结金额,结束后按实际模型结算、多退少补,所以需要的可用余额会比直接指定便宜模型略高。Holds: the pre-authorisation uses the highest price among the candidates and is settled to the actual model afterwards, so it needs a little more available balance than calling a cheap model directly.Penahanan saldo: pra-otorisasi memakai harga tertinggi di antara kandidat lalu diselesaikan sesuai model yang dipakai, jadi butuh saldo tersedia sedikit lebih besar dibanding memanggil model murah secara langsung.사전 승인: 요청 전 후보 중 가장 높은 단가로 금액을 보류하고, 완료 후 실제 모델 기준으로 정산합니다. 그래서 저렴한 모델을 직접 호출할 때보다 사용 가능 잔액이 조금 더 필요합니다.事前与信:リクエスト前に候補の最高単価で金額を保留し、終了後に実際のモデルで精算します。そのため安いモデルを直接呼ぶより少し多めの利用可能残高が必要です。
  • 多轮对话:加请求头 x-tm-session-id(任意字符串,最长 64 位),同一会话会尽量保持同一个模型,缓存命中率更高、更省钱。Conversations: send an x-tm-session-id header (any string, up to 64 chars) and a conversation stays on one model where possible — better cache hits, lower cost.Percakapan: kirim header x-tm-session-id (string bebas, maks. 64 karakter) agar satu percakapan sebisa mungkin tetap di satu model — cache lebih sering kena, biaya lebih rendah.다중 턴 대화: x-tm-session-id 헤더(임의 문자열, 최대 64자)를 보내면 한 대화는 가능한 한 같은 모델을 유지해 캐시 적중률이 높아지고 비용이 줄어듭니다.会話:x-tm-session-id ヘッダー(任意の文字列、最大 64 文字)を付けると、同じ会話はできるだけ同じモデルを使い続け、キャッシュが効いて安くなります。
  • 地区:候选模型会按你的国家 / 地区过滤;没有可用模型时返回 403 region_restricted。Regions: candidates are filtered by your country / region; if none remain you get 403 region_restricted.Wilayah: kandidat disaring sesuai negara / wilayah Anda; bila tidak ada yang tersisa, Anda menerima 403 region_restricted.지역: 후보 모델은 국가 / 지역에 따라 걸러지며, 남는 모델이 없으면 403 region_restricted를 반환합니다.地域:候補はお客様の国・地域で絞り込まれ、利用できるモデルがない場合は 403 region_restricted を返します。
  • 什么时候别用:需要固定的输出风格、可复现的结果,或者对质量要求极高的关键任务,请直接指定模型。When not to use it: if you need a fixed style, reproducible output, or top quality on a critical task, name the model explicitly.Kapan sebaiknya tidak dipakai: bila Anda butuh gaya keluaran tetap, hasil yang dapat direproduksi, atau kualitas tertinggi untuk tugas penting, sebutkan modelnya secara langsung.사용하지 않는 것이 좋은 경우: 고정된 출력 스타일, 재현 가능한 결과, 또는 중요한 작업에서 최고 품질이 필요하면 모델을 직접 지정하세요.使わない方がよい場合:出力スタイルを固定したい、結果を再現したい、重要なタスクで最高品質が必要、といった場合はモデルを直接指定してください。
resp = client.chat.completions.with_raw_response.create(
    model="tokenmaster/auto",
    messages=[{"role": "user", "content": "Summarise this paragraph in one sentence: ..."}],
    extra_headers={"x-tm-session-id": "conv-42"},   # optional: keep one model per conversation
)
print(resp.headers["x-tm-routed-model"])   # e.g. openai/gpt-6-luna
print(resp.parse().choices[0].message.content)

POST/v1/chat/completions

根据对话消息生成回复。请求与响应格式与 OpenAI Chat Completions 一致。Generates a reply from a list of messages. Request and response match OpenAI Chat Completions.Menghasilkan balasan dari daftar pesan. Permintaan dan respons sesuai dengan OpenAI Chat Completions.메시지 목록으로 응답을 생성합니다. 요청과 응답 형식은 OpenAI Chat Completions와 동일합니다.メッセージのリストから応答を生成します。リクエストとレスポンスは OpenAI Chat Completions と同じ形式です。

请求参数Request bodyBody permintaan요청 본문リクエストボディ

参数FieldField필드フィールド类型TypeTipe타입型说明DescriptionDeskripsi설명説明
model*string模型 ID,见 /v1/models。Model ID from /v1/models.ID model dari /v1/models./v1/models의 모델 ID./v1/models から取得したモデル ID。
messages*array对话消息。role 可为 system / user / assistant / tool;content 为字符串,或含 text、image_url 的数组。Conversation. role is system, user, assistant or tool; content is a string or an array of text / image_url parts.Percakapan. role berupa system, user, assistant, atau tool; content berupa string atau array bagian text / image_url.대화 내용. role은 system, user, assistant, tool 중 하나이며, content는 문자열 또는 text / image_url 파트의 배열입니다.会話内容。role は system、user、assistant、tool のいずれか。content は文字列、または text / image_url パーツの配列です。
max_tokensinteger最多生成的 token 数。不传时默认 8192;平台会按余额自动下调,详见预授权与输出上限。Maximum tokens to generate. Defaults to 8192; may be lowered to what your balance covers — see Holds & output caps.Jumlah maksimum token yang dihasilkan. Default 8192; dapat diturunkan sesuai yang dapat ditanggung saldo Anda — lihat Penahanan saldo & batas output.생성할 최대 토큰 수. 기본값은 8192이며, 잔액으로 충당 가능한 수준까지 낮아질 수 있습니다 — 잔액 보류 및 출력 상한 참고.生成する最大トークン数。デフォルトは 8192 です。残高で賄える範囲まで引き下げられる場合があります。与信確保と出力上限を参照してください。
max_completion_tokensinteger同上,推理模型推荐使用;包含推理(思考)token。Same as above; preferred for reasoning models and includes reasoning tokens.Sama seperti di atas; lebih disarankan untuk model penalaran dan mencakup token penalaran.위와 동일하며, 추론 모델에 권장되고 추론 토큰을 포함합니다.上記と同じ。推論モデルでの使用を推奨し、推論トークンも含みます。
streamboolean为 true 时以 SSE 流式返回,见流式响应。Stream as server-sent events — see Streaming.Streaming sebagai server-sent events — lihat Streaming.server-sent events 방식으로 스트리밍합니다 — 스트리밍 참고.Server-Sent Events でストリーミングします。ストリーミングを参照してください。
stream_optionsobject平台总是开启 include_usage,流末尾会返回用量。include_usage is always on; the stream ends with a usage chunk.include_usage selalu aktif; stream diakhiri dengan chunk usage.include_usage는 항상 켜져 있으며, 스트림은 usage 청크로 끝납니다.include_usage は常に有効で、ストリームは usage チャンクで終了します。
temperaturetop_pnumbernumber采样参数,取值范围以各模型为准。Sampling controls; valid ranges depend on the model.Kontrol sampling; rentang yang valid tergantung pada model.샘플링 제어. 유효 범위는 모델에 따라 다릅니다.サンプリング制御。有効な範囲はモデルによって異なります。
stopstring | array遇到这些字符串即停止生成。Stop sequences.Stop sequence.중지 시퀀스.停止シーケンス。
toolstool_choiceparallel_tool_callsarraystring | objectboolean函数调用,见工具调用。Function calling — see Tool calling.Function calling — lihat Tool calling.Function calling — 도구 호출 참고.関数呼び出し。ツール呼び出しを参照してください。
response_formatobjectjson_object 或 json_schema,见结构化输出。json_object or json_schema — see Structured output.json_object atau json_schema — lihat Output terstruktur.json_object 또는 json_schema — 구조화된 출력 참고.json_object または json_schema。構造化出力を参照してください。
reasoning_effortstring推理强度(如 low / medium / high),仅支持推理的模型有效。Reasoning effort (e.g. low/medium/high) on models that support it.Tingkat upaya penalaran (mis. low/medium/high) pada model yang mendukungnya.지원 모델에서의 추론 강도(예: low/medium/high).対応モデルでの推論の強度(例:low/medium/high)。
seedpresence_penaltyfrequency_penaltylogprobstop_logprobsuserintegernumbernumberbooleanintegerstring按 OpenAI 语义透传,模型不支持时会被忽略或返回 400。Passed through with OpenAI semantics; ignored or rejected by models that don't support them.Diteruskan dengan semantik OpenAI; diabaikan atau ditolak oleh model yang tidak mendukungnya.OpenAI와 동일한 의미로 전달되며, 지원하지 않는 모델에서는 무시되거나 거부됩니다.OpenAI と同じ意味でそのまま渡されます。非対応のモデルでは無視または拒否されます。
未列出的参数会被忽略。n 只支持 1(其他值返回 400);service_tier 等会改变计费方式的参数会被移除;联网搜索请用 web_search,见联网搜索。Unlisted fields are dropped. n must be 1 (other values return 400); fields that change pricing, such as service_tier, are removed; for web search use web_search — see Web search.Field yang tidak tercantum akan dihapus. n harus bernilai 1 (nilai lain mengembalikan 400); field yang mengubah harga, seperti service_tier, akan dihapus; untuk pencarian web gunakan web_search — lihat Pencarian web.목록에 없는 필드는 제거됩니다. n은 1이어야 하며(다른 값은 400 반환), service_tier처럼 가격에 영향을 주는 필드는 제거됩니다. 웹 검색은 web_search를 쓰세요 — 웹 검색 참고.記載のないフィールドは削除されます。n は 1 である必要があります(それ以外の値は 400 を返します)。service_tier など料金に影響するフィールドは除去されます。ウェブ検索には web_search を使います(ウェブ検索参照)。

示例ExampleContoh예시例

curl {{BASE}}/v1/chat/completions \
  -H "Authorization: Bearer $TOKENMASTER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "anthropic/claude-sonnet-5.5",
    "max_tokens": 600,
    "temperature": 0.3,
    "messages": [
      {"role": "system", "content": "You are a senior cloud architect. Answer concisely."},
      {"role": "user", "content": "What is edge computing good for? Give 3 points."}
    ]
  }'

响应头Response headersHeader respons응답 헤더レスポンスヘッダー

响应头HeaderHeader헤더ヘッダー说明MeaningArti의미意味
x-tm-request-id请求唯一编号,排查问题时提供给我们。Unique request ID — include it when contacting support.ID permintaan unik — sertakan saat menghubungi dukungan.고유 요청 ID — 고객지원 문의 시 함께 알려 주세요.一意のリクエスト ID。サポートへのお問い合わせ時に添えてください。
x-tm-cost-usd本次扣费(美元,非流式请求返回)。流式请求的费用见控制台「用量明细」。Amount charged in USD (non-streaming). For streams, see Usage in the console.Jumlah yang ditagih dalam USD (non-streaming). Untuk stream, lihat Pemakaian di konsol.청구 금액(USD, 비스트리밍). 스트리밍은 콘솔의 사용량에서 확인하세요.課金額(USD、非ストリーミング時)。ストリーミングの場合はコンソールの「利用状況」を確認してください。
x-tm-routed-model使用智能路由(tokenmaster/auto)时,实际回答的模型 ID。With smart routing (tokenmaster/auto): the model that actually answered.Dengan perutean pintar (tokenmaster/auto): model yang benar-benar menjawab.스마트 라우팅(tokenmaster/auto) 사용 시 실제로 답한 모델 ID.スマートルーティング(tokenmaster/auto)使用時、実際に回答したモデルの ID。
x-tm-searches开启联网搜索时,本次请求实际搜索的次数。With web search on: how many searches this request made.Dengan pencarian web aktif: jumlah pencarian yang dilakukan permintaan ini.웹 검색 사용 시 이 요청에서 실제로 검색한 횟수.ウェブ検索有効時、このリクエストで実際に検索した回数。
x-tm-max-tokens本次实际生效的输出上限。Output cap actually applied.Batas output yang benar-benar diterapkan.실제 적용된 출력 상한.実際に適用された出力上限。
x-tm-max-tokens-clamped为 true 表示输出上限由平台设定或下调过(未传或余额不足以覆盖请求值)。true when the cap was set or lowered by the platform (missing, or not covered by your balance).true jika batas ditetapkan atau diturunkan oleh platform (tidak diisi, atau tidak tercukupi oleh saldo Anda).플랫폼이 상한을 설정하거나 낮춘 경우(미지정 또는 잔액 부족) true.上限がプラットフォームによって設定または引き下げられた場合(未指定、または残高不足)は true。

finish_reason 取值finish_reason valuesNilai finish_reasonfinish_reason 값finish_reason の値

  • stop:正常结束。 — finished normally. — selesai dengan normal. — 정상적으로 완료됨. — 正常に終了。
  • length:达到输出上限被截断。可调大 max_tokens 或检查余额(见 x-tm-max-tokens-clamped)。 — hit the output cap. Raise max_tokens or check your balance (see x-tm-max-tokens-clamped). — mencapai batas output. Naikkan max_tokens atau periksa saldo Anda (lihat x-tm-max-tokens-clamped). — 출력 상한에 도달함. max_tokens를 늘리거나 잔액을 확인하세요(x-tm-max-tokens-clamped 참고). — 出力上限に到達。max_tokens を引き上げるか、残高を確認してください(x-tm-max-tokens-clamped を参照)。
  • tool_calls:模型要求调用工具。 — the model wants to call a tool. — model ingin memanggil tool. — 모델이 도구 호출을 요청함. — モデルがツールの呼び出しを要求。
  • content_filter:被模型厂商的安全策略拦截。 — blocked by the provider's safety system. — diblokir oleh sistem keamanan penyedia. — 제공업체의 안전 시스템에 의해 차단됨. — プロバイダーの安全性システムによりブロック。

流式响应StreamingStreaming스트리밍ストリーミング

设置 "stream": true,响应为 text/event-stream。每行 data: 是一个 JSON 片段;倒数第二个片段 choices 为空、带 usage;最后以 data: [DONE] 结束。Set "stream": true to receive text/event-stream. Each data: line is a JSON chunk; the second-to-last chunk has empty choices and carries usage; the stream ends with data: [DONE].Atur "stream": true untuk menerima text/event-stream. Setiap baris data: adalah chunk JSON; chunk kedua dari terakhir memiliki choices kosong dan membawa usage; stream diakhiri dengan data: [DONE]."stream": true로 설정하면 text/event-stream을 받습니다. 각 data: 줄은 JSON 청크이며, 끝에서 두 번째 청크는 choices가 비어 있고 usage를 담고 있습니다. 스트림은 data: [DONE]으로 끝납니다."stream": true を指定すると text/event-stream を受信します。各 data: 行は JSON チャンクです。最後から2番目のチャンクは choices が空で usage を含み、ストリームは data: [DONE] で終了します。

stream = client.chat.completions.create(
    model="google/gemini-3.8-flash",
    messages=[{"role": "user", "content": "Tell a 100-word story"}],
    stream=True,
)
for chunk in stream:
    if chunk.choices and chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)
    if chunk.usage:                      # last chunk: choices == []
        print("\n", chunk.usage)
遍历片段时先判断 choices 是否为空,否则读取最后的用量片段时会出现下标越界。客户端中途断开不会少扣费:模型已经生成的部分仍会计费。Check that choices is non-empty before indexing — the final usage chunk has none. Disconnecting early still bills the tokens already generated.Periksa bahwa choices tidak kosong sebelum mengakses indeksnya — chunk usage terakhir tidak memilikinya. Memutus koneksi lebih awal tetap menagih token yang sudah dihasilkan.인덱싱 전에 choices가 비어 있지 않은지 확인하세요 — 마지막 usage 청크에는 값이 없습니다. 중간에 연결을 끊어도 이미 생성된 토큰은 과금됩니다.インデックスで参照する前に choices が空でないことを確認してください。最後の usage チャンクには含まれません。途中で切断した場合も、生成済みのトークンは課金されます。

工具调用(Function Calling)Tool callingTool calling도구 호출ツール呼び出し

在 tools 中声明函数,模型返回 tool_calls 后由你执行,再把结果以 role: "tool" 发回。GPT、Claude、Gemini、Qwen、DeepSeek、Kimi、GLM 等主流模型均支持;个别小模型不支持时会返回 400。Declare functions in tools. When the model returns tool_calls, run them and send results back with role: "tool". Supported by GPT, Claude, Gemini, Qwen, DeepSeek, Kimi, GLM and other mainstream models.Deklarasikan fungsi di tools. Saat model mengembalikan tool_calls, jalankan fungsinya dan kirim hasilnya kembali dengan role: "tool". Didukung oleh GPT, Claude, Gemini, Qwen, DeepSeek, Kimi, GLM, dan model populer lainnya.tools에 함수를 선언하세요. 모델이 tool_calls를 반환하면 해당 함수를 실행하고 role: "tool"로 결과를 다시 보내세요. GPT, Claude, Gemini, Qwen, DeepSeek, Kimi, GLM 등 주요 모델에서 지원됩니다.tools で関数を宣言します。モデルが tool_calls を返したら関数を実行し、role: "tool" で結果を返します。GPT、Claude、Gemini、Qwen、DeepSeek、Kimi、GLM などの主要モデルが対応しています。

Python
import json

tools = [{
    "type": "function",
    "function": {
        "name": "get_weather",
        "description": "Get the current weather for a city",
        "parameters": {
            "type": "object",
            "properties": {"city": {"type": "string"}},
            "required": ["city"],
        },
    },
}]
messages = [{"role": "user", "content": "What's the weather in Manila right now?"}]

first = client.chat.completions.create(model="openai/gpt-6-sol", messages=messages, tools=tools)
call = first.choices[0].message.tool_calls[0]
args = json.loads(call.function.arguments)          # {"city": "Manila"}

messages += [first.choices[0].message,
             {"role": "tool", "tool_call_id": call.id, "content": json.dumps({"temp_c": 31, "sky": "thunderstorms"})}]
final = client.chat.completions.create(model="openai/gpt-6-sol", messages=messages, tools=tools)
print(final.choices[0].message.content)

注意:tools 的定义会计入输入 token。工具很多时,每一轮请求都会为这些定义计费。Tool definitions count as input tokens on every turn.Definisi tool dihitung sebagai token input di setiap giliran.도구 정의는 매 턴마다 입력 토큰으로 계산됩니다.ツール定義は毎ターン入力トークンとしてカウントされます。

结构化输出Structured outputOutput terstruktur구조화된 출력構造化出力

需要稳定的 JSON 时,使用 response_format。json_schema 能约束字段与类型;模型不支持时可退回 {"type": "json_object"},并在提示词里说明字段。Use response_format for reliable JSON. json_schema enforces fields and types; fall back to {"type": "json_object"} plus instructions if a model lacks schema support.Gunakan response_format untuk JSON yang andal. json_schema memastikan field dan tipe; gunakan {"type": "json_object"} beserta instruksi sebagai alternatif jika model tidak mendukung schema.안정적인 JSON 출력을 위해 response_format을 사용하세요. json_schema는 필드와 타입을 강제합니다. 모델이 스키마를 지원하지 않으면 {"type": "json_object"}와 지시문을 함께 사용하세요.確実に JSON を得るには response_format を使用します。json_schema はフィールドと型を強制します。スキーマに対応していないモデルでは、{"type": "json_object"} と指示文の組み合わせにフォールバックしてください。

Python
resp = client.chat.completions.create(
    model="openai/gpt-6-luna",
    messages=[{"role": "user", "content": "Extract: William is in Manila, meeting next Wednesday at 10am"}],
    response_format={
        "type": "json_schema",
        "json_schema": {
            "name": "meeting",
            "strict": True,
            "schema": {
                "type": "object",
                "properties": {
                    "person": {"type": "string"},
                    "city": {"type": "string"},
                    "time": {"type": "string"},
                },
                "required": ["person", "city", "time"],
                "additionalProperties": False,
            },
        },
    },
)
print(resp.choices[0].message.content)   # {"person":"William","city":"Manila","time":"next Wednesday 10:00"}

图像输入Image inputInput gambar이미지 입력画像入力

支持视觉的模型(如 Claude、GPT、Gemini、Qwen 部分型号)可在 content 数组中加入 image_url。图片可以是 https 链接,也可以是 data:image/png;base64,…。Vision-capable models accept image_url parts inside content. Use an https URL or a data:image/png;base64,… URI.Model yang mendukung vision menerima bagian image_url di dalam content. Gunakan URL https atau URI data:image/png;base64,….비전 지원 모델은 content 안의 image_url 파트를 받습니다. https URL 또는 data:image/png;base64,… URI를 사용하세요.ビジョン対応モデルは、content 内の image_url パーツを受け付けます。https URL または data:image/png;base64,… URI を使用してください。

Python
resp = client.chat.completions.create(
    model="anthropic/claude-sonnet-5.5",
    max_tokens=500,
    messages=[{
        "role": "user",
        "content": [
            {"type": "text", "text": "What are the single points of failure in this architecture diagram?"},
            {"type": "image_url", "image_url": {"url": "https://example.com/arch.png"}},
        ],
    }],
)

图片按模型厂商的规则折算为输入 token 计费。发起请求时,平台按每张图约 3,000 tokens 预估冻结金额,结束后按实际用量结算。Images are billed as input tokens per the provider's rules. Holds assume about 3,000 tokens per image and settle to actual usage afterwards.Gambar ditagih sebagai token input sesuai aturan penyedia. Penahanan saldo mengasumsikan sekitar 3,000 token per gambar dan kemudian disesuaikan dengan pemakaian sebenarnya.이미지는 제공업체 규칙에 따라 입력 토큰으로 과금됩니다. 보류 시에는 이미지당 약 3,000 토큰으로 가정하고, 이후 실제 사용량으로 정산합니다.画像はプロバイダーの規定に従い入力トークンとして課金されます。与信確保では画像1枚あたり約 3,000 トークンを見込み、終了後に実際の使用量で精算します。

推理模型Reasoning modelsModel penalaran추론 모델推論モデル

  • 推理(思考)过程消耗的 token 计入 completion_tokens,按输出价格计费。Reasoning tokens are included in completion_tokens and billed at the output price.Token penalaran termasuk dalam completion_tokens dan ditagih dengan harga output.추론 토큰은 completion_tokens에 포함되며 출력 가격으로 과금됩니다.推論トークンは completion_tokens に含まれ、出力価格で課金されます。
  • 推理 token 也占用输出上限。上限太小时,可能出现 finish_reason: "length" 且没有正文。建议推理模型设置 max_completion_tokens ≥ 4096。They also consume the output cap. A small cap can end with finish_reason: "length" and no visible answer. Use max_completion_tokens ≥ 4096.Token ini juga memakai batas output. Batas yang kecil dapat berakhir dengan finish_reason: "length" tanpa jawaban yang terlihat. Gunakan max_completion_tokens ≥ 4096.추론 토큰도 출력 상한을 소모합니다. 상한이 작으면 보이는 답변 없이 finish_reason: "length"로 끝날 수 있습니다. max_completion_tokens ≥ 4096을 사용하세요.推論トークンは出力上限も消費します。上限が小さいと finish_reason: "length" で終了し、表示される回答がない場合があります。max_completion_tokens ≥ 4096 を指定してください。
  • 支持的模型可用 reasoning_effort 控制推理强度:强度越低,速度越快、费用越低。Where supported, reasoning_effort trades depth for speed and cost.Jika didukung, reasoning_effort menyeimbangkan kedalaman dengan kecepatan dan biaya.지원되는 경우 reasoning_effort로 추론 깊이와 속도·비용 간 균형을 조정할 수 있습니다.対応モデルでは、reasoning_effort で推論の深さと速度・コストのバランスを調整できます。
Python
resp = client.chat.completions.create(
    model="openai/o3",
    reasoning_effort="low",
    max_completion_tokens=6000,
    messages=[{"role": "user", "content": "Prove that the sum of any two odd numbers is even"}],
)
print(resp.usage.completion_tokens)   # includes reasoning tokens

GET/v1/balance

用 API Key 查询账户余额,便于在你的系统里做余额预警。Check the account balance with an API key — useful for low-balance alerts.Periksa saldo akun dengan API key — berguna untuk peringatan saldo rendah.API 키로 계정 잔액을 조회합니다 — 잔액 부족 알림에 유용합니다.API キーでアカウント残高を確認します。残高不足アラートに便利です。

curl {{BASE}}/v1/balance -H "Authorization: Bearer $TOKENMASTER_API_KEY"

计费规则How billing worksCara kerja penagihan과금 방식課金の仕組み

  • 按 token 计费:费用 = 输入 tokens × 输入单价 + 缓存命中 tokens × 缓存单价 + 输出 tokens × 输出单价。单价见模型广场(每 100 万 tokens,美元)。Per token: cost = input × input price + cached × cached price + output × output price. Prices per 1M tokens (USD) are in the catalog.Per token: biaya = input × harga input + cache × harga cache + output × harga output. Harga per 1M tokens (USD) tersedia di katalog.토큰 단위: 비용 = 입력 × 입력 가격 + 캐시 × 캐시 가격 + 출력 × 출력 가격. 1M 토큰당 가격(USD)은 카탈로그에서 확인하세요.トークン単位:費用 = 入力 × 入力単価 + キャッシュ × キャッシュ単価 + 出力 × 出力単価。1M トークンあたりの価格(USD)はカタログに掲載しています。
  • 缓存命中更便宜:多轮对话或长系统提示词保持开头不变,命中厂商的自动缓存时按缓存单价计费(用量里的 prompt_tokens_details.cached_tokens)。Cache hits are cheaper: keep long prompt prefixes stable; cached tokens appear in prompt_tokens_details.cached_tokens.Cache hit lebih murah: jaga awalan prompt yang panjang tetap stabil; token cache muncul di prompt_tokens_details.cached_tokens.캐시 적중 시 더 저렴: 긴 프롬프트 접두부를 일정하게 유지하세요. 캐시된 토큰은 prompt_tokens_details.cached_tokens에 표시됩니다.キャッシュヒットは割安:長いプロンプトの先頭部分を固定しておきましょう。キャッシュされたトークンは prompt_tokens_details.cached_tokens に表示されます。
  • 长上下文档位:带 * 的模型在输入超过阈值后按更高档位计价。Long-context tiers: models marked * switch to a higher tier above the threshold.Tingkatan konteks panjang: model yang ditandai * beralih ke tingkatan harga lebih tinggi di atas ambang batas.롱 컨텍스트 구간: * 표시 모델은 임계값을 넘으면 더 높은 가격 구간이 적용됩니다.長コンテキスト料金:* の付いたモデルは、しきい値を超えると上位の料金帯に切り替わります。
  • 智能路由:tokenmaster/auto 按实际回答的模型单价计费,见智能路由。Smart routing: tokenmaster/auto bills at the price of the model that answered — see Smart routing.Perutean pintar: tokenmaster/auto ditagih sesuai harga model yang menjawab — lihat Perutean pintar.스마트 라우팅: tokenmaster/auto는 실제로 답한 모델 가격으로 청구됩니다 — 스마트 라우팅 참고.スマートルーティング:tokenmaster/auto は実際に回答したモデルの料金で課金されます(スマートルーティング参照)。
  • 联网搜索:每次搜索 $0.0003,另加读取结果的 token,见联网搜索。Web search: $0.0003 per search plus the tokens to read the results — see Web search.Pencarian web: $0.0003 per pencarian ditambah token untuk membaca hasil — lihat Pencarian web.웹 검색: 검색 1회당 $0.0003 + 결과를 읽는 토큰 — 웹 검색 참고.ウェブ検索:検索 1 回 $0.0003 + 結果を読むトークン(ウェブ検索参照)。
  • 精度:按 $0.000001 精确扣费,可在控制台「用量明细」逐笔查看。Precision: charged to $0.000001; every request is listed under Usage.Presisi: ditagih hingga $0.000001; setiap permintaan tercantum di Pemakaian.정밀도: $0.000001 단위로 과금되며, 모든 요청은 사용량에서 확인할 수 있습니다.精度:$0.000001 単位で課金され、すべてのリクエストが「利用状況」に記録されます。
  • 失败不计费:上游返回错误、没有生成内容的请求不扣费。Failures are free: upstream errors that generate nothing are not charged.Kegagalan gratis: error upstream yang tidak menghasilkan apa pun tidak ditagih.실패는 무료: 아무것도 생성하지 않은 업스트림 오류는 과금되지 않습니다.失敗は無料:何も生成されなかった上流エラーは課金されません。

计算示例Worked exampleContoh perhitungan계산 예시計算例

anthropic/claude-sonnet-5.5:输入 $2.40/1M,输出 $12.00/1M。一次请求输入 1,200、输出 300 tokens:anthropic/claude-sonnet-5.5 at $2.40/1M input and $12.00/1M output; 1,200 input and 300 output tokens:anthropic/claude-sonnet-5.5 dengan $2.40/1M input dan $12.00/1M output; 1,200 token input dan 300 token output:anthropic/claude-sonnet-5.5(입력 $2.40/1M, 출력 $12.00/1M)로 입력 1,200 토큰, 출력 300 토큰을 처리한 경우:anthropic/claude-sonnet-5.5(入力 $2.40/1M、出力 $12.00/1M)で、入力 1,200 トークン、出力 300 トークンの場合:

math
1,200 × 2.40 / 1,000,000 = $0.002880
  300 × 12.00 / 1,000,000 = $0.003600
                          total = $0.006480

预授权与输出上限Holds & output capsPenahanan saldo & batas output잔액 보류 및 출력 상한与信確保と出力上限

为保证余额永远不会被扣成负数,每个请求在发往模型之前都会经过三步:So your balance can never go negative, every request goes through three steps before reaching the model:Agar saldo Anda tidak pernah minus, setiap permintaan melewati tiga langkah sebelum mencapai model:잔액이 마이너스가 되지 않도록 모든 요청은 모델에 도달하기 전에 세 단계를 거칩니다:残高がマイナスにならないよう、すべてのリクエストはモデルに届く前に次の3ステップを経ます:

  1. 预估:按输入长度估算输入 token(偏保守),加上输出上限,算出这次请求最多可能花多少钱。Estimate the worst-case cost from your input length (conservatively) and the output cap.Estimasi biaya maksimum dari panjang input Anda (secara konservatif) dan batas output.추정: 입력 길이(보수적으로 계산)와 출력 상한으로 최대 비용을 추정합니다.入力長(保守的に見積もり)と出力上限から最大費用を見積もります。
  2. 冻结:从可用余额冻结这笔钱。并发请求各自冻结,不会重复占用同一笔余额。Hold that amount from your available balance. Concurrent requests hold separately.Tahan jumlah tersebut dari saldo tersedia Anda. Permintaan bersamaan ditahan secara terpisah.보류: 해당 금액을 사용 가능 잔액에서 보류합니다. 동시 요청은 각각 별도로 보류됩니다.その金額を利用可能残高から与信確保します。同時リクエストはそれぞれ個別に確保されます。
  3. 结算:请求结束后按实际用量扣费,多冻结的部分立即释放。Settle on actual usage when the request ends; the rest of the hold is released immediately.Selesaikan berdasarkan pemakaian sebenarnya saat permintaan berakhir; sisa saldo yang ditahan langsung dilepaskan.정산: 요청이 끝나면 실제 사용량으로 정산하고, 남은 보류 금액은 즉시 해제됩니다.リクエスト終了時に実際の使用量で精算し、確保額の残りは直ちに解放されます。

如果余额不够覆盖你请求的 max_tokens,平台会把输出上限下调到余额能覆盖的值,并在响应头返回 x-tm-max-tokens-clamped: true。如果连「输入 + 64 个输出 token」都覆盖不了,请求返回 402。If your balance can't cover the requested max_tokens, the cap is lowered to what it can cover and x-tm-max-tokens-clamped: true is returned. If it can't cover the input plus 64 output tokens, you get 402.Jika saldo Anda tidak mencukupi max_tokens yang diminta, batas diturunkan sesuai yang dapat ditanggung dan x-tm-max-tokens-clamped: true dikembalikan. Jika saldo tidak mencukupi input ditambah 64 token output, Anda menerima 402.잔액으로 요청한 max_tokens를 충당할 수 없으면 상한이 충당 가능한 수준으로 낮아지고 x-tm-max-tokens-clamped: true가 반환됩니다. 입력과 출력 64 토큰도 충당할 수 없으면 402가 반환됩니다.指定した max_tokens を残高で賄えない場合は、賄える範囲まで上限が引き下げられ、x-tm-max-tokens-clamped: true が返されます。入力と出力 64 トークン分も賄えない場合は 402 が返されます。

建议:① 显式设置 max_tokens,冻结金额更小、余额利用率更高;② 用贵模型处理长文档时,保留足够余额;③ 用 /v1/balance 做余额预警。Tips: set max_tokens explicitly so holds stay small; keep enough balance for long documents on premium models; alert on /v1/balance.Tips: atur max_tokens secara eksplisit agar saldo yang ditahan tetap kecil; sediakan saldo yang cukup untuk dokumen panjang pada model premium; pasang peringatan dengan /v1/balance.팁: 보류 금액을 작게 유지하려면 max_tokens를 명시적으로 설정하세요. 프리미엄 모델로 긴 문서를 처리할 때는 잔액을 충분히 유지하고, /v1/balance로 알림을 설정하세요.ヒント:max_tokens を明示的に指定して与信確保額を小さく抑えましょう。上位モデルで長文を扱う場合は十分な残高を確保し、/v1/balance でアラートを設定してください。

速率与并发限制Rate limitsBatas laju속도 제한レート制限

限制LimitBatas제한 항목制限默认值DefaultDefault기본값デフォルト超出时When exceededJika terlampaui초과 시超過時
每个 API Key 请求频率Requests per keyPermintaan per key키당 요청 수キーあたりのリクエスト数300 次 / 分钟300 / minute300 / menit300 / 분300 / 分429 rate_limited
每个账户同时进行的请求Concurrent requests per accountPermintaan bersamaan per akun계정당 동시 요청 수アカウントあたりの同時リクエスト数16429 too_many_concurrent
单次请求最高费用Max cost per requestBiaya maksimum per permintaan요청당 최대 비용リクエストあたりの最大費用$20400 request_too_large
单次请求最大输出Max output per requestOutput maksimum per permintaan요청당 최대 출력リクエストあたりの最大出力128,000 tokens自动下调CappedDibatasi상한 적용上限で切り詰め
上下文长度Context lengthPanjang konteks컨텍스트 길이コンテキスト長以各模型为准Per modelPer model모델별モデルごと400 context_length_exceeded

需要更高的额度?联系我们,并说明模型、预计 QPS 和每月 token 用量。Need more? Contact us with the models, expected QPS and monthly token volume.Butuh lebih? Hubungi kami dengan informasi model, perkiraan QPS, dan volume token bulanan.더 높은 한도가 필요하신가요? 사용할 모델, 예상 QPS, 월간 토큰 사용량을 알려 주세요.上限の引き上げが必要な場合は、利用モデル、想定 QPS、月間トークン量を添えてお問い合わせください。

错误码ErrorsError오류エラー

错误响应格式与 OpenAI 一致:Errors follow the OpenAI format:Error mengikuti format OpenAI:오류는 OpenAI 형식을 따릅니다:エラーは OpenAI の形式に従います:

JSON
{
  "error": {
    "message": "Insufficient balance: this request needs at least $0.0123, available $0.0040. Top up in the console.",
    "type": "insufficient_quota",
    "code": "insufficient_balance"
  }
}
HTTPcode含义MeaningArti의미意味处理建议What to doYang perlu dilakukan대처 방법対処方法
400null参数错误(缺少 model / messages、n ≠ 1 等)Bad request (missing fields, n ≠ 1…)Permintaan tidak valid (field tidak ada, n ≠ 1…)잘못된 요청(필드 누락, n ≠ 1…)不正なリクエスト(必須フィールドの欠落、n ≠ 1 など)修正请求,不要重试Fix the request; don't retryPerbaiki permintaan; jangan retry요청을 수정하세요. 재시도하지 마세요リクエストを修正してください。リトライは不要です
400request_too_large预估费用超过单次 $20 上限Estimated cost above the $20 per-request limitEstimasi biaya melebihi batas $20 per permintaan예상 비용이 요청당 한도 $20 초과見積もり費用がリクエストあたりの上限 $20 を超過缩短输入或降低 max_tokensShorten input or lower max_tokensPersingkat input atau turunkan max_tokens입력을 줄이거나 max_tokens를 낮추세요入力を短くするか、max_tokens を下げてください
400context_length_exceeded输入超过模型上下文长度Input exceeds the model's contextInput melebihi konteks model입력이 모델의 컨텍스트 초과入力がモデルのコンテキスト長を超過截断历史或换长上下文模型Trim history or use a longer-context modelPangkas riwayat atau gunakan model dengan konteks lebih panjang대화 기록을 줄이거나 더 긴 컨텍스트 모델을 사용하세요履歴を削減するか、より長いコンテキストのモデルを使用してください
401invalid_api_keyKey 缺失、错误或已吊销Missing, wrong or revoked keyKey tidak ada, salah, atau sudah dicabut키 누락, 잘못된 키 또는 폐기된 키キーが未指定、誤り、または失効済み检查 Authorization 头Check the Authorization headerPeriksa header AuthorizationAuthorization 헤더를 확인하세요Authorization ヘッダーを確認してください
402insufficient_balance可用余额不足以开始这个请求Not enough balance to start the requestSaldo tidak cukup untuk memulai permintaan요청을 시작할 잔액 부족リクエストを開始するための残高が不足充值,或缩短输入、降低 max_tokensTop up, or reduce input / max_tokensIsi saldo, atau kurangi input / max_tokens충전하거나 입력 / max_tokens를 줄이세요チャージするか、入力 / max_tokens を減らしてください
403region_restricted该厂商不向你的注册地区提供服务Provider unavailable in your regionPenyedia tidak tersedia di wilayah Anda해당 지역에서 이용할 수 없는 제공업체お客様の地域ではこのプロバイダーを利用不可换用其他厂商的模型Use another provider's modelGunakan model dari penyedia lain다른 제공업체의 모델을 사용하세요他のプロバイダーのモデルを使用してください
403account_suspended账户已冻结Account suspendedAkun ditangguhkan계정 정지됨アカウントが停止されています联系客服Contact supportHubungi dukungan고객지원에 문의하세요サポートにお問い合わせください
404model_not_found模型 ID 不存在Unknown model IDID model tidak dikenal알 수 없는 모델 ID不明なモデル ID对照 /v1/modelsCheck /v1/modelsPeriksa /v1/models/v1/models를 확인하세요/v1/models を確認してください
429rate_limited超过每分钟请求数Per-minute rate exceededBatas laju per menit terlampaui분당 요청 한도 초과1分あたりのレート制限を超過指数退避后重试Retry with backoffRetry dengan backoff백오프 후 재시도하세요バックオフを入れてリトライしてください
429too_many_concurrent同时进行的请求超过 16 个More than 16 in-flight requestsLebih dari 16 permintaan yang sedang berjalan처리 중인 동시 요청 16개 초과処理中のリクエストが 16 件を超過降低并发或排队Reduce concurrency or queueKurangi konkurensi atau gunakan antrean동시성을 줄이거나 대기열을 사용하세요同時実行数を減らすか、キューイングしてください
429 / 5xxnull模型厂商繁忙或暂时故障Provider busy or temporarily failingPenyedia sibuk atau sedang gagal sementara제공업체 과부하 또는 일시적 장애プロバイダーが混雑中または一時的な障害退避重试,或切换到同级模型Retry with backoff or fail over to a similar modelRetry dengan backoff atau alihkan ke model serupa백오프 후 재시도하거나 유사한 모델로 전환하세요バックオフを入れてリトライするか、類似モデルにフェイルオーバーしてください
502null上游不可用Upstream unavailableUpstream tidak tersedia업스트림 사용 불가上流サービスが利用不可稍后重试Retry laterCoba lagi nanti나중에 다시 시도하세요しばらくしてから再試行してください

重试与超时Retries & timeoutsRetry & timeout재시도 및 타임아웃リトライとタイムアウト

  • 只对 429 和 5xx 重试,使用指数退避加随机抖动(1s、2s、4s… 最多 5 次)。4xx 中的 400 / 401 / 402 / 403 / 404 不要重试。Retry only 429 and 5xx, with exponential backoff and jitter (1s, 2s, 4s… up to 5 tries). Don't retry 400/401/402/403/404.Retry hanya untuk 429 dan 5xx, dengan exponential backoff dan jitter (1s, 2s, 4s… hingga 5 kali). Jangan retry 400/401/402/403/404.429와 5xx만 지수 백오프와 지터를 적용해 재시도하세요(1s, 2s, 4s… 최대 5회). 400/401/402/403/404는 재시도하지 마세요.リトライは 429 と 5xx のみとし、指数バックオフとジッターを用いてください(1秒、2秒、4秒…最大5回)。400/401/402/403/404 はリトライしないでください。
  • 已经成功生成的请求,重试会再次计费。只在没有拿到响应时重试。A retried request that already completed is billed again. Retry only when no response arrived.Permintaan yang di-retry padahal sudah selesai akan ditagih lagi. Retry hanya jika tidak ada respons yang diterima.이미 완료된 요청을 재시도하면 다시 과금됩니다. 응답을 받지 못한 경우에만 재시도하세요.既に完了していたリクエストをリトライすると、再度課金されます。レスポンスが届かなかった場合にのみリトライしてください。
  • 长输出建议用流式,避免客户端或代理的空闲超时;非流式请求的客户端超时建议 ≥ 120 秒。Stream long outputs to avoid idle timeouts; for non-streaming calls use a client timeout ≥ 120s.Gunakan streaming untuk output panjang guna menghindari idle timeout; untuk panggilan non-streaming gunakan timeout klien ≥ 120s.유휴 타임아웃을 피하려면 긴 출력은 스트리밍하세요. 비스트리밍 호출에는 클라이언트 타임아웃을 120s 이상으로 설정하세요.長い出力はストリーミングでアイドルタイムアウトを回避してください。非ストリーミング呼び出しではクライアントのタイムアウトを 120s 以上に設定してください。
  • 官方 OpenAI SDK 自带重试,可用 max_retries / maxRetries 调整。The official OpenAI SDKs retry automatically; tune max_retries / maxRetries.SDK resmi OpenAI melakukan retry secara otomatis; sesuaikan max_retries / maxRetries.공식 OpenAI SDK는 자동으로 재시도합니다. max_retries / maxRetries로 조정하세요.公式 OpenAI SDK は自動でリトライします。max_retries / maxRetries で調整してください。
Python
client = OpenAI(
    base_url="{{BASE}}/v1",
    api_key=os.environ["TOKENMASTER_API_KEY"],
    max_retries=3,
    timeout=120,
)

请求追踪Request tracingPelacakan permintaan요청 추적リクエストのトレース

每个响应都带 x-tm-request-id。建议把它和你自己的业务 ID 一起写入日志;需要排查扣费或回复质量问题时,提供这个编号即可。控制台「用量明细」逐笔记录时间、模型、输入/输出 token 和费用。Every response carries x-tm-request-id. Log it with your own IDs and share it with support. The console's Usage page lists each request with time, model, tokens and cost.Setiap respons menyertakan x-tm-request-id. Catat bersama ID Anda sendiri dan bagikan kepada dukungan. Halaman Pemakaian di konsol mencantumkan setiap permintaan beserta waktu, model, token, dan biaya.모든 응답에는 x-tm-request-id가 포함됩니다. 자체 ID와 함께 기록해 두고 고객지원에 전달하세요. 콘솔의 사용량 페이지에서 각 요청의 시간, 모델, 토큰, 비용을 확인할 수 있습니다.すべてのレスポンスには x-tm-request-id が含まれます。自社の ID と併せてログに記録し、サポートへのお問い合わせ時にお伝えください。コンソールの「利用状況」ページでは、各リクエストの日時、モデル、トークン数、費用を確認できます。

Python
raw = client.chat.completions.with_raw_response.create(
    model="openai/gpt-6-luna",
    messages=[{"role": "user", "content": "ping"}],
)
print(raw.headers["x-tm-request-id"], raw.headers.get("x-tm-cost-usd"))
resp = raw.parse()

安全与合规Security & complianceKeamanan & kepatuhan보안 및 규정 준수セキュリティとコンプライアンス

  • 传输加密:全程 HTTPS。Encryption: HTTPS everywhere.Enkripsi: HTTPS di semua jalur.암호화: 모든 구간에 HTTPS 적용.暗号化:すべての通信で HTTPS を使用します。
  • Key 安全:平台只保存 Key 的哈希;建议不同环境用不同的 Key,定期轮换。Keys: stored only as hashes; use one key per environment and rotate regularly.Key: hanya disimpan sebagai hash; gunakan satu key per environment dan rotasi secara berkala.키: 해시로만 저장됩니다. 환경별로 키를 하나씩 사용하고 정기적으로 교체하세요.キー:ハッシュとしてのみ保存されます。環境ごとに別のキーを使用し、定期的にローテーションしてください。
  • 数据使用:TokenMaster 不使用你的请求内容训练模型。各模型厂商的数据处理以其政策为准。Data: TokenMaster never trains on your requests. Each provider's own data policy applies.Data: TokenMaster tidak pernah menggunakan permintaan Anda untuk pelatihan. Kebijakan data masing-masing penyedia berlaku.데이터: TokenMaster는 고객의 요청을 학습에 사용하지 않습니다. 각 제공업체의 데이터 정책이 적용됩니다.データ:TokenMaster はお客様のリクエストを学習に使用しません。各プロバイダーのデータポリシーが適用されます。
  • 地区限制:OpenAI、Anthropic、Google、xAI 对部分国家和地区不提供服务。系统按你注册时选择的国家/地区执行,受限时返回 403 region_restricted;国产模型和开源模型不受此限制。Regions: OpenAI, Anthropic, Google and xAI do not serve some regions. We apply the country you chose at sign-up and return 403 region_restricted when restricted. Chinese and open models are not affected.Wilayah: OpenAI, Anthropic, Google, dan xAI tidak melayani beberapa wilayah. Kami menerapkan negara yang Anda pilih saat mendaftar dan mengembalikan 403 region_restricted jika dibatasi. Model Tiongkok dan model terbuka tidak terpengaruh.지역: OpenAI, Anthropic, Google, xAI는 일부 지역에서 서비스를 제공하지 않습니다. 가입 시 선택한 국가를 기준으로 적용하며, 제한된 경우 403 region_restricted를 반환합니다. 중국 모델과 오픈 모델은 영향을 받지 않습니다.地域:OpenAI、Anthropic、Google、xAI は一部の地域でサービスを提供していません。登録時に選択された国に基づき、制限対象の場合は 403 region_restricted を返します。中国モデルとオープンモデルは影響を受けません。
  • 使用政策:请遵守各模型厂商的使用政策,违规内容可能被厂商拦截(content_filter),严重违规的账户会被冻结。Usage policies: provider policies apply; violating content may be filtered (content_filter) and abusive accounts suspended.Kebijakan penggunaan: kebijakan penyedia berlaku; konten yang melanggar dapat difilter (content_filter) dan akun yang menyalahgunakan layanan dapat ditangguhkan.이용 정책: 제공업체 정책이 적용됩니다. 위반 콘텐츠는 필터링될 수 있으며(content_filter), 악용 계정은 정지될 수 있습니다.利用ポリシー:各プロバイダーのポリシーが適用されます。違反するコンテンツはフィルタリングされる場合があり(content_filter)、悪用しているアカウントは停止されます。

常见问题FAQFAQFAQよくある質問

回复被截断了?Why was the reply cut off?Mengapa balasan terpotong?응답이 중간에 끊긴 이유는 무엇인가요?応答が途中で切れたのはなぜですか?

finish_reason 为 length 说明达到了输出上限。查看响应头 x-tm-max-tokens:如果有 x-tm-max-tokens-clamped: true,说明上限被平台设定或按余额下调过,充值或显式设置更大的 max_tokens 即可。finish_reason: "length" means the cap was hit. Check x-tm-max-tokens; with x-tm-max-tokens-clamped: true, top up or set a larger max_tokens.finish_reason: "length" berarti batas telah tercapai. Periksa x-tm-max-tokens; jika x-tm-max-tokens-clamped: true, isi saldo atau atur max_tokens yang lebih besar.finish_reason: "length"는 상한에 도달했다는 뜻입니다. x-tm-max-tokens를 확인하고, x-tm-max-tokens-clamped: true라면 충전하거나 max_tokens를 더 크게 설정하세요.finish_reason: "length" は上限に達したことを意味します。x-tm-max-tokens を確認してください。x-tm-max-tokens-clamped: true の場合は、チャージするか、より大きな max_tokens を指定してください。

流式和非流式价格一样吗?Does streaming cost more?Apakah streaming lebih mahal?스트리밍은 비용이 더 드나요?ストリーミングは割高になりますか?

一样,都按 token 计费。No — same per-token price.Tidak — harga per token sama.아니요 — 토큰당 가격은 동일합니다.いいえ。トークン単価は同じです。

可以用 Anthropic SDK 或 Responses API 吗?Anthropic SDK or Responses API?Anthropic SDK atau Responses API?Anthropic SDK나 Responses API를 사용할 수 있나요?Anthropic SDK や Responses API は使えますか?

目前提供 OpenAI Chat Completions 协议,Claude 模型也通过这个协议调用。Anthropic Messages 和 Responses 协议在规划中。Today we serve OpenAI Chat Completions, which also covers Claude models. Anthropic Messages and Responses support is planned.Saat ini kami melayani OpenAI Chat Completions, yang juga mencakup model Claude. Dukungan Anthropic Messages dan Responses sedang direncanakan.현재는 Claude 모델도 지원하는 OpenAI Chat Completions를 제공합니다. Anthropic Messages 및 Responses 지원은 계획 중입니다.現在は OpenAI Chat Completions を提供しており、Claude モデルもこちらで利用できます。Anthropic Messages と Responses への対応を予定しています。

余额会过期吗?可以退款吗?Does credit expire? Refunds?Apakah kredit kedaluwarsa? Refund?크레딧에 유효기간이 있나요? 환불은요?残高に有効期限はありますか?返金は?

充值时一次性收取的通道费用不退。未使用余额的处理以《服务条款》为准。Channel fees paid at top-up are non-refundable. Unused credit follows our Terms of Service.Biaya kanal yang dibayar saat isi saldo tidak dapat dikembalikan. Kredit yang belum terpakai mengikuti Ketentuan Layanan kami.충전 시 결제한 채널 수수료는 환불되지 않습니다. 미사용 크레딧은 서비스 약관을 따릅니다.チャージ時に支払ったチャネル手数料は返金できません。未使用残高の扱いは利用規約に従います。

需要接入协助?Need help integrating?Butuh bantuan integrasi?연동에 도움이 필요하신가요?統合のサポートが必要ですか?
告诉我们目标模型、预计 QPS 和每月 token 用量。Tell us your target models, expected QPS and monthly token volume.Beri tahu kami model target, perkiraan QPS, dan volume token bulanan Anda.사용할 모델, 예상 QPS, 월간 토큰 사용량을 알려 주세요.利用予定のモデル、想定 QPS、月間トークン量をお知らせください。
进入控制台Open consoleBuka konsol콘솔 열기コンソールを開く