クイックスタート
これは、Meshyとプログラムからやり取りするためのAPIリファレンスです。
AIコーディングアシスタントを使用していますか? AI Integration ページをご覧ください — Claude Code、Cursor、Windsurf、その他のMCP互換ツールからツール呼び出しアクセスを行うにはMeshy MCPサーバーをインストールするか、通常のチャットエージェントに llms.txt を指定してください。
Meshy APIは、テキストプロンプトや画像から3Dモデルとテクスチャを生成するためのシンプルなインターフェイスを提供します。このガイドに従って、すばやく始めましょう。
API Keyを作成する
API設定ページでAPI keyを作成します。このAPI keyを使用して、リクエストを安全に認証します。API keyの形式は msy-<random-string> です。

API keyを生成したら、安全な場所に保存してください。
テストモードAPI Key
開発やテスト中は、クレジットを消費せずにAPIを試すために、テストモードのAPI keyを使用できます。
msy_dummy_api_key_for_test_mode_12345678
この特別なAPI keyには、次の特徴があります。
- すべてのMeshy API endpointへのリクエストに使用できます
- このキーを使用してもクレジットは消費されません
- 入力パラメータに関係なく、すべての有効なリクエストは同じサンプルタスク結果を返します
- レスポンスデータ構造は本番APIと完全に一致します
- 実際のAPI keyに切り替える前に、API連携をテストするのに最適です
テストモードAPI keyは開発目的専用です。本番環境で使用する場合は、ご自身のAPI keyを使用してください。
最初の「Text to 3D」APIリクエストを送信する
この例では、text-to-3d endpoint を使用して、テキストプロンプトから3Dモデルを生成します。このプロセスには、プレビューステージとリファインステージの2つの段階があります。プレビューステージでは、テクスチャが適用されていないベースメッシュが生成され、ジオメトリを評価できます。リファインステージでは、テキストプロンプトに基づいてプレビューメッシュにテクスチャが適用されます。
これらのリクエストをPythonスクリプトで送信する方法を示します。
プレビュー
Meshyは一連のREST API endpointを提供しています。任意のHTTPクライアントで使用できます。どのAPIを呼び出す場合でも、API keyは常に Authorization という名前のヘッダーとして渡されます。このスクリプトを使用する前に、API keyを MESHY_API_KEY という名前の環境変数としてエクスポートすることを忘れないでください。
プレビューリクエストの主要なパラメータは、常に "preview" である mode と、必要なモデルの説明である prompt です。この例では should_remesh も指定していますが、これは任意です。
api_request.py
import requests
import os
import time
headers = {
"Authorization": f"Bearer {os.environ['MESHY_API_KEY']}"
}
# 1. Generate a preview model and get the task ID
generate_preview_request = {
"mode": "preview",
"prompt": "a monster mask",
"should_remesh": True,
}
generate_preview_response = requests.post(
"https://api.meshy.ai/openapi/v2/text-to-3d",
headers=headers,
json=generate_preview_request,
)
generate_preview_response.raise_for_status()
preview_task_id = generate_preview_response.json()["result"]
print("Preview task created. Task ID:", preview_task_id)
これでプレビューAPI呼び出しは完了です。
Meshy APIは非同期実行モデルを採用していることに注意してください。つまり、タスクを作成すると、API endpointはタスクIDのみを返します。その後、このIDを使ってタスクステータスendpointをポーリングし、タスクが完了したかどうかを確認する必要があります。
api_request.py
# 2. Poll the preview task status until it's finished
preview_task = None
while True:
preview_task_response = requests.get(
f"https://api.meshy.ai/openapi/v2/text-to-3d/{preview_task_id}",
headers=headers,
)
preview_task_response.raise_for_status()
preview_task = preview_task_response.json()
if preview_task["status"] == "SUCCEEDED":
print("Preview task finished.")
break
print("Preview task status:", preview_task["status"], "| Progress:", preview_task["progress"], "| Retrying in 5 seconds...")
time.sleep(5)
タスクが完了すると、そのレスポンスからモデルURLにアクセスできるようになります。レスポンスの model_urls フィールドからモデルをダウンロードしてみましょう。
api_request.py
# 3. Download the preview model in glb format
preview_model_url = preview_task["model_urls"]["glb"]
preview_model_response = requests.get(preview_model_url)
preview_model_response.raise_for_status()
with open("preview_model.glb", "wb") as f:
f.write(preview_model_response.content)
print("Preview model downloaded.")
ここまで問題なく動作していれば、preview_model.glb は次のような見た目になるはずです。AIパイプラインに内在するランダム性により、完全に一致するわけではありません。

リファイン
リファインステージに進みましょう。リファインリクエストを開始するには、プレビュータスクIDを入力パラメータとして指定します。
api_request.py
# 4. Generate a refined model and get the task ID
generate_refined_request = {
"mode": "refine",
"preview_task_id": preview_task_id,
}
generate_refined_response = requests.post(
"https://api.meshy.ai/openapi/v2/text-to-3d",
headers=headers,
json=generate_refined_request,
)
generate_refined_response.raise_for_status()
refined_task_id = generate_refined_response.json()["result"]
print("Refined task created. Task ID:", refined_task_id)
# 5. Poll the refined task status until it's finished
refined_task = None
while True:
refined_task_response = requests.get(
f"https://api.meshy.ai/openapi/v2/text-to-3d/{refined_task_id}",
headers=headers,
)
refined_task_response.raise_for_status()
refined_task = refined_task_response.json()
if refined_task["status"] == "SUCCEEDED":
print("Refined task finished.")
break
print("Refined task status:", refined_task["status"], "| Progress:", refined_task["progress"], "| Retrying in 5 seconds...")
time.sleep(5)
# 6. Download the refined model in glb format
refined_model_url = refined_task["model_urls"]["glb"]
refined_model_response = requests.get(refined_model_url)
refined_model_response.raise_for_status()
with open("refined_model.glb", "wb") as f:
f.write(refined_model_response.content)
print("Refined model downloaded.")
3Dモデル refined_model.glb には、これで完全にテクスチャが適用されました ✨。

まとめて実行する
Text to 3D APIを使用するための完全なコードを以下に示します。
api_request.py
import requests
import os
import time
headers = {
"Authorization": f"Bearer {os.environ['MESHY_API_KEY']}"
}
# 1. Generate a preview model and get the task ID
generate_preview_request = {
"mode": "preview",
"prompt": "a monster mask",
"should_remesh": True,
}
generate_preview_response = requests.post(
"https://api.meshy.ai/openapi/v2/text-to-3d",
headers=headers,
json=generate_preview_request,
)
generate_preview_response.raise_for_status()
preview_task_id = generate_preview_response.json()["result"]
print("Preview task created. Task ID:", preview_task_id)
# 2. Poll the preview task status until it's finished
preview_task = None
while True:
preview_task_response = requests.get(
f"https://api.meshy.ai/openapi/v2/text-to-3d/{preview_task_id}",
headers=headers,
)
preview_task_response.raise_for_status()
preview_task = preview_task_response.json()
if preview_task["status"] == "SUCCEEDED":
print("Preview task finished.")
break
print("Preview task status:", preview_task["status"], "| Progress:", preview_task["progress"], "| Retrying in 5 seconds...")
time.sleep(5)
# 3. Download the preview model in glb format
preview_model_url = preview_task["model_urls"]["glb"]
preview_model_response = requests.get(preview_model_url)
preview_model_response.raise_for_status()
with open("preview_model.glb", "wb") as f:
f.write(preview_model_response.content)
print("Preview model downloaded.")
# 4. Generate a refined model and get the task ID
generate_refined_request = {
"mode": "refine",
"preview_task_id": preview_task_id,
}
generate_refined_response = requests.post(
"https://api.meshy.ai/openapi/v2/text-to-3d",
headers=headers,
json=generate_refined_request,
)
generate_refined_response.raise_for_status()
refined_task_id = generate_refined_response.json()["result"]
print("Refined task created. Task ID:", refined_task_id)
# 5. Poll the refined task status until it's finished
refined_task = None
while True:
refined_task_response = requests.get(
f"https://api.meshy.ai/openapi/v2/text-to-3d/{refined_task_id}",
headers=headers,
)
refined_task_response.raise_for_status()
refined_task = refined_task_response.json()
if refined_task["status"] == "SUCCEEDED":
print("Refined task finished.")
break
print("Refined task status:", refined_task["status"], "| Progress:", refined_task["progress"], "| Retrying in 5 seconds...")
time.sleep(5)
# 6. Download the refined model in glb format
refined_model_url = refined_task["model_urls"]["glb"]
refined_model_response = requests.get(refined_model_url)
refined_model_response.raise_for_status()
with open("refined_model.glb", "wb") as f:
f.write(refined_model_response.content)
print("Refined model downloaded.")
コードをPythonスクリプトにコピーして貼り付け、実行します。
Run the script
python api_request.py
ターミナルに次のような出力が表示されるはずです。

次のステップ
- まずはコードを書かずにendpointを試したいですか?API Playground を使用してリクエストを設定・実行し、生成されたスニペットをコピーしてください。
- 完全なAPIリファレンスは「API Endpoints」セクションにあり、各APIに関する詳細情報を確認できます。
- Pricing、Rate Limits、および一般的なエラーのトラブルシューティング方法について詳しく確認してください。
- 更新やバグ修正を確認するために、Changelog も定期的にチェックすることを忘れないでください。
- フィードバックがありますか、または問題に直面していますか?Discord コミュニティに参加してください。ぜひご意見をお聞かせください!