Vizit Public APIAPI
Images

Submit an image for scoring

Send an image URL through the standard scoring pipeline.

POST/v1/images/score

Submits 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
Authorization<token>

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.

image_url*string

Publicly accessible image URL (HTTP/HTTPS, jpeg/png/webp, ≤25 MB)

Formaturi
product_category_id*string

Category 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.

Formatuuid
image_type*string

Role the image plays in a listing. Both image types return vizit_score, vizit_certified, and classification; hero images additionally return hero_gs1_components.

Value in"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"}
Empty
{  "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"}
Empty
{  "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.