Skip to content

Developers · API

Dress any product in
one API call.

The same engine behind the NoShot app, exposed as a clean REST API. Send a product image, get photoreal on-model renders and clean masks back — in seconds, at catalog scale.

Host
api.noshot.co
Call
POST /v1/generate
live
200 OK · 4 renders · 4K + masks
en

<15s

per image

4K

clean masks

4

endpoints

500+

brands building

Why the API

Production imagery, as an endpoint

Everything the app does, callable from your build pipeline, PIM or storefront — no upload UI, no manual art direction.

01

Programmatic on-model imagery

One POST turns a flat product shot into photoreal on-model renders. Pick the model, pose, light and scene as parameters — not clicks.

02

Batch at catalog scale

Push thousands of SKUs through /v1/batch in a single request. Same credits, one job to track — built for marketplace-sized volume.

03

4K exports, clean masks

Every render ships at up to 4K with a pixel-accurate alpha mask — ready to composite or drop straight onto a product page.

04

Webhooks, not polling

Subscribe to job.succeeded and we POST the finished URLs to your endpoint the moment they are ready. No busy loops.

Quickstart

Your first render in one request

Authenticate with a bearer token, POST a product image with model and scene params, then poll the job or catch the webhook. Here is the whole round-trip.

Request

cURLPOST /v1/generate
curl -X POST https://api.noshot.co/v1/generate \
  -H "Authorization: Bearer $NOSHOT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "product_image_url": "https://cdn.yourbrand.com/sku/8842-front.jpg",
    "category": "apparel",
    "model": { "gender": "female", "body": "medium", "skin_tone": "III" },
    "scene": { "preset": "studio-daylight", "background": "seamless-bone" },
    "output": { "count": 4, "resolution": "4k", "mask": true }
  }'
NodePOST /v1/generate
import NoShot from "@noshot/sdk";

const noshot = new NoShot({ apiKey: process.env.NOSHOT_API_KEY });

const job = await noshot.generate({
  productImageUrl: "https://cdn.yourbrand.com/sku/8842-front.jpg",
  category: "apparel",
  model: { gender: "female", body: "medium", skinTone: "III" },
  scene: { preset: "studio-daylight", background: "seamless-bone" },
  output: { count: 4, resolution: "4k", mask: true },
});

console.log(job.id, job.status); // "job_9f8c2a1b7d", "succeeded"
PythonPOST /v1/generate
import os
from noshot import NoShot

noshot = NoShot(api_key=os.environ["NOSHOT_API_KEY"])

job = noshot.generate(
    product_image_url="https://cdn.yourbrand.com/sku/8842-front.jpg",
    category="apparel",
    model={"gender": "female", "body": "medium", "skin_tone": "III"},
    scene={"preset": "studio-daylight", "background": "seamless-bone"},
    output={"count": 4, "resolution": "4k", "mask": True},
)

print(job.id, job.status)  # "job_9f8c2a1b7d", "succeeded"

Response

JSON200 OK
{
  "id": "job_9f8c2a1b7d",
  "status": "succeeded",
  "credits_used": 4,
  "images": [
    {
      "url": "https://cdn.noshot.co/v1/renders/9f8c2a1b7d/01.png",
      "width": 3072,
      "height": 4096,
      "mask_url": "https://cdn.noshot.co/v1/renders/9f8c2a1b7d/01-mask.png"
    },
    {
      "url": "https://cdn.noshot.co/v1/renders/9f8c2a1b7d/02.png",
      "width": 3072,
      "height": 4096,
      "mask_url": "https://cdn.noshot.co/v1/renders/9f8c2a1b7d/02-mask.png"
    }
  ],
  "created_at": "2026-07-22T09:41:20Z"
}

Illustrative — see the live reference in the app for the full parameter set and every scene preset.

One call, both ends

Silk column gown — Bias-cut ivory silk, beaded neckline
InputSilk column gown
Silk column gown — Every bead where you placed it
Output3072 × 4096

Endpoints

A small surface, on purpose

Four endpoints cover the whole lifecycle — generate, check, batch, discover.

POST
/v1/generateCreate a render job from one product image plus your model and scene params.
GET
/v1/jobs/{id}Poll a job for its status, image URLs and mask URLs.
POST
/v1/batchQueue many SKUs in a single request for catalog-scale runs.
GET
/v1/modelsList the available model presets, body types, skin tones and scenes.

Rate limits & pricing

Credit-based, and simple

One image is one credit — that is the whole pricing model.

01
1 image = 1 credit. Extra renders in a request draw from the same balance.
02
Failed or rejected renders are never charged.
03
Every response returns an X-Credits-Remaining header so you can meter usage.
04
Rate limits scale with your plan; Enterprise lifts them entirely.
PlanImagesRate limit
Free1030 req/min
Starter100 / mo60 req/min
StudioMost popular400 / mo120 req/min
EnterpriseUnlimitedCustom

Credits come from your NoShot plan — see the full tiers on the pricing page.

Full reference

The complete docs live in the app

Every parameter, webhook event, error code and official SDK — versioned and interactive — sits in your dashboard. Grab a key and the reference opens right beside it.

Ship on-model imagery,
programmatically.

Create a key in the app and make your first call in minutes. Free tier included — no card.