🎁 新規 無料登録、10回の呼び出しを進呈。最大 $1、カード不要。

音声テキスト変換

POST /v1/audio/transcriptions

音声をテキストに転写します。OpenAI Audio Transcriptions API と互換性があります——同じエンドポイントが OpenAI Whisper / GPT-4o-transcribe モデルと Google Gemini モデルの両方に対応し、gateway はモデル ID に基づいて適切な上流へルーティングします。次のいずれかを受け付けます multipart/form-data アップロード(OpenAI SDK 互換)、または application/json base64 エンコードされた音声を含むボディ。

リクエストボディ

パラメータ説明
model*string文字起こしモデル ID(例:whisper-1、gpt-4o-transcribe、chirp-3、seed-asr-bigmodel、fun-asr、qwen3-asr-flash)。下記の「サポートされるモデル」を参照してください。
file*filemultipart のみ — 文字起こしする音声ファイル。input_audio(JSON)を指定する場合を除き必須。
input_audio*objectJSON のみ — { "data": "<base64>", "format": "mp3" }、またはオフラインモデル(seed-asr-bigmodel)の場合は { "url": "<fetchable URL>" }。application/json リクエストでは file の代わりに使用してください。
response_formatstring出力形式:json(デフォルト。{text, usage} を返す)、text(生の文字起こし文字列)、verbose_json(タイムスタンプ付きセグメント)、diarized_json(話者ラベル付きセグメント — 話者分離)。使用可能な値はモデルに依存します。下記の「レスポンス形式」を参照してください。
languagestringオプションの ISO-639-1 ヒント(例:"en")。精度向上とレイテンシ短縮に役立ちます。
promptstringオプションのテキスト。文字起こしのスタイルや固有名詞のスペルを誘導します。
temperaturenumberサンプリング温度 0–1。デフォルト:0。
streambooleantrue の場合、部分的な文字起こしの SSE イベントを返します(gpt-4o-transcribe と Gemini で対応)。デフォルト:false。
providerobjectProvider パススルー設定。以下の「Provider パススルー」を参照。

サポートされるモデル

どのモデルを選べばいいか迷ったら?必要な条件で選びましょう

必要なもの有効化する方法推奨モデル
中国語 / 広東語、低コスト seed-asr-bigmodel fun-asr
英語、高品質 gpt-4o-transcribe chirp-3
話者分離——誰が何を話したか response_format=diarized_json seed-asr-bigmodel chirp-3 gpt-4o-transcribe-diarize
単語レベルのタイムスタンプ response_format=verbose_json whisper-1
リアルタイム字幕(話しながら) stream=true gpt-4o-transcribe
長時間の録音 / 会議 pass a public URL in input_audio.url seed-asr-bigmodel fun-asr
モデルプロバイダー · 課金入力話者分離ストリーム最適な用途
whisper-1 OpenAI · $0.006/min file 単語レベルのタイムスタンプ(verbose_json)。言語は ISO-639-1 必須
gpt-4o-transcribe OpenAI · token file 英語、高精度。ストリーミング対応
gpt-4o-mini-transcribe OpenAI · token file 低コストな多言語対応。ストリーミング対応
gpt-4o-transcribe-diarize OpenAI · token file 英語の話者分離。known_speaker_names は任意
chirp-3 Google · $0.016/min file 高品質。1 回の呼び出しは ≤60 s
chirp-2 Google · $0.016/min file 多言語 USM。話者分離には chirp-3 を使用
seed-asr-bigmodel BytePlus · $0.002/min URL / file 中国語、長時間録音。最も安価
fun-asr Alibaba · $0.0021/min URL / file 中国語 · 広東語 · 方言。長時間録音
fun-asr-mtl Alibaba · $0.0021/min URL / file 多言語 + 話者分離
fun-asr-flash Alibaba · $0.0021/min file 高速な多言語対応。≤10 MB、同期
qwen3-asr-flash Alibaba · $0.0021/min file 多言語対応。≤5 min/呼び出し、正確な課金

Diarization = response_format=diarized_json を設定すると segments[].speaker が得られます。デフォルトのアップロード上限は 25 MB(音声フォーマットを参照)。

Google モデルは Gemini API 経由、または BYOK Vertex サービスアカウントキーを使用して Google Cloud Vertex AI 経由で提供できます。利用可否はワークスペースで有効化されたチャネルによります — /v1/models を呼び出して、使用可能なものを確認してください。

よくある落とし穴。 (1) ストリーミング(stream=true)は gpt-4o-transcribe / gpt-4o-mini-transcribe でのみ機能します — それ以外のすべてのモデルは 400 を返します。(2) input_audio.url(URL 入力)は seed-asr-bigmodel でのみサポートされます。その他のすべてのモデルは file または base64 アップロードが必要です。(3) OpenAI モデル(whisper-1, gpt-4o-*)の language パラメータは en や zh のような ISO-639-1 コードでなければなりません — yue-CN のようなロケールコードは拒否されます。Chirp / Seed ASR / Qwen はロケールコードを受け付けます。または language を省略すると自動検出されます。(4) 音声がモデルのリクエストごとの上限を超える場合は、チャンクに分割してください — あるいは長時間の録音には seed-asr-bigmodel(URL 経由)を使用してください(約20分/リクエスト)。(5) 無音 / 発話なしの音声はエラーではなく、空文字列 {"text":""} とともに 200 を返します。

サポートされる音声フォーマット

  • mp3
  • wav
  • ogg
  • flac
  • m4a

multipart アップロードの場合、フォーマットはファイル名の拡張子から推測されます。base64(JSON)リクエストの場合は input_audio.format を明示的に設定してください。最大アップロードサイズ: 25 MB。

レスポンス形式

この response_format 受け付けられる値はモデルによります。 json はすべてのモデルのデフォルトです(返すのは { text, usage }); text 生の文字起こし文字列を返します。

  • whisper-1json, text, verbose_json
  • gpt-4o-transcribe, gpt-4o-mini-transcribejson, text
  • chirp-3, chirp-2, seed-asr-bigmodel, qwen3-asr-flash, fun-asr-flashjson, text
  • gpt-4o-transcribe-diarize, chirp-3, seed-asr-bigmodel, fun-asr, fun-asr-mtl — also diarized_json (話者ラベル付きセグメント。詳細は後述)

verbose_json (セグメントのタイムスタンプ)は whisper-1 のみ;

話者ダイアライゼーション

response_format=diarized_json を設定すると、話者ラベル付きのセグメントが得られます。レスポンスには segments 配列が追加され、各エントリに speaker ラベルと start/end のタイムスタンプ(秒)が含まれます。gpt-4o-transcribe-diarize(OpenAI)、chirp-3(Google)、seed-asr-bigmodel(BytePlus——中国語と長時間録音に最もコスト効率が良い)、および fun-asr / fun-asr-mtl(Alibaba——オフラインの録音ファイル、URL またはファイルを受け付け)で対応。その他のモデルは diarized_json を無視してプレーンテキストを返します。chirp-2 は拒否します(chirp-3 を使用してください)。

話者ラベルはプロバイダー固有です(例:chirp-3 と seed-asr では "0"/"1"、gpt-4o-transcribe-diarize では "A"/"B")。異なる話者を区別しますが、安定した実世界の識別情報ではありません。gpt-4o-transcribe-diarize では known_speaker_names を渡してラベリングを誘導できます。

# Chinese meeting, cheapest diarization (BytePlus seed-asr):
curl https://synthorai.io/v1/audio/transcriptions \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seed-asr-bigmodel",
    "input_audio": { "url": "https://your-bucket/signed/meeting.wav", "language": "zh" },
    "response_format": "diarized_json"
  }'

# English / highest quality (Google chirp-3, <=60 s per request):
curl https://synthorai.io/v1/audio/transcriptions \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F model=chirp-3 \
  -F file=@call.wav \
  -F response_format=diarized_json

レスポンス例

{
  "task": "transcribe",
  "text": "喂 你好 我这边是客服 有什么可以帮您",
  "duration": 6.2,
  "segments": [
    { "id": 0, "start": 0.10, "end": 0.90, "speaker": "0", "text": "喂 你好" },
    { "id": 1, "start": 1.20, "end": 6.20, "speaker": "1", "text": "我这边是客服 有什么可以帮您" }
  ]
}

リクエスト例(multipart)

curl https://synthorai.io/v1/audio/transcriptions \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F model=gpt-4o-transcribe \
  -F file=@meeting.mp3 \
  -F response_format=json \
  -F language=en

リクエスト例(base64 JSON)

POST /v1/audio/transcriptions
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json

{
  "model": "gpt-4o-transcribe",
  "input_audio": {
    "data": "UklGRiQAAABXQVZFZm10I...",
    "format": "wav"
  },
  "response_format": "json",
  "language": "en"
}

例 — オフライン ASR (seed-asr-bigmodel)

seed-asr-bigmodel(BytePlus の海外向けオフライン ASR)は、相互排他的な2種類の入力を受け付けます。取得可能な input_audio.url(推奨 — ご自身の有効期限付き署名済みオブジェクトストレージ URL。音声が当社のストレージに保存されることはありません)、または直接の file/バイトアップロード(プライベートバケットに一時保管し、文字起こし完了後すぐに削除します)。制限事項: ストリーミング非対応(stream=true は 400 を返します)。ファイルアップロードは最大 25 MB(それより大きい録音には URL を使用してください)。1リクエストあたりの処理は約20分が上限のため、非常に長い音声は分割してください。音声の長さに基づいて課金されます($0.002/min)。

# ① Quick test — replace ONLY YOUR_API_KEY and run it (uses our hosted sample audio).
curl https://synthorai.io/v1/audio/transcriptions \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "seed-asr-bigmodel",
    "input_audio": {
      "url": "https://synthorai-asr-sample-360831509259.s3.us-west-1.amazonaws.com/seed-asr-sample.wav",
      "language": "zh"
    }
  }'
# → {"text":"..."}

# ② Your own audio file (<=25 MB) — replace key + file path.
curl https://synthorai.io/v1/audio/transcriptions \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F model=seed-asr-bigmodel \
  -F language=zh \
  -F file=@/path/to/your-audio.wav

# ③ Your own signed URL (recommended for large files / privacy) — replace key + URL.
curl https://synthorai.io/v1/audio/transcriptions \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"seed-asr-bigmodel","input_audio":{"url":"https://your-bucket/signed/meeting.wav","language":"zh"}}'

注意 / 落とし穴: (1) language は任意です — 一般的な値は zh(標準中国語)、yue-CN(広東語)、en-US です。省略すると自動検出されます。(2) input_audio.url を使用する場合、その URL は文字起こしサービスから公開アクセスで取得可能でなければなりません — プライベート/内部/認証必須の URL は失敗します。有効期限付きの署名済み(事前署名済み)オブジェクトストレージ URL が推奨される方法です。(3) ファイルアップロードと URL は相互排他的です。いずれか一方を選択してください。(4) 認識可能な発話がない音声(無音)はエラーではなく、空文字列 {"text":""} とともに 200 を返します。

例 — OpenAI Python SDK

このエンドポイントは OpenAI 互換のため、公式 OpenAI SDK は以下をオーバーライドするだけで直接動作します base_url. whisper-1、gpt-4o-transcribe、および任意の Gemini 文字起こしモデルでも同じように動作します — 変更するのは model.

from openai import OpenAI

client = OpenAI(
    base_url="https://synthorai.io/v1",
    api_key="YOUR_API_KEY",
)

with open("meeting.mp3", "rb") as f:
    result = client.audio.transcriptions.create(
        model="gpt-4o-transcribe",
        file=f,
        language="en",
        # prompt="Synthorai, BYOK, transcribe",   # optional vocabulary hint
        response_format="json",
    )

print(result.text)
# Token-level usage on gpt-4o-*:
if getattr(result, "usage", None):
    print(result.usage)

例 — OpenAI Node.js SDK

import OpenAI from "openai";
import fs from "node:fs";

const client = new OpenAI({
  baseURL: "https://synthorai.io/v1",
  apiKey: process.env.SYNTHORAI_API_KEY,
});

const result = await client.audio.transcriptions.create({
  model: "gpt-4o-transcribe",
  file: fs.createReadStream("meeting.mp3"),
  language: "en",
  response_format: "json",
});

console.log(result.text);

ストリーミング(SSE)

設定: stream=true 対象: gpt-4o-transcribe, gpt-4o-mini-transcribe、または任意の Gemini 文字起こしモデルを使用すると、音声のデコード中に増分イベントを受信できます。レスポンスの Content-Type は text/event-stream とイベントは以下で終了します data: [DONE]。whisper-1 はストリーミングに対応していません(設定すると 400 を返します stream=true).

gpt-4o-transcribe で表示されるイベントタイプ:

data: {"type":"transcript.text.delta","delta":"Hello "}

data: {"type":"transcript.text.delta","delta":"world."}

data: {"type":"transcript.text.done","text":"Hello world."}

data: {"type":"usage","usage":{"type":"tokens","input_tokens":689,"output_tokens":287,"total_tokens":976,"input_token_details":{"audio_tokens":689,"text_tokens":0,"cached_tokens":0}}}

data: [DONE]

Gemini streaming は同じ SSE イベント名を使用し、ゲートウェイは同じ正規化された usage オブジェクトを発行します。以下に記載されています レスポンス例— OpenAI と Gemini で同一 — のため、クライアントコードは provider 間で移植可能です。最終の usage イベントは常に完全な input_token_details 内訳を含み、正確な音声レート課金に使用されます。

エラー

すべてのエラーは OpenAI のエンベロープ形式に従います: { error: { message, type, code, param? } }. よくあるケース:

  • 400 model_not_found ——このワークスペースのチャネルでは、モデルが転写機能を持っていません。
  • 400 byok_strict_no_key ——ワークスペースが厳格な BYOK モードであり (byok_fallback_to_pool=false) であり、解決されたプロバイダー用の vault key がありません。
  • 400 content_policy_violation ——この prompt フィールドがガードレールルールに抵触しました(例:BYOK key の漏洩)。
  • 402 quota_exceeded ——推定コストがワークスペースの残りクォータを超えています。BYOK は対象外です。
  • 408 ——リクエストボディがサーバーの読み取りタイムアウト内にアップロードを完了しませんでした。遅い接続で大きな音声を送る際によく発生します。再試行するか、より小さなファイルを送信してください。
  • 413 ——音声が 25 MB の上限を超えています。
  • 502 upstream_error ——上流のネットワーク障害、またはモデルプロバイダーからの 2xx 以外のレスポンス。

レスポンス例

{
  "text": "Thanks for joining today's call. Let's get started.",
  "usage": {
    "type": "tokens",
    "input_tokens": 689,
    "output_tokens": 287,
    "total_tokens": 976,
    "input_token_details": {
      "audio_tokens": 689,
      "text_tokens": 0,
      "cached_tokens": 0
    }
  }
}

統一された使用量オブジェクト。 token 課金されるすべてのモデル(gpt-4o-*、Gemini、Vertex)は、この完全に同一の形状を返します——すべてのフィールドが常に存在し、プロバイダーがサブカウントを報告しない場合はゼロで埋められます——そのため同じクライアントコードでプロバイダーをまたいで使用量を読み取れます。転写の入力はすべて音声であるため、Gemini/Vertex は次を報告します input_token_details.audio_tokens == input_tokens (テキスト分割なし)。OpenAI はネイティブの音声/テキスト分割を報告します。 cached_tokens は、プロバイダー側のキャッシュから提供される入力の部分です。

whisper-1 は唯一の例外です:token ではなく音声の長さで課金されるため、レスポンスに token 使用量オブジェクトを含みません。 response_format=text の場合、レスポンスボディは JSON オブジェクトではなく生の転写文字列になります。