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

FieldDescription
vinVehicle Identification Number submitted for transformation
sourceThe origin of the request, such as console, sdk, or api
dealerIdUnique ID of the dealer who initiated the transformation. Also known as team id in spyne's ecosystem.
dealerVinIDInternal Spyne ID assigned to this transformation session. This is a unique id for each vehicle.
mediaDataContains media output sections: image, spin, and video

mediaData.image

FieldDescription
aiStatusAI processing result: DONE, PROCESSING, or FAILED
qcStatusManual Quality Check status: qc_done, pending, or rejected
rejectReasonExplanation if image QC failed, otherwise null
imageData[]Array of images with transformation metadata

imageData[] Entry:

FieldDescription
angleShooting angle of the image (e.g., 270)
frameNoSequence number of the frame
imageIdInternal Spyne's ID for the image
inputImageURL of the original uploaded image
outputImageURL of the AI-processed studio-quality image
backgroundIdID of the background used
categoryImage classification (e.g., Exterior, Interior, Misc)

🔁 mediaData.spin

FieldDescription
aiStatusAI processing result
qcStatusManual QC result
iframeUrlURL to embed the 360 spin viewer
thumbnailUrlThumbnail preview of the 360 spin
rejectReasonReason for rejection if any

mediaData.video

FieldDescription
videoIdUnique ID assigned to the video
aiStatusAI processing result
qcStatusManual QC result
iframeUrlEmbeddable player URL for the feature video
rejectReasonReason for rejection if applicable

Status Field Reference

FieldPossible ValuesMeaning
aiStatusDONE, PROCESSING, FAILEDAI lifecycle status of media transformation
qcStatusqc_done, pending, rejectedManual QC lifecycle status
rejectReasonString or nullIf present, describes why media was rejected

🧠 Developer Tips

  • Only the media types originally submitted (image, spin, video) will appear.
  • Always check both aiStatus and qcStatus before using or displaying media.
  • Use iframeUrl and thumbnailUrl 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.