UVeye · AsyncAPI Specification

Uveye Merchandise Webhooks

Version

View Spec View on GitHub AutomotiveVehicle InspectionArtificial IntelligenceComputer VisionDealershipsFleet ManagementAuctions and RemarketingAutomotive RetailInspection DataCompanyAsyncAPIWebhooksEvents

AsyncAPI Specification

Raw ↑
generated: '2026-08-02'
method: searched
source: https://api.v1.uveye.dev/ (UVeye Public API v1, Merchandise folder, documentation v1.2)
spec_type: Webhooks
summary: >-
  UVeye publishes no AsyncAPI document. It does document one outbound webhook: when a VIN submitted
  to the Merchandise inventory endpoint has had its multi-angle images rendered, UVeye POSTs a
  "merchandise images ready" payload to a customer-configured URL. The webhook contract - auth,
  signature, retry policy and both payload formats - is published in the Merchandise folder of the
  UVeye Public API v1 Postman documentation, and is modelled in the derived OpenAPI under
  `webhooks.merchandiseImagesReady`.
asyncapi_published: false
webhooks:
- name: merchandiseImagesReady
  direction: outbound
  transport: https
  method: POST
  destination: customer-configured webhook URL (set at onboarding)
  trigger: A VIN's merchandise images have finished rendering.
  configuration: set at onboarding by UVeye; no self-service webhook management endpoint is published
  authentication:
    to_customer:
      header: Authorization
      scheme: Bearer
      description: >-
        The customer bearer token UVeye was given at onboarding. Match it on receipt to authenticate
        that the caller is UVeye.
    signature:
      header: X-UVeye-Signature
      algorithm: HS256
      format: JWT
      binds: body_sha256
      description: >-
        HS256 JWT binding the request body via a body_sha256 claim. Verify it for tamper detection.
        It also carries a delivery_id, usable as an idempotency key (optional).
  idempotency:
    key: delivery_id
    location: X-UVeye-Signature JWT claim
    scope: one delivery; retries of the same delivery reuse the same delivery_id
    optional: true
  delivery:
    expected_response: 2xx
    retry_on: non-2xx
    max_retries: 5
    max_attempts: 6
    note: retries reuse the same delivery_id
  payloads:
  - format: minimum
    default: true
    fields:
    - {name: vin, type: string}
    - {name: publishedAt, type: string, format: date-time}
    - {name: images, type: array of image URLs}
    example:
      vin: '1G1ZD5ST7JF123456'
      publishedAt: '2026-05-12T10:34:00Z'
      images:
      - https://<image-cdn-host>/.../front-left.jpg
      - https://<image-cdn-host>/.../front-right.jpg
      - https://<image-cdn-host>/.../rear-left.jpg
      - https://<image-cdn-host>/.../rear-right.jpg
  - format: detailed
    default: false
    opt_in: at onboarding
    additional_fields: [publishStatus, coverImage, imageCount, 'images[].url', 'images[].category', modules]
  related_operations:
  - openapi/uveye-public-api-v1-openapi.yml#submitMerchandiseInventory
  - openapi/uveye-public-api-v1-openapi.yml#markMerchandiseVehiclesSold
  spec_reference: openapi/uveye-public-api-v1-openapi.yml#/webhooks/merchandiseImagesReady
  further_documentation: >-
    UVeye references a "Merchandise Integration Guide" on Confluence for the full JWT claim set and
    verification code. That guide is not publicly reachable and was not harvested.
event_surface:
  streaming: none published
  polling_alternative: >-
    POST /latest-inspections is the documented discovery mechanism for new inspections (by site,
    site group or VIN, over a days/hours/count window); there is no inspection-completed webhook.