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

# Create And Link Brand Standard



## OpenAPI

````yaml /openapi.json post /v1/workspaces/{workspaceId}/projects/{projectId}/items/{id}/create-and-link-brand-standard
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}/items/{id}/create-and-link-brand-standard:
    post:
      tags:
        - Project Items
      summary: Create And Link Brand Standard
      operationId: ProjectItemsController_createAndLinkBrandStandard_v1
      parameters:
        - name: workspaceId
          required: true
          in: path
          schema:
            type: string
        - name: projectId
          required: true
          in: path
          schema:
            type: string
        - name: id
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateAndLinkBrandStandardDto'
      responses:
        '201':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateAndLinkBrandStandardResponseDto'
        '400':
          description: Invalid create-and-link request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseDto'
        '401':
          description: Bearer authentication is missing or invalid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseDto'
        '403':
          description: Caller lacks a required Project or Brand Standard permission.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseDto'
        '404':
          description: Project Item or referenced category was not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseDto'
        '409':
          description: Optimistic concurrency or create-and-link conflict.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseDto'
      security:
        - bearer: []
components:
  schemas:
    CreateAndLinkBrandStandardDto:
      type: object
      properties:
        version:
          type: integer
        refNumber:
          type: string
          pattern: ^[A-Z]{2,4}-\d{3,6}$
        name:
          type: string
          maxLength: 255
        categoryId:
          type: string
          pattern: ^\d+$
        productTypeId:
          type: string
          pattern: ^\d+$
        columnsAttributes:
          type: object
          additionalProperties: true
      required:
        - version
        - refNumber
        - name
        - categoryId
        - productTypeId
    CreateAndLinkBrandStandardResponseDto:
      type: object
      properties:
        item:
          $ref: '#/components/schemas/ProjectItemResponseDto'
        brandStandard:
          $ref: '#/components/schemas/BrandStandardResponseDto'
        restored:
          type: boolean
      required:
        - item
        - brandStandard
        - restored
    ErrorResponseDto:
      type: object
      properties:
        statusCode:
          type: number
          example: 409
        message:
          type: string
          example: Conflict
        code:
          type: string
          example: VARIANT_COMBO_TAKEN
          description: >-
            UPPER_SNAKE_CASE domain error code. Present on validation /
            business-rule errors; absent on generic HTTP errors.
        entity:
          type: string
          description: >-
            Entity type that caused the conflict (e.g. "ProjectItem"). Present
            when the error is entity-specific.
      required:
        - statusCode
        - message
    ProjectItemResponseDto:
      type: object
      properties:
        id:
          type: string
        projectId:
          type: string
        projectItemSlotId:
          type: string
          nullable: true
        name:
          type: string
        catalogFamilyId:
          type: string
          description: BigInt string
        catalogItemId:
          type: string
          description: BigInt string
        materialFinish:
          nullable: true
          type: object
          allOf:
            - $ref: '#/components/schemas/ProjectItemMaterialFinishDto'
        catalogFamilySourceId:
          type: string
          nullable: true
        columnsAttributes:
          type: object
          additionalProperties: true
        sourceMeta:
          nullable: true
          type: object
          allOf:
            - $ref: '#/components/schemas/ProjectItemSourceMetaDto'
        instructionLinks:
          type: array
          items:
            $ref: '#/components/schemas/ProjectItemInstructionLinkResponseDto'
        syncStateCache:
          nullable: true
          type: object
          allOf:
            - $ref: '#/components/schemas/SyncStateCacheDto'
        isPrimary:
          type: boolean
        catalogConnectionMode:
          enum:
            - live
            - saved
          type: string
          description: >-
            live participates in catalog synchronization; saved is a
            project-only saved catalog version
        savedAt:
          format: date-time
          type: string
          nullable: true
        selectedSource:
          nullable: true
          type: object
          allOf:
            - $ref: '#/components/schemas/SelectedSourceDto'
        collectionApplication:
          nullable: true
          type: object
          allOf:
            - $ref: '#/components/schemas/CollectionApplicationProvenanceDto'
        categoryId:
          type: string
        productTypeId:
          type: string
          nullable: true
        kind:
          enum:
            - option
            - component
          type: string
        catalogFamilyStatus:
          nullable: true
          enum:
            - draft
            - new_from_project
            - new_from_collection
            - ready_to_use
          type: string
          description: CatalogFamily.status — drives FE Push/Pull button visibility
        catalogFamilyItemType:
          nullable: true
          enum:
            - default
            - material
            - template
          type: string
          description: CatalogFamily.itemType for the linked live Catalog family
        affectedCatalogFamilyId:
          type: string
          nullable: true
        catalogDecisionEventIds:
          type: array
          items:
            type: string
        brandStandardId:
          type: string
          nullable: true
        refNumber:
          type: string
          nullable: true
        affectedParentPiIds:
          type: array
          items:
            type: string
          description: >-
            Parent PI ids whose parts list embeds this PI as a row. Set only
            when the mutated PI is a component; FE invalidates each parent PI
            parts-list cache entry. Empty array for options.
        version:
          type: number
        createdAt:
          type: string
        updatedAt:
          type: string
        slotColumnsAttributes:
          type: object
          nullable: true
          additionalProperties: true
        coreChangePolicy:
          type: object
      required:
        - id
        - projectId
        - projectItemSlotId
        - name
        - catalogFamilyId
        - catalogItemId
        - materialFinish
        - columnsAttributes
        - sourceMeta
        - instructionLinks
        - isPrimary
        - catalogConnectionMode
        - savedAt
        - selectedSource
        - collectionApplication
        - categoryId
        - productTypeId
        - kind
        - catalogFamilyStatus
        - catalogFamilyItemType
        - catalogDecisionEventIds
        - brandStandardId
        - refNumber
        - affectedParentPiIds
        - version
        - createdAt
        - updatedAt
        - slotColumnsAttributes
        - coreChangePolicy
    BrandStandardResponseDto:
      type: object
      properties:
        id:
          type: string
        refNumber:
          type: string
        name:
          type: string
        categoryId:
          type: string
        categoryName:
          type: string
        templateFamilyId:
          type: string
        familyCode:
          type: string
          nullable: true
        productTypeId:
          type: string
          nullable: true
        productTypeName:
          type: string
          nullable: true
        columnsAttributes:
          type: object
          additionalProperties: true
        templateFamilyColumnsAttributes:
          type: object
          additionalProperties: true
        status:
          type: string
          enum:
            - draft
            - new_from_project
            - new_from_collection
            - ready_to_use
        templateFamilyVersion:
          type: number
        itemsCount:
          type: number
        materialsCount:
          type: number
        partsCount:
          type: number
        componentsCount:
          type: number
        linkedItemsCount:
          type: number
        lastLinkedAt:
          type: string
          nullable: true
        projectsCount:
          type: number
        projectNames:
          type: array
          items:
            type: string
        collectionsCount:
          type: number
        collectionNames:
          type: array
          items:
            type: string
        lastUsedProjectName:
          type: string
          nullable: true
        position:
          type: number
        version:
          type: number
        createdAt:
          type: string
        updatedAt:
          type: string
        deletedAt:
          type: string
          nullable: true
      required:
        - id
        - refNumber
        - name
        - categoryId
        - categoryName
        - templateFamilyId
        - productTypeId
        - productTypeName
        - columnsAttributes
        - templateFamilyColumnsAttributes
        - status
        - templateFamilyVersion
        - itemsCount
        - materialsCount
        - partsCount
        - componentsCount
        - linkedItemsCount
        - lastLinkedAt
        - projectsCount
        - projectNames
        - collectionsCount
        - collectionNames
        - lastUsedProjectName
        - position
        - version
        - createdAt
        - updatedAt
        - deletedAt
    ProjectItemMaterialFinishDto:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        isBaseMaterial:
          type: boolean
      required:
        - id
        - name
        - isBaseMaterial
    ProjectItemSourceMetaDto:
      type: object
      properties:
        selectors:
          type: object
          additionalProperties:
            type: string
          description: Column slug → CSS selector of the clipped page element.
        url:
          type: string
          maxLength: 2048
          format: uri
        title:
          type: string
          maxLength: 512
        favicon:
          type: string
          maxLength: 2048
        ogImage:
          type: string
          maxLength: 2048
        clippedAt:
          type: string
      required:
        - url
    ProjectItemInstructionLinkResponseDto:
      type: object
      properties:
        assigneeRoleGroupIds:
          type: array
          items:
            type: string
            enum:
              - mfg_vendors
              - owners
              - gc_sub
              - warehouse
              - facility_mgr
        id:
          type: string
        text:
          type: string
        position:
          type: number
      required:
        - assigneeRoleGroupIds
        - id
        - text
        - position
    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
    SelectedSourceDto:
      type: object
      properties:
        isDefault:
          type: boolean
        companyName:
          type: object
          nullable: true
        officeName:
          type: object
          nullable: true
      required:
        - isDefault
        - companyName
        - officeName
    CollectionApplicationProvenanceDto:
      type: object
      properties:
        collection:
          $ref: '#/components/schemas/CollectionApplicationCollectionProvenanceDto'
        entry:
          $ref: '#/components/schemas/CollectionApplicationEntryProvenanceDto'
        reference:
          nullable: true
          type: object
          allOf:
            - $ref: '#/components/schemas/CollectionApplicationReferenceProvenanceDto'
        application:
          $ref: '#/components/schemas/CollectionApplicationIdentityProvenanceDto'
        content:
          $ref: '#/components/schemas/CollectionApplicationContentProvenanceDto'
        governance:
          $ref: '#/components/schemas/CollectionApplicationGovernanceProvenanceDto'
      required:
        - collection
        - entry
        - reference
        - application
        - content
        - governance
    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
    CollectionApplicationCollectionProvenanceDto:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        brand:
          type: string
        region:
          type: string
        generation:
          type: number
        version:
          type: number
        navigable:
          type: boolean
      required:
        - id
        - name
        - brand
        - region
        - generation
        - version
        - navigable
    CollectionApplicationEntryProvenanceDto:
      type: object
      properties:
        id:
          type: string
        label:
          type: string
        productTypeLabel:
          type: string
      required:
        - id
        - label
        - productTypeLabel
    CollectionApplicationReferenceProvenanceDto:
      type: object
      properties:
        label:
          type: string
        kind:
          type: string
          enum:
            - catalog_item
            - spec_template
        referenceCode:
          type: string
          nullable: true
      required:
        - label
        - kind
        - referenceCode
    CollectionApplicationIdentityProvenanceDto:
      type: object
      properties:
        id:
          type: string
        createdAt:
          type: string
      required:
        - id
        - createdAt
    CollectionApplicationContentProvenanceDto:
      type: object
      properties:
        description:
          type: string
          nullable: true
        notes:
          type: array
          items:
            type: string
      required:
        - description
        - notes
    CollectionApplicationGovernanceProvenanceDto:
      type: object
      properties:
        mandatoryItem:
          type: boolean
        designReviewRequired:
          type: boolean
        optionalManufacturerNames:
          type: array
          items:
            type: string
      required:
        - mandatoryItem
        - designReviewRequired
        - optionalManufacturerNames
    PartsDiffEntryDto:
      type: object
      properties:
        catalogItemId:
          type: string
        projectQty:
          type: string
          nullable: true
        catalogQty:
          type: string
          nullable: true
      required:
        - catalogItemId
        - projectQty
        - catalogQty
  securitySchemes:
    bearer:
      scheme: bearer
      bearerFormat: JWT
      type: http

````