Explaining API and Webhook Response
Sample Response:
{
"vin": "M64QSUZG39P400000",
"source": "console",
"dealerId": "e2adca58-66bc-4d56-ad16-f73823af9ba1",
"dealerVinID": "e2adca58-66bc-4d56-ad16-f73823af9ba1",
"mediaData": {
"image": {
"aiStatus": "DONE",
"qcStatus": "qc_done",
"rejectReason": null,
"failReason": null,
"imageData": [
{
"angle": 270,
"status": "Done",
"frameNo": "1",
"imageId": "img-736d959a-00b3-40cb-9c96-31eafec2e73d",
"imageName": "74ccc7e1-4ad9-44b4-a9f0-a671d4807d99",
"inputImage": "https://spyne-media.s3.amazonaws.com/2025-01-22/ebc8485a-eda7-432d-b20a-98a61264bf51.jpeg",
"outputImage": "https://spyne-media.s3.amazonaws.com/2025-01-22/car_replace_bg_4af789dd-8667-489b-a45d-cda94be7833d.jpg",
"backgroundId": "85879",
"rejectReason": null,
"category": "Exterior",
"clientMetaData": {}
},
{
"angle": 320,
"status": "Done",
"frameNo": "2",
"imageId": "img-c0d1294e-cc1c-4181-9282-d13c3049c7a7",
"imageName": "a36d65a4-7cb5-4600-b572-cf78961247f9",
"inputImage": "https://spyne-media.s3.amazonaws.com/2025-01-22/0b22d7d4-252a-4039-b99a-53976995ce6b.jpeg",
"outputImage": "https://spyne-media.s3.amazonaws.com/2025-01-22/car_replace_bg_650da078-416f-4ef4-9f5d-0865cff77137.jpg",
"backgroundId": "85879",
"rejectReason": null,
"category": "Exterior",
"clientMetaData": {}
}
]
},
"spin": {
"aiStatus": "DONE",
"qcStatus": "qc_done",
"rejectReason": null,
"failReason": null,
"irameUrl": "https://assets.spyne.ai/360?sku_id=174797042a304189ade91903c9bb909a&hotspot=false&hideConfig=true",
"thumbnailUrl": "https://spyne-media.s3.amazonaws.com/2025-01-20/0afba6f9-e56a-45ac-9f08-ef893ac3c8aa.jpg"
},
"video":{
"videoId": "vid-ce92c677d67e4772be2ab39ee28b285f",
"aiStatus": "DONE",
"qcStatus": "qc_done",
"rejectReason": null,
"failReason": null,
"iFrameUrl": "https://assets.spyne.ai/sku_id=f032881b823f42438862ce306c29b6f4&version=v2"
}
}
}
Top-Level Fields
Field | Description |
---|---|
vin | Vehicle Identification Number submitted for transformation |
source | The origin of the request, such as console , sdk , or api |
dealerId | Unique ID of the dealer who initiated the transformation. Also known as team id in spyne's ecosystem. |
dealerVinID | Internal Spyne ID assigned to this transformation session. This is a unique id for each vehicle. |
mediaData | Contains media output sections: image , spin , and video |
mediaData.image
mediaData.image
Field | Description |
---|---|
aiStatus | AI processing result: DONE , PROCESSING , or FAILED |
qcStatus | Manual Quality Check status: qc_done , pending , or rejected |
rejectReason | Explanation if image QC failed, otherwise null |
imageData[] | Array of images with transformation metadata |
imageData[]
Entry:
imageData[]
Entry:Field | Description |
---|---|
angle | Shooting angle of the image (e.g., 270 ) |
frameNo | Sequence number of the frame |
imageId | Internal Spyne's ID for the image |
inputImage | URL of the original uploaded image |
outputImage | URL of the AI-processed studio-quality image |
backgroundId | ID of the background used |
category | Image classification (e.g., Exterior , Interior , Misc ) |
🔁 mediaData.spin
mediaData.spin
Field | Description |
---|---|
aiStatus | AI processing result |
qcStatus | Manual QC result |
iframeUrl | URL to embed the 360 spin viewer |
thumbnailUrl | Thumbnail preview of the 360 spin |
rejectReason | Reason for rejection if any |
mediaData.video
mediaData.video
Field | Description |
---|---|
videoId | Unique ID assigned to the video |
aiStatus | AI processing result |
qcStatus | Manual QC result |
iframeUrl | Embeddable player URL for the feature video |
rejectReason | Reason for rejection if applicable |
Status Field Reference
Field | Possible Values | Meaning |
---|---|---|
aiStatus | DONE , PROCESSING , FAILED | AI lifecycle status of media transformation |
qcStatus | qc_done , pending , rejected | Manual QC lifecycle status |
rejectReason | String or null | If present, describes why media was rejected |
🧠 Developer Tips
- Only the media types originally submitted (
image
,spin
,video
) will appear. - Always check both
aiStatus
andqcStatus
before using or displaying media. - Use
iframeUrl
andthumbnailUrl
fields for embedding media in UIs. - Log or display
rejectReason
to help users understand rejections. - Poll this API until you receive
aiStatus = DONE
for all assets or set up a webhook.
Updated about 2 months ago