REST API · Image-to-3D · Live

Photogrammetry API vs Tripo3D

A production REST API that converts a single photo into a textured 3D model (GLB or OBJ) via one HTTP call. No subscription, no 3D software, no local rendering. $0.01 per model — half the price of Meshy and a fraction of what Tripo3D costs on a subscription plan. 500 free credits, no credit card.

$0.01 / model GLB + OBJ output 500 free credits No credit card 50 MB max input Auto credit refund on failure
Get an API key (free) Quick start See pricing API docs

Why use a photogrammetry API instead of Tripo3D?

Tripo3D, Meshy, and Rodin all offer compelling 3D generation tools — but they're primarily subscription-based consumer platforms. When you need to generate 3D models programmatically at scale (e-commerce product listings, game asset pipelines, AR catalog apps), a pure REST API with pay-as-you-go pricing and no monthly lock-in is the better architecture. PixelAPI's image-to-3D endpoint gives you:

Quick start — image to 3D in one API call

Sign up, copy your key from the dashboard, and POST your image. The endpoint returns a generation_id; poll until status=completed, then download the GLB from output_url.

# Step 1: Submit the image
curl -X POST https://api.pixelapi.dev/v1/3d/generate \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "[email protected]" \
  -F "format=glb" \
  -F "texture_size=1024"
# Response: {"id": "uuid", "status": "queued", "credits_used": 10, ...}

# Step 2: Poll for completion
curl https://api.pixelapi.dev/v1/3d/status/UUID \
  -H "Authorization: Bearer YOUR_API_KEY"
# Response: {"status": "completed", "output_url": "https://...", "files": {...}}
pip install pixelapi
---
import time
from pixelapi import PixelAPI

client = PixelAPI(api_key="YOUR_API_KEY")

# Submit image-to-3D job
job = client.generate_3d(
    image="product.jpg",
    format="glb",           # "glb", "obj", or "all"
    texture_size=1024       # 512, 1024, or 2048
)

# Poll until done (SDK handles polling automatically)
result = client.wait_for_3d(job["id"])
print(result["output_url"])  # download GLB from here
npm install pixelapi
---
import { PixelAPI } from "pixelapi";

const client = new PixelAPI({ apiKey: process.env.PIXELAPI_KEY });

const job = await client.generate3d({
  image: "./product.jpg",
  format: "glb",        // "glb", "obj", or "all"
  textureSize: 1024,    // 512, 1024, or 2048
});

// SDK auto-polls until completed
const result = await client.waitFor3d(job.id);
console.log(result.outputUrl); // download GLB
composer require pixelapi/pixelapi
---
<?php
use PixelAPI\Client;

$client = new Client(getenv("PIXELAPI_KEY"));
$job = $client->generate3d([
    "image"        => "product.jpg",
    "format"       => "glb",
    "texture_size" => 1024,
]);

// Poll manually
do {
    sleep(3);
    $status = $client->get3dStatus($job["id"]);
} while ($status["status"] === "queued" || $status["status"] === "processing");

echo $status["output_url"];
gem install pixelapi
---
require "pixelapi"

client = PixelAPI::Client.new(api_key: ENV["PIXELAPI_KEY"])
job = client.generate_3d(
  image: "product.jpg",
  format: "glb",
  texture_size: 1024
)

result = client.wait_for_3d(job["id"])
puts result["output_url"]
go get github.com/pixelapi/pixelapi-go
---
import "github.com/pixelapi/pixelapi-go"

client := pixelapi.New("YOUR_API_KEY")
job, err := client.Generate3D("product.jpg", pixelapi.ThreeDOptions{
    Format:      "glb",
    TextureSize: 1024,
})
if err != nil { panic(err) }

result, err := client.WaitFor3D(job.ID)
if err != nil { panic(err) }
fmt.Println(result.OutputURL)

Pricing — photogrammetry API vs Tripo3D vs Meshy vs Rodin

PixelAPI's per-model price is set at exactly half the cheapest mainstream rival. No subscription, no monthly commitment.

ProviderFree tierPer-model costOutput formatsAPI / subscription
PixelAPI 500 credits, no card $0.01 GLB · OBJ Pure API, pay-as-you-go
Meshy 200 free credits $0.02+ (API billing) GLB · FBX · USDZ · OBJ Subscription + API add-on
Tripo3D 300 credits/mo ~$0.15–0.21 (via Pro plan credits) GLB · FBX · OBJ · STL Subscription (Pro $19.90/mo)
Rodin (Hyper3D) Limited trial ~$0.30–1.50 (quality-dependent) GLB · FBX Credits or subscription
CSM (Cube) Platform shut down January 2026 — see CSM alternatives

Pricing verified from each rival's public pricing page May 2026. PixelAPI's per-model price is set at exactly half the cheapest mainstream API rival per our pricing principle.

What you get back

GLB (binary glTF)

Single self-contained binary. Works natively in Three.js, Babylon.js, <model-viewer>, Unity, Unreal, Blender, iOS Quick Look, and Android Scene Viewer. Best for web and AR deployments.

OBJ (Wavefront)

Classic open format with separate .obj, .mtl, and texture image files. Compatible with every 3D tool ever made: Maya, 3ds Max, Cinema 4D, SketchUp, ZBrush.

Both at once

Pass format=all to receive a files object containing both GLB and OBJ download URLs in a single generation — one credit charge covers both.

Texture resolution control

Set texture_size=512 for fast previews, texture_size=1024 for production e-commerce, or texture_size=2048 for high-fidelity game assets and print catalogs.

How the async job system works

3D generation is compute-intensive and takes 30–60 seconds. The endpoint is intentionally asynchronous to avoid HTTP timeout issues in serverless and mobile clients:

  1. POST your image to /v1/3d/generate → receive generation_id and status=queued immediately.
  2. Poll GET /v1/3d/status/{generation_id} every 2–5 seconds until status=completed or status=failed.
  3. Download the 3D model from output_url (GLB) or from the files dict (GLB + OBJ URLs) in the completed response.

The Python and Node SDKs provide a wait_for_3d() / waitFor3d() helper that handles the polling loop and exponential backoff automatically.

Common workflows

The image-to-3D API is the foundation for these production workflows. Each links to a setup guide:

E-commerce 3D

Batch-convert product photos to GLB models for WebGL viewers and AR try-before-you-buy.

Home décor & furniture

Upload catalog shots, get AR-ready models for room placement apps instantly.

Jewelry & accessories

360° textured models from a single product photo for immersive PDPs.

Electronics

3D product renders for spec sheets, assembly guides, and configurators.

Marketplace platforms

Automate 3D generation for every seller listing at scale.

Marketing agencies

Rapid 3D asset creation for client campaigns without a 3D artist on staff.

Sports & outdoors

Equipment and gear models for product comparisons and interactive lookbooks.

Watches & luxury

High-resolution texture maps for premium product presentation at 2048×.

Furniture catalogs

Rapid SKU digitization from warehouse shots for IKEA-style room planners.

More 3D use-case guides: all industries →

Integrations & SDKs

Shopify

Auto-generate GLB models on product upload via webhook. Embed with <model-viewer>.

WooCommerce

WordPress plugin pattern: trigger 3D generation on product publish.

Webflow

CMS collection automation + custom code embed for 3D model viewer.

Next.js

Server action pattern: generate 3D server-side, stream download URL to client.

Zapier

No-code trigger: new product row in Airtable → 3D model → saved to Google Drive.

Make.com

Visual automation for 3D batch pipelines without writing code.

Comparison vs alternatives

vs Tripo3D

PixelAPI is 15–21× cheaper per model and requires no subscription. Tripo has more output formats (FBX, STL); PixelAPI is the right pick for high-volume API workloads.

vs Meshy

2× cheaper per API call. Same GLB/OBJ output. Meshy offers FBX and USDZ if you need Apple ecosystem formats; PixelAPI is lower cost for web/AR pipelines.

vs Rodin (Hyper3D)

30–150× cheaper depending on Rodin quality tier. Rodin produces higher polygon counts; PixelAPI targets production-ready real-time meshes for web and e-commerce.

vs CSM

CSM's Cube platform shut down January 2026. PixelAPI is the maintained, supported alternative for image-to-3D generation via REST API.

Rate limits & error handling

Default 60 requests/minute on the free tier, 600 on paid tiers. Exceeding the limit returns HTTP 429 with a Retry-After header. Use exponential backoff starting at 2 seconds. The Python and Node SDKs handle this automatically.

Generation timeouts return HTTP 504 and credits are refunded. Failed jobs (status=failed) also trigger automatic credit refunds — you never pay for an incomplete result.

# Python: auto-retry on 429, auto-refund on failure
from pixelapi import PixelAPI
client = PixelAPI(api_key="...", max_retries=4)

job = client.generate_3d(image="product.jpg", format="glb")
result = client.wait_for_3d(job["id"])  # auto-polls, auto-retries

if result["status"] == "completed":
    print(result["output_url"])
elif result["status"] == "failed":
    print("Job failed — credits automatically refunded")

Frequently asked questions

What is a photogrammetry API?

A photogrammetry API reconstructs a 3D model from one or more photographs via an HTTP call. You POST an image, the service infers depth and geometry, and returns a textured mesh in GLB or OBJ format — no local processing, no 3D software required.

How does PixelAPI image-to-3D compare to Tripo3D?

PixelAPI charges $0.01 per model with no subscription, versus Tripo3D's Pro plan which works out to ~$0.15–0.21 per model via subscription credits. Both return textured meshes from a single image. PixelAPI is the better choice for API-driven pipelines; Tripo3D has a richer consumer web interface.

What does the image-to-3D API cost?

$0.01 per 3D model (10 credits; 1 credit = $0.001). New accounts get 500 free credits — enough for 50 models — with no credit card. No monthly subscription: you pay only for what you generate.

What 3D output formats does the API return?

GLB (binary glTF), OBJ (Wavefront), or both via format=all. Textures are baked at texture_size 512×, 1024×, or 2048×. GLB is the recommended format for web and AR; OBJ for traditional DCC pipelines.

How fast is the image-to-3D generation?

Average 30–60 seconds per model. The endpoint is asynchronous — POST the image, get a job ID, then poll /v1/3d/status/{id} until status=completed. Most jobs finish within 45 seconds.

What image formats are accepted as input?

JPEG, PNG, and WEBP, up to 50 MB. A single clean product photo is sufficient — no multi-view capture rig needed. For best results: neutral background, even lighting, full object visible.

Is there a Python SDK?

Yes — pip install pixelapi. Official SDKs cover Python, Node.js (npm install pixelapi), PHP (Composer), Ruby (Gem), and Go. All handle authentication, async polling, retry-on-429, and binary file download.

What are the rate limits?

Free tier: 60 requests/minute. Paid tiers: 600 requests/minute. Need more for large batch pipelines? Email [email protected] with your expected volume.

What happens if a generation job fails?

Credits are automatically refunded. The job returns status=failed with an error_message. The 10-credit charge ($0.01) is reversed immediately — you never pay for a job that didn't complete successfully.

Can I use the API for e-commerce product 3D models?

Yes. Standard workflow: product photo → POST to /v1/3d/generate → download GLB → embed in a <model-viewer> web component or export to AR via iOS Quick Look or Android Scene Viewer. See the e-commerce 3D use case guide.

Do I need a credit card to start?

No. Sign up with an email address, receive 500 free credits (50 models), no card needed until you exhaust the free tier.

How does the async job system work?

POST returns a generation_id and status=queued immediately. Poll GET /v1/3d/status/{id} every 2–5 seconds. When status=completed, the response contains output_url (GLB) and a files object with all format URLs. Python and Node SDKs handle polling automatically via wait_for_3d().

Start free — 500 credits, no card Read full API docs Compare all plans