> ## 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 a new equipment package

> Creates a new equipment package (onboarding bundle) for the caller's organization. The package defines which SKUs are automatically ordered when a new joiner is onboarded. Gated by a feature flag; returns 403 when the flag is disabled.



## OpenAPI

````yaml /openapi.json post /api/v1/packages
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/packages:
    post:
      tags:
        - Packages
      summary: Create a new equipment package
      description: >-
        Creates a new equipment package (onboarding bundle) for the caller's
        organization. The package defines which SKUs are automatically ordered
        when a new joiner is onboarded. Gated by a feature flag; returns 403
        when the flag is disabled.
      operationId: createPackage
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreatePackageRequest'
        required: true
      responses:
        '201':
          description: Package created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreatePackageResponse'
        '400':
          description: Invalid request — validation error or missing required field
        '403':
          description: Feature flag disabled or access denied
        '404':
          description: Not Found
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/PublicApiHttpErrors'
        '409':
          description: Conflict
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/PublicApiHttpErrors'
components:
  schemas:
    CreatePackageRequest:
      type: object
      description: Request body for creating a package
      properties:
        name:
          type: string
          example: Engineering Starter Kit
          minLength: 1
        approval_required:
          type: boolean
          example: false
        require_justification:
          type: boolean
          example: false
        automatic_order:
          type: boolean
          example: false
        default_office_id:
          type: string
          format: uuid
          example: 3a68a467-8733-4c8d-a942-16ed7ec33018
        delivery_setting:
          type: string
          enum:
            - PERSON
            - OFFICE
            - FLEXIBLE
          example: PERSON
        note:
          type: string
          example: Standard package for new engineering hires
        sku_ids:
          type: array
          items:
            type: string
            format: uuid
        rules:
          type: array
          items:
            $ref: '#/components/schemas/PackageRuleRequest'
      required:
        - approval_required
        - automatic_order
        - delivery_setting
        - name
        - require_justification
    CreatePackageResponse:
      type: object
      description: Response body after creating a package
      properties:
        id:
          type: string
          format: uuid
          example: 3a68a467-8733-4c8d-a942-16ed7ec33018
        name:
          type: string
          example: Engineering Starter Kit
        slug:
          type: string
          example: engineering-starter-kit
        active:
          type: boolean
          example: true
        approval_required:
          type: boolean
          example: false
        require_justification:
          type: boolean
          example: false
        automatic_order:
          type: boolean
          example: false
        it_closet:
          type: boolean
          example: false
        delivery_setting:
          type: string
          enum:
            - PERSON
            - OFFICE
            - FLEXIBLE
          example: PERSON
        note:
          type: string
          example: Standard package for new engineering hires
        default_office_id:
          type: string
          format: uuid
          example: 3a68a467-8733-4c8d-a942-16ed7ec33018
        sku_ids:
          type: array
          items:
            type: string
            format: uuid
        rules:
          type: array
          items:
            $ref: '#/components/schemas/PackageRuleResponse'
        number_ordered:
          type: integer
          format: int32
          example: 0
        number_deployed:
          type: integer
          format: int32
          example: 0
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
      required:
        - active
        - approval_required
        - automatic_order
        - id
        - it_closet
        - name
        - number_deployed
        - number_ordered
        - require_justification
        - slug
    PublicApiHttpErrors:
      type: object
      properties:
        errors:
          type: array
          items:
            $ref: '#/components/schemas/PublicApiError'
      required:
        - errors
    PackageRuleRequest:
      type: object
      description: A rule for a package
      properties:
        category_code:
          type: string
          example: LAPTOP
          minLength: 1
        quantity:
          type: integer
          format: int32
          example: 1
        optional:
          type: boolean
          example: false
      required:
        - category_code
        - optional
        - quantity
    PackageRuleResponse:
      type: object
      description: A rule within a package
      properties:
        id:
          type: string
          format: uuid
          example: 3a68a467-8733-4c8d-a942-16ed7ec33018
        category_code:
          type: string
          example: LAPTOP
        quantity:
          type: integer
          format: int32
          example: 1
        optional:
          type: boolean
          example: false
        allowed_product_ids:
          type: array
          items:
            type: string
            format: uuid
      required:
        - category_code
        - id
        - optional
        - quantity
    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

````