Submit an image for scoring
Send an image URL through the standard scoring pipeline.
/v1/images/scoreSubmits a standalone image for asynchronous scoring. The response
returns immediately with an image_id and status: PROCESSING; use
Retrieve an image score to poll for the
result.
Hero images additionally return hero_gs1_components alongside the
composite vizit_score.
Carousel images classified as an informational asset type are not
scored — they resolve to error_code: IMAGE_OMITTED_FROM_SCORING
(see Retrieve an image score). Hero
submissions are always scored.
Authorization
bearerAuth Short-lived access token issued by Create a token.
Send it on every request as Authorization: Bearer <token>.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Publicly accessible image URL (HTTP/HTTPS, jpeg/png/webp, ≤25 MB)
uriCategory UUID the image belongs to. Must be one returned by
List product categories —
if it doesn't exist or the organization lacks ICP access, the
request is rejected with CATEGORY_NOT_IN_ORG_ICP.
uuidRole the image plays in a listing. Both image types return
vizit_score, vizit_certified, and classification; hero
images additionally return hero_gs1_components.
"hero" | "carousel"Response Body
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://ext.vizit.com/v1/images/score" \ -H "Content-Type: application/json" \ -d '{ "image_url": "https://cdn.example.com/products/abc/hero.jpg", "product_category_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "image_type": "hero" }'{ "image_id": "84c230fd-5520-4984-8119-37365b66fd80", "status": "PROCESSING", "error_code": "IMAGE_OMITTED_FROM_SCORING", "error_detail": "string", "vizit_score": 0, "vizit_certified": true, "hero_gs1_components": { "four_ws.brand": 92, "four_ws.product_type": 88, "four_ws.variant": 74, "four_ws.size_and_count": 75, "image_quality.background_separation": 95, "image_quality.product_centered": 90, "image_quality.product_prominent": 93, "image_quality.product_cropping": 97, "image_quality.product_tilt": 98, "image_quality.no_off_pack_text": 100, "composition": 84, "layout_staging": 81 }, "hero_gs1_component_statuses": { "four_ws.brand": "PASS", "four_ws.product_type": "REVIEW", "four_ws.variant": "REVIEW", "four_ws.size_and_count": "REVIEW", "image_quality.background_separation": "REVIEW", "image_quality.product_centered": "REVIEW", "image_quality.product_prominent": "REVIEW", "image_quality.product_cropping": "REVIEW", "image_quality.product_tilt": "REVIEW", "image_quality.no_off_pack_text": "PASS", "composition": "HIGH", "layout_staging": "HIGH" }, "hero_gs1_group_statuses": { "shopper_clarity": "REVIEW", "image_quality": "REVIEW", "composition": "HIGH", "product_staging": "HIGH" }, "agent_ready": true, "mobile_ready": true, "classification": "Lifestyle"}{ "detail": "string", "status_code": 0, "error_code": "IMAGE_DOWNLOAD_FAILED", "request_id": "266ea41d-adf5-480b-af50-15b940c2b846", "extra": { "failed_urls": [ { "url": "https://cdn.example.com/broken.jpg", "reason": "IMAGE_DOWNLOAD_TIMEOUT" }, { "url": "https://cdn.example.com/icon.svg", "reason": "UNSUPPORTED_IMAGE_FORMAT" } ] }, "timestamp": "2019-08-24T14:15:22Z"}{ "detail": "string", "status_code": 0, "error_code": "IMAGE_DOWNLOAD_FAILED", "request_id": "266ea41d-adf5-480b-af50-15b940c2b846", "extra": { "failed_urls": [ { "url": "https://cdn.example.com/broken.jpg", "reason": "IMAGE_DOWNLOAD_TIMEOUT" }, { "url": "https://cdn.example.com/icon.svg", "reason": "UNSUPPORTED_IMAGE_FORMAT" } ] }, "timestamp": "2019-08-24T14:15:22Z"}{ "detail": "string", "status_code": 0, "error_code": "IMAGE_DOWNLOAD_FAILED", "request_id": "266ea41d-adf5-480b-af50-15b940c2b846", "extra": { "failed_urls": [ { "url": "https://cdn.example.com/broken.jpg", "reason": "IMAGE_DOWNLOAD_TIMEOUT" }, { "url": "https://cdn.example.com/icon.svg", "reason": "UNSUPPORTED_IMAGE_FORMAT" } ] }, "timestamp": "2019-08-24T14:15:22Z"}{ "detail": "string", "status_code": 0, "error_code": "IMAGE_DOWNLOAD_FAILED", "request_id": "266ea41d-adf5-480b-af50-15b940c2b846", "extra": { "failed_urls": [ { "url": "https://cdn.example.com/broken.jpg", "reason": "IMAGE_DOWNLOAD_TIMEOUT" }, { "url": "https://cdn.example.com/icon.svg", "reason": "UNSUPPORTED_IMAGE_FORMAT" } ] }, "timestamp": "2019-08-24T14:15:22Z"}GETDownload an export artifact
Streams the CSV artifact for a `COMPLETED` export. Uses the same Bearer token as every other endpoint — no presigned URL, no embedded credentials. The path itself is what `download_url` on [Retrieve an export](/api/exports/getExport) points at. Response shape: - `Content-Type: text/csv` - `Content-Disposition: attachment; filename="<subject>-<timestamp>.csv"` - Body is the raw CSV (header row + data rows, UTF-8, `\n` line separator) Returns `404` with a typed `error_code` for every error state — cross-org access is intentionally indistinguishable from a missing or expired export so foreign `export_id`s never leak existence: - `EXPORT_NOT_FOUND` — does not exist in the caller's org - `EXPORT_NOT_READY` — exists but `status` is still `PROCESSING` - `EXPORT_EXPIRED` — artifact has been purged past its 7-day retention
GETRetrieve an image score
Returns the current scoring state of an image previously sent to [Submit an image for scoring](/api/images/scoreImage). Poll until `status` leaves `PROCESSING`; `ERROR` responses carry `error_code` and `error_detail`. Hero images additionally return `hero_gs1_components` alongside `vizit_score`. Carousel images classified as an informational asset type (Alternate Product Views, Certification Mark, Included Items, Info Panel, Multi-Pack, Product Facts Panel, Size and Scale) are not scored and resolve to `error_code: IMAGE_OMITTED_FROM_SCORING`, with `classification` naming the type. Standalone product shots on a plain background may classify as Alternate Product Views; hero submissions are always scored.