Lattice Goals API

Create, read, and update goals and OKRs

Operations 5

GET /goals List goals #
POST /goals Create goal #
GET /goal/{id} Get goal by ID #
PUT /goals/{id} Update goal #
GET /user/{id}/goals List goals for a user #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/lattice-goals-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

lattice-goals-api-openapi.yml Raw ↑
openapi: 3.2.0
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:
  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
  schemas:
    AmountTypeEnum:
      type: string
      enum:
      - Percent
      - Dollar
      - Digit
      - Binary
    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
    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
          - 'null'
          enum:
          - percent
          - dollar
          - digit
          - binary
        startingAmount:
          type:
          - number
          - 'null'
        goalAmount:
          type:
          - number
          - 'null'
        companyGoal:
          type: boolean
          default: false
        departmentId:
          type:
          - string
          - 'null'
          format: uuid
        departmentsVisibleToIds:
          type: array
          items:
            type: string
            format: uuid
        goalCycleId:
          type:
          - string
          - 'null'
          format: uuid
        tagNames:
          type: array
          items:
            type: string
          maxItems: 5
        isDraft:
          type: boolean
          default: false
        parentId:
          type:
          - string
          - 'null'
          format: uuid
      required:
      - name
      - startDate
      - dueDate
      - ownerIds
    Goal:
      type: object
      properties:
        id:
          type: string
        object:
          type: string
        url:
          type: string
        name:
          type: string
        description:
          type:
          - string
          - 'null'
          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
          - 'null'
        amountType:
          $ref: '#/components/schemas/AmountTypeEnum'
        startingAmount:
          type:
          - number
          - 'null'
          format: float
        endingAmount:
          type:
          - number
          - 'null'
          format: float
        currentAmount:
          type:
          - number
          - 'null'
          format: float
        startDate:
          type:
          - string
          - 'null'
          format: date
        dueDate:
          type:
          - string
          - 'null'
          format: date
        createdAt:
          type: integer
          description: Unix timestamp
        updatedAt:
          type: integer
          description: Unix timestamp
        publishedAt:
          type:
          - integer
          - 'null'
          description: Unix timestamp
        completedAt:
          type:
          - integer
          - 'null'
          description: Unix timestamp
        archivedAt:
          type:
          - integer
          - 'null'
          description: Unix timestamp
        owners:
          $ref: '#/components/schemas/ListReference'
        department:
          $ref: '#/components/schemas/ObjectReference'
        parentGoal:
          $ref: '#/components/schemas/ObjectReference'
        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
            - 'null'
            enum:
            - percent
            - dollar
            - digit
            - binary
          startingAmount:
            type:
            - number
            - 'null'
          goalAmount:
            type:
            - number
            - 'null'
          companyGoal:
            type: boolean
          departmentId:
            type:
            - string
            - 'null'
            format: uuid
          departmentsVisibleToIds:
            type: array
            items:
              type: string
              format: uuid
          goalCycleId:
            type:
            - string
            - 'null'
            format: uuid
          tagNames:
            type: array
            items:
              type: string
            maxItems: 5
          isDraft:
            type: boolean
          parentId:
            type:
            - string
            - 'null'
            format: uuid
        required:
        - name
        - description
        - startDate
        - dueDate
        - priority
        - private
        - ownerIds
        - okrType
        - amountType
        - startingAmount
        - goalAmount
        - companyGoal
        - departmentId
        - departmentsVisibleToIds
        - goalCycleId
        - tagNames
        - isDraft
        - parentId
    ErrorResponse:
      type: object
      properties:
        error:
          type: string
          description: Human-readable error message
      required:
      - error
    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
    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
          - 'null'
          description: The cursor to use to get the next set of items in the list
      required:
      - object
      - hasMore
    GoalStateEnum:
      type: string
      enum:
      - Draft
      - Active
      - Ended
      - Archived
    OkrTypeEnum:
      type: string
      enum:
      - objective
      - key_result
    GoalList:
      allOf:
      - $ref: '#/components/schemas/PaginatedList'
      - type: object
        properties:
          data:
            type: array
            items:
              $ref: '#/components/schemas/Goal'
        required:
        - data
    GoalTypeEnum:
      type: string
      enum:
      - Company
      - Department
      - Group
      - Individual
  responses:
    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'
    NotFound:
      description: Could not find the requested resource
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    BadRequest:
      description: Invalid request parameters
      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 <your-api-key>

        '