クレジットと使用量

Direct API の呼び出しの請求、精算、返金の仕組み、事前に見積もる方法、キーの消費額と台帳の読み方を説明します。

Direct API は、組織の残高(Studio と共通のプール)から Morphic クレジットを請求し、すべてのレスポンスでその額を示します。

  • Direct API の呼び出しは組織の API 料金で請求され、Studio で同じ作業をした場合の費用とは異なることがあります。API が返す数値(plan_media の見積もり、estimated_credits、billing ブロック、生成の読み取り、Webhook、/usage)には、すべてこの料金が反映されています。
  • 料金は組織ごとに設定され、公開されていません。担当者が API の料金表をお伝えします。
  • 料金の変更は、変更後に開始された生成に適用されます。実行中の生成は、開始時の料金で精算されます。
  • Studio の「設定」>「クレジット」では、API の消費がメンバーと並んで独立した行「API」として表示され、「API をキー別に表示」でキーごとの内訳を確認できます。API の消費は組織のクレジットから差し引かれますが、メンバーの割り当てから差し引かれることはなく、各キーの クレジット上限 で制限されます。

生成の請求方法

  1. 開始時に、生成には見積もり価格が請求されます。開始レスポンスでは、この額が billing.credits_charged と result.estimated_credits に示されます。
  2. 一部の出力は、実際に生成された量に応じて価格が決まります。音声合成と音楽は生成された長さ、タイムラインのレンダリングは計算時間で決まります。これらには credits_settle_on_output_duration: true が付き、開始時の請求額は下限で、最終的な額は生成の完了時に精算されます。
  3. failed または cancelled で終了した生成は全額返金され、返されたクレジットは billing.credits_refunded に示されます。succeeded の生成にも一部返金が付くことがあります。たとえば、精算対象の出力が開始時の請求額でカバーされる長さより短くなった場合です。
  4. 生成が最終状態になると、billing.credits_charged は台帳上の正味の合計額(開始時の請求額に精算分を加減し、credits_refunded を差し引いた額)になり、credits_are_final は true になります。失敗またはキャンセルされた生成は、最終的に credits_charged: 0 となり、credits_refunded は請求されていた額と等しくなります。
フィールド意味
estimated_credits開始時に見積もられ、請求された価格
credits_chargedこの生成についてこれまでに記録された正味のクレジット(精算と返金の反映後)
credits_refundedこの生成について返されたすべてのクレジット。failed または cancelled では請求額の全額、succeeded では一部返金の額。返金がなければ 0 で、負の値になることはありません
credits_are_final生成の実行中、または精算や返金がまだ残っている間は false。それ以上変わらなくなると true
credits_settle_on_output_duration開始時の請求額が下限で、生成された出力に基づいて精算される場合は true

生成の実行中、credits_charged は開始時の請求額と等しくなります。精算後の額を知るには、生成が最終状態になってから再度読み取ってください。Webhook は最終状態になってから一度だけ送信されます。

各レスポンスの課金情報

呼び出しのレスポンスに含まれる billing ブロックは、呼び出しが返った時点での請求額を示します。呼び出しの種類ごとの内容は ツールの呼び出し に記載しています。返金はその後に行われるため、元のレスポンスではなく生成(GET /generations/{id} と /usage)に反映されます。

  • 呼び出しの中で応答する有料ツールの処理が失敗した場合(analyze_video など)、credits_charged: 0 と、返金額を示す credits_refunded が返ります。
  • Morphic-Credits-Charged: <integer> ヘッダーは billing.credits_charged と同じ数値を示します。ただし冪等なリプレイは例外で、追加の請求がないため 0 を送り、ボディには元の請求額が繰り返されます。

消費する前に見積もる

POST /v1/direct/tools/plan_media は、最大 20 ステップのプランを検証し、見積もり可能なステップの価格を算出します。何も開始せず、請求もしません。

curl -s https://mcp.morphic.com/v1/direct/tools/plan_media \
  -H "Authorization: Bearer $MORPHIC_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
        "input": {
          "steps": [
            { "id": "still", "tool_name": "generate_image", "arguments_json": "{\"prompt\":\"A red vintage bicycle\",\"aspect_ratio\":\"16:9\"}" },
            { "id": "clip", "tool_name": "generate_video", "arguments_json": "{\"prompt\":\"The bicycle rolls away\",\"duration_seconds\":8}", "depends_on": ["still"] }
          ]
        }
      }'
  • まだ存在しない出力を使うアセットフィールドは省略し、その出力を生み出すステップを depends_on に指定します。
  • 各ステップには validation、quote_status、estimated_credits が返ります。
  • 結果には execution_order、known_estimated_credits、unquoted_step_ids、complete_estimate も含まれます。complete_estimate が false の場合、合計は下限であり、予算としては使えません。

キーと残高

GET /v1/direct/me は、呼び出したキー、その上限と消費額、組織の残高を返します。どのキーからでも呼び出せます。

curl -s https://mcp.morphic.com/v1/direct/me \
  -H "Authorization: Bearer $MORPHIC_API_KEY"
{
  "api_key": {
    "id": "01928e00-…",
    "name": "Order pipeline (prod)",
    "scopes": ["assets:read", "assets:write", "generations:write", "projects:read"],
    "expires_at": null,
    "credit_limits": {
      "total":   { "limit": 500000, "used": 182340, "remaining": 317660 },
      "monthly": { "limit": 100000, "used": 41200,  "remaining": 58800, "resets_at": "2026-11-01T00:00:00.000Z" },
      "daily":   { "limit": null,   "used": 2310,   "remaining": null,  "resets_at": "2026-10-26T00:00:00.000Z" }
    }
  },
  "organization": {
    "id": "01928d00-…",
    "plan": "enterprise",
    "remaining_credits": 1240000,
    "unlimited": false
  }
}

使用量の台帳

GET /v1/direct/usage(スコープ assets:read)は、キーによって発生したすべての台帳エントリを返します。お客様の記録との照合に使えます。

クエリ意味
from、tocreated_at に対する ISO 8601 の範囲。既定は直近 30 日、最大 92 日
generation_id1 件の生成のエントリのみ
limit1 から 200、既定は 50
cursor前のページの next_cursor
curl -s "https://mcp.morphic.com/v1/direct/usage?from=2026-10-01T00:00:00Z&limit=200" \
  -H "Authorization: Bearer $MORPHIC_API_KEY"
{
  "usage": [
    { "id": "0192a7b3-…", "created_at": "2026-10-25T09:14:03.500Z", "kind": "charge",     "credits": 120, "generation_id": "0192a7b3-a1c4-…", "tool": "generate_video", "model_id": "mdl_7rk2pq9vxa4m", "metadata": { "order_id": "4411" } },
    { "id": "0192a7b4-…", "created_at": "2026-10-25T09:15:41.950Z", "kind": "settlement", "credits": -24, "generation_id": "0192a7b3-a1c4-…", "tool": "generate_video", "model_id": "mdl_7rk2pq9vxa4m", "metadata": { "order_id": "4411" } }
  ],
  "totals": { "charged": 120, "settled": -24, "refunded": 0, "net": 96 },
  "next_cursor": null
}
  • kind は charge、settlement、refund のいずれかです。credits が負の値の場合、クレジットが返されたことを示します。
  • totals はページ単位ではなく、絞り込んだ範囲全体を対象とします。
  • 呼び出しの中で応答するツール(analyze_video、analyze_audio、filmlab_edit)は生成を開始しないため、そのエントリは generation_id: null となり、tool で区別します。

何かお困りのことやご質問がありましたら、お気軽にご連絡ください。喜んでお手伝いします。こちらまでご連絡ください support@morphic.com.

このページの内容