Open AIavDocsホーム
API キーはサーバー側の環境変数またはシークレット管理に保管してください。ブラウザのバンドル、Git、ログ、スクリーンショットに含めないでください。

公式 SDK クイックスタート

公式 SDK は一連の流れ(作成 → ポーリング → ダウンロード)をまとめ、冪等キーの自動生成と型付きエラーを提供します。Node SDK は依存パッケージがなく、Python SDK は httpx のみに依存します。現在は GitHub リポジトリで提供しており、npm / PyPI での公開は別途お知らせします。

Node

npm install github:openaiav/sdk-node   # npm release to be announced

import { OpenAiav } from '@openaiav/sdk'
const client = new OpenAiav({ apiKey: process.env.OPENAIAV_API_KEY })
const task = await client.generations.createAndWait({
  model: 'seedance-2.5-oa', prompt: 'She walks into the sunlight.',
  resolution: '480p', aspectRatio: 'adaptive', durationSeconds: 4,
  generateAudio: false
})
await client.generations.downloadToFile(task.id, './out.mp4')

Python

pip install git+https://github.com/openaiav/sdk-python   # PyPI release to be announced

from openaiav import OpenAiav
client = OpenAiav(os.environ["OPENAIAV_API_KEY"])
task = client.generations.create_and_wait({
    "model": "seedance-2.5-oa", "prompt": "She walks into the sunlight.",
    "resolution": "480p", "aspectRatio": "adaptive", "durationSeconds": 4,
    "generateAudio": False,
})
client.generations.download_to_file(task["id"], "./out.mp4")

4 ステップで統合

  1. サーバー側の環境変数 OPENAIAV_API_KEY を使って https://api.openaiav.com/v1/models を呼び出し、現在のモデルキー、料金、reference_modes を取得します。
  2. POST /v1/generations に prompt、referenceMode、referenceImages を送信します。参照画像は公開 HTTPS URL で、事前登録は不要です。作成成功は HTTP 201 です。
  3. 返された id を保存し、poll_after_ms の後に同じ GET /v1/generations/{id} をポーリングします。processing、result_pending、submission_unknown はいずれも待機を続け、作成をやり直さないでください。
  4. 状態が succeeded になったら GET /v1/generations/{id}/content でダウンロードします。全体取得は HTTP 200、単一のバイト範囲は 206 です。

認証と冪等性

export OPENAIAV_API_KEY='oav_...'
# One Idempotency-Key per create intent: every run of this script makes a new one.
# Reuse it only when retrying this same create. No uuidgen? IDEMPOTENCY_KEY=$(python3 -c 'import uuid;print(uuid.uuid4())')
IDEMPOTENCY_KEY=$(uuidgen | tr 'A-Z' 'a-z')
echo "Idempotency-Key: $IDEMPOTENCY_KEY  (reuse this value only when retrying this same create)"

すべてのリクエストで Authorization: Bearer oav_... を送信し、キーはサーバー側に保管してください。作成には generation:create、ポーリングとダウンロードには generation:read が必要です。作成の意図ごとに新しい Idempotency-Key(UUID)を生成するため、サンプルは実行のたびに新しいキーを使います。再利用するのは、ネットワークの結果が不明で同じ作成を再試行する場合だけです。同じキーを異なるボディで使わないでください。

リクエストヘッダー

パラメータ型必須説明
Authorizationstring必須すべての /v1 リクエストで Bearer oav_... を使用します。キーはサーバー側に保管してください。
Idempotency-Keystringタスク作成時は必須作成の意図ごとに新しい値(UUID など)を生成し、同じ作成を再試行する場合にのみ再利用してください。同じ値と同じボディなら二重に作成・課金されることはありません。
Content-TypestringPOST では必須生成の作成は application/json を使用します。

エンドポイント一覧

メソッドパス成功時スコープ説明
GET/v1/models200有効な API キーならどれでも可現在販売中のモデル、料金、解像度、長さ、reference_modes を取得します。送信前にカタログと照らして対応状況を確認してください。
POST/v1/generation-quotes201generation:create現在の価格をプレビューしますが、価格は固定されません。作成時に再計算し、作成レスポンスの reserved_usd をそのまま固定額として請求します。失敗したタスクは全額返金されます。quoteId は引き続き使用でき、expires_at は更新の目安です。
POST/v1/generations201generation:create非同期タスクを作成します。参照画像と referenceMode は同じ JSON リクエストで送信します。
GET/v1/generations/{id}200generation:read終了状態になるまで、poll_after_ms に従って同じタスクをポーリングします。
GET/v1/generations/{id}/content200 / 206generation:read成功後に出力をダウンロードします。単一のバイト範囲リクエストには 206 が返ります。

ステップ 1:モデルの対応状況を取得

モデルの対応状況をハードコードしないでください。reference_modes に記載されたモードのみを送信し、非対応の組み合わせは送信前に非表示または無効化してください。最小構成のサンプルは seedance-2.5-oa で 4 秒・480p・音声なしのリクエストを示しています。

curl --fail-with-body 'https://api.openaiav.com/v1/models' \
  --header "Authorization: Bearer $OPENAIAV_API_KEY"

最小構成の公開動画サンプル

サンプルには一連の流れがすべて含まれます:作成 → 同じタスクをポーリング → ダウンロード。 first_frame は参照画像 1 枚と adaptive を使用し、generateAudio=false で音声を要求しません。成功時のコードは 201、200、200/206 です。失敗時はまず HTTP を確認し、次に error.code をご確認ください。

# Keep OPENAIAV_API_KEY in an environment variable; do not paste secrets into shell history.
# One Idempotency-Key per create intent: every run of this script makes a new one.
# Reuse it only when retrying this same create. No uuidgen? IDEMPOTENCY_KEY=$(python3 -c 'import uuid;print(uuid.uuid4())')
IDEMPOTENCY_KEY=$(uuidgen | tr 'A-Z' 'a-z')
echo "Idempotency-Key: $IDEMPOTENCY_KEY  (reuse this value only when retrying this same create)"

# 1. Create — success: HTTP 201. On failure, the response body contains error.code.
# Lost response (timeout or dropped connection)? Re-run this same command in this shell:
# the unchanged $IDEMPOTENCY_KEY returns the original task instead of creating a second one.
curl --fail-with-body --request POST 'https://api.openaiav.com/v1/generations' \
  --header "Authorization: Bearer $OPENAIAV_API_KEY" \
  --header "Idempotency-Key: $IDEMPOTENCY_KEY" \
  --header 'Content-Type: application/json' \
  --data '{
  "model": "seedance-2.5-oa",
  "prompt": "A young woman finishes a letter and walks from a stone cottage into the morning sunlight",
  "resolution": "480p",
  "aspectRatio": "adaptive",
  "durationSeconds": 4,
  "referenceMode": "first_frame",
  "referenceImages": [
    "https://developers.openaiav.com/samples/seedance-letter-reference.webp"
  ],
  "generateAudio": false,
  "outputFormat": "mp4"
}'

# 2. Save the returned id as TASK_ID. Poll the same id — success: HTTP 200.
curl --fail-with-body 'https://api.openaiav.com/v1/generations/TASK_ID' \
  --header "Authorization: Bearer $OPENAIAV_API_KEY"

# Repeat step 2 after poll_after_ms until status is succeeded or failed.
# Never recreate a task whose status is submission_unknown.

# 3. After succeeded, download — success: HTTP 200 (or 206 with Range).
curl --fail-with-body --location 'https://api.openaiav.com/v1/generations/TASK_ID/content' \
  --header "Authorization: Bearer $OPENAIAV_API_KEY" \
  --output 'result.mp4'

リクエストパラメータ

パラメータ型必須説明
modelstring必須GET /v1/models が返す model の値を使用します。最小構成の動画サンプルでは seedance-2.5-oa を使います。
promptstring必須1〜4000 文字。オムニ参照では配列の順に @Image1、@Image2 のように画像を指定できます。
resolutionstring任意選択したモデルの resolutions に含まれている必要があります。最小構成の動画サンプルでは 480p を使います。
aspectRatiostring任意選択したモデルの aspect_ratios に含まれている必要があります。モデルが先頭フレームのリクエストで要求する場合は adaptive を使用します。image_size_options を持つ画像モデルでは、resolution と aspectRatio をその一覧から組み合わせで選んでください。すべての解像度ですべてのアスペクト比が使えるわけではありません。
durationSecondsinteger任意動画の durationSeconds はカタログの duration_seconds 範囲内の整数秒で指定してください。省略時はモデルの最短時間を使用します。最小構成のサンプルは 4 秒です。
referenceModefirst_frame | omni_reference参照画像を使う動画では必須reference_modes にそのモードが明示されている Seedance 動画モデルでのみ使用します。1 リクエストにつき 1 モードのみ選択できます。
referenceImagesstring[]referenceMode と一緒に指定公開された HTTPS 画像 URL。first_frame はちょうど 1 枚が必要です。omni_reference の上限は reference_images_max で確認してください。
inputImagesstring[]任意画像モデル専用の、画像から画像への入力画像(参照画像)です。各項目は公開 HTTPS 画像 URL、または data:image/png;base64,…、data:image/jpeg;base64,…、data:image/webp;base64,… 形式の data URL です。モデルごとの上限は GET /v1/models の input_images_max、input_image_max_bytes(1 枚あたり。URL と data URL の両方に適用)、input_image_mime_types で確認してください。参照画像を付けると請求額が上がる場合があります。動画の参照モードと併用しないでください。
generateAudioboolean任意音声に対応する動画モデルでは既定で true です。最小コストのサンプルでは明示的に false を送信します。現在のカタログに音声の追加料金はありません。料金は常に GET /v1/models の内容が正となります。
outputFormatmp4 | mov任意カタログの output_formats からのみ選択します。最小構成のサンプルでは mp4 を使います。

参照モード

first_frame

first_frame:参照画像が開始フレームとなり、構図を決定します。referenceImages はちょうど 1 件を送信します。aspectRatio はモデルの aspect_ratios から選び、カタログに adaptive がある場合はそれに固定されます(出力は参照画像に追従します)。 first_last_frame:referenceImages をちょうど 2 件送信します。配列の順序が先頭フレーム、次に末尾フレームとなり、その間はモデルが補完します。2 枚の画像は同じ寸法である必要はありません。フレームモードは omni_reference と併用できません。

{
  "model": "seedance-2.5-oa",
  "prompt": "A young woman finishes a letter and walks from a stone cottage into the morning sunlight",
  "resolution": "480p",
  "aspectRatio": "adaptive",
  "durationSeconds": 4,
  "referenceMode": "first_frame",
  "referenceImages": [
    "https://developers.openaiav.com/samples/seedance-letter-reference.webp"
  ],
  "generateAudio": false,
  "outputFormat": "mp4"
}

omni_reference

omni_reference:参照アセットは開始フレームにはならず、被写体・スタイル・シーンの一貫性を保ちます。referenceImages に加えて、対応モデルでは referenceVideos と referenceAudios も受け付けます。種類ごとの上限は下表のとおりで、カタログが宣言していない種類は送信時に 400 となります。プロンプトでは種類ごとの順序で @Image1、@Video1、@Audio1 のように指定します。

{
  "model": "seedance-2.5-oa",
  "prompt": "Keep the identity and outfit from @Image1; a young woman walks from a stone cottage into the morning sunlight",
  "resolution": "480p",
  "aspectRatio": "16:9",
  "durationSeconds": 4,
  "referenceMode": "omni_reference",
  "referenceImages": [
    "https://developers.openaiav.com/samples/seedance-letter-reference.webp"
  ],
  "generateAudio": false,
  "outputFormat": "mp4"
}

現在の対応状況

すべての動画モデルで統合方法は同一です:同じエンドポイント、同じフィールドで、モデルを変えるときは model を変更するだけです。差異はすべてカタログが宣言します。下表がそのカタログそのもので、モデルごとに対応する参照モードと各素材の受け入れ数を示します。カタログが宣言していない機能は送信時に明示的に拒否され、黙って無視されることはありません。

カタログが読み込まれていません。まず GET /v1/models を呼び出してください。reference_modes のないモデルには参照モードを送信しないでください。

先頭フレームの詳細と末尾フレームの受け渡し

先頭フレームの詳細:first_frame と omni_reference は排他で、1 リクエストにつきどちらか一方のみを選択します。オムニ参照でもプロンプトで参照画像を開始画面に寄せることはできますが、先頭フレームの厳密な一致が必要な場合は、その画像を first_frame モードで送信してください。Seedance 2.5 では先頭フレームのタスクはアスペクト比が adaptive に固定されます(出力は先頭フレームに追従)。末尾フレームの受け渡し:作成時に returnLastFrame: true を指定すると、成功したタスクは last_frame_url も返します(動画と同じサイズのウォーターマークなし PNG、24 時間保持)。その URL をそのまま次のリクエストの first_frame の referenceImages に渡せば、事前登録なしで複数カットを連結できます。

参照動画の料金

  • 長さを測定できる参照動画は固定価格で課金され、その金額を事前にプレビューできます。測定できない場合はプレビューを拒否し、請求はしません。
  • POST /v1/generation-quotes で現在の価格をプレビューできます。URL 動画はタスク作成時に再測定・再計算され、作成レスポンスの reserved_usd が実際の金額です。quoteId は引き続き送信できますが、価格は固定されません。expires_at はプレビュー更新の目安です。
  • モデルカタログが動画ごと・合計の時間、本数、最低課金秒数を定めます。参照動画 1 本あたりの長さは、Seedance 2.0 シリーズが 2〜15 秒、その他の対応モデルが 2〜30 秒です。実測時間がモデルの範囲外なら 422 REFERENCE_DURATION_OUT_OF_RANGE を返し、課金されません。
  • MP4/MOV の公開 HTTPS 直リンクを使用してください。判明したファイルサイズが 200 MiB を超える場合は REFERENCE_VIDEO_TOO_LARGE を返します。サイズが不明でも見積もれます。非公開 URL は REFERENCE_URL_NOT_PUBLIC、測定枠が満杯なら 429 REFERENCE_PROBE_BUSY です。コンソールへのアップロード上限は 32 MiB です。
  • すべてのタスクは作成時に見積額の reserved_usd が請求され、成功時はその金額どおり、失敗時は全額返金されます。プレビューの price_usd は、その時点で作成した場合の請求額と同じです。出力時間は明示し、-1 は使えません。
  • 公開動画 URL はプレビュー時と作成時に測定し、その後プラットフォームへの保存やアセット登録なしで生成サービスに直接渡します。URL の内容を変更しないでください。アップロードは別の登録経路を使います。実在人物の顔に関するモデルの制限は引き続き適用されます。

画像モデルの料金

  • 画像モデルは 1 枚ごとの料金で、resolution と aspectRatio によって変わります(image_pricing.rates)。gpt-image-* と nano-banana-* のモデルの表示価格は、短いプロンプトで参照画像なしの場合の料金です。
  • これらのモデルでは、参照画像を付けたりプロンプトが長かったりすると請求額が高くなります。タスクを作成する前に同じボディで POST /v1/generation-quotes を呼び出してください。返される price_usd が、現在の価格でのそのリクエストの請求額です。失敗したタスクは全額返金されます。

ポーリングとダウンロード

終了状態は succeeded と failed のみです。submission_unknown は受理状況の確認中、result_pending は結果の確定中です。元のタスク ID を保持してポーリングを続け、作成を再実行しないでください。成功後は、Open AIav 以外の場所に依存せず、認証付きの /content パスをご利用ください。結果は 24 時間保持されます(詳細レスポンスに output_expires_at が含まれます。期限切れのダウンロードは 410 OUTPUT_EXPIRED を返すため、早めに保存してください)。

ステータス終了状態対処
processingいいえ受理されました。poll_after_ms の後に再度ポーリングしてください。
result_pendingいいえ結果を確定中です。タスク ID を保持して同じタスクをポーリングし、再作成しないでください。
submission_unknownいいえ受理状況を確認中です。作成を再実行しないでください。元のタスク ID を保持してポーリングしてください。
succeededはい成功しました。/content で出力をダウンロードしてください。
failedはい確定的に失敗し、全額返金されました。error_code をご確認ください。

廃止エンドポイントからの移行

旧来の /v1/assets、/v1/assets/content、/v1/assets/{id}、/v1/asset-groups、/v1/asset-groups/{id} は廃止されました。対応する旧スコープを持つ有効なキーで呼び出すと HTTP 410 / ENDPOINT_RETIRED が返ります。新しい統合ではこれらのパスを呼び出さず、referenceMode と referenceImages を同じ生成リクエストに含めてください。

エラーコード一覧

完全な一覧:HTTP ステータス、エラーコード、意味、推奨される対処、SDK のエラークラス。この表は SDK のエラーマッピングと同じデータを使用しています。未知の新しいコードは、SDK が HTTP ステータスに基づいて処理します。

HTTPコード意味推奨される対処SDK
401UNAUTHENTICATEDAPI キーがないか、認識できません。Authorization: Bearer oav_… ヘッダーを送信してください。キーはサーバー側に保管します。AuthenticationError
401INVALID_API_KEYAPI キーが無効か、失効しています。コンソールでキーの状態を確認してください。必要に応じてローテーションして新しいキーを取得します。AuthenticationError
403INSUFFICIENT_SCOPEキーにこの操作に必要なスコープがありません。作成には generation:create、ポーリングとダウンロードには generation:read が必要です。PermissionError
429RATE_LIMITEDリクエストがキーのレート制限を超えました。Retry-After / retryAfterSeconds に従ってバックオフしてください。SDK は自動で処理します。RateLimitError
400IDEMPOTENCY_KEY_REQUIRED作成には Idempotency-Key ヘッダーが必要です。新しいリクエストごとに一意のキーを生成し、再試行では同じキーを使ってください。SDK は自動で生成します。InvalidRequestError
409IDEMPOTENCY_KEY_CONFLICT同じ冪等キーが異なるボディで使われました。パラメータが異なる場合は新しいキーを使い、再試行ではキーとボディを完全に一致させてください。InvalidRequestError
400MODEL_NOT_FOUND不明なモデル ID です。GET /v1/models が返す ID を使用してください(例:seedance-2.5-oa)。InvalidRequestError
503MODEL_NOT_AVAILABLEこのモデルは現在呼び出せません。課金されていません。GET /v1/models でモデルの status を確認し、後ほど再試行してください。ServerError
400INVALID_PROMPTプロンプトが空か、長すぎます。プロンプトは 1〜4000 文字にしてください。InvalidRequestError
400INVALID_DURATIONdurationSeconds がモデルの範囲外です。動画の長さをカタログ範囲内の整数秒として durationSeconds に指定してください。InvalidRequestError
400INVALID_RESOLUTIONその解像度はモデルでサポートされていません。カタログの resolutions から選択してください。InvalidRequestError
400INVALID_ASPECT_RATIOそのアスペクト比はモデルでサポートされていません。カタログの aspect_ratios から選択してください。first_frame では adaptive に固定されることがあります。InvalidRequestError
400INVALID_REFERENCE_IMAGESreferenceImages は公開 HTTPS URL の配列である必要があります。タスクの実行中に読み取れる https:// の画像 URL を指定してください。InvalidRequestError
400INVALID_REFERENCE_IMAGE参照画像の一部が有効な URL ではありません。メッセージにインデックス(referenceImages[i])が含まれます。該当する項目を修正してください。InvalidRequestError
400REFERENCE_IMAGE_URL_NOT_HTTPS参照画像の URL が公開 HTTPS ではありません。http、プライベートネットワーク、data URL は使用できません。画像は HTTPS で公開してください。InvalidRequestError
400REFERENCE_MODE_REQUIRES_IMAGESreferenceMode が指定されていますが、参照画像がありません。referenceMode と referenceImages は一緒に指定してください。InvalidRequestError
400REFERENCE_MODE_NOT_SUPPORTEDモデルは指定された参照モードに対応していません。カタログの reference_modes に従って first_frame / omni_reference を選択してください。InvalidRequestError
400FIRST_FRAME_REQUIRES_ONE_IMAGEfirst_frame には参照画像がちょうど 1 枚必要です。画像は 1 枚だけ送信してください。複数枚の場合は omni_reference を使用します。InvalidRequestError
400TOO_MANY_REFERENCES参照画像の枚数がカタログの上限を超えています。上限はカタログの reference_images_max をご確認ください。InvalidRequestError
400INVALID_INPUT_IMAGESinputImages は配列である必要があります。各項目は HTTPS URL または data:image/* の base64 です。InvalidRequestError
400INVALID_INPUT_IMAGE入力画像の一部の形式が正しくありません。各項目は HTTPS URL または data:image/* の base64 である必要があります。メッセージにインデックスが含まれます。InvalidRequestError
400INPUT_IMAGE_URL_NOT_HTTPS入力画像の URL が HTTPS ではありません。https:// の URL、または data:image/png;base64,… のような data URL を使用してください。InvalidRequestError
400INPUT_IMAGE_TOO_LARGE埋め込み画像が 10 MiB を超えています。10 MiB 未満に圧縮してから送信してください。input_image_max_bytes を持つモデルでは HTTPS URL にも同じ上限が適用され、超えた場合はタスクが REFERENCE_INPUT_INVALID で失敗し、全額返金されます。InvalidRequestError
400IMAGE_INPUT_NOT_SUPPORTEDこのモデルは画像入力に対応していません。inputImages を使用できるのは input_images_max>0 の画像モデルのみです。InvalidRequestError
400TOO_MANY_INPUT_IMAGES入力画像が多すぎます。上限はカタログの input_images_max をご確認ください。InvalidRequestError
422REFERENCE_DURATION_OUT_OF_RANGE実測した参照動画の長さがモデルの制限を超えています。カタログの動画ごと・合計時間・本数の制限を確認して価格を再確認してください。今回は課金されていません。InvalidRequestError
422REFERENCE_DURATION_UNVERIFIED参照動画の長さを測定できませんでした。通常の MP4/MOV を使用し、faststart を推奨します。URL のホストは Range に対応する必要があります。InvalidRequestError
422REFERENCE_URL_NOT_PUBLIC参照動画の URL が公開 HTTPS ではありません。ログイン不要の公開 HTTPS ファイル URL(ポート 443)を使用してください。InvalidRequestError
422CONTENT_TYPE_MISMATCH参照動画の URL が必要な動画形式を返していません。URL が Web ページや画像ではなく MP4/MOV のバイト列を返すことを確認してください。InvalidRequestError
422REFERENCE_VIDEO_TOO_LARGE参照動画がファイルサイズの上限を超えています。公開 URL は 200 MiB、コンソールへのアップロードは 32 MiB までです。圧縮またはトリミングして価格を再確認してください。InvalidRequestError
429REFERENCE_PROBE_BUSY同時に測定している参照動画が多すぎます。retry_after_seconds の後に再試行してください。今回は課金されていません。RateLimitError
400INSUFFICIENT_BALANCE残高がこのタスクの料金に足りません。ウォレットでチャージまたはコードを引き換えてから、再試行してください。InvalidRequestError
400LEGACY_ASSET_REFERENCE_RETIREDアセット ID による参照は廃止されました。同じリクエストで referenceMode + referenceImages(公開 HTTPS)を送信してください。InvalidRequestError
404NOT_FOUNDタスクが存在しないか、別のアカウントのものです。タスク ID とキーが同じアカウントのものか確認してください。InvalidRequestError
409OUTPUT_NOT_READY出力はまだ準備できていません。終了状態になるまで poll_after_ms に従ってポーリングを続けてください。InvalidRequestError
410OUTPUT_EXPIREDダウンロード期限(成功後 24 時間)が過ぎました。出力は早めに保存してください。期限切れ後は再生成が必要です。カウントダウンには output_expires_at を使用できます。OutputExpiredError

画像タスクの失敗コード

画像タスクが status=failed で終了した場合は、error_code を読み取って下表と照合してください。失敗したタスクは全額返金されます。SDK は同じコードを持つ GenerationFailedError を送出します。

コード意味
CONTENT_POLICY_REJECTEDコンテンツが審査を通過しませんでした。修正してから再送信してください。
REFERENCE_INPUT_INVALID参照アセットの形式、サイズ、モデルの要件をご確認ください。
REFERENCE_SOURCE_UNREACHABLE参照アセットの URL を読み取れません。有効期限を確認するか、もう一度アップロードしてください。
REFERENCE_SERVICE_UNAVAILABLE参照アセットの処理サービスを利用できません。タスク ID を添えてサポートにご連絡ください。画像を差し替える必要はありません。
GENERATION_INPUT_INVALID生成パラメータがこのモデルの要件を満たしていません。
GENERATION_RATE_LIMITED生成サービスが一時的にレート制限中です。しばらくしてからお試しください。
GENERATION_REJECTED生成リクエストが拒否されました。理由の確認はタスク ID を添えてサポートにご連絡ください。
GENERATION_SERVICE_UNAVAILABLE生成サービスを一時的に利用できません。
GENERATION_FAILEDタスクを完了できませんでした。タスク ID を添えてサポートにご連絡ください。

コンソールでのみ返されるコード

HTTPコード意味推奨される対処
400REFERENCE_UPLOAD_NOT_FOUNDアップロードの参照が存在しないか、期限切れか、別のアカウントのものです。プレイグラウンドで再アップロードしてから実行してください(アップロードの有効期間は短時間です)。
429UPLOAD_QUOTA_EXCEEDED未使用のアップロードが多すぎます。アップロードを使うタスクを実行するか、期限切れになるまでお待ちください。
429WEBHOOK_ENDPOINT_LIMITWebhook エンドポイント数の上限に達しました。使用していないエンドポイントを削除または無効にしてください。
400INVALID_WEBHOOK_URLコールバック URL が公開アクセス可能な HTTPS ではありません。公開 HTTPS アドレスを使用してください。プライベート/ループバックのホストは拒否されます。