REST API · Open Source Model

Open Source Photogrammetry API

A production REST API that converts a single photo into a 3D mesh model using an Apache 2.0 licensed open-source reconstruction model. One HTTP call, one 3D file. The open source photogrammetry API delivers GLB or OBJ output at $0.010 per model — half the pay-as-you-go rate of Meshy. 5,000 free trial credits (7-day trial), no credit card required.

$0.010 / model GLB + OBJ output 5,000 free trial credits No credit card 50 MB max input Apache 2.0 model
Get an API key (free) Quick start See pricing API docs

How the open source photogrammetry API works

Upload a JPEG, PNG, or WebP photo and receive a fully textured 3D mesh. The API reconstructs depth, geometry, and surface texture from a single image — no multi-angle capture or special hardware required. The underlying reconstruction model is released under the Apache 2.0 open-source license; PixelAPI hosts it as a managed inference API so you get production reliability without managing GPU infrastructure.

  1. POST your image to https://api.pixelapi.dev/v1/3d/generate
  2. Receive a generation_id immediately
  3. Poll GET /v1/3d/status/{id} until status=completed
  4. Download your GLB or OBJ from output_url

Quick start — one API call

Sign up, copy your key from the dashboard, and POST your product image. The endpoint returns a generation id; poll until status=completed, then download your 3D model file.

curl -X POST https://api.pixelapi.dev/v1/3d/generate \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "image=@product.jpg" \
  -F "format=glb" \
  -F "texture_size=1024"
# Response: {"generation_id": "uuid", "status": "queued", "credits_used": 10}

# Poll until completed
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
---
from pixelapi import PixelAPI

client = PixelAPI(api_key="YOUR_API_KEY")
result = client.image_to_3d(
    image="product.jpg",
    format="glb",        # "glb", "obj", or "all"
    texture_size=1024    # 512, 1024, or 2048
)
result.save("product.glb")  # downloads GLB to disk
npm install pixelapi
---
import { PixelAPI } from "pixelapi";

const client = new PixelAPI({ apiKey: process.env.PIXELAPI_KEY });
const result = await client.imageTo3d({
  image: "./product.jpg",
  format: "glb",
  textureSize: 1024,
});
await result.save("product.glb"); // downloads GLB to disk
composer require pixelapi/pixelapi
---
<?php
use PixelAPI\Client;

$client = new Client(getenv("PIXELAPI_KEY"));
$result = $client->imageTo3d([
    "image"        => "product.jpg",
    "format"       => "glb",
    "texture_size" => 1024,
]);
file_put_contents("product.glb", $result->getBody());
gem install pixelapi
---
require "pixelapi"

client = PixelAPI::Client.new(api_key: ENV["PIXELAPI_KEY"])
result = client.image_to_3d(
  image: "product.jpg",
  format: "glb",
  texture_size: 1024
)
File.binwrite("product.glb", result.body)
go get github.com/pixelapi/pixelapi-go
---
import "github.com/pixelapi/pixelapi-go"

client := pixelapi.New("YOUR_API_KEY")
result, err := client.ImageTo3D(pixelapi.ImageTo3DParams{
    Image:       "product.jpg",
    Format:      "glb",
    TextureSize: 1024,
})
if err != nil { panic(err) }
result.Save("product.glb")

Pricing — half the cost of Meshy

ProviderFree tierPer-model costOpen source modelOutput formats
PixelAPI 5,000 credits (7-day trial), no card $0.010 ✓ Apache 2.0 GLB · OBJ · all
Meshy 100 credits/mo (subscription) $0.020 (20 credits × $0.001) Proprietary GLB · OBJ · FBX · USDZ
Tripo3D Limited free tier see tripo3d.ai/pricing Proprietary GLB · OBJ · FBX
Rodin (Hyper3D) Subscription credits see hyper3d.ai/pricing Proprietary GLB · OBJ · FBX · STL
CSM Free tier (limited) see 3d.csm.ai Proprietary GLB · OBJ

Meshy pricing verified from docs.meshy.ai/en/api/pricing October 2026. PixelAPI per-model price is set at exactly half the cheapest verified rival rate per our pricing rule. Rival prices listed as "see pricing" were not independently verifiable at time of publish — check their pages directly.

What you get back

GLB — binary glTF (default)

A single self-contained file with geometry, materials, and texture baked in. Loads directly into <model-viewer>, Three.js, Babylon.js, Unity, Unreal, Blender, and Apple AR Quick Look without extra steps.

OBJ + MTL

Classic mesh format for DCC pipelines. Pass format=obj to receive an .obj and its .mtl material file. Compatible with every 3D modelling and rendering tool released in the last 20 years.

Both formats at once

Pass format=all to receive GLB and OBJ in a single call. The files object in the response contains keys glb and obj, each with a signed download URL.

Texture resolution control

Choose texture_size=512 for fast AR thumbnails, 1024 (default) for product pages, or 2048 for high-detail configurators. All textures are UV-unwrapped and baked from your input photo.

Common workflows

The open source photogrammetry API fits into these production workflows. Each links to a setup guide:

Product 3D for ecommerce

Automate per-SKU 3D model creation from product catalog photos. Feed GLB assets into Shopify 3D media or BigCommerce AR.

Clean photo → better mesh

Remove the product background first for sharper geometry reconstruction, then pass the transparent PNG to the 3D endpoint.

3D renders for ad creative

Generate 3D assets, render from any angle, then use PixelAPI's ad-creative endpoint to composite into campaign imagery.

Upscale → 3D pipeline

Upscale low-resolution product photos to 4× before sending to the 3D API — more detail in, more detail out.

Game asset pipeline

Generate GLB assets from concept art or product renders for rapid prototyping in Unity or Unreal Engine projects.

AR try-before-you-buy

Feed GLB models into <model-viewer> for web AR, or into AR Quick Look on iOS, to let shoppers place products in their space.

Integrations & SDKs

Shopify

Auto-generate 3D models from product photos on upload via webhook, then attach them as Shopify 3D media.

BigCommerce

Bulk 3D asset creation for BigCommerce product catalog pages with AR viewer support.

WooCommerce

WordPress plugin pattern for auto-generating 3D GLB assets from WooCommerce product images.

Make.com

No-code automation: trigger 3D generation from Google Sheets, Airtable, or any webhook in Make scenarios.

Next.js

Server-side 3D generation in Next.js API routes with model-viewer rendering on the frontend.

Webflow

Embed 3D product viewers in Webflow CMS collection pages via the <model-viewer> custom embed.

Comparison vs alternatives

vs Meshy

PixelAPI is half Meshy's pay-as-you-go rate ($0.010 vs $0.020/model). Meshy offers more output formats (FBX, USDZ) but charges more per generation and uses a proprietary model.

vs Tripo3D

Tripo3D has a polished web UI; PixelAPI is pure REST API with open-source foundations and predictable per-model pricing.

vs Rodin

Rodin (Hyper3D) targets high-fidelity asset studios. PixelAPI targets developer pipelines with simple per-call billing and SDK support.

vs CSM

Common Sense Machines focuses on multi-view reconstruction. PixelAPI reconstructs from a single image with transparent per-call pricing.

Rate limits & error handling

20 requests/minute on the free trial, 60 on Starter, 120 on Pro, and 300 on Scale — with 3, 10, 20, and 50 concurrent jobs respectively. Exceeding the limit returns HTTP 429 with a Retry-After header. For 3D generation specifically, each job can take 30–90 seconds; the concurrent-jobs limit matters more than the per-minute rate. Recommended: submit jobs in batches matching your concurrent-jobs allowance and poll each one asynchronously.

# Python SDK — async batch with auto-retry on 429
from pixelapi import PixelAPI
import asyncio

client = PixelAPI(api_key="...", max_retries=4)

async def process(path):
    return await client.image_to_3d_async(image=path, format="glb")

results = asyncio.run(asyncio.gather(*[
    process(f"product_{i}.jpg") for i in range(10)
]))

Failures return HTTP 5xx with an error_message field. Credits are auto-refunded for any failed generation — you never pay for a broken mesh. The SDK raises a PixelAPIError with the same detail.

Frequently asked questions

What is a photogrammetry API?

A photogrammetry API accepts a photograph as input and returns a 3D mesh model (GLB or OBJ) reconstructed from that image. It uses AI-driven depth estimation and geometry reconstruction to infer 3D structure from a single 2D photo — no multi-view camera rig required. POST your image to the endpoint, poll for completion, and download the 3D file.

What does "open source" mean for this photogrammetry API?

PixelAPI's image-to-3D pipeline is built on an Apache 2.0 licensed open-source 3D reconstruction model. The underlying model weights and architecture are publicly available. PixelAPI wraps that model in a production REST API with authentication, credit billing, rate limiting, and a hosted compute layer — so developers get production reliability without managing inference infrastructure themselves.

How do I use the open source photogrammetry API?

POST your image (JPG, PNG, or WebP, up to 50 MB) to https://api.pixelapi.dev/v1/3d/generate with your API key in the Authorization: Bearer header. Optionally pass format=glb (default), format=obj, or format=all, plus texture_size=512, 1024, or 2048. The endpoint returns a generation_id. Poll GET /v1/3d/status/{id} until status=completed, then download from output_url. See the Quick Start section above for code in 6 languages.

What does the open source photogrammetry API cost?

$0.010 per 3D model — 10 credits at $0.001 per credit. New accounts get 5,000 free trial credits (7-day trial) with no credit card required, enough for 500 test generations on real product data. After the trial, credits are available in prepaid bundles from $10 (10,000 credits). This is half the pay-as-you-go rate of Meshy ($0.020/model).

What 3D output formats are supported?

GLB (binary glTF) is the default — a single self-contained file that loads directly into Three.js, Babylon.js, <model-viewer>, Unity, Unreal Engine, Blender, and AR Quick Look. OBJ + MTL is also supported for DCC pipelines. Pass format=all to receive both GLB and OBJ in one call from the same output_url response.

How long does it take to generate a 3D model from a photo?

Average generation time is 30–90 seconds depending on input image size and requested texture resolution. There are no cold-start delays — capacity is kept warm 24/7. Use the polling endpoint GET /v1/3d/status/{id} to check progress; the Python and Node SDKs handle polling automatically with configurable poll intervals.

What image formats are accepted as input?

JPEG, PNG, and WebP are all accepted. Maximum file size is 50 MB. For best mesh quality, submit a clean product photo with good lighting, a plain or transparent background, and the subject fully in frame. A background-removed PNG (using PixelAPI's remove-background endpoint) typically improves 3D reconstruction accuracy by removing background geometry noise.

Is there a Python SDK for the photogrammetry API?

Yes — pip install pixelapi. The SDK handles authentication, multipart upload, polling, and retry-on-429 automatically. Official SDKs are also available for Node.js (npm install pixelapi), PHP (Composer), Ruby (Gem), and Go (go get github.com/pixelapi/pixelapi-go). The SDK returns the local file path after downloading the 3D model.

What texture resolution should I choose?

512×512 is fast and suitable for real-time AR overlays and product thumbnails. 1024×1024 (default) is the best balance for ecommerce product pages and game asset previews. 2048×2048 gives the sharpest texture detail for close-up product configurators or high-quality renders — but takes longer to generate. All options are the same price.

What are the API rate limits?

20 requests/minute on the free trial, 60 on Starter, 120 on Pro, and 300 on Scale — with 3, 10, 20, and 50 concurrent jobs respectively. Exceeding the limit returns HTTP 429 with a Retry-After header. Higher limits for batch processing: email support@pixelapi.dev with your expected volume.

Can I use the photogrammetry API for ecommerce AR?

Yes. The GLB output loads directly into <model-viewer> for web AR and into Apple's AR Quick Look and Google's Scene Viewer for mobile AR. For Shopify stores, the integration guide at ai-3d-models-shopify.html shows how to auto-generate 3D assets from product photos on upload and attach them as Shopify 3D media.

What happens if a 3D generation fails?

Failed generations are detected automatically and credits are refunded in full — you never pay for a broken or empty mesh. The job status endpoint returns status=failed with an error_message field; the SDK raises a PixelAPIError with the same detail so your error handler can log or retry accordingly.

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