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

# Offboard a person.



## OpenAPI

````yaml /openapi.json post /api/v1/people/{personId}/offboard
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/people/{personId}/offboard:
    post:
      tags:
        - People — Lifecycle
      summary: Offboard a person.
      operationId: offboard
      parameters:
        - name: personId
          in: path
          required: true
          schema:
            type: string
            format: uuid
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OffboardPersonRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Person'
        '400':
          description: Validation or business rule error
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/PublicApiHttpErrors'
        '403':
          description: Contract tier not available or feature flag disabled
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/PublicApiHttpErrors'
        '404':
          description: Person not found
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/PublicApiHttpErrors'
        '409':
          description: Conflict
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/PublicApiHttpErrors'
components:
  schemas:
    OffboardPersonRequest:
      type: object
      properties:
        personLastDate:
          type: string
          format: date
          description: Employee's last working date.
        returnType:
          type: string
          description: How the equipment will be returned.
          enum:
            - SHIP_TO_FIRSTBASE
            - SHIP_TO_OFFICE
            - DROPPED_TO_OFFICE
        officeId:
          type: string
          format: uuid
          description: >-
            Office ID. Required for SHIP_TO_OFFICE and DROPPED_TO_OFFICE return
            types.
        itemsToReturn:
          type: array
          description: >-
            Equipment to be returned or dropped off at the office. Behavior
            depends on returnType: ship paths create a return order;
            DROPPED_TO_OFFICE assigns inventory to officeId. Every eligible
            inventory item must appear in exactly one of itemsToReturn or
            itemsToNotReturn. Must-return (Firstbase-supplied HaaS) items must
            be listed here.
          items:
            $ref: '#/components/schemas/OffboardItemToReturn'
        itemsToNotReturn:
          type: array
          description: >-
            Equipment NOT being returned (with deploy reasons). Every eligible
            inventory item must appear in exactly one of itemsToReturn or
            itemsToNotReturn.
          items:
            $ref: '#/components/schemas/OffboardItemToNotReturn'
        address:
          $ref: '#/components/schemas/OffboardAddressInfo'
          description: >-
            Confirmed shipping address. Only allowed when
            addressValidationNeeded=false with a ship return type
            (SHIP_TO_FIRSTBASE/SHIP_TO_OFFICE) that has itemsToReturn. When
            supplied it overwrites the person's stored home address and is used
            for the return order. phoneNumber is optional; when omitted the
            person's existing phone number is preserved.
        addressValidationNeeded:
          type: boolean
          default: true
          description: >-
            When true (default), employee confirms shipping address before the
            return kit is sent. When false, the return order is auto-confirmed
            using the admin-supplied address; if there are no items to return,
            the person transitions directly to INACTIVE.
      required:
        - personLastDate
        - returnType
    Person:
      type: object
      description: A person (employee) record in Firstbase
      properties:
        id:
          type: string
          format: uuid
          description: Unique identifier for this person
          example: e2bd9633-46b4-4286-85bd-3403a3f17e0f
        role:
          type: string
          description: >-
            Role of this person within the organization (BASIC = standard
            employee, ADMIN = org admin)
          enum:
            - BASIC
            - ADMIN
          example: BASIC
        firstName:
          type: string
          description: First name of the person
          example: Jenny
        lastName:
          type: string
          description: Last name of the person
          example: Smith
        email:
          type: string
          description: Primary email address, used for platform login and notifications
          example: jenny@example.com
        secondaryEmail:
          type: string
          description: Secondary email address; null when not provided
          example: jenny@secondary.example.com
        phoneNumber:
          type: string
          description: Phone number from the person's home address; null when not provided
          example: 555-867-5309
        startDate:
          type: string
          format: date
          description: Employment start date, used to trigger onboarding timelines
          example: '2023-11-22'
        homeAddress:
          $ref: '#/components/schemas/AddressInfo'
          description: Home address of the person, used for equipment deliveries
        package:
          $ref: '#/components/schemas/Package'
          description: >-
            Equipment package currently assigned to this person; null when no
            package is assigned
        status:
          type: string
          description: >-
            Current lifecycle status of the person in Firstbase (e.g. INVITED,
            ACTIVE, OFFBOARDING)
          enum:
            - INVITED
            - ACTIVE
            - INACTIVE
            - DELETED
            - OFFBOARDING
            - CANNOT_REACTIVATE
        cpfNumber:
          type: string
          description: Brazilian CPF tax number; null for non-Brazilian employees
          example: 87523654789
      required:
        - email
        - firstName
        - id
        - lastName
        - role
        - status
    PublicApiHttpErrors:
      type: object
      properties:
        errors:
          type: array
          items:
            $ref: '#/components/schemas/PublicApiError'
      required:
        - errors
    OffboardItemToReturn:
      type: object
      properties:
        inventoryId:
          type: string
          format: uuid
          description: Inventory ID being returned or dropped off at office.
        returnReasonComment:
          type: string
          description: >-
            Optional free-text comment about the return. Only used for ship
            return types (SHIP_TO_FIRSTBASE, SHIP_TO_OFFICE). Rejected when
            non-blank on DROPPED_TO_OFFICE.
          maxLength: 500
          minLength: 0
        itad:
          type: boolean
          description: >-
            Whether to elect ITAD (IT Asset Disposition) for this item. Only
            used for ship return types. Not allowed for subscription/HaaS items.
            Rejected when true on DROPPED_TO_OFFICE.
      required:
        - inventoryId
    OffboardItemToNotReturn:
      type: object
      properties:
        inventoryId:
          type: string
          format: uuid
          description: Inventory ID NOT being returned.
        deployReason:
          type: string
          description: Reason this item is not being returned.
          enum:
            - ASSIGNED_TO_ADMIN
            - AWAITING_INFORMATION
            - BOUGHT_OUT
            - CANCELLED_BY_FIRSTBASE
            - CANCELLED_BY_VENDOR
            - CHURNED_CUSTOMER
            - DATA_ERROR
            - DATA_HOLD
            - DECOMMISSIONED_BY_EMPLOYER
            - DECOMMISSIONED_BY_FIRSTBASE
            - END_OF_USEFUL_LIFE_DESTROYED
            - END_OF_USEFUL_LIFE_DONATED
            - PENDING_FULFILLMENT
            - GIFTED_BY_EMPLOYER
            - GIFTED_BY_FIRSTBASE
            - IN_TRANSIT
            - LOCKED_APPLE_ACTIVATION
            - LOCKED_FMD_REPORTED_LOST_STOLEN
            - LOCKED_MDM
            - LOCKED_PIN
            - LOST_BY_FIRSTBASE
            - LOST_IN_TRANSIT
            - LOST_BY_WORKER
            - MARKED_FOR_DESTRUCTION
            - NA
            - NEVER_RECEIVED_BY_WORKER
            - NEVER_RETURNED_BY_WORKER
            - OTHER
            - OUT_FOR_DESTRUCTION
            - OUT_FOR_REPAIR
            - PENDING_BUY_OUT
            - PENDING_HOLD_RELEASE
            - RECYCLING_REQUESTED
            - REQUIRES_CLEANING
            - REQUIRES_REPAIR
            - RETURN_IN_PROGRESS
            - SENT_TO_OFFICE
            - STOLEN
            - UNRESPONSIVE_WORKER
            - UNSUPPORTED_REGION
            - PERSONAL_DEVICE
        deployReasonDetail:
          type: string
          description: >-
            Free-text detail. Required when deployReason is OTHER. Maximum 35
            characters.
          maxLength: 35
          minLength: 0
        hasRequiredReasonDetail:
          type: boolean
      required:
        - deployReason
        - hasRequiredReasonDetail
        - inventoryId
    OffboardAddressInfo:
      type: object
      properties:
        addressLine1:
          type: string
          example: 123
        addressLine2:
          type: string
          example: Suite 103
        administrativeArea:
          type: string
          description: the state or county
          example: NY
        countryCode:
          type: string
          description: ISO 3166-1 alpha-2 country code
          example: US
        locality:
          type: string
          description: the city
          example: New York City
        postalCode:
          type: string
          description: the postal code or zip code
          example: 10123
        phoneNumber:
          type: string
          description: >-
            Phone number for the return shipping address. When omitted, the
            person's existing phone number is preserved.
          example: 555-867-5309
      required:
        - countryCode
    AddressInfo:
      type: object
      properties:
        addressLine1:
          type: string
          example: 123
        addressLine2:
          type: string
          example: Suite 103
        administrativeArea:
          type: string
          description: the state or county
          example: NY
        countryCode:
          type: string
          description: ISO 3166-1 alpha-2 country code
          example: US
        locality:
          type: string
          description: the city
          example: New York City
        postalCode:
          type: string
          description: the postal code or zip code
          example: 10123
      required:
        - countryCode
    Package:
      type: object
      description: >-
        An equipment package (onboarding bundle) that can be assigned to a
        person
      properties:
        id:
          type: string
          format: uuid
          description: Unique identifier for this package
          example: 3a68a467-8733-4c8d-a942-16ed7ec33018
        name:
          type: string
          description: Display name of the package
          example: The works
        automaticOrder:
          type: boolean
          description: >-
            When true, an equipment order is placed automatically when a person
            with this package is onboarded
          example: false
        approvalRequired:
          type: boolean
          description: >-
            When true, orders from this package require manager approval before
            being processed
          example: false
        requireJustification:
          type: boolean
          description: When true, order items in this package require a justification
          example: false
        active:
          type: boolean
          description: >-
            Whether this package is currently active. Inactive packages cannot
            be used for new assignments
          example: true
        skuIds:
          type: array
          description: >-
            List of SKU IDs included in this package; null when no SKUs are
            configured
          examples:
            - 3cf416c1-1b0f-4344-9cec-ba9c9fe615c9
          items:
            type: string
            format: uuid
        assignedTo:
          $ref: '#/components/schemas/PackageAssignedToInformation'
          description: People and groups currently assigned to this package
      required:
        - active
        - approvalRequired
        - assignedTo
        - automaticOrder
        - id
        - name
        - requireJustification
    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
    PackageAssignedToInformation:
      type: object
      properties:
        people:
          type: array
          description: >-
            List of people assigned to this package. Each entry contains
            identifying information for a person linked to this package
            assignment.
          examples:
            - 3cf416c1-1b0f-4344-9cec-ba9c9fe615c9
          items:
            type: string
            format: uuid
  securitySchemes:
    ApiKey:
      type: apiKey
      description: Prefix the value with "ApiKey" to indicate the custom authorization type
      name: Authorization
      in: header

````