Snabbstart
Börja med att skapa din API-nyckel
Varje förfrågan i den här guiden behöver en. Att skapa en nyckel tar bara några sekunder.
Skapa din API-nyckelFyra steg till din första 3D-modell, med hjälp av Meshy REST API.
Använder du en AI-kodassistent? Se vår sida för AI-integration — installera Meshy MCP server för verktygsanrop från Claude Code, Cursor, Windsurf och andra MCP-kompatibla verktyg, eller peka en vanlig chattagent mot llms.txt.
1Skaffa din API-nyckel
Skapa en API-nyckel från sidan API Keys i Developer Platform — du kommer inte att kunna visa den igen efter den här skärmen, så spara den på ett säkert ställe. Varje förfrågan autentiseras med en Bearer-token i Authorization-headern — se Autentisering.
Att skapa och hantera API-nycklar kräver en betald plan. Gratis-konton får en dedikerad, inbyggd nyckel för testning i Playground, men kan inte skapa eller hantera egna nycklar.

Säkerhetstips: undvik att klistra in din nyckel direkt i skript — spara den istället som en miljövariabel: export MESHY_API_KEY="msy_...".
2Gör din första Image-to-3D-förfrågan
Exportera din nyckel och skapa sedan din första uppgift med Bild till 3D. Arbetar du istället utifrån en textprompt eller flera foton? Se Text till 3D eller Flera bilder till 3D.
Export your key
export MESHY_API_KEY="<your-api-key>"
Kör detta i din terminal (Terminal på macOS, Command Prompt eller PowerShell på Windows) — inte i en webbläsare.
Varje exempel nedan använder detta foto — byt ut mot din egen image_url för att prova något annat.

Request
curl https://api.meshy.ai/openapi/v1/image-to-3d \
-X POST \
-H "Authorization: Bearer ${MESHY_API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"image_url": "https://docs.meshy.ai/images/api/quick-start/source-photo.webp"
}'
3Kontrollera uppgiftens status
Uppgiften körs i bakgrunden och tar vanligtvis några minuter. Fråga samma endpoint upprepade gånger tills status är SUCCEEDED, FAILED eller CANCELED, och ersätt <task_id> nedan med ID:t som returnerades i steg 2. För typiska tider och hur länge du bör vänta, se Task Lifecycle.
Request
curl https://api.meshy.ai/openapi/v1/image-to-3d/<task_id> \
-H "Authorization: Bearer ${MESHY_API_KEY}"
Response — SUCCEEDED
{
"id": "018a210d-8ba4-705c-b111-1f1776f7f578",
"status": "SUCCEEDED",
"progress": 100,
"model_urls": {
"glb": "https://assets.meshy.ai/***/tasks/018a210d-8ba4-705c-b111-1f1776f7f578/output/model.glb?Expires=***",
"fbx": "https://assets.meshy.ai/***/tasks/018a210d-8ba4-705c-b111-1f1776f7f578/output/model.fbx?Expires=***"
},
"thumbnail_url": "https://assets.meshy.ai/***/tasks/018a210d-8ba4-705c-b111-1f1776f7f578/output/preview.png?Expires=***",
"task_error": {
"message": ""
}
}
Passar inte pollning din stil? Använd SSE-streaming eller en webhook för att få ett meddelande så snart en uppgift är klar.
4Ladda ner din modell
Hämta modellen från model_urls i svaret ovan. Varje format (GLB, FBX, OBJ, USDZ, STL) är en signerad URL med begränsad giltighetstid — eller hoppa över kommandoraden och klistra in URL:en direkt i webbläsarens adressfält för att ladda ner den.
Download
curl -L "<model_urls.glb from the response above>" -o model.glb

Filer sparas i 3 dagar i planer som inte är Enterprise — se Tillgångslagring.
Sätt ihop allt
Föredrar du ett enda skript som gör hela flödet — skapa, polla, ladda ner?
Full script
import axios from 'axios';
import fs from 'fs';
const headers = { Authorization: `Bearer ${process.env.MESHY_API_KEY}` };
const imageUrl = 'https://docs.meshy.ai/images/api/quick-start/source-photo.webp';
// 1. Create the task
const { data: created } = await axios.post(
'https://api.meshy.ai/openapi/v1/image-to-3d',
{ image_url: imageUrl },
{ headers, timeout: 60_000 },
);
const taskId = created.result;
// 2. Poll until it finishes, for up to 60 minutes
const deadline = Date.now() + 60 * 60 * 1000;
let task;
while (true) {
const { data, headers: resHeaders } = await axios.get(
`https://api.meshy.ai/openapi/v1/image-to-3d/${taskId}`,
{ headers, timeout: 30_000 },
);
task = data;
if (['SUCCEEDED', 'FAILED', 'CANCELED'].includes(task.status)) break;
if (Date.now() > deadline) {
// The task is still running. Check it again later with the same task ID instead of creating a new one.
throw new Error(`Task ${taskId} is still ${task.status}; check it again later`);
}
const waitSeconds = Number(resHeaders['retry-after']) || 5;
await new Promise((resolve) => setTimeout(resolve, waitSeconds * 1000));
}
// 3. Download the result (only if the task succeeded)
if (task.status !== 'SUCCEEDED') {
throw new Error(`Task ${task.status}: ${task.task_error?.message || 'unknown error'}`);
}
const { data: model } = await axios.get(task.model_urls.glb, { responseType: 'arraybuffer' });
fs.writeFileSync('model.glb', model);
console.log('Saved model.glb');
Explore common workflows
Game-ready character
Rigga ett humanoid nät med ett skelett så att det är redo att animeras i Unity eller Unreal.
Learn more →Lowpoly asset
Ställ in model_type till smart-topology i Bild till 3D för ett rent, speleredo nät.
3D print model
Konvertera en färdig modell till en flerfärgad 3MF-fil, redo att skivas och skrivas ut.
Learn more →Nästa steg
- Föredrar du ett användargränssnitt? Öppna Developer Platform — kör förfrågningar i Playground, följ upp användning och förfrågningsloggar, och hantera webhooks.
- Bläddra i den fullständiga API-referensen för varje endpoint.
- Lär dig av fungerande exempel: följ steg-för-steg-recept i Cookbook och läs handledningar och byggberättelser på Developer Blog.
- Kontrollera Priser, Rate Limits och Fel innan du går i produktion.
- Håll ett öga på ändringsloggen för uppdateringar och buggfixar.
- Har du feedback eller stöter på problem? Gå med i vår Discord-community — vi vill gärna höra från dig!