Documentation
Documentation
https://developers.lattice.com/reference/introduction
Documentation
https://developers.lattice.com
openapi: 3.0.3
info:
title: Lattice HRIS Competencies Goals 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: Goals
description: Create, read, and update goals and OKRs
paths:
/goals:
get:
summary: List goals
operationId: listGoals
tags:
- Goals
description: Returns a paginated list of goals in Lattice.
parameters:
- $ref: '#/components/parameters/limit'
- $ref: '#/components/parameters/startingAfter'
- name: state
in: query
required: false
schema:
$ref: '#/components/schemas/GoalStateEnum'
description: Filter by goal state
responses:
'200':
description: Paginated list of goals
content:
application/json:
schema:
$ref: '#/components/schemas/GoalList'
'400':
$ref: '#/components/responses/BadRequest'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'500':
$ref: '#/components/responses/ServerError'
post:
summary: Create goal
operationId: createGoal
tags:
- Goals
description: Creates a new goal in Lattice.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/GoalCreate'
responses:
'200':
description: Created goal object
content:
application/json:
schema:
$ref: '#/components/schemas/Goal'
'400':
$ref: '#/components/responses/BadRequest'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'500':
$ref: '#/components/responses/ServerError'
/goal/{id}:
get:
summary: Get goal by ID
operationId: getGoal
tags:
- Goals
description: Returns a goal with the given id. If cannot find goal, returns a 404.
parameters:
- name: id
in: path
required: true
schema:
type: string
description: The goal identifier
responses:
'200':
description: Goal object
content:
application/json:
schema:
$ref: '#/components/schemas/Goal'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'500':
$ref: '#/components/responses/ServerError'
/goals/{id}:
put:
summary: Update goal
operationId: updateGoal
tags:
- Goals
description: Updates an existing goal with the provided information.
parameters:
- name: id
in: path
required: true
schema:
type: string
format: uuid
description: The unique identifier of the goal to update
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/GoalUpdate'
responses:
'200':
description: Updated goal object
content:
application/json:
schema:
$ref: '#/components/schemas/Goal'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'500':
$ref: '#/components/responses/ServerError'
/user/{id}/goals:
get:
summary: List goals for a user
operationId: listUserGoals
tags:
- Goals
description: Returns a paginated list of goals 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 goals
content:
application/json:
schema:
$ref: '#/components/schemas/GoalList'
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'500':
$ref: '#/components/responses/ServerError'
components:
schemas:
GoalCreate:
type: object
properties:
name:
type: string
startDate:
type: string
format: date
dueDate:
type: string
format: date
ownerIds:
type: array
items:
type: string
format: uuid
minItems: 1
description:
type: string
priority:
type: number
minimum: 1
maximum: 10
private:
type: boolean
default: false
okrType:
$ref: '#/components/schemas/OkrTypeEnum'
amountType:
type: string
enum:
- percent
- dollar
- digit
- binary
nullable: true
startingAmount:
type: number
nullable: true
goalAmount:
type: number
nullable: true
companyGoal:
type: boolean
default: false
departmentId:
type: string
format: uuid
nullable: true
departmentsVisibleToIds:
type: array
items:
type: string
format: uuid
goalCycleId:
type: string
format: uuid
nullable: true
tagNames:
type: array
items:
type: string
maxItems: 5
isDraft:
type: boolean
default: false
parentId:
type: string
format: uuid
nullable: true
required:
- name
- startDate
- dueDate
- ownerIds
GoalList:
allOf:
- $ref: '#/components/schemas/PaginatedList'
- type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/Goal'
required:
- data
GoalStateEnum:
type: string
enum:
- Draft
- Active
- Ended
- Archived
OkrTypeEnum:
type: string
enum:
- objective
- key_result
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
ErrorResponse:
type: object
properties:
error:
type: string
description: Human-readable error message
required:
- error
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
AmountTypeEnum:
type: string
enum:
- Percent
- Dollar
- Digit
- Binary
GoalStatusEnum:
type: string
enum:
- NotUpdated
- OnTrack
- Progressing
- OffTrack
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
Goal:
type: object
properties:
id:
type: string
object:
type: string
url:
type: string
name:
type: string
description:
type: string
nullable: true
description: Markdown-formatted description
state:
$ref: '#/components/schemas/GoalStateEnum'
status:
$ref: '#/components/schemas/GoalStatusEnum'
goalType:
$ref: '#/components/schemas/GoalTypeEnum'
okrType:
$ref: '#/components/schemas/OkrTypeEnum'
isPrivate:
type: boolean
priority:
type: integer
nullable: true
amountType:
$ref: '#/components/schemas/AmountTypeEnum'
nullable: true
startingAmount:
type: number
format: float
nullable: true
endingAmount:
type: number
format: float
nullable: true
currentAmount:
type: number
format: float
nullable: true
startDate:
type: string
format: date
nullable: true
dueDate:
type: string
format: date
nullable: true
createdAt:
type: integer
description: Unix timestamp
updatedAt:
type: integer
description: Unix timestamp
publishedAt:
type: integer
nullable: true
description: Unix timestamp
completedAt:
type: integer
nullable: true
description: Unix timestamp
archivedAt:
type: integer
nullable: true
description: Unix timestamp
owners:
$ref: '#/components/schemas/ListReference'
department:
$ref: '#/components/schemas/ObjectReference'
nullable: true
parentGoal:
$ref: '#/components/schemas/ObjectReference'
nullable: true
childGoals:
$ref: '#/components/schemas/ListReference'
tags:
$ref: '#/components/schemas/ListReference'
required:
- id
- object
- url
- name
- state
- status
- goalType
- okrType
- isPrivate
- owners
- childGoals
- tags
- createdAt
- updatedAt
GoalUpdate:
allOf:
- $ref: '#/components/schemas/GoalCreate'
- type: object
properties:
name:
type: string
description:
type: string
startDate:
type: string
format: date
dueDate:
type: string
format: date
priority:
type: number
minimum: 1
maximum: 10
private:
type: boolean
ownerIds:
type: array
items:
type: string
format: uuid
minItems: 1
okrType:
$ref: '#/components/schemas/OkrTypeEnum'
amountType:
type: string
enum:
- percent
- dollar
- digit
- binary
nullable: true
startingAmount:
type: number
nullable: true
goalAmount:
type: number
nullable: true
companyGoal:
type: boolean
departmentId:
type: string
format: uuid
nullable: true
departmentsVisibleToIds:
type: array
items:
type: string
format: uuid
goalCycleId:
type: string
format: uuid
nullable: true
tagNames:
type: array
items:
type: string
maxItems: 5
isDraft:
type: boolean
parentId:
type: string
format: uuid
nullable: true
required:
- name
- description
- startDate
- dueDate
- priority
- private
- ownerIds
- okrType
- amountType
- startingAmount
- goalAmount
- companyGoal
- departmentId
- departmentsVisibleToIds
- goalCycleId
- tagNames
- isDraft
- parentId
GoalTypeEnum:
type: string
enum:
- Company
- Department
- Group
- Individual
responses:
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'
ServerError:
description: Server error while processing request
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'
parameters:
limit:
name: limit
in: query
required: false
schema:
type: integer
format: int32
description: Maximum number of items to return per page
startingAfter:
name: startingAfter
in: query
required: false
schema:
type: string
description: Cursor for fetching the next page of results
securitySchemes:
BearerAuth:
type: http
scheme: bearer
description: 'Service account API key passed as a Bearer token in the Authorization header. Example: Authorization: Bearer <your-api-key>
'