ツールの呼び出し
すべての Direct API ツールを共通のリクエスト形式で呼び出し、結果と課金を読み取り、Idempotency-Key を使って有料の呼び出しを安全に再試行します。
各機能は 1 つのツールであり、すべて同じ方法で呼び出します: POST /v1/direct/tools/{tool_name}。すべてのツールは ツールカタログ に掲載しています。
リクエスト
| ヘッダー | 必須 | 値 |
|---|---|---|
Authorization | はい | Bearer <key> |
Content-Type | はい | application/json |
Idempotency-Key | 有料の呼び出しでは推奨 | 冪等性 を参照 |
{
"input": { },
"webhook_id": "01929a10-0c3d-7f44-8a21-0b1c2d3e4f50",
"metadata": { "order_id": "4411", "customer": "acme" }
}| フィールド | 型 | 必須 | 意味 |
|---|---|---|---|
input | object | はい | ツールの引数。ツールの input_schema に照らして検証されます。引数を取らないツールには {} を送ります。何かを作成するツール(生成、インポート、アップロード、タイムライン)はすべて、list_projects で取得した project_id を必要とします。 |
webhook_id | string または null | いいえ | この呼び出しで開始された各生成が最終ステータスに達したときに通知する、登録済みの Webhook エンドポイント。returns_generation: true のツールでのみ意味を持ち、それ以外では拒否されます。 |
metadata | object または null | いいえ | 最大 20 個の文字列キー(40 文字以内)と文字列値(500 文字以内)。呼び出しが開始するすべての生成に保存され、すべての読み取りと Webhook でそのまま返されます。Morphic が内容を解釈することはありません。 |
冪等性キーを付けた完全な呼び出しの例:
curl -s https://mcp.morphic.com/v1/direct/tools/generate_image \
-H "Authorization: Bearer $MORPHIC_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: order-4411-hero-image" \
-d '{"input": {"prompt": "A red vintage bicycle against a pastel wall", "project_id": "01928f4e-5b7c-7d2a-9e11-3c4b5a6d7e8f"}, "metadata": {"order_id": "4411"}}'Morphic のサーバーで動画をレンダリングするツール(video_compose、video_* 系の変換、burn_subtitles)は、現時点では webhook_id と metadata を受け付けません。いずれかを指定すると 422 tool_refused が返ります。これらの生成はポーリングで追跡してください。
レスポンス
成功時のレスポンスは、すべて同じ形式です。ツール自体の出力は、その output_schema が示す形で result に入ります。
{
"request_id": "0192a7b3-91d0-7c55-b1aa-6e5f4c3b2a10",
"tool": "generate_image",
"result": {
"generation_id": "0192a7b3-a1c4-7e02-8f9d-1a2b3c4d5e6f",
"generation_ids": ["0192a7b3-a1c4-7e02-8f9d-1a2b3c4d5e6f"],
"status": "queued",
"project_id": "01928f4e-5b7c-7d2a-9e11-3c4b5a6d7e8f",
"project_name": "Spring campaign",
"file_id": "01928f4e-6c8d-7a10-b2c3-d4e5f6a7b8c9",
"model_id": "mdl_3hv8tq1nzc6e",
"estimated_credits": 8,
"credits_settle_on_output_duration": false
},
"billing": {
"credits_charged": 8,
"credits_are_final": false,
"credits_settle_on_output_duration": false,
"generation_ids": ["0192a7b3-a1c4-7e02-8f9d-1a2b3c4d5e6f"]
}
}| ステータス | 返る場合 |
|---|---|
202 Accepted | ツールが 1 件以上の生成を開始した場合(returns_generation: true)。ポーリング または Webhook で追跡します |
200 OK | ツールが呼び出しの中で完了した場合(一覧、カタログ、見積もり、分析)、または冪等なリプレイの場合 |
課金ブロック
billing は、無料の呼び出しを含むすべての成功レスポンスに含まれます。
| 呼び出しの種類 | billing.credits_charged | credits_are_final |
|---|---|---|
| 無料の呼び出し: 一覧、カタログ、見積もり、ステータスの読み取り | 0 | true |
生成を開始する呼び出し(202) | 開始されたすべての生成について開始時に請求された額の合計 | false |
リクエスト内で完了する有料の呼び出し(analyze_video、analyze_audio、filmlab_edit) | 請求された額 | true |
拒否された呼び出し(4xx) | billing ブロックなし。請求なし |
このブロックは、呼び出しが返った時点での請求額を示します。返金と精算はその後に行われ、元のレスポンスではなく生成に反映されます。レスポンスには、ゲートウェイでのログ記録用に Morphic-Credits-Charged: <integer> も含まれます。生成の請求、精算、返金の仕組みは クレジットと使用量 で説明しています。
ツールの拒否
入力の形式は正しいものの実行できない場合(プランに含まれないモデル、モデルが対応していないアスペクト比、種類の異なるアセットなど)、呼び出しは 422 tool_refused を返します。メッセージには、フィールド、値、受け付けられる値が示されます。何も開始されず、請求も発生しません。
{
"description": "aspect_ratio: \"21:9\" is not offered by model mdl_3hv8tq1nzc6e. Offered: 1:1, 4:3, 3:4, 16:9, 9:16. Models offering 21:9 for text_to_image: mdl_9wd4mf2kqs7b.",
"code": "tool_refused",
"data": { "request_id": "0192a7b3-…", "tool": "generate_image" },
"error": { "error_code": "TOOL_REFUSED", "message": "aspect_ratio: \"21:9\" is not offered by model mdl_3hv8tq1nzc6e. …" }
}一部のみの開始
variations が 1 より大きい呼び出しは、バリエーションごとに 1 件の生成を開始します。先のバリエーションが開始された後で、後のバリエーションが拒否された場合:
- レスポンスは
202のままで、result.partial_failureに何が起きたかが示されます。 result.generation_idsには開始されたものだけが含まれ、billingも開始されたものだけをカウントします。- 欠けたバリエーションだけを再試行してください。
冪等性
ネットワーク障害は、リクエストが送信された後、応答が届く前に起きることがあります。有料の呼び出しを安全に再試行するには、Idempotency-Key ヘッダーを送信します。お客様自身のジョブ ID や注文 ID を使ってください。
Idempotency-Key: order-4411-hero-image- あるキーでの最初のリクエストは通常どおり実行されます。
- 24 時間以内に同じキー、同じツール、同じボディで再試行しても、再実行はされません。元のレスポンスボディ(元の
generation_idsとbillingを含む)とともに200を返し、追加の請求はありません。そのMorphic-Credits-Chargedヘッダーは0です。 - 同じキーで異なるツールまたはボディを送ると、
409 idempotency_conflictが返ります。 - 元のリクエストがまだ実行中に再試行すると、
409 idempotency_in_progressが返ります。 - 元のリクエストが失敗した(
5xx)、または実行された可能性がある状態で応答しなかった有料の呼び出しを再試行すると、409 idempotency_outcome_unknownが返ります。同じキーで再実行されることはありません。結果を確認してから、新しいキーを使ってください。 - キーは送信した API キーごとに区別され、最大 200 文字です。
無料の呼び出しもこのヘッダーを受け付けますが、必要になることはほとんどありません。
5xx の後に有料の呼び出しを再試行する
500、503、504 を返した有料の呼び出しは、失敗する前に作業を開始し、請求している可能性があります。
- 呼び出しが何をしたかを、
list_generationsまたは時間で絞り込んだGET /v1/direct/usageで確認します。 - 開始されなかった作業についてのみ、新しい
Idempotency-Keyで送信します。
応答がまったく届かなかった場合(接続の切断)は、同じキーで再試行してください。保存された応答が返るか、まだ実行中であれば 409 idempotency_in_progress が返ります。
何かお困りのことやご質問がありましたら、お気軽にご連絡ください。喜んでお手伝いします。こちらまでご連絡ください support@morphic.com.