Endpoints
POST /convert/jobs
Async conversion job creation
Use POST /convert/jobs to start an async conversion job.
POST /convert/jobsThis is the recommended endpoint for production integrations. You get a job ID, poll status, then download the result.
Request: multipart upload
Send multipart/form-data when you want to upload the file and create the job in one request.
Examples
curl
curl https://api.convert3d.org/convert/jobs \
-F file=@model.obj \
-F from=obj \
-F to=glb \
-H "Authorization: Bearer YOUR_API_TOKEN"JavaScript
import { openAsBlob } from "node:fs";
const token = process.env.CONVERT3D_API_TOKEN;
const file = await openAsBlob("model.obj");
const form = new FormData();
form.append("file", file, "model.obj");
form.append("from", "obj");
form.append("to", "glb");
const response = await fetch("https://api.convert3d.org/convert/jobs", {
method: "POST",
headers: {
Authorization: `Bearer ${token}`,
},
body: form,
});
if (!response.ok) {
throw new Error(await response.text());
}
const job = await response.json();
console.log(job.id);Python
import os
import requests
with open("model.obj", "rb") as file:
response = requests.post(
"https://api.convert3d.org/convert/jobs",
headers={"Authorization": f"Bearer {os.environ['CONVERT3D_API_TOKEN']}"},
files={"file": ("model.obj", file)},
data={"from": "obj", "to": "glb"},
timeout=300,
)
response.raise_for_status()
job = response.json()
print(job["id"])Request: upload-first JSON
Use JSON after creating an upload URL and uploading the source file.
{
"bucket": "uploads",
"key": "uploads/abc123/large-model.glb",
"fileName": "large-model.glb",
"from": "glb",
"to": "usdz"
}See GET /upload-url for the full upload-first flow.
Response
{
"id": "job_123",
"status": "queued",
"progress": 0
}Next step
Poll GET /convert/jobs/:id every 2-5 seconds until the job is success or failed.