API · v1

Build on
Atelier Noir.

A small, honest REST API: send a product photo, get on-model frames and clips back. Usage counts against your plan, exactly like the studio.

Authentication

Create a key in Studio → Settings → API & webhooks (owners and admins). Send it as a Bearer token. Keys are shown once and stored hashed.

curl -X POST https://ateliernoir.ai/api/v1/generations \
  -H "Authorization: Bearer an_live_…" \
  -H "Content-Type: application/json" \
  -d '{"image_url":"https://your-cdn.com/product.jpg","frames":3}'
POST/generations

Start a generation from a product photo URL. The image is downloaded, antivirus-scanned and checked like a studio upload.

{
  "image_url": "https://your-cdn.com/product.jpg",
  "frames": 3,            // 1–8, uses frame credits
  "model_id": "ml2609_greta",  // optional, defaults to your house model
  "set_id": "bg2209_resort_santorini", // optional
  "title": "SS27 · linen dress"
}
202 { "id": "cm…", "status": "queued", "poll": "/api/v1/generations/cm…" }
GET/generations/{id}

Status, frames (with quality-check result) and clips.

{ "status": "completed", "frames": [{ "index": 1, "shot": "Full body", "url": "https://…/frame-001.jpg", "quality_check": "ok" }], "clips": [] }
POST/generations/{id}/clips

Make a clip from a finished frame. Uses clip credits: reveal 1, motion 2, spin 2, runway 3.

{ "style": "runway", "frame_index": 1 }
202 { "id": "cm…", "status": "processing" }
GET/models

Active models in the library (id, name, tags, image).

{ "models": [ … ] }
GET/sets

Active sets in the library (id, name, category, image).

{ "sets": [ … ] }

Errors: 401 invalid key · 402 not enough frames or clip credits · 409 not ready · 400 invalid input (with a message).

Limits: image_url must be a public http(s) address, up to 25 MB, JPG/PNG/WEBP/HEIC. Poll every few seconds; frames take a minute or two, clips about three minutes.

Shopify: connect your store in Settings → Integrations to send frames straight to a product, from the studio.