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.
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:
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)
PixelAPI's per-model price is set at exactly half the cheapest mainstream rival. No subscription, no monthly commitment.
| Provider | Free tier | Per-model cost | Output formats | API / 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.
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.
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.
Pass format=all to receive a files object containing both GLB and OBJ download URLs in a single generation — one credit charge covers both.
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.
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:
/v1/3d/generate → receive generation_id and status=queued immediately.GET /v1/3d/status/{generation_id} every 2–5 seconds until status=completed or status=failed.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.
The image-to-3D API is the foundation for these production workflows. Each links to a setup guide:
Batch-convert product photos to GLB models for WebGL viewers and AR try-before-you-buy.
Upload catalog shots, get AR-ready models for room placement apps instantly.
360° textured models from a single product photo for immersive PDPs.
3D product renders for spec sheets, assembly guides, and configurators.
Automate 3D generation for every seller listing at scale.
Rapid 3D asset creation for client campaigns without a 3D artist on staff.
Equipment and gear models for product comparisons and interactive lookbooks.
High-resolution texture maps for premium product presentation at 2048×.
Rapid SKU digitization from warehouse shots for IKEA-style room planners.
More 3D use-case guides: all industries →
Auto-generate GLB models on product upload via webhook. Embed with <model-viewer>.
WordPress plugin pattern: trigger 3D generation on product publish.
CMS collection automation + custom code embed for 3D model viewer.
Server action pattern: generate 3D server-side, stream download URL to client.
No-code trigger: new product row in Airtable → 3D model → saved to Google Drive.
Visual automation for 3D batch pipelines without writing code.
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.
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.
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.
CSM's Cube platform shut down January 2026. PixelAPI is the maintained, supported alternative for image-to-3D generation via REST API.
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")
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.
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.
$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.
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.
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.
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.
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.
Free tier: 60 requests/minute. Paid tiers: 600 requests/minute. Need more for large batch pipelines? Email [email protected] with your expected volume.
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.
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.
No. Sign up with an email address, receive 500 free credits (50 models), no card needed until you exhaust the free tier.
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().