> ## 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.

# Follow published resource invalidations including unchanged inventory rechecks

> Lightweight invalidations, not value changes or a lossless replica. One event per resource
per publication. Inventory events group a product's newly published store observations,
including unchanged quantities. Store and product events indicate a published projection,
including directory/editorial edits. Re-fetch the named resource using ordinary stored-data reads.
With neither token, returns no events and a checkpoint at the current publication. Capture
it BEFORE importing a baseline. Poll checkpoint, then follow cursor alone until has_more=false;
save only the final completed checkpoint atomically with processing. Windows are frozen and
ordered by publication then event. Retries can repeat event IDs. Empty filtered windows advance.
Seven-day retention starts at publication, not retrieval. Deletion, truncate or restore can
return CHECKPOINT_EXPIRED (410), requiring a new baseline. CURSOR_EXPIRED (410) instead permits
replay from the last completed checkpoint. Tokens are signed and filter-bound, not credentials.
No historical backfill, upstream calls, failures, inferred sales or stock guarantees.
Source update time stays null unless supplied; retrieval ranges preserve mixed observation times.
Inventory source_key is the product's six-digit SKU; store source_key is its four-digit store code.




## OpenAPI

````yaml /openapi/v1.yaml get /updates/sync
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.

    Every GET resource also supports HEAD with the same parameters, status
    codes,

    cache validators, and representation headers, but no response body.
    Conditional

    HEAD supports 304, and HEAD product details do not record product views.
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: Search
  - name: Brands
  - name: Product families
  - name: Changes
  - name: Exports
  - name: Stores
  - name: Availability
  - name: Metadata
paths:
  /updates/sync:
    get:
      tags:
        - Changes
      summary: >-
        Follow published resource invalidations including unchanged inventory
        rechecks
      description: >
        Lightweight invalidations, not value changes or a lossless replica. One
        event per resource

        per publication. Inventory events group a product's newly published
        store observations,

        including unchanged quantities. Store and product events indicate a
        published projection,

        including directory/editorial edits. Re-fetch the named resource using
        ordinary stored-data reads.

        With neither token, returns no events and a checkpoint at the current
        publication. Capture

        it BEFORE importing a baseline. Poll checkpoint, then follow cursor
        alone until has_more=false;

        save only the final completed checkpoint atomically with processing.
        Windows are frozen and

        ordered by publication then event. Retries can repeat event IDs. Empty
        filtered windows advance.

        Seven-day retention starts at publication, not retrieval. Deletion,
        truncate or restore can

        return CHECKPOINT_EXPIRED (410), requiring a new baseline.
        CURSOR_EXPIRED (410) instead permits

        replay from the last completed checkpoint. Tokens are signed and
        filter-bound, not credentials.

        No historical backfill, upstream calls, failures, inferred sales or
        stock guarantees.

        Source update time stays null unless supplied; retrieval ranges preserve
        mixed observation times.

        Inventory source_key is the product's six-digit SKU; store source_key is
        its four-digit store code.
      operationId: synchronizeResourceUpdates
      parameters:
        - name: resource_type
          in: query
          schema:
            type: string
            enum:
              - product
              - inventory
              - store
        - name: resource_id
          in: query
          description: >-
            Stable Nektir UUID. Requires resource_type. For inventory, use the
            product UUID.
          schema:
            type: string
            format: uuid
        - name: checkpoint
          in: query
          schema:
            type: string
            minLength: 1
            maxLength: 4096
        - $ref: '#/components/parameters/Cursor'
        - $ref: '#/components/parameters/Limit'
      responses:
        '200':
          description: >-
            Resource invalidation page. A completed checkpoint is returned only
            on the final page.
          headers:
            X-Publication-Revision:
              $ref: '#/components/headers/PublicationRevision'
            Cache-Control:
              schema:
                type: string
                const: no-store
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResourceUpdateSyncResponse'
        '304':
          $ref: '#/components/responses/NotModified'
        '400':
          $ref: '#/components/responses/BadRequest'
        '410':
          $ref: '#/components/responses/CursorExpired'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
        '503':
          $ref: '#/components/responses/Unavailable'
components:
  parameters:
    Cursor:
      name: cursor
      in: query
      description: >-
        Signed opaque keyset cursor, valid for 15 minutes and only with the
        original resource endpoint, query, and sort. Reuse on another endpoint
        or with changed filters returns CURSOR_QUERY_MISMATCH. Follow links.next
        unchanged.
      schema:
        type: string
        maxLength: 2048
    Limit:
      name: limit
      in: query
      schema:
        type: integer
        minimum: 1
        maximum: 100
        default: 25
  headers:
    PublicationRevision:
      description: Immutable API publication revision used for this representation.
      schema:
        type: string
        format: uuid
    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"'
    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:
    ResourceUpdateSyncResponse:
      type: object
      additionalProperties: false
      required:
        - data
        - meta
        - links
      properties:
        data:
          type: array
          maxItems: 100
          items:
            type: object
            additionalProperties: false
            required:
              - id
              - resource
              - semantics
              - times
              - upstream_age_known
            properties:
              id:
                type: string
                format: uuid
              resource:
                type: object
                additionalProperties: false
                required:
                  - type
                  - id
                  - source_key
                properties:
                  type:
                    type: string
                    enum:
                      - product
                      - inventory
                      - store
                  id:
                    type: string
                    format: uuid
                  source_key:
                    type: string
                    pattern: ^(?:[0-9]{4}|[0-9]{6})$
              semantics:
                type: string
                const: published_resource_invalidation
              times:
                type: object
                additionalProperties: false
                required:
                  - retrieved_at_min
                  - retrieved_at_max
                  - source_updated_at
                  - published_at
                properties:
                  retrieved_at_min:
                    type:
                      - string
                      - 'null'
                    format: date-time
                  retrieved_at_max:
                    type:
                      - string
                      - 'null'
                    format: date-time
                  source_updated_at:
                    type:
                      - string
                      - 'null'
                    format: date-time
                  published_at:
                    type:
                      - string
                      - 'null'
                    format: date-time
              upstream_age_known:
                type: boolean
        meta:
          type: object
          additionalProperties: false
          required:
            - page
            - sync
            - warnings
          properties:
            page:
              $ref: '#/components/schemas/PageMeta'
            sync:
              type: object
              additionalProperties: false
              required:
                - checkpoint
                - scope
                - order
                - retention_days
              properties:
                checkpoint:
                  type:
                    - string
                    - 'null'
                scope:
                  type: string
                  const: resource_updates
                order:
                  type: string
                  const: publication_then_event
                retention_days:
                  type: integer
                  const: 7
            warnings:
              type: array
              items:
                $ref: '#/components/schemas/Warning'
        links:
          $ref: '#/components/schemas/Links'
    PageMeta:
      type: object
      additionalProperties: false
      required:
        - has_more
        - next_cursor
      properties:
        has_more:
          type: boolean
        next_cursor:
          type:
            - string
            - 'null'
        cursor_expires_at:
          type: string
          format: date-time
          description: Present only when `next_cursor` is non-null.
    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
    Links:
      type: object
      additionalProperties: false
      required:
        - self
        - next
      properties:
        self:
          type: string
          format: uri-reference
        next:
          type:
            - string
            - 'null'
          format: uri-reference
    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'
    InvalidParameter:
      type: object
      additionalProperties: false
      required:
        - name
        - reason
      properties:
        name:
          type: string
        reason:
          type: string
  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'
    CursorExpired:
      description: Cursor expired or its publication revision was retired.
      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: >-
        The serving database is unavailable, or an export is busy or exceeds a
        configured build limit. Keep last-known-good data and honor Retry-After.
        Persistent EXPORT_UNAVAILABLE size or deadline failures need operator
        review.
      headers:
        Cache-Control:
          schema:
            type: string
          example: no-store
        Retry-After:
          $ref: '#/components/headers/RetryAfter'
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.