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

# Create an asset

> Creates a new asset (inventory item) in the organization's inventory. Identify the product either by sku_id (for known SKUs) or by category_code + description (for custom products). Assign the asset to a person (person_id) or an office (office_id).



## OpenAPI

````yaml /openapi.json post /api/v1/assets
openapi: 3.1.0
info:
  title: Firstbase API Specification Beta
  description: Integration endpoints for Firstbase
  version: 0.1.0
servers:
  - url: /
    description: Default
security:
  - ApiKey: []
tags:
  - name: Inventory Orders
    description: Create and manage inventory orders
  - name: Shipment Notices V1
    description: 'Query shipment notice orders (V1: package items expose `inventories` list)'
  - name: Packages
    description: ''
  - name: Categories
    description: Query available categories for asset creation
  - name: Catalog
    description: ''
  - name: New Joiners
    description: New joiner provisioning pipeline for the organization
  - name: Orders
    description: ''
  - name: People
    description: >-
      Manage the users of Firstbase for your organization. API follows the SCIM
      standard.
    externalDocs:
      url: https://scim.cloud/
  - name: People — Lifecycle
    description: Offboard and reactivate users.
  - name: Assets
    description: Manage inventory assets
  - name: Regions V1
    description: Query regions (V1)
  - name: Warehouses V1
    description: Query warehouses (V1)
  - name: Brands
    description: Query available brands for asset creation
  - name: Inventory
    description: ''
  - name: Replacements
    description: Create and manage equipment replacements
  - name: Offices
    description: Manage and query office locations for the authenticated organization
  - name: Returns
    description: Return and Replacements
paths:
  /api/v1/assets:
    post:
      tags:
        - Assets
      summary: Create an asset
      description: >-
        Creates a new asset (inventory item) in the organization's inventory.
        Identify the product either by sku_id (for known SKUs) or by
        category_code + description (for custom products). Assign the asset to a
        person (person_id) or an office (office_id).
      operationId: createAsset
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateAssetRequest'
        required: true
      responses:
        '201':
          description: Asset created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AssetResponse'
        '400':
          description: Bad request — validation error or invalid input
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicApiHttpErrors'
        '403':
          description: Forbidden — feature flag is disabled or access denied
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicApiHttpErrors'
        '404':
          description: Person, office, or SKU not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicApiHttpErrors'
        '409':
          description: Conflict
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/PublicApiHttpErrors'
components:
  schemas:
    CreateAssetRequest:
      type: object
      description: Request to create an asset (inventory item)
      properties:
        sku_id:
          type: string
          format: uuid
          description: >-
            SKU ID for known products. Mutually exclusive with
            category_code+description.
          example: ed92d1a0-a8ee-4768-bbcb-26dd4bfdf8a4
        category_code:
          type: string
          description: >-
            Category code for custom/legacy products. Mutually exclusive with
            sku_id.
          example: LAPTOP
        brand_code:
          type: string
          description: >-
            Brand code. Optional, used with category_code. Accepts legacy
            vendor_code.
          example: APPLE
        brand_id:
          type: string
          format: uuid
          description: >-
            Brand ID. Optional alternative to brand_code. Accepts legacy
            vendor_id.
          example: ed92d1a0-a8ee-4768-bbcb-26dd4bfdf8a4
        description:
          type: string
          description: Product description. Required when category_code is provided.
          example: MacBook Pro 14" M3
        serial_number:
          type: string
          description: Serial number of the asset.
          example: C02ZX1ABCDEF
        condition:
          type: string
          description: Condition of the asset.
          enum:
            - NEW
            - USED_LIKE_NEW
            - USED_GOOD
            - USED_FAIR
            - USED
            - USED_POOR
            - UNUSABLE
          example: NEW
        renewal_date:
          type: string
          format: date
          description: >-
            Renewal date for the asset. Defaults to a calculated date based on
            the organization's refresh policy if not provided.
          example: '2027-01-15'
        person_id:
          type: string
          format: uuid
          description: Person ID to assign the asset to. Mutually exclusive with office_id.
          example: ed92d1a0-a8ee-4768-bbcb-26dd4bfdf8a4
        office_id:
          type: string
          format: uuid
          description: >-
            Office ID to assign the asset to. Mutually exclusive with
            person_slug.
          example: ed92d1a0-a8ee-4768-bbcb-26dd4bfdf8a4
      required:
        - condition
    AssetResponse:
      type: object
      description: Newly created inventory asset item response
      properties:
        id:
          type: string
          format: uuid
          description: Unique identifier for the created inventory item
          example: ed92d1a0-a8ee-4768-bbcb-26dd4bfdf8a4
        sku_id:
          type: string
          format: uuid
          description: >-
            ID of the SKU (product variant) this item is associated with; null
            for custom/generic assets
          example: ed92d1a0-a8ee-4768-bbcb-26dd4bfdf8a4
        brand_code:
          type: string
          description: >-
            Brand code of the SKU vendor; null when the asset has no associated
            SKU vendor
          example: APPLE_US
        serial_number:
          type: string
          description: >-
            Hardware serial number of the device; null when not provided at
            creation
          example: C02ZX1ABCDEF
        condition:
          type: string
          description: Physical condition of the item at creation time (NEW or USED)
          enum:
            - NEW
            - USED_LIKE_NEW
            - USED_GOOD
            - USED_FAIR
            - USED
            - USED_POOR
            - UNUSABLE
          example: NEW
        deploy_status:
          type: string
          description: >-
            Current lifecycle state of the item after creation (typically
            DEPLOYED when assigned to a person, AVAILABLE when assigned to an
            office)
          enum:
            - ARCHIVED
            - AVAILABLE
            - AWAITING_ARRIVAL
            - DEPLOYED
            - GIFTED
            - LOCKED
            - ON_HOLD
            - OUT_FOR_REPAIR
            - UNAVAILABLE
            - VOIDED
          example: DEPLOYED
        description:
          type: string
          description: >-
            Free-text product description; populated for custom/generic SKUs
            when sku_id is null
          example: MacBook Pro 14" M3
        renewal_date:
          type: string
          format: date
          description: Date when this item is scheduled for renewal or replacement
          example: '2027-01-15'
        person_id:
          type: string
          format: uuid
          description: >-
            ID of the person this item is assigned to; null when assigned to an
            office
          example: ed92d1a0-a8ee-4768-bbcb-26dd4bfdf8a4
        office_id:
          type: string
          format: uuid
          description: >-
            ID of the office this item is assigned to; null when assigned to a
            person
          example: ed92d1a0-a8ee-4768-bbcb-26dd4bfdf8a4
        created_at:
          type: string
          format: date-time
          description: Timestamp (UTC) when this inventory item was created
          example: '2024-01-15T10:30:00Z'
        apple_business:
          $ref: '#/components/schemas/AssetAppleBusiness'
          description: >-
            Apple Business Manager assignment for serialized Apple assets.
            Omitted for non-Apple or non-serialized items.
      required:
        - id
    PublicApiHttpErrors:
      type: object
      properties:
        errors:
          type: array
          items:
            $ref: '#/components/schemas/PublicApiError'
      required:
        - errors
    AssetAppleBusiness:
      type: object
      description: Apple Business Manager assignment status
      properties:
        assignment_status:
          type: string
          description: Whether the device is assigned in Apple Business Manager
          enum:
            - ASSIGNED
            - NOT_ASSIGNED
          example: ASSIGNED
        last_sync_timestamp:
          type: string
          format: date-time
          description: >-
            UTC timestamp of the last successful ABM sync; null when never
            synced
          example: '2026-07-01T12:00:00Z'
        next_sync_timestamp:
          type: string
          format: date-time
          description: UTC timestamp of the next scheduled ABM full sync
          example: '2026-07-02T02:00:00Z'
      required:
        - assignment_status
        - next_sync_timestamp
    PublicApiError:
      type: object
      properties:
        detail:
          type: string
          description: Human-readable description of the error
          example: Invalid request
        source:
          type: string
          description: >-
            Entity or field path that caused the error (for example order,
            shipmentNotice, or person:email)
          example: request
      required:
        - detail
        - source
  securitySchemes:
    ApiKey:
      type: apiKey
      description: Prefix the value with "ApiKey" to indicate the custom authorization type
      name: Authorization
      in: header

````