Spoken API · 2026-09-04
A photograph in.
Every component out.
Spoken identifies the things in a photo of a setup — a bike, a home gym, a running kit — and returns them as structured data: brand, model, price, where to buy, and coordinates on the image. If your product has a page where people show their gear, this fills it.
Quickstart
One call, and you have a bill of materials
curl -X POST https://dev.spoken.fyi/api/v1/scan \
-H "Authorization: Bearer $SPOKEN_KEY" \
-H "Content-Type: application/json" \
-d '{ "photos": ["https://your-cdn.example/bike.jpg"] }'{
"scan_id": "…",
"parts": [
{
"index": 0,
"brand": "Cannondale",
"model": "SuperSix EVO LAB71 Frameset",
"category": "frame",
"confidence": 95,
"price": 4652,
"url": "https://…",
"box": { "x": 23.7, "y": 17.8, "w": 45.0, "h": 50.6, "photo": 0 }
}
],
"credits_charged": 300
}box is a percentage of the source photo, not of whatever element you render it in — letterbox it yourself and the pins land correctly at any aspect ratio. Send image URLs rather than base64 when you have them: a request body carrying base64 photos is capped at about 4 MB, while a URL is a few bytes and we fetch it.
Endpoints
/api/v1/scan300 credits · $3.00Photos in, itemized build (BOM) out. JSON by default; `stream: true` for server-sent progress.
/api/v1/parts/identify5 credits · $0.05One component photo → brand + model candidates.
/api/v1/builds/{id}freeA public build record: parts, prices, buy links, pin geometry, media.
/api/v1/catalog/search?q=freeSearch the component catalog (parts + brands).
/api/v1/media/video40 credits per second · $0.40/sImage → short cinematic video; poll GET /api/v1/media/video/{job_id}.
Pricing
Prepaid credits. 1 credit = $0.01.
You buy credits; each call spends them. There is no subscription and no invoice surprise: when your balance cannot cover a call, the call is refused with a 402 before any work starts — a hard stop, not an alert after the fact. Reads are free; only the work that costs us money costs you money.
scan
identify
video
reads