openapi: 3.0.3 info: title: Lattice HRIS Competencies Users API description: 'REST API (v2) for Lattice''s HRIS product covering employee records, organizational hierarchy, and HR core data. Supports service account Bearer token authentication and is designed for HR system integrations including Okta SCIM provisioning. Also exposes v2 review submission endpoints shared with the Talent API. ' version: v2 contact: name: Lattice Developer Support email: customercare@lattice.com url: https://developers.lattice.com termsOfService: https://lattice.com/legal/terms-of-service license: name: Proprietary url: https://lattice.com/legal/terms-of-service servers: - url: https://api.latticehq.com/v2 description: Lattice HRIS API v2 production server security: - BearerAuth: [] tags: - name: Users description: Manage and retrieve user records paths: /users: get: summary: List users operationId: listUsers tags: - Users description: 'Returns a paginated list of users in Lattice. By default, returns active users. A status parameter of NULL will retrieve all users regardless of status. ' parameters: - $ref: '#/components/parameters/limit' - $ref: '#/components/parameters/startingAfter' - name: status in: query required: false schema: type: string enum: - ACTIVE - INVITED - CREATED - DEACTIVATED - null description: Filter by user status; NULL returns all users. responses: '200': description: Paginated list of users content: application/json: schema: $ref: '#/components/schemas/UserList' '400': $ref: '#/components/responses/BadRequest' '422': $ref: '#/components/responses/UnprocessableEntity' '500': $ref: '#/components/responses/ServerError' /user/{id}: get: summary: Get user by ID operationId: getUser tags: - Users description: Returns a user with the given id. If cannot find user, returns a 404. parameters: - name: id in: path required: true schema: type: string description: The user identifier responses: '200': description: User object content: application/json: schema: $ref: '#/components/schemas/User' '400': $ref: '#/components/responses/BadRequest' '404': $ref: '#/components/responses/NotFound' '422': $ref: '#/components/responses/UnprocessableEntity' '500': $ref: '#/components/responses/ServerError' /user/{id}/directReports: get: summary: List direct reports for a user operationId: listUserDirectReports tags: - Users description: Returns a paginated list of direct reports for a specific user. parameters: - name: id in: path required: true schema: type: string description: The user identifier - $ref: '#/components/parameters/limit' - $ref: '#/components/parameters/startingAfter' responses: '200': description: Paginated list of users content: application/json: schema: $ref: '#/components/schemas/UserList' '400': $ref: '#/components/responses/BadRequest' '404': $ref: '#/components/responses/NotFound' '422': $ref: '#/components/responses/UnprocessableEntity' '500': $ref: '#/components/responses/ServerError' /user/{id}/tasks: get: summary: List tasks for a user operationId: listUserTasks tags: - Users description: Returns a paginated list of tasks for a specific user. parameters: - name: id in: path required: true schema: type: string description: The user identifier - $ref: '#/components/parameters/limit' - $ref: '#/components/parameters/startingAfter' responses: '200': description: Paginated list of tasks content: application/json: schema: $ref: '#/components/schemas/TaskList' '400': $ref: '#/components/responses/BadRequest' '404': $ref: '#/components/responses/NotFound' '422': $ref: '#/components/responses/UnprocessableEntity' '500': $ref: '#/components/responses/ServerError' /user/{id}/customAttributes: get: summary: List custom attributes for a user operationId: listUserCustomAttributes tags: - Users description: Returns custom attribute values for a specific user. parameters: - name: id in: path required: true schema: type: string description: The user identifier responses: '200': description: List of custom attribute values content: application/json: schema: $ref: '#/components/schemas/CustomAttributeValueList' '400': $ref: '#/components/responses/BadRequest' '404': $ref: '#/components/responses/NotFound' '422': $ref: '#/components/responses/UnprocessableEntity' '500': $ref: '#/components/responses/ServerError' components: schemas: PaginatedList: type: object properties: object: type: string enum: - list hasMore: type: boolean description: Whether or not there are more elements available after this set endingCursor: type: string nullable: true description: The cursor to use to get the next set of items in the list required: - object - hasMore CustomAttribute: type: object properties: id: type: string object: type: string name: type: string description: type: string nullable: true type: type: string required: - id - object - name - type ObjectReference: type: object description: A lightweight reference to another Lattice object properties: id: type: string object: type: string url: type: string required: - id - object - url Task: type: object properties: id: type: string object: type: string url: type: string name: type: string description: type: string nullable: true dueDate: type: string format: date nullable: true completedAt: type: integer nullable: true description: Unix timestamp createdAt: type: integer description: Unix timestamp updatedAt: type: integer description: Unix timestamp required: - id - object - url - name - createdAt - updatedAt CustomAttributeValueList: allOf: - $ref: '#/components/schemas/PaginatedList' - type: object properties: data: type: array items: $ref: '#/components/schemas/CustomAttributeValue' required: - data ErrorResponse: type: object properties: error: type: string description: Human-readable error message required: - error UserList: allOf: - $ref: '#/components/schemas/PaginatedList' - type: object properties: data: type: array items: $ref: '#/components/schemas/User' required: - data TaskList: allOf: - $ref: '#/components/schemas/PaginatedList' - type: object properties: data: type: array items: $ref: '#/components/schemas/Task' required: - data User: type: object properties: id: type: string object: type: string url: type: string name: type: string nullable: true preferredName: type: string nullable: true email: type: string format: email title: type: string nullable: true status: type: string enum: - ACTIVE - INVITED - CREATED - DEACTIVATED isAdmin: type: boolean externalUserId: type: string nullable: true manager: $ref: '#/components/schemas/ObjectReference' nullable: true department: $ref: '#/components/schemas/ObjectReference' nullable: true directReports: $ref: '#/components/schemas/ListReference' tasks: $ref: '#/components/schemas/ListReference' customAttributes: $ref: '#/components/schemas/ListReference' timezone: type: string nullable: true startDate: type: string format: date nullable: true birthDate: type: string format: date nullable: true gender: type: string nullable: true jobFunction: type: string nullable: true jobLevel: type: string nullable: true jobType: type: string nullable: true createdAt: type: integer description: Unix timestamp updatedAt: type: integer description: Unix timestamp required: - id - object - url - email - status - isAdmin - directReports - tasks - customAttributes CustomAttributeValue: type: object properties: id: type: string object: type: string attribute: $ref: '#/components/schemas/CustomAttribute' value: type: string nullable: true required: - id - object - attribute ListReference: type: object description: A reference to a paginated list of related objects properties: object: type: string enum: - list url: type: string required: - object - url parameters: startingAfter: name: startingAfter in: query required: false schema: type: string description: Cursor for fetching the next page of results limit: name: limit in: query required: false schema: type: integer format: int32 description: Maximum number of items to return per page responses: ServerError: description: Server error while processing request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' BadRequest: description: Invalid request parameters content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' NotFound: description: Could not find the requested resource content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' UnprocessableEntity: description: Unprocessable - request is syntactically valid but cannot be processed content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' securitySchemes: BearerAuth: type: http scheme: bearer description: 'Service account API key passed as a Bearer token in the Authorization header. Example: Authorization: Bearer '