Convert 3D

Company

BlogAbout

Tools & API

ConvertCompressRenderViewDesktop AppDeveloper API

Community

Discord
© Sharkato JV 2025
PrivacyTerms
    Convert 3D
    Convert
    3D

    Quick Start

    1. Get Your API Token

    Sign up for a Convert3D API account and get your API.

    2. Try the Interactive Example

    See the API in action with our interactive model viewer example.

    API Endpoints

    Simple REST API

    For quick conversions, use our simple REST endpoint that returns the converted file directly.

    Request

    Parameters

    file
    file
    The 3D model file you want to convert.
    from_format
    string
    The format of the file you are converting from.
    Supported input formats
    3d 3dm 3ds 3mf ac ac3d acc amf amj ase ask b3d blend brep bvh cob csm dae dwg dxf enff fbx gcode glb gltf
    to_format
    string
    The format of the file you are converting to.
    Supported output formats
    3dm 3ds 3mf dae fbx glb gltf obj ply rbxl rbxm stl stp usdz x
    Authorization
    string
    Your API token. You can get it from https://convert3d.org/convert3dapi

    Response

    Success: The converted file, form-encoded

    Job-based API (Recommended)

    For production applications, use our async job-based API that handles large files and provides progress updates.

    Job Status Values

    queued - Job is waiting to start
    in_progress - Job is currently processing
    success - Job completed successfully
    failed - Job failed with error

    1. Start Conversion Job

    Response Examples:
    Success:
    Error (400):
    Unauthorized (401):

    2. Check Job Status

    Response Examples:
    Success:
    In Progress:
    Failed:

    3. Download Converted File

    Response Examples:
    Success:
    Not Ready (409):
    Not Found (404):

    Code Examples

    JavaScript (Vanilla)

    React/Next.js

    HTML with Model Viewer

    API Reference

    Endpoints

    POST/api/convert

    Simple REST endpoint for quick conversions

    POST/api/convert/jobs

    Start a conversion job (async)

    GET/api/convert/jobs/{id}

    Check job status

    GET/api/convert/jobs/{id}/download

    Download converted file

    Authentication

    Header

    Authorization: Bearer YOUR_API_TOKEN

    Get Your Token

    Sign up for Convert3D API and get your API token from https://convert3d.org/convert3dapi.

    Supported Formats

    View all supported input and output formats for conversion.

    Best Practices

    File Optimization

    • • Compress large models before upload
    • • Use GLB format for web display (smaller file size)
    • • Validate file types and sizes before upload

    Error Handling

    • • Always check API response status
    • • Implement retry logic for failed requests
    • • Show user-friendly error messages
    • • Handle network timeouts gracefully

    Troubleshooting

    "Invalid API Token" Error

    Verify your API token is correct and hasn't expired. Ensure you're including the "Bearer " prefix.

    "File Too Large" Error

    Compress your model file or use a more efficient format. Consider splitting large models.

    "Unsupported Format" Error

    Check the supported formats list and verify the file extension matches the actual format.

    Convert 3D

    Company

    BlogAbout

    Tools & API

    ConvertCompressRenderViewDesktop AppDeveloper API

    Community

    Discord
    © Sharkato JV 2025
    PrivacyTerms
    Get your API key here. Download damaged-helmet.glb to test.
    ifc
    iges
    igs
    lwo
    lws
    lxo
    max
    md2
    md3
    md5
    mdc
    mdl
    mot
    ms3d
    nc
    ndo
    nff
    obj
    off
    ogex
    ply
    pmx
    prj
    q3o
    q3s
    rbxl
    rbxm
    scn
    sib
    smd
    step
    stl
    stp
    uc
    usda
    usdc
    usdz
    vox
    vta
    x
    xgl
    xml
    zgl
    curl https://convert3d.org/api/convert \
    -F file=@damaged-helmet.glb \
    -F from_format=glb \
    -F to_format=usdz \
    -H "Authorization: Token %your token here%" \
    -o damaged-helmet.usdz
    {
        "success":false,
        "error":"Conversion failed"
    }
    Not ready
    {
      "id": "abc123def456",
      "status": "queued",
      "progress": 0
    }
    {
      "error": "Missing 'api_token'"
    }
    GET /api/convert/jobs/{job-id}
    Authorization: Bearer YOUR_API_TOKEN
    {
      "error": "Missing 'file' field"
    }
    {
      "id": "abc123def456",
      "status": "in_progress",
      "progress": 45,
      "message": "Converting model..."
    }
    GET /api/convert/jobs/{job-id}/download
    Authorization: Bearer YOUR_API_TOKEN
    curl https://convert3d.org/api/convert \
    -F file=@damaged-helmet.glb \
    -F from_format=glb \
    -F to_format=usdz \
    -H "Authorization: Token %your token here%" \
    -o damaged-helmet.usdz
    Not found
    {
      "id": "abc123def456",
      "status": "success",
      "progress": 100,
      "message": "Conversion completed",
      "signedUrl": "https://storage.convert3d.org/converted/1234567890-model.glb?signature=..."
    }
    {
      "id": "abc123def456",
      "status": "failed",
      "progress": 0,
      "message": "Unsupported file format"
    }
    {
      "url": "https://storage.convert3d.org/converted/1234567890-model.glb?signature=..."
    }
    // Convert 3D model using Convert3D API
    async function convertModel(file, apiToken) {
      const formData = new FormData();
      formData.append('file', file);
      formData.append('from', file.name.split('.').pop().toLowerCase());
      formData.append('to', 'glb');
    
      // Start conversion job
      const jobResponse = await fetch('/api/convert/jobs', {
        method: 'POST',
        headers: {
          'Authorization': `Bearer ${apiToken}`,
        },
        body: formData,
      });
    
      const job = await jobResponse.json();
      
      // Poll for completion
      const pollStatus = async () => {
        const statusResponse = await fetch(`/api/convert/jobs/${job.id}`, {
          headers: {
            'Authorization': `Bearer ${apiToken}`,
          },
        });
        
        const status = await statusResponse.json();
        
        if (status.status === 'success' && status.signedUrl) {
          // Update model-viewer src
          const modelViewer = document.querySelector('model-viewer');
          modelViewer.src = status.signedUrl;
        } else if (status.status === 'queued' || status.status === 'in_progress') {
          setTimeout(pollStatus, 2000); // Poll every 2 seconds
        }
      };
      
      pollStatus();
    }
    
    // Usage
    const fileInput = document.getElementById('file-input');
    const apiToken = 'YOUR_API_TOKEN';
    
    fileInput.addEventListener('change', (e) => {
      const file = e.target.files[0];
      if (file) {
        convertModel(file, apiToken);
      }
    });
    // Install: npm install @google/model-viewer
    import { useEffect, useState } from 'react';
    
    export default function ModelViewerComponent({ modelUrl }) {
      const [isLoading, setIsLoading] = useState(false);
    
      useEffect(() => {
        // Load model-viewer script
        const script = document.createElement('script');
        script.type = 'module';
        script.src = 'https://unpkg.com/@google/model-viewer/dist/model-viewer.min.js';
        document.head.appendChild(script);
    
        return () => {
          document.head.removeChild(script);
        };
      }, []);
    
      return (
        <div>
          {isLoading && <div>Converting model...</div>}
          <model-viewer
            src={modelUrl}
            alt="3D Model"
            auto-rotate
            camera-controls
            shadow-intensity="1"
            environment-image="neutral"
            style={{ width: '100%', height: '400px' }}
          />
        </div>
      );
    }
    <!DOCTYPE html>
    <html>
    <head>
      <script type="module" src="https://unpkg.com/@google/model-viewer/dist/model-viewer.min.js"></script>
    </head>
    <body>
      <model-viewer
        src="YOUR_CONVERTED_MODEL_URL"
        alt="3D Model"
        auto-rotate
        camera-controls
        shadow-intensity="1"
        environment-image="neutral"
        style="width: 100%; height: 400px;">
      </model-viewer>
    </body>
    </html>
    POST /api/convert/jobs
    Authorization: Bearer YOUR_API_TOKEN
    Content-Type: multipart/form-data
    
    {
      "file": [your-3d-model-file],
      "from": "obj",
      "to": "glb"
    }