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

# Update an employee

> Updates an employee. Properties the request does not name are left unchanged, and passing `null` clears one. Supplying `roles` replaces every role the employee holds.



## OpenAPI

````yaml /api/openapi.json patch /v1/employees/{id}
openapi: 3.0.0
info:
  title: Vori API
  description: ''
  version: 1.0.0
  contact: {}
servers:
  - url: https://api.vori.com
    description: production
security: []
tags: []
paths:
  /v1/employees/{id}:
    patch:
      tags:
        - Employees
      summary: Update an employee
      description: >-
        Updates an employee. Properties the request does not name are left
        unchanged, and passing `null` clears one. Supplying `roles` replaces
        every role the employee holds.
      operationId: updateEmployee
      parameters:
        - name: id
          required: true
          in: path
          schema:
            type: string
            pattern: ^[0-9]+$
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateEmployeeRequest'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Employee'
        '400':
          description: ''
          content:
            application/json:
              schema:
                anyOf:
                  - $ref: '#/components/schemas/PinAlreadyAssignedError'
                  - $ref: '#/components/schemas/BarcodeAlreadyAssignedError'
                  - $ref: '#/components/schemas/EmailAddressAlreadyAssignedError'
                  - $ref: >-
                      #/components/schemas/MissingCredentialsForAuthenticationRuleError
                  - $ref: '#/components/schemas/InvalidAuthenticationRuleError'
                  - $ref: '#/components/schemas/InvalidEmployeeRoleError'
                  - $ref: '#/components/schemas/InvalidStoreError'
                  - $ref: '#/components/schemas/DeactivatedEmployeeCredentialsError'
                  - $ref: '#/components/schemas/EmployeeNotUserEditableError'
        '403':
          description: ''
          content:
            application/json:
              schema:
                anyOf:
                  - $ref: '#/components/schemas/InsufficientPermissionsError'
                  - $ref: '#/components/schemas/NoBannerAssociationError'
        '404':
          description: ''
      security:
        - bearer: []
components:
  schemas:
    UpdateEmployeeRequest:
      type: object
      properties:
        authentication_rule:
          nullable: true
          default: null
          description: >-
            How the employee signs in at the point of sale, or null to sign in
            with a PIN. Every method the rule names must have its credential set
            on the employee.
          allOf:
            - $ref: '#/components/schemas/AuthenticationRule'
        badge_barcode:
          type: string
          nullable: true
          default: null
          description: >-
            Barcode on the badge the employee scans to sign in at the point of
            sale, or null for none. Unique within the banner. A deactivated
            employee cannot hold one unless the same request reactivates them.
        deactivated_at:
          type: string
          nullable: true
          description: >-
            When the employee was deactivated. Null means active, so setting it
            back to null reactivates the employee. Deactivating releases the
            employee's PIN and barcode so another employee can take them.
          format: date-time
        email_address:
          type: string
          nullable: true
          default: null
          description: >-
            Employee's email address, or null for none. Unique within the
            banner.
          format: email
          maxLength: 254
        first_name:
          type: string
          description: Employee's first name.
        last_name:
          type: string
          description: Employee's last name.
        pin:
          type: string
          nullable: true
          default: null
          minLength: 6
          maxLength: 6
          description: >-
            Numeric PIN the employee enters to sign in at the point of sale, or
            null for none. Six digits, and unique within the banner. A
            deactivated employee cannot hold one unless the same request
            reactivates them.
          pattern: ^[0-9]+$
        roles:
          description: >-
            Roles the employee holds. Supplying this replaces every role the
            employee holds.
          maxItems: 200
          type: array
          items:
            $ref: '#/components/schemas/UpdateEmployeeRole'
      description: >-
        Values for updating an employee. An omitted property is left unchanged,
        and an explicit null clears a property that permits one.
    Employee:
      type: object
      properties:
        id:
          type: string
          description: Unique identifier for the record.
        authentication_rule:
          nullable: true
          description: >-
            Effective rule that determines how the employee authenticates at the
            POS.
          allOf:
            - $ref: '#/components/schemas/AuthenticationRule'
        badge_barcode:
          type: string
          nullable: true
          description: >-
            Barcode on the badge the employee scans to sign in at the point of
            sale, or null when none is configured. Returned only when requested
            with `include=badge_barcode` by a caller holding the
            `employees:read_credentials` permission, and absent from the
            response otherwise.
        created_at:
          type: string
          description: When the record was created.
          format: date-time
        deactivated_at:
          type: string
          nullable: true
          description: >-
            When the employee was deactivated, or null when the employee is
            active.
          format: date-time
        editable:
          type: boolean
          description: >-
            Whether the employee can be changed. Employees Vori creates and
            manages are not editable.
        email_address:
          type: string
          nullable: true
          description: Employee's email address, or null when none is configured.
          format: email
          maxLength: 254
        first_name:
          type: string
          description: Employee's first name.
        last_name:
          type: string
          description: Employee's last name.
        pin:
          type: string
          nullable: true
          minLength: 6
          maxLength: 6
          description: >-
            Numeric PIN used by the employee for POS authentication, or null
            when none is configured. Returned only when requested with
            `include=pin` by a caller holding the `employees:read_credentials`
            permission, and absent from the response otherwise.
          pattern: ^[0-9]+$
        roles:
          description: Roles assigned to the employee.
          type: array
          items:
            $ref: '#/components/schemas/EmployeeRole'
        updated_at:
          type: string
          description: When the record was last changed.
          format: date-time
        virtual:
          type: boolean
          description: >-
            Whether the employee exists only to attribute orders and cannot sign
            in at a terminal.
      description: >-
        A staff member at a store, to whom point-of-sale activity can be
        attributed.
      required:
        - id
        - authentication_rule
        - created_at
        - deactivated_at
        - editable
        - email_address
        - first_name
        - last_name
        - roles
        - updated_at
        - virtual
    PinAlreadyAssignedError:
      type: object
      properties:
        error_code:
          type: string
          enum:
            - pin_already_assigned
      required:
        - error_code
    BarcodeAlreadyAssignedError:
      type: object
      properties:
        error_code:
          type: string
          enum:
            - barcode_already_assigned
      required:
        - error_code
    EmailAddressAlreadyAssignedError:
      type: object
      properties:
        error_code:
          type: string
          enum:
            - email_address_already_assigned
      required:
        - error_code
    MissingCredentialsForAuthenticationRuleError:
      type: object
      properties:
        error_code:
          type: string
          enum:
            - missing_credentials_for_authentication_rule
      required:
        - error_code
    InvalidAuthenticationRuleError:
      type: object
      properties:
        error_code:
          type: string
          enum:
            - invalid_authentication_rule
      required:
        - error_code
    InvalidEmployeeRoleError:
      type: object
      properties:
        error_code:
          type: string
          enum:
            - invalid_employee_role
      required:
        - error_code
    InvalidStoreError:
      type: object
      properties:
        error_code:
          type: string
          enum:
            - invalid_store
      required:
        - error_code
    DeactivatedEmployeeCredentialsError:
      type: object
      properties:
        error_code:
          type: string
          enum:
            - deactivated_employee_credentials
      required:
        - error_code
    EmployeeNotUserEditableError:
      type: object
      properties:
        error_code:
          type: string
          enum:
            - employee_not_user_editable
      required:
        - error_code
    InsufficientPermissionsError:
      type: object
      properties:
        error_code:
          type: string
          enum:
            - insufficient_permissions
        error_details:
          $ref: '#/components/schemas/InsufficientPermissionsErrorDetails'
      required:
        - error_code
        - error_details
    NoBannerAssociationError:
      type: object
      properties:
        error_code:
          type: string
          enum:
            - no_banner_association
      required:
        - error_code
    AuthenticationRule:
      type: object
      properties:
        methods:
          type: array
          minItems: 1
          description: >-
            The credentials the employee presents to sign in. Never empty, and
            every method named must have its credential set on the employee,
            whichever operator the rule uses.
          items:
            $ref: '#/components/schemas/AuthenticationMethod'
        operator:
          description: >-
            How the methods combine: `and` requires every one of them, `or`
            requires any one of them.
          allOf:
            - $ref: '#/components/schemas/AuthenticationRuleOperator'
      description: >-
        How an employee proves their identity at the point of sale. An active
        employee with no rule of their own authenticates with a PIN.
      required:
        - methods
        - operator
    UpdateEmployeeRole:
      type: object
      properties:
        name:
          description: The role to grant.
          allOf:
            - $ref: '#/components/schemas/AssignableRoleName'
        store_id:
          type: string
          nullable: true
          description: >-
            The store the role applies at, or null to apply it at every store in
            the banner.
          pattern: ^[0-9]+$
      description: A role to grant an employee, and the store it applies at.
      required:
        - name
    EmployeeRole:
      type: object
      properties:
        id:
          type: string
          description: Unique identifier for the role that is held.
        name:
          description: Name of the role.
          allOf:
            - $ref: '#/components/schemas/RoleName'
        store_id:
          type: string
          nullable: true
          description: >-
            The store the role applies at, or null when it applies at every
            store in the banner.
      description: >-
        A role held by an employee, and the store it applies at. The same role
        can be held at more than one store.
      required:
        - id
        - name
        - store_id
    InsufficientPermissionsErrorDetails:
      type: object
      properties:
        action:
          allOf:
            - $ref: '#/components/schemas/Action'
        resource:
          allOf:
            - $ref: '#/components/schemas/Resource'
      required:
        - action
        - resource
    AuthenticationMethod:
      type: string
      enum:
        - barcode
        - pin
    AuthenticationRuleOperator:
      type: string
      enum:
        - and
        - or
    AssignableRoleName:
      type: string
      enum:
        - manager
    RoleName:
      type: string
      enum:
        - everyone
        - manager
    Action:
      type: string
      enum:
        - '*'
        - cancel
        - check_in
        - create
        - delete
        - read
        - read_credentials
        - record_events
        - refund
        - restart
        - update
        - void
    Resource:
      type: string
      enum:
        - '*'
        - accounting_integration
        - agent_chats
        - api_clients
        - asynchronous_tasks
        - banners
        - blackhawk_transactions
        - capabilities
        - coupons
        - custom_quick_actions
        - datacap_transactions
        - departments
        - discounts
        - ditto_auth_tokens
        - edge_agents
        - electronic_shelf_labels
        - employees
        - files
        - food_modifiers
        - gift_cards
        - gl_code_mappings
        - house_accounts
        - inventory
        - inventory_sessions
        - inventory_settings
        - invoices
        - item_modifiers
        - label_dimension_sets
        - label_sheet_profiles
        - label_stock_products
        - lanes
        - loyalty_bonuses
        - loyalty_campaigns
        - loyalty_rewards
        - notification_templates
        - offers
        - order_guides
        - pos_banner_configurations
        - pos_orders
        - pos_tills
        - price_tags
        - product_ranges
        - products
        - promotions
        - purchase_orders
        - receiving
        - reporting
        - revision_sessions
        - revisions
        - roles
        - shopper_tags
        - shoppers
        - store_product_inventory_counts
        - store_product_lots
        - store_product_rules
        - store_product_tag_templates
        - store_snap_incentive_program_coupons
        - store_vendor_merge_requests
        - store_vendor_product_merge_requests
        - store_vendor_products
        - store_vendors
        - stores
        - tag_printings
        - tag_template_presets
        - tag_templates
        - tax_rates
        - users
        - variable_weights
        - vendor_merge_requests
        - vendor_product_merge_requests
        - vendors
        - wallet_payments
        - wic_products
  securitySchemes:
    bearer:
      type: http
      scheme: bearer

````

## Related topics

- [Deactivate an employee](/api-reference/employees/deactivate-an-employee.md)
- [Retrieve an employee](/api-reference/employees/retrieve-an-employee.md)
- [List employees](/api-reference/employees/list-employees.md)
