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

# Resolve a current Utah DABS SKU

> Resolves only the current published active mapping. Leading zeroes are required.



## OpenAPI

````yaml /openapi/v1.yaml get /products/by-sku/{sku}
openapi: 3.1.0
info:
  title: Independent Utah DABS API
  version: 1.0.0
  summary: Database-backed product, store, and reported-inventory reads
  description: >
    Version 1 pilot contract. All requests read a locally published database
    revision;

    no public request waits for or triggers Utah DABS. Reported quantities are

    observations, not purchase guarantees. This service is independent and is
    not

    affiliated with or endorsed by Utah DABS. The current local seed contains

    historical inventory fixtures; clients must inspect response warnings and

    coverage metadata.
servers:
  - url: http://127.0.0.1:5185/v1
    description: Local development only; set MINTLIFY_API_BASE_URL before publishing
security: []
tags:
  - name: Products
  - name: Stores
  - name: Metadata
paths:
  /products/by-sku/{sku}:
    get:
      tags:
        - Products
      summary: Resolve a current Utah DABS SKU
      description: >-
        Resolves only the current published active mapping. Leading zeroes are
        required.
      operationId: getProductBySku
      parameters:
        - $ref: '#/components/parameters/SkuPath'
        - $ref: '#/components/parameters/IfNoneMatch'
        - $ref: '#/components/parameters/IfModifiedSince'
      responses:
        '200':
          description: Product detail.
          headers:
            ETag:
              $ref: '#/components/headers/ETag'
            Last-Modified:
              $ref: '#/components/headers/LastModified'
            Cache-Control:
              $ref: '#/components/headers/DetailCacheControl'
            X-Publication-Revision:
              $ref: '#/components/headers/PublicationRevision'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductResponse'
        '304':
          $ref: '#/components/responses/NotModified'
        '400':
          $ref: '#/components/responses/BadRequest'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
        '503':
          $ref: '#/components/responses/Unavailable'
components:
  parameters:
    SkuPath:
      name: sku
      in: path
      required: true
      description: Exact six-character Utah DABS CSC/SKU, including leading zeroes.
      schema:
        $ref: '#/components/schemas/DabsSku'
    IfNoneMatch:
      name: If-None-Match
      in: header
      description: Strong entity tag from an earlier response.
      schema:
        type: string
    IfModifiedSince:
      name: If-Modified-Since
      in: header
      description: HTTP-date fallback validator. ETag takes precedence.
      schema:
        type: string
  headers:
    ETag:
      description: >-
        Strong validator for the response representation. A new publication may
        retain the validator when this response is unchanged.
      schema:
        type: string
      example: '"v1-018f2fd0-a3d4-7d20-9c11-9482722f6b26-a91c"'
    LastModified:
      description: >-
        Newest relevant publication time in HTTP-date format; not an upstream
        update time.
      schema:
        type: string
      example: Tue, 15 Sep 2026 16:31:00 GMT
    DetailCacheControl:
      schema:
        type: string
      example: public, max-age=60, stale-while-revalidate=300
    PublicationRevision:
      description: Immutable API publication revision used for this representation.
      schema:
        type: string
        format: uuid
    RetryAfter:
      description: Seconds until retry or an HTTP-date.
      schema:
        type: string
    RequestId:
      description: >-
        Server-generated identifier for correlating a response with private
        operational logs.
      schema:
        type: string
        format: uuid
  schemas:
    ProductResponse:
      type: object
      additionalProperties: false
      required:
        - data
        - meta
      properties:
        data:
          $ref: '#/components/schemas/Product'
        meta:
          $ref: '#/components/schemas/ResourceMeta'
    DabsSku:
      type: string
      pattern: ^[0-9]{6}$
      examples:
        - '347210'
        - '004190'
    Product:
      type: object
      additionalProperties: false
      required:
        - id
        - source_ids
        - name
        - brand
        - brand_id
        - brand_slug
        - package_size
        - price
        - status
        - categories
        - catalog_times
        - catalog_presence
        - dabs_flags
        - inventory_retrieved_at
        - availability_summary
        - source_fields
        - aggregate_inventory
      properties:
        id:
          type: string
          format: uuid
        source_ids:
          $ref: '#/components/schemas/SourceProductIds'
        name:
          type: string
        brand:
          type:
            - string
            - 'null'
        brand_id:
          type:
            - string
            - 'null'
          format: uuid
          description: Stable reviewed Nektir brand ID; null when unresolved.
        brand_slug:
          type:
            - string
            - 'null'
          description: Stable reviewed Nektir brand slug; null when unresolved.
        name_components:
          oneOf:
            - $ref: '#/components/schemas/ProductNameComponents'
            - type: 'null'
        attributes:
          oneOf:
            - $ref: '#/components/schemas/ProductAttributes'
            - type: 'null'
        package_size:
          $ref: '#/components/schemas/PackageSize'
        price:
          oneOf:
            - $ref: '#/components/schemas/MoneyObservation'
            - type: 'null'
        status:
          $ref: '#/components/schemas/ProductStatus'
        categories:
          type: array
          description: Active category lineage in root-to-leaf order.
          items:
            $ref: '#/components/schemas/CategoryRef'
        catalog_times:
          $ref: '#/components/schemas/ObservationTimes'
        catalog_presence:
          oneOf:
            - $ref: '#/components/schemas/SourcePresence'
            - type: 'null'
        dabs_flags:
          oneOf:
            - $ref: '#/components/schemas/DabsProductFlags'
            - type: 'null'
        inventory_retrieved_at:
          type:
            - string
            - 'null'
          format: date-time
          description: >-
            Last successful Nektir inventory retrieval for this product in the
            requested store or radius scope, or across its published store
            observations when unscoped; null when unchecked. This is not an
            upstream source-update time.
        availability_summary:
          oneOf:
            - $ref: '#/components/schemas/AvailabilitySummary'
            - type: 'null'
        source_fields:
          $ref: '#/components/schemas/ProductSourceFields'
        aggregate_inventory:
          oneOf:
            - $ref: '#/components/schemas/AggregateInventoryObservation'
            - type: 'null'
    ResourceMeta:
      type: object
      additionalProperties: false
      required:
        - warnings
      properties:
        warnings:
          type: array
          items:
            $ref: '#/components/schemas/Warning'
    Problem:
      type: object
      additionalProperties: false
      required:
        - type
        - title
        - status
        - detail
        - instance
        - code
        - request_id
      properties:
        type:
          type: string
          format: uri
        title:
          type: string
        status:
          type: integer
          minimum: 400
          maximum: 599
        detail:
          type: string
        instance:
          type: string
          format: uri-reference
        code:
          type: string
        request_id:
          type: string
          format: uuid
        invalid_params:
          type: array
          items:
            $ref: '#/components/schemas/InvalidParameter'
    SourceProductIds:
      type: object
      additionalProperties: false
      required:
        - utah_dabs_sku
      properties:
        utah_dabs_sku:
          $ref: '#/components/schemas/DabsSku'
    ProductNameComponents:
      type: object
      additionalProperties: false
      properties:
        product_name:
          type:
            - string
            - 'null'
        expression:
          type:
            - string
            - 'null'
        age_statement:
          type:
            - string
            - 'null'
        pack_count:
          type:
            - integer
            - 'null'
          minimum: 1
    ProductAttributes:
      type: object
      additionalProperties: false
      description: >-
        Conservative product classifications derived during ingestion. Raw DABS
        names and taxonomy remain available under source_fields; null or an
        empty list means the attribute was not established, not that it is
        absent.
      required:
        - vintage_year
        - proof
        - package_form
        - beverage_styles
        - production_designations
        - certifications
        - source_programs
      properties:
        vintage_year:
          type:
            - integer
            - 'null'
          minimum: 1900
          maximum: 2099
          description: >-
            Explicit single four-digit vintage at the end of a wine-context
            source name before package size.
        proof:
          type:
            - integer
            - 'null'
          minimum: 40
          maximum: 200
          description: >-
            Explicit proof value in a spirits-context source name; never
            inferred from ABV.
        package_form:
          type:
            - string
            - 'null'
          enum:
            - can
            - keg
            - box
            - gift_set
            - null
          description: Explicit package form or a DABS gift-set classification.
        beverage_styles:
          type: array
          uniqueItems: true
          items:
            type: string
            enum:
              - blanco
              - reposado
              - anejo
              - extra_anejo
              - cristalino
              - joven
        production_designations:
          type: array
          uniqueItems: true
          items:
            type: string
            enum:
              - bottled_in_bond
              - straight
              - single_barrel
              - small_batch
              - cask_strength
              - barrel_proof
        certifications:
          type: array
          uniqueItems: true
          items:
            type: string
            enum:
              - kosher_for_passover_mevushal
              - organic
        source_programs:
          type: array
          uniqueItems: true
          description: >-
            DABS operational classifications, kept separate from beverage
            category.
          items:
            type: string
            enum:
              - special_order
              - gift_set
              - offer
              - allocated
    PackageSize:
      type: object
      additionalProperties: false
      required:
        - milliliters
        - display
        - normalization_state
      properties:
        milliliters:
          type:
            - integer
            - 'null'
          minimum: 1
        display:
          type: string
        normalization_state:
          type: string
          enum:
            - normalized
            - unconfirmed
            - missing
    MoneyObservation:
      type: object
      additionalProperties: false
      required:
        - amount_minor
        - currency
        - display
        - source
        - times
      properties:
        amount_minor:
          type: integer
          format: int64
          minimum: 0
        currency:
          type: string
          const: USD
        display:
          type: string
          examples:
            - $19.99
        source:
          type: string
          enum:
            - utah_dabs_workbook
            - utah_dabs_locator
        times:
          $ref: '#/components/schemas/ObservationTimes'
    ProductStatus:
      type: object
      additionalProperties: false
      required:
        - code
        - label
        - lifecycle
        - source_raw
      properties:
        code:
          type: string
          examples:
            - '1'
        label:
          type: string
          examples:
            - General distribution
        lifecycle:
          type: string
          enum:
            - active
            - discontinued
            - restricted
            - unavailable
            - unknown
        source_raw:
          type: string
    CategoryRef:
      type: object
      additionalProperties: false
      required:
        - id
        - name
      properties:
        id:
          type: string
          pattern: ^cat_[a-z0-9_]+$
        name:
          type: string
    ObservationTimes:
      type: object
      additionalProperties: false
      required:
        - source_updated_at
        - retrieved_at
        - published_at
      properties:
        source_updated_at:
          type:
            - string
            - 'null'
          format: date-time
          description: Null when the source supplies no update timestamp.
        retrieved_at:
          type: string
          format: date-time
        published_at:
          type: string
          format: date-time
    SourcePresence:
      type: object
      additionalProperties: false
      description: >-
        Presence in complete validated source snapshots. A missing state
        preserves last-known-good data and never implies zero inventory.
        Retirement is review-only.
      required:
        - state
        - reported_in_latest_complete_snapshot
        - consecutive_missing_complete_snapshots
        - last_seen_at
        - first_missing_at
        - last_missing_at
        - reviewed_at
        - missing_does_not_imply_zero_inventory
      properties:
        state:
          type: string
          enum:
            - present
            - suspect_missing
            - retirement_review_required
            - reviewed_retired
        reported_in_latest_complete_snapshot:
          type: boolean
        consecutive_missing_complete_snapshots:
          type: integer
          minimum: 0
        last_seen_at:
          type:
            - string
            - 'null'
          format: date-time
        first_missing_at:
          type:
            - string
            - 'null'
          format: date-time
        last_missing_at:
          type:
            - string
            - 'null'
          format: date-time
        reviewed_at:
          type:
            - string
            - 'null'
          format: date-time
        missing_does_not_imply_zero_inventory:
          type: boolean
          const: true
    DabsProductFlags:
      type: object
      additionalProperties: false
      description: >-
        Raw flags from the DABS locator. Their exact business meaning and
        duration are unverified.
      required:
        - new_item_raw
        - on_spa_raw
        - semantics
        - times
      properties:
        new_item_raw:
          type:
            - boolean
            - 'null'
        on_spa_raw:
          type:
            - boolean
            - 'null'
        semantics:
          type: string
          const: source_flags_unverified
        times:
          $ref: '#/components/schemas/ObservationTimes'
    AvailabilitySummary:
      type: object
      additionalProperties: false
      required:
        - scope_store_count
        - reported_positive_store_count
        - eligible_positive_store_count
        - reported_zero_store_count
        - row_absent_store_count
        - unchecked_store_count
        - retrieved_at_min
        - retrieved_at_max
        - retrieval_policy_id
        - meets_retrieval_policy
        - upstream_age_known
        - last_refresh_attempt
      properties:
        scope_store_count:
          type: integer
          minimum: 0
        reported_positive_store_count:
          type: integer
          minimum: 0
        eligible_positive_store_count:
          type: integer
          minimum: 0
        reported_zero_store_count:
          type: integer
          minimum: 0
        row_absent_store_count:
          type: integer
          minimum: 0
        unchecked_store_count:
          type: integer
          minimum: 0
        retrieved_at_min:
          type:
            - string
            - 'null'
          format: date-time
        retrieved_at_max:
          type:
            - string
            - 'null'
          format: date-time
        retrieval_policy_id:
          type: string
        meets_retrieval_policy:
          type: boolean
        upstream_age_known:
          type: boolean
          const: false
        last_refresh_attempt:
          $ref: '#/components/schemas/RefreshAttemptSummary'
    ProductSourceFields:
      type: object
      additionalProperties: false
      properties:
        utah_dabs_workbook:
          oneOf:
            - $ref: '#/components/schemas/DabsProductSourceFields'
            - type: 'null'
        utah_dabs_locator:
          oneOf:
            - $ref: '#/components/schemas/DabsProductSourceFields'
            - type: 'null'
    AggregateInventoryObservation:
      type: object
      additionalProperties: false
      required:
        - warehouse_quantity_reported
        - aggregate_store_quantity_reported
        - on_order_quantity_reported
        - in_stock_flag_raw
        - quantity_semantics
        - times
      properties:
        warehouse_quantity_reported:
          type:
            - integer
            - 'null'
          minimum: 0
        aggregate_store_quantity_reported:
          type:
            - integer
            - 'null'
          minimum: 0
        on_order_quantity_reported:
          type:
            - integer
            - 'null'
          minimum: 0
        in_stock_flag_raw:
          type:
            - boolean
            - 'null'
        quantity_semantics:
          type: string
          const: dabs_reported_unverified
        times:
          $ref: '#/components/schemas/ObservationTimes'
    Warning:
      type: object
      additionalProperties: false
      description: >-
        Machine-readable data qualification. Current codes include FIXTURE_DATA,
        INVENTORY_COVERAGE_PARTIAL, SOURCE_REFRESH_DELAYED,
        UPSTREAM_PRODUCT_UNAVAILABLE, SOURCE_SCHEMA_QUARANTINED, and
        CATALOG_BATCH_OLD.
      required:
        - code
      properties:
        code:
          type: string
          examples:
            - INVENTORY_COVERAGE_PARTIAL
    InvalidParameter:
      type: object
      additionalProperties: false
      required:
        - name
        - reason
      properties:
        name:
          type: string
        reason:
          type: string
    RefreshAttemptSummary:
      type: object
      additionalProperties: false
      required:
        - attempted_at
        - status
      properties:
        attempted_at:
          type:
            - string
            - 'null'
          format: date-time
        status:
          type: string
          enum:
            - succeeded
            - failed
            - skipped
            - rate_limited
            - schema_rejected
            - never_attempted
    DabsProductSourceFields:
      type: object
      additionalProperties: false
      required:
        - sku_raw
        - name_raw
        - size_value_raw
        - size_unit_raw
        - status_raw
      properties:
        sku_raw:
          type: string
        name_raw:
          type: string
        size_value_raw:
          type:
            - string
            - 'null'
        size_unit_raw:
          type:
            - string
            - 'null'
        status_raw:
          type: string
        display_group_raw:
          type:
            - string
            - 'null'
        div_code_raw:
          type:
            - string
            - 'null'
        dept_code_raw:
          type:
            - string
            - 'null'
        class_code_raw:
          type:
            - string
            - 'null'
        price_raw:
          type:
            - string
            - 'null'
  responses:
    NotModified:
      description: Representation has not changed for the supplied validator.
      headers:
        ETag:
          $ref: '#/components/headers/ETag'
        Cache-Control:
          description: Cache policy for the validated representation.
          schema:
            type: string
        X-Publication-Revision:
          $ref: '#/components/headers/PublicationRevision'
    BadRequest:
      description: Invalid parameters, incompatible scope, or cursor/query mismatch.
      headers:
        Cache-Control:
          schema:
            type: string
          example: no-store
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
    NotFound:
      description: Published resource or source mapping not found.
      headers:
        Cache-Control:
          schema:
            type: string
          example: no-store
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
    RateLimited:
      description: Public read-rate limit exceeded.
      headers:
        Cache-Control:
          schema:
            type: string
          example: no-store
        Retry-After:
          $ref: '#/components/headers/RetryAfter'
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
    InternalError:
      description: >-
        An unexpected server failure. Details are withheld; report the response
        request identifier.
      headers:
        Cache-Control:
          schema:
            type: string
          example: no-store
        X-Request-ID:
          $ref: '#/components/headers/RequestId'
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
    Unavailable:
      description: No safe published database revision is currently readable.
      headers:
        Cache-Control:
          schema:
            type: string
          example: no-store
        Retry-After:
          $ref: '#/components/headers/RetryAfter'
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'

````