> ## Documentation Index
> Fetch the complete documentation index at: https://docs.virtual.fit/llms.txt
> Use this file to discover all available pages before exploring further.

# Get storefront fit evidence

> Read a compact rating and fit summary for a Custom JavaScript product.

Call this endpoint from the configured storefront origin. It returns the
source-reported overall rating and review count, a small analyzed fit digest,
and up to three relevant review previews.

Pass the same stable `product_id` used during catalog sync. Optional
`variant_id` and `size` values narrow the preview reviews; they do not expand
the response with the full variant matrix or every review.

Use [List storefront reviews](/reference/storefront-product-reviews) when a
shopper chooses to inspect the underlying evidence.


## OpenAPI

````yaml openapi.yaml GET /vfr/sites/{site_key}/fit-evidence
openapi: 3.1.0
info:
  title: virtual.fit API
  version: 2.0.0
  description: Catalog sync, storefront fit evidence, and product recommendation endpoints.
servers:
  - url: https://api.virtual.fit
security:
  - bearerAuth: []
tags:
  - name: Catalog
  - name: Storefront evidence
  - name: Recommendations
paths:
  /vfr/sites/{site_key}/fit-evidence:
    get:
      tags:
        - Storefront evidence
      summary: Get compact product fit evidence
      description: >
        Browser-facing Custom JavaScript endpoint. Returns the current product

        rating aggregate, a compact analyzed fit digest, and up to three

        relevant review previews. The request must come from an allowed site

        origin. `variant_id` and `size` narrow the preview reviews when
        supplied.
      operationId: getStorefrontFitEvidence
      parameters:
        - $ref: '#/components/parameters/SiteKey'
        - $ref: '#/components/parameters/StorefrontProductID'
        - $ref: '#/components/parameters/ReviewVariantID'
        - $ref: '#/components/parameters/ReviewSize'
      responses:
        '200':
          description: Compact fit evidence for the product.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CatalogFitEvidenceResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '403':
          $ref: '#/components/responses/StorefrontForbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      security: []
components:
  parameters:
    SiteKey:
      name: site_key
      in: path
      required: true
      description: Public Custom JavaScript site key.
      schema:
        type: string
        maxLength: 255
    StorefrontProductID:
      name: product_id
      in: query
      required: true
      description: Stable merchant product ID used during catalog sync.
      schema:
        type: string
        maxLength: 255
    ReviewVariantID:
      name: variant_id
      in: query
      required: false
      description: Optional stable merchant variant ID.
      schema:
        type: string
        maxLength: 255
    ReviewSize:
      name: size
      in: query
      required: false
      description: Optional exact source size label or size signature.
      schema:
        type: string
        maxLength: 255
  schemas:
    CatalogFitEvidenceResponse:
      type: object
      required:
        - digest
        - reviews
      properties:
        rating:
          type: number
          minimum: 0
          maximum: 5
          description: Current overall rating reported by the product source.
        review_count:
          type: integer
          minimum: 0
          description: Current overall review count reported by the product source.
        digest:
          $ref: '#/components/schemas/CatalogFitDigest'
        reviews:
          type: array
          maxItems: 3
          description: Small relevant preview; use the reviews endpoint for pagination.
          items:
            $ref: '#/components/schemas/CatalogReview'
    CatalogFitDigest:
      type: object
      required:
        - product_id
        - fit_revision_hash
        - review_count
        - signals
        - built_at
      properties:
        product_id:
          type: string
          format: uuid
        variant_id:
          type: string
          format: uuid
        size_label:
          type: string
        fit_revision_hash:
          type: string
          description: Opaque revision of the product facts used by the digest.
        review_count:
          type: integer
          minimum: 0
          description: Deduplicated full review records available for analysis.
        average_rating:
          type: number
          minimum: 0
          maximum: 5
        signals:
          type: array
          items:
            $ref: '#/components/schemas/RecommendationFitSignal'
        built_at:
          type: string
          format: date-time
    CatalogReview:
      type: object
      properties:
        external_review_id:
          type: string
          maxLength: 255
          description: Preferred stable identity from the review source.
        external_id_scope:
          type: string
          maxLength: 255
        permalink:
          type: string
          format: uri
          maxLength: 8192
        title:
          type: string
          maxLength: 500
        body:
          type: string
          maxLength: 65536
        rating:
          type: number
          minimum: 0
          maximum: 5
        language:
          type: string
          maxLength: 255
        locale:
          type: string
          maxLength: 255
        author_display_name:
          type: string
          maxLength: 255
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
        verified_purchase:
          type: boolean
        incentivized:
          type: boolean
        badges:
          type: array
          items:
            type: string
        helpful_count:
          type: integer
          minimum: 0
        merchant_response:
          type: object
          additionalProperties: true
        purchased_variant:
          $ref: '#/components/schemas/CatalogReviewVariant'
        media:
          type: array
          maxItems: 12
          items:
            $ref: '#/components/schemas/CatalogReviewMedia'
        measurements:
          type: array
          maxItems: 6
          items:
            $ref: '#/components/schemas/CatalogReviewMeasurementSet'
        fit_signals:
          type: array
          maxItems: 24
          items:
            $ref: '#/components/schemas/CatalogReviewFitSignal'
        deleted:
          type: boolean
          default: false
          description: >-
            Deletes the review association. Requires a stable review ID or
            permalink.
      anyOf:
        - required:
            - external_review_id
        - required:
            - permalink
        - required:
            - title
        - required:
            - body
    Error:
      type: object
      required:
        - error
      properties:
        error:
          type: string
    RecommendationFitSignal:
      type: object
      required:
        - dimension_code
        - evidence_count
        - average_score
        - tight_count
        - neutral_count
        - loose_count
      properties:
        dimension_code:
          type: string
        evidence_count:
          type: integer
        average_score:
          type: number
          description: >-
            Negative means tighter, smaller, or shorter. Positive means looser,
            larger, or longer.
        tight_count:
          type: integer
        neutral_count:
          type: integer
        loose_count:
          type: integer
    CatalogReviewVariant:
      type: object
      properties:
        source_variant_id:
          type: string
          maxLength: 255
        sku:
          type: string
          maxLength: 255
        label:
          type: string
          maxLength: 255
        option_values:
          type: object
          maxProperties: 20
          additionalProperties:
            type: string
        size_signature:
          type: string
          maxLength: 255
      description: >-
        Send any identifiers available for the purchased variant. Unresolved
        source values are preserved.
    CatalogReviewMedia:
      type: object
      required:
        - url
      properties:
        external_media_id:
          type: string
          maxLength: 255
        url:
          type: string
          format: uri
          maxLength: 8192
        kind:
          type: string
          enum:
            - image
            - video
          default: image
        caption:
          type: string
        alt_text:
          type: string
        width:
          type: integer
          minimum: 0
        height:
          type: integer
          minimum: 0
        position:
          type: integer
          minimum: 0
    CatalogReviewMeasurementSet:
      type: object
      properties:
        subject_kind:
          type: string
          enum:
            - reviewer
          default: reviewer
        basis:
          type: string
          enum:
            - body
            - unknown
          default: unknown
        source_key:
          type: string
        source_kind:
          type: string
          default: public_review
        capture_method:
          type: string
        size_label:
          type: string
        option_selector:
          type: object
          additionalProperties:
            type: string
        confidence:
          type: number
          minimum: 0
          maximum: 1
        values:
          type: array
          maxItems: 32
          items:
            $ref: '#/components/schemas/CatalogMeasurementValue'
    CatalogReviewFitSignal:
      type: object
      required:
        - dimension_code
        - score
        - confidence
        - evidence
      properties:
        dimension_code:
          type: string
          enum:
            - overall
            - bust
            - chest
            - underbust
            - waist
            - hips
            - shoulder_width
            - sleeve_length
            - total_length
            - inseam
            - front_rise
            - back_rise
            - thigh
            - leg_opening
            - foot_width
        score:
          type: integer
          minimum: -2
          maximum: 2
          description: >-
            Negative means tighter, smaller, or shorter. Positive means looser,
            larger, or longer.
        confidence:
          type: number
          minimum: 0
          maximum: 1
        evidence:
          type: string
          maxLength: 4096
        source_kind:
          type: string
          enum:
            - structured
            - deterministic
            - llm
            - vlm
            - manual
          default: structured
    CatalogMeasurementValue:
      type: object
      required:
        - dimension_code
        - unit
      properties:
        dimension_code:
          type: string
          enum:
            - height
            - weight
            - bust
            - chest
            - underbust
            - waist
            - hips
            - shoulder_width
            - arm_length
            - sleeve_length
            - total_length
            - inseam
            - front_rise
            - back_rise
            - thigh
            - leg_opening
            - foot_length
            - foot_width
        value:
          type: number
          minimum: 0
        min_value:
          type: number
          minimum: 0
        max_value:
          type: number
          minimum: 0
        unit:
          type: string
          enum:
            - cm
            - kg
          description: Use kg for weight and cm for every length.
        raw_label:
          type: string
        raw_value:
          type: string
        raw_unit:
          type: string
        confidence:
          type: number
          minimum: 0
          maximum: 1
      anyOf:
        - required:
            - value
        - required:
            - min_value
        - required:
            - max_value
  responses:
    BadRequest:
      description: Invalid field or inconsistent catalog data.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    StorefrontForbidden:
      description: The request origin is not allowed for this site key.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFound:
      description: Site, product, variant, or recommendation context not found.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: Keep the virtual.fit API key on your server.

````