Snabbstart
Detta är API-referensen för att interagera programmatiskt med Meshy.
Använder du en AI-kodningsassistent? Se vår sida för AI-integration — installera Meshy MCP server för verktygsanropsåtkomst från Claude Code, Cursor, Windsurf och andra MCP-kompatibla verktyg, eller peka en vanlig chattagent mot llms.txt.
Meshy API tillhandahåller ett enkelt gränssnitt för att generera 3D-modeller och texturer från textprompter och bilder. Följ den här guiden för att komma igång snabbt.
Skapa en API-nyckel
Skapa en API-nyckel på sidan för API-inställningar här, som du använder för att säkert autentisera dina begäranden. API-nyckelns format är msy-<random-string>.

När du har genererat en API-nyckel, spara den på en säker plats.
API-nyckel för testläge
Under utveckling och testning kan du använda vår API-nyckel för testläge för att utforska API:et utan att förbruka dina credits:
msy_dummy_api_key_for_test_mode_12345678
Denna särskilda API-nyckel har följande egenskaper:
- Den kan användas för att göra begäranden till alla Meshy API-endpoints
- Inga credits förbrukas när den här nyckeln används
- Alla giltiga begäranden returnerar samma exempelresultat för uppgifter, oavsett inmatningsparametrarna
- Svarsdatastrukturen matchar produktions-API:et exakt
- Perfekt för att testa din API-integration innan du byter till din riktiga API-nyckel
API-nyckel för testläge är endast avsedd för utvecklingsändamål. För produktionsanvändning, använd din egen API-nyckel.
Gör din första API-begäran för "Text till 3D"
I det här exemplet genererar vi en 3D-modell från en textprompt med hjälp av text-to-3d endpoint. Processen omfattar två steg: förhandsvisningssteget och förfiningssteget. I förhandsvisningssteget genereras ett basnät utan någon textur applicerad, så att du kan utvärdera geometrin. I förfiningssteget textureras förhandsvisningsnätet baserat på textprompten.
Vi visar hur du gör dessa begäranden i ett Python-skript.
Förhandsvisning
Meshy tillhandahåller en uppsättning REST API-endpoints. Du kan använda dem med valfri HTTP-klient. Oavsett vilket API du anropar skickas API-nyckeln alltid som en header med namnet Authorization. Kom ihåg att exportera din API-nyckel som en miljövariabel med namnet MESHY_API_KEY innan du använder detta skript.
Nyckelparametrarna för förhandsvisningsbegäran är mode, som alltid är "preview", och prompt, en beskrivning av modellen du behöver. I det här exemplet har vi även angett should_remesh, men det är valfritt.
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)
Detta slutför API-anropet för förhandsvisning.
Tänk på att Meshy API använder en asynkron exekveringsmodell, vilket innebär att när du skapar en uppgift returnerar API-endpointen endast ett uppgifts-ID. Du måste sedan polla endpointen för uppgiftsstatus med detta ID för att kontrollera om uppgiften är klar.
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)
När uppgiften är klar kan du komma åt modell-URL:erna från dess svar. Låt oss ladda ner modellen från fältet model_urls i svaret.
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.")
Om allt fungerar hittills bör din preview_model.glb se ut ungefär så här. Den kommer inte att vara en exakt matchning, på grund av den inneboende slumpmässigheten i AI-pipelinen.

Förfina
Låt oss gå vidare till förfiningssteget. För att initiera förfiningsbegäran anger du förhandsvisningsuppgiftens ID som en inmatningsparameter.
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-modellen refined_model.glb är nu helt texturerad ✨.

Sätt ihop allt
Här är den kompletta koden för att använda API:et Text till 3D.
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.")
Kopiera och klistra in koden i ett Python-skript och kör det.
Run the script
python api_request.py
Du bör se utdata i din terminal som liknar följande:

Nästa steg
- Föredrar du att prova endpoints utan att först skriva kod? Använd API Playground för att konfigurera och köra en begäran, och kopiera sedan det genererade kodavsnittet.
- Du hittar den kompletta API-referensen i avsnittet "API-endpoints", som ger detaljerad information om varje API.
- Utforska detaljer om Priser, Rate Limits och hur du felsöker vanliga fel.
- Glöm inte att regelbundet kolla in vår ändringslogg för uppdateringar och buggfixar.
- Har du feedback eller stöter du på problem? Gå med i vår Discord community - vi vill gärna höra från dig!