lowpoly wordt op 30 okt 2026 uitgefaseerd. Stap vóór deze datums over op een ander model om fouten bij verzoeken te voorkomen.

Snelstart

Begin met het aanmaken van je API-sleutel

Elke aanvraag in deze handleiding heeft er een nodig. Het aanmaken van een sleutel duurt slechts enkele seconden.

Maak je API-sleutel aan

Vier stappen naar je eerste 3D-model, met behulp van de Meshy REST API.


1Verkrijg uw API-sleutel

Maak een API-sleutel aan op de pagina API Keys in het Developer Platform — u kunt deze na dit scherm niet opnieuw bekijken, bewaar hem dus ergens veilig. Elk verzoek authenticeert met een Bearer-token in de Authorization-header — zie Authentication.

Open de pagina API Keys in het Developer Platform en maak vervolgens uw sleutel aan


2Maak je eerste Afbeelding-naar-3D-verzoek

Exporteer je sleutel en maak vervolgens je eerste taak aan met Image to 3D. Werk je liever vanuit een tekstprompt of meerdere foto's? Bekijk dan Text to 3D of Multi-Image to 3D.

Export your key

export MESHY_API_KEY="<your-api-key>"

Elk onderstaand voorbeeld gebruikt deze foto — vervang image_url door je eigen afbeelding om iets anders te proberen.

Voorbeeldillustratie van een fantasiekarakter gebruikt als Afbeelding-naar-3D-invoer in deze handleiding
Voorbeeldinvoer

Request

POST
/openapi/v1/image-to-3d
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"
  }'

3Controleer de taakstatus

De taak wordt op de achtergrond uitgevoerd en duurt meestal een paar minuten. Poll hetzelfde endpoint totdat status gelijk is aan SUCCEEDED, FAILED of CANCELED, waarbij je <task_id> hieronder vervangt door de ID die in stap 2 is geretourneerd. Voor typische tijden en hoe lang je moet wachten, zie Task Lifecycle.

Request

GET
/openapi/v1/image-to-3d/:id
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": ""
  }
}

4Download je model

Haal het model op uit model_urls in de hierboven weergegeven respons. Elk formaat (GLB, FBX, OBJ, USDZ, STL) is een ondertekende URL met een beperkte geldigheidsduur — of sla de command line over en plak de URL rechtstreeks in de adresbalk van je browser om het te downloaden.

Download

model_urls.glb
curl -L "<model_urls.glb from the response above>" -o model.glb
Het resulterende 3D-model dat is gegenereerd op basis van de voorbeeldfoto van het fantasiekarakter
Jouw resultaat

Alles samenvoegen

Liever één script dat alles doet — aanmaken, pollen, downloaden?

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


Volgende stappen

  • Heeft u liever een UI? Open het Developer Platform — voer requests uit in de Playground, volg gebruik en requestlogs, en beheer webhooks.
  • Blader door de volledige API-referentie voor elk endpoint.
  • Leer van werkende voorbeelden: volg stapsgewijze recepten in het Cookbook en lees tutorials en bouwverhalen op de Developer Blog.
  • Bekijk Prijzen, Rate Limits en Fouten voordat u naar productie gaat.
  • Houd de changelog in de gaten voor updates en bugfixes.
  • Heeft u feedback of loopt u tegen problemen aan? Word lid van onze Discord community — we horen graag van u!