01 / PERCEIVE
Read the scene
One vision pass lists every separately purchasable object, what covers what, and the material and form of each — in enough detail to rebuild the parts the camera could not see.
segment · anything
We read the world inside a photograph, cut out the thing you want, and hand you the shelves that hold it. Now as an API, for any category of object.
Three moves
Every request runs the same three moves. Nothing in the middle is a stock photo lookup: each object is genuinely separated from the scene and rebuilt as its own product shot before anything is searched.
01 / PERCEIVE
One vision pass lists every separately purchasable object, what covers what, and the material and form of each — in enough detail to rebuild the parts the camera could not see.
02 / CUT
Each object is extracted on its own, occluders deleted and hidden parts continued, and returned as a clean product image on white. A chair behind a table comes back whole.
03 / MARKET
The cut-out is searched by image against live retail listings, ordered as the search engine ranked it, with the product's title, price, image, and link.
Focus
The pipeline is not about clothes. It is about objects. Send domain to tell it what kind of thing to look for, and the vision prompt, the schema, and the extraction instruction all change with it.
Garments, shoes, bags, and jewellery worn by a person. Layers are separated: a shirt under a vest comes back without the vest.
domain=fashion
Sofas, chairs, tables, lighting, rugs, shelving, and decor. A room photo returns each piece as its own product.
domain=furniture
Phones, laptops, audio, cameras, peripherals, and appliances. A desk photo returns the laptop, the keyboard, the monitor.
domain=devices
Skincare, makeup, fragrance, haircare, and tools. Every bottle and jar on the shelf becomes its own shoppable item.
domain=beauty
No category filter, every distinctly purchasable object in the frame. Add focus to aim it at a category we have not named.
domain=everything
Need something narrower? domain=everything&focus=kitchen appliances only keeps the general reader and points it at one shelf.
The call
A full read takes a few minutes — it is several model calls and a search per object — so the primary endpoint is asynchronous. There is a synchronous one too, for callers that can wait on an open connection.
# 1 — start the read curl -X POST https://inspired.jetskibay.com/api/v1/jobs \ -H "x-api-key: $INSPIRED_KEY" \ -F "image=@living-room.jpg" \ -F "domain=furniture" # { "requestId": "6f1c…", "status": "queued", "statusUrl": "…" } # 2 — poll until it is complete curl https://inspired.jetskibay.com/api/v1/jobs/6f1c… \ -H "x-api-key: $INSPIRED_KEY"
const body = new FormData(); body.append("image", file); body.append("domain", "devices"); const start = await fetch("https://inspired.jetskibay.com/api/v1/jobs", { method: "POST", headers: { "x-api-key": process.env.INSPIRED_KEY }, body, }).then((r) => r.json()); let job; do { await new Promise((r) => setTimeout(r, 3000)); job = await fetch(start.statusUrl, { headers: { "x-api-key": process.env.INSPIRED_KEY }, }).then((r) => r.json()); } while (job.status === "queued" || job.status === "running"); for (const item of job.items) { console.log(item.simple_name, item.candidates[0]?.link); }
import os, time, requests KEY = os.environ["INSPIRED_KEY"] BASE = "https://inspired.jetskibay.com/api/v1" start = requests.post( f"{BASE}/jobs", headers={"x-api-key": KEY}, files={"image": open("desk.jpg", "rb")}, data={"domain": "devices"}, ).json() while True: job = requests.get(start["statusUrl"], headers={"x-api-key": KEY}).json() if job["status"] not in ("queued", "running"): break time.sleep(3) for item in job["items"]: print(item["simple_name"], item["candidates"][0]["link"])
Inside a request
Every unit of paid work is its own durable step. A failure on the fifth object retries the fifth object — it does not replay the vision call and four finished extractions.
STAGE 1
One vision call lists up to six objects with their occlusion, material, and form.
STAGE 2
One image edit per object, run one at a time, each returned as a product shot on white.
STAGE 3
An object's search starts as soon as its cut is ready, while the next one is still extracting.
STAGE 4
Results are deduplicated, low-value hosts dropped, and the engine's ordering preserved.
STAGE 5
The cuts are composed into one square board and the whole result is stored for retrieval.
Get started
Enter your email and we send a key that works for 10 requests and expires in 24 hours. We store a hash of the key, never the key itself, so it is shown in that email and nowhere else.
Asking again before it expires re-issues a key with whatever is left of the allowance, so losing one costs nothing and asking twice buys nothing. Ready for production volume? Talk to us.