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

# List Slots



## OpenAPI

````yaml /openapi.json get /v1/workspaces/{workspaceId}/projects/{projectId}/item-slots
openapi: 3.1.0
info:
  title: Specurate API
  description: ''
  version: 1.0.0
  contact: {}
servers:
  - url: https://app.specurate.com/api
    description: API Server
security: []
tags: []
paths:
  /v1/workspaces/{workspaceId}/projects/{projectId}/item-slots:
    get:
      tags:
        - Project Item Slots
      summary: List Slots
      operationId: ProjectItemSlotsController_listSlots_v1
      parameters:
        - name: workspaceId
          required: true
          in: path
          schema:
            type: string
        - name: projectId
          required: true
          in: path
          schema:
            type: string
        - name: cursor
          required: false
          in: query
          schema:
            type: string
        - name: limit
          required: false
          in: query
          schema:
            minimum: 1
            maximum: 100
            type: number
        - name: sortBy
          required: false
          in: query
          schema:
            type: string
            enum:
              - createdAt
              - updatedAt
              - position
        - name: sortOrder
          required: false
          in: query
          schema:
            type: string
            enum:
              - asc
              - desc
        - name: categoryId
          required: false
          in: query
          schema:
            type: string
        - name: categoryIds
          required: false
          in: query
          schema:
            minItems: 1
            type: array
            items:
              type: string
        - name: groupBy
          required: false
          in: query
          schema:
            type: string
        - name: withSyncState
          required: false
          in: query
          schema:
            type: boolean
        - name: status
          required: false
          in: query
          schema:
            type: string
            enum:
              - new
              - ready
              - updates
              - broken
        - name: filter
          required: false
          in: query
          schema:
            additionalProperties:
              type: object
              additionalProperties: true
            type: object
      responses:
        '200':
          description: >-
            Flat list when groupBy is omitted; grouped list when
            groupBy=category
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/ProjectItemSlotListResponseDto'
                  - $ref: '#/components/schemas/ProjectItemSlotGroupedListResponseDto'
components:
  schemas:
    ProjectItemSlotListResponseDto:
      type: object
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/ProjectItemSlotListItemDto'
        nextCursor:
          type: string
          nullable: true
        hasMore:
          type: boolean
      required:
        - items
        - nextCursor
        - hasMore
    ProjectItemSlotGroupedListResponseDto:
      type: object
      properties:
        groups:
          type: array
          items:
            $ref: '#/components/schemas/ProjectItemSlotGroupDto'
        nextCursor:
          type: string
          nullable: true
        hasMore:
          type: boolean
      required:
        - groups
        - nextCursor
        - hasMore
    ProjectItemSlotListItemDto:
      type: object
      properties:
        quantityBreakdown:
          $ref: '#/components/schemas/SlotQuantityBreakdownDto'
        areas:
          type: array
          items:
            $ref: '#/components/schemas/SlotAreaAllocationDto'
        id:
          type: string
        projectId:
          type: string
        position:
          type: number
        quantity:
          type: string
        refNumber:
          type: object
          nullable: true
        brandStandardId:
          type: string
          nullable: true
          description: BigInt string
        unitsPerPackage:
          type: object
          nullable: true
        parLevel:
          type: object
          nullable: true
        extraQuantityPercentage:
          type: object
          nullable: true
        extraQuantityOverride:
          type: object
          nullable: true
        extraQuantityDecimalPlaces:
          type: integer
          nullable: true
        columnsAttributes:
          type: object
          additionalProperties: true
        version:
          type: number
        createdAt:
          type: string
        updatedAt:
          type: string
        primaryItem:
          nullable: true
          type: object
          allOf:
            - $ref: '#/components/schemas/SlotListPrimaryItemDto'
        alternativesCount:
          type: integer
        similarItemsCount:
          type: integer
        latestRevision:
          nullable: true
          type: object
          allOf:
            - $ref: '#/components/schemas/SlotLatestRevisionDto'
        latestIssue:
          nullable: true
          type: object
          allOf:
            - $ref: '#/components/schemas/SlotLatestIssueDto'
        revisionDate:
          type: string
          nullable: true
        issueCount:
          type: integer
        catalogRelease:
          nullable: true
          type: object
          allOf:
            - $ref: '#/components/schemas/SlotCatalogReleaseDto'
        releasesBehind:
          type: integer
          nullable: true
        revisionCount:
          type: integer
        changedSinceIssueCount:
          type: integer
        changedFields:
          type: array
          items:
            type: string
        applyParToPurchaseQuantity:
          type: boolean
      required:
        - quantityBreakdown
        - areas
        - id
        - projectId
        - position
        - quantity
        - refNumber
        - brandStandardId
        - columnsAttributes
        - version
        - createdAt
        - updatedAt
        - primaryItem
        - alternativesCount
        - similarItemsCount
        - latestRevision
        - latestIssue
        - revisionDate
        - issueCount
        - catalogRelease
        - releasesBehind
        - revisionCount
        - changedSinceIssueCount
        - applyParToPurchaseQuantity
    ProjectItemSlotGroupDto:
      type: object
      properties:
        categoryId:
          type: string
          description: >-
            Category ID of the primary PI for slots in this group. Synthetic
            value "__uncategorized__" for slots with no primaryItem or no
            category.
        categoryName:
          type: object
          nullable: true
          description: >-
            Category display name. `null` when categoryId ===
            "__uncategorized__".
        items:
          type: array
          items:
            $ref: '#/components/schemas/ProjectItemSlotListItemDto'
      required:
        - categoryId
        - categoryName
        - items
    SlotQuantityBreakdownDto:
      type: object
      properties:
        parRequirement:
          type: string
          nullable: true
        packagesToPurchase:
          type: string
          nullable: true
        assignedQuantity:
          type: string
        allocationBalance:
          type: string
        extraQuantity:
          type: string
        purchaseQuantity:
          type: string
      required:
        - parRequirement
        - packagesToPurchase
        - assignedQuantity
        - allocationBalance
        - extraQuantity
        - purchaseQuantity
    SlotAreaAllocationDto:
      type: object
      properties:
        parentId:
          type: string
          nullable: true
        code:
          type: string
          nullable: true
        id:
          type: string
        name:
          type: string
        quantity:
          type: string
        roomNumbers:
          type: array
          items:
            type: string
        roomCount:
          type: number
        path:
          type: array
          items:
            type: string
      required:
        - parentId
        - code
        - id
        - name
        - quantity
        - roomNumbers
        - roomCount
        - path
    SlotListPrimaryItemDto:
      type: object
      properties:
        id:
          type: string
        name:
          type: object
          nullable: true
        version:
          type: integer
          nullable: true
        catalogFamilyId:
          type: string
          nullable: true
          description: BigInt string
        catalogItemId:
          type: string
          nullable: true
          description: BigInt string
        catalogFamilySourceId:
          type: string
          nullable: true
        selectedSource:
          nullable: true
          type: object
          allOf:
            - $ref: '#/components/schemas/SelectedSourceDto'
        primaryImageUrl:
          type: string
          nullable: true
        columnsAttributes:
          type: object
          additionalProperties: true
        syncStateCache:
          nullable: true
          type: object
          allOf:
            - $ref: '#/components/schemas/SyncStateCacheDto'
        categoryId:
          type: string
          nullable: true
        categoryName:
          type: object
          nullable: true
        productTypeId:
          type: string
          nullable: true
        kind:
          enum:
            - option
            - component
          type: string
        isPrimary:
          type: boolean
        catalogConnectionMode:
          enum:
            - live
            - saved
          type: string
        catalogFamilyStatus:
          nullable: true
          enum:
            - draft
            - new_from_project
            - new_from_collection
            - ready_to_use
          type: string
        partsCount:
          type: integer
        materialsCount:
          type: integer
        coreChangePolicy:
          type: object
      required:
        - id
        - name
        - version
        - catalogFamilyId
        - catalogItemId
        - selectedSource
        - primaryImageUrl
        - columnsAttributes
        - productTypeId
        - kind
        - isPrimary
        - catalogConnectionMode
        - catalogFamilyStatus
        - partsCount
        - materialsCount
        - coreChangePolicy
    SlotLatestRevisionDto:
      type: object
      properties:
        id:
          type: string
        label:
          type: object
          nullable: true
        createdAt:
          type: string
        type:
          enum:
            - version
            - issue
            - revision
          type: string
        issueDate:
          type: string
          example: '2026-09-02'
      required:
        - id
        - label
        - createdAt
        - type
        - issueDate
    SlotLatestIssueDto:
      type: object
      properties:
        label:
          type: object
          nullable: true
        createdAt:
          type: string
        issueDate:
          type: string
      required:
        - label
        - createdAt
        - issueDate
    SlotCatalogReleaseDto:
      type: object
      properties:
        id:
          type: string
        number:
          type: number
        label:
          type: string
          nullable: true
        collectionId:
          type: string
          nullable: true
        collectionName:
          type: string
          nullable: true
      required:
        - id
        - number
        - label
        - collectionId
        - collectionName
    SelectedSourceDto:
      type: object
      properties:
        isDefault:
          type: boolean
        companyName:
          type: object
          nullable: true
        officeName:
          type: object
          nullable: true
      required:
        - isDefault
        - companyName
        - officeName
    SyncStateCacheDto:
      type: object
      properties:
        hasDiff:
          type: boolean
          description: >-
            Status-worthy drift: core/commercial columns, taxonomy, invalid
            source binding, or parts; descriptive-only column changes are
            excluded
        columnsDiff:
          type: boolean
          description: >-
            Any physical catalog-owned column delta, including descriptive
            fields; this can be true while hasDiff is false
        partsDiff:
          $ref: '#/components/schemas/PartsDiffDto'
        selectionDiff:
          $ref: '#/components/schemas/SelectionDiffDto'
        orphanedRefs:
          $ref: '#/components/schemas/OrphanedRefsDto'
        computedAt:
          type: string
        componentsDiverged:
          type: boolean
      required:
        - hasDiff
        - columnsDiff
        - partsDiff
        - selectionDiff
        - orphanedRefs
        - computedAt
        - componentsDiverged
    PartsDiffDto:
      type: object
      properties:
        hasDiff:
          type: boolean
        addedLocally:
          type: array
          items:
            type: string
        removedLocally:
          type: array
          items:
            type: string
        quantityChanged:
          type: array
          items:
            $ref: '#/components/schemas/PartsDiffEntryDto'
      required:
        - hasDiff
        - addedLocally
        - removedLocally
        - quantityChanged
    SelectionDiffDto:
      type: object
      properties:
        familySourceMismatch:
          type: boolean
          description: true when the selected family-source binding is incomplete
        itemSourceMismatch:
          type: boolean
          description: true when the selected item-source binding is incomplete
      required:
        - familySourceMismatch
        - itemSourceMismatch
    OrphanedRefsDto:
      type: object
      properties:
        family:
          type: boolean
        item:
          type: boolean
        familySource:
          type: boolean
        itemSource:
          type: boolean
      required:
        - family
        - item
        - familySource
        - itemSource
    PartsDiffEntryDto:
      type: object
      properties:
        catalogItemId:
          type: string
        projectQty:
          type: string
          nullable: true
        catalogQty:
          type: string
          nullable: true
      required:
        - catalogItemId
        - projectQty
        - catalogQty

````