Leapsome Content API

The Leapsome Content API provides read access to performance review data, OKRs and goal progress, employee attributes, payroll information, and time tracking records. It enables one-way extraction of Leapsome data into external analytics tools, data warehouses, and custom integrations. Access is authenticated via a bearer token generated in Settings > Integrations and imports > Content API.

OpenAPI Specification

leapsome-content-api-openapi.yml Raw ↑
openapi: 3.0.1
info:
  version: 1.0.1
  title: Leapsome API
  contact:
    name: Support
    url: https://leapsome.zendesk.com
  description: The Content API enables you to export some raw data from Leapsome for usage within your own systems and beyond
    what the Leapsome application offers natively. Usage is restricted to a maximum of 20 requests per second when making
    requests in parallel. If you exceed this limit, you will receive a 429 status code.
servers:
- url: https://api.leapsome.com/v1
paths:
  /:
    get:
      summary: API info
      operationId: apiInfo
      security: []
      responses:
        '200':
          description: success
          content:
            application/json:
              schema:
                type: object
                properties:
                  name:
                    type: string
                    example: Leapsome API
                  version:
                    type: string
                    example: 1.0.0
  /token:
    get:
      summary: Get JWT access token
      operationId: getToken
      security: []
      tags:
      - auth
      parameters:
      - name: secret
        in: query
        required: true
        description: 'API Secret from [Leapsome admin page](www.leapsome.com:3000/app/#/team/settings/)

          '
        schema:
          type: string
        example: yvpBwdF1kE74e2aXuzsG
      responses:
        '200':
          description: Authorization successfull
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthInfo'
        '401':
          description: Authorization failed. This usually means that `secret` is missing or is incorrect.
  /goals:
    get:
      summary: List goals
      description: 'Setting multiple filters will result in a subset of goals that satisfy *all* constraints.

        All filters except for `search` accept comma-separated values.

        '
      operationId: listGoals
      security:
      - bearerAuth: []
      tags:
      - goals
      parameters:
      - name: userId
        in: query
        required: false
        description: select goals containing *any* of the userIds.
        explode: false
        schema:
          type: array
          items:
            type: string
            pattern: ^[0-9a-f]{24}$
            example: 58d55e3ffdc2eb20547edd0a
      - name: teamId
        in: query
        required: false
        description: select goals containing *any* of the teamIds.
        explode: false
        schema:
          type: array
          items:
            type: string
            pattern: ^[0-9a-f]{24}$
            example: 58d55e3ffdc2eb20547edd0a
      - name: tagId
        in: query
        required: false
        description: select goals containing *all* of the tagIds.
        explode: false
        schema:
          type: array
          items:
            type: string
            pattern: ^[0-9a-f]{24}$
            example: 58d55e3ffdc2eb20547edd0a
      - name: type
        in: query
        required: false
        description: select goals that match by `type` to *any* of the types listed.
        explode: false
        schema:
          type: array
          items:
            type: string
            enum:
            - company
            - team
            - user
      - name: search
        in: query
        required: false
        description: 'search on title, user name and team name fields. Special symbols must be URL-encoded.

          Search is performed on a whole value of a text field, without splitting it into words

          (e.g. search for `ark` will match `Marketing`).

          '
        schema:
          type: string
      - name: state
        in: query
        description: only include goals that match provided state
        explode: false
        schema:
          type: array
          items:
            type: string
            enum:
            - live
            - draft
            - archived
      - $ref: '#/components/parameters/limitParam'
      - $ref: '#/components/parameters/cursorParam'
      responses:
        '200':
          description: A paginated array of user goals
          headers:
            X-Next:
              $ref: '#/components/headers/X-Next'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedGoals'
              examples:
                example-1:
                  value:
                    meta:
                      count: 1
                      cursor: 58d55e3ffdc2eb20547edd0a
                      nextPage: string
                    data:
                    - id: 5b237f6868794d5c08555812
                      type: user
                      user:
                        id: 58d55e3ffdc2eb20547edd0a
                        email: [email protected]
                        fullName: John Doe
                        preferredName: John Doe
                      team:
                        id: 5b237f6868794d5c08555812
                        name: Rocket Scientists
                      name: Become a great place to work (d)
                      description: Make it entertaining
                      contributors:
                      - id: 58d55e3ffdc2eb20547edd0a
                        email: [email protected]
                        fullName: John Doe
                        preferredName: John Doe
                      progress: 50
                      status: live
                      managedBy:
                        id: 58d55e3ffdc2eb20547edd0a
                        email: [email protected]
                        fullName: John Doe
                        preferredName: John Doe
                      tags:
                      - id: 5b237f6868794d5c08555812
                        name: string
                      deadline: '2019-08-24T14:15:22Z'
                      keyResults:
                      - id: 5b237f6868794d5c08555812
                        name: Bring Glassdoor score up above 4
                        metric:
                          type: currency
                          start: 0
                          end: 1000
                          current: 650
                        weight: 30
                        ownerUser:
                          id: 58d55e3ffdc2eb20547edd0a
                          email: [email protected]
                          fullName: John Doe
                          preferredName: John Doe
                        ownerTeam:
                          id: 5b237f6868794d5c08555812
                          name: Engineer
                      parent:
                        _id: 5cb0855f0f089e6924b742e4
                        name: Enhance Employee Experience and Retention
                        status: live
                      progressStatus: onTrack
                      createdAt: '2019-08-23T11:53:06.741Z'
                      updatedAt: '2019-08-23T11:53:06.741Z'
  /goals/tags:
    get:
      summary: get list of goal tags
      operationId: listTags
      security:
      - bearerAuth: []
      tags:
      - goals
      responses:
        '200':
          description: An array of goal tags
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Tags'
  /goals/{goalId}:
    get:
      summary: Get goal details
      operationId: getGoalDetails
      parameters:
      - in: path
        name: goalId
        required: true
        schema:
          type: string
          pattern: ^[0-9a-f]{24}$
        description: ID of the goal
      security:
      - bearerAuth: []
      tags:
      - goals
      responses:
        '200':
          description: Goal details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Goal'
  /goals/{goalId}/comments:
    get:
      summary: get list of comments for a goal
      operationId: listGoalComments
      parameters:
      - in: path
        name: goalId
        required: true
        schema:
          type: string
        description: ID of the goal
      security:
      - bearerAuth: []
      tags:
      - goals
      responses:
        '200':
          description: An array of goal comments ordered by creation date (descending)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Comments'
  /goals/{goalId}/key-results/{keyResultId}:
    post:
      summary: Update key result
      operationId: updateKeyResult
      parameters:
      - in: path
        name: goalId
        required: true
        schema:
          type: string
          pattern: ^[0-9a-f]{24}$
        description: ID of the goal
      - in: path
        name: keyResultId
        required: true
        schema:
          type: string
          pattern: ^[0-9a-f]{24}$
        description: ID of the key result
      security:
      - bearerAuth: []
      tags:
      - goals
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/KeyResultUpdate'
      responses:
        '200':
          description: Updated goal
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Goal'
  /goals/{goalId}/initiatives/{initiativeId}:
    post:
      summary: Update initiative
      operationId: updateInitiative
      parameters:
      - in: path
        name: goalId
        required: true
        schema:
          type: string
          pattern: ^[0-9a-f]{24}$
        description: ID of the goal
      - in: path
        name: initiativeId
        required: true
        schema:
          type: string
          pattern: ^[0-9a-f]{24}$
        description: ID of the initiative
      security:
      - bearerAuth: []
      tags:
      - goals
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/InitiativeUpdate'
      responses:
        '200':
          description: Updated goal
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Goal'
  /reviews:
    get:
      summary: List review cycles
      description: Get a paginated list of all review cycles or templates in your Leapsome instance
      operationId: listReviews
      security:
      - bearerAuth: []
      parameters:
      - name: filter
        in: query
        required: false
        description: 'Use predefined filters to filter the list:  "all" gives all cycles, "draft" all draft cycles, "upcoming"
          all cycles that haven''t been launched yet, "ongoing" all currently ongoing cycles and "complete" all completed
          cycles. Use "templates" to filter for all templates.'
        explode: false
        schema:
          type: string
          items:
            type: string
            pattern: ^[0-9a-f]{24}$
            example: 58d55e3ffdc2eb20547edd0a
          enum:
          - all
          - draft
          - upcoming
          - ongoing
          - complete
      - schema:
          type: number
        in: query
        name: page
        description: Page number, starting at 0
      - schema:
          type: number
          default: 20
        in: query
        name: pageSize
        description: Page size for pagination
      - schema:
          type: string
        in: query
        name: template
        description: 'ID of the template that the cycle was created from (use filter = "templates" to filter for all templates) '
      - schema:
          type: string
        in: query
        name: sort
        description: Sort by "creationDate" or "kickoffDate" (descending order)
      - schema:
          type: string
        in: query
        name: name
        description: Filter by review cycle name (partial match, case-insensitive)
      - schema:
          type: string
        in: query
        name: templateName
        description: Filter by template name (partial match, case-insensitive) - only returns cycles created from templates
      - schema:
          type: string
          format: date-time
        in: query
        name: conversationDeadlineAfter
        description: Filter for review cycles with conversation deadline after the specified date (ISO 8601 format)
      - schema:
          type: string
          format: date-time
        in: query
        name: lastModifiedAfter
        description: Filter for review cycles where any participant was last modified after the specified date (ISO 8601 format)
      responses:
        '200':
          description: A list of review cycles
          headers: {}
          content:
            application/json:
              schema:
                type: object
                x-examples:
                  example-1:
                    data:
                    - _id: 5a869af092cf001f4ce73c26
                      name: Mid-2018 Biannual Performance Feedback
                      status: complete
                properties:
                  data:
                    type: array
                    items:
                      type: object
                      properties:
                        _id:
                          type: string
                        name:
                          type: string
                        status:
                          type: string
                          enum:
                          - new
                          - draft
                          - peerNominationsPending
                          - peerApprovalPending
                          - peerReviewsPending
                          - managerReviewsPending
                          - conversationsPending
                          - complete
                        createdAt:
                          type: string
                          format: date-time
                        kickoffDate:
                          type: string
                          format: date-time
                          description: Planned kickoff date
                        template:
                          type: string
                          description: ID of the underlying template
                        lastModifiedOn:
                          type: string
                          format: date-time
                          description: Most recent modification date among any participant in the review cycle
              examples:
                example-1:
                  value:
                    data:
                    - _id: 5a869af092cf001f4ce73c26
                      name: Performance Review Q1 2022
                      status: peerReviewsPending
                      createdAt: '2018-02-16T08:48:48.363Z'
                      kickoffDate: '2018-02-18T08:48:48.363Z'
                      template: 63e42f779f7f18396a38f54d
                      lastModifiedOn: '2018-02-20T10:15:30.000Z'
      tags:
      - reviews
    parameters: []
  /reviews/{reviewCycleId}:
    get:
      summary: List review cycles
      description: Provides details of a specific review cycle
      operationId: getReviewDetails
      security:
      - bearerAuth: []
      parameters: []
      responses:
        '200':
          description: 'Details of a specific review cycle. '
          headers: {}
          content:
            application/json:
              schema:
                type: object
                x-examples:
                  example-1:
                    data:
                      _id: 5a869af092cf001f4ce73c26
                      name: Mid-2018 Biannual Performance Feedback
                      status: complete
                      questions:
                      - _id: 58d55e55fdc2eb20547edd14
                        text: Drives innovation
                      - _id: 58d55e55fdc2eb20547edd16
                        text: Delivers results
                      - _id: 58d55e55fdc2eb20547edd0e
                        text: Priorisiert effektiv
                      - _id: 58d55e55fdc2eb20547edd0f
                        text: Takes ownership
                      - _id: 58d55e55fdc2eb20547edd20
                        text: Provides structure
                      - _id: 58d55e55fdc2eb20547edd21
                        text: Manages expectations
                      - _id: 58d55e55fdc2eb20547edd17
                        text: Communicates verbally
                      - _id: 58d55e55fdc2eb20547edd18
                        text: Communicates in written
                      - _id: 58d55e55fdc2eb20547edd1b
                        text: Motivates
                      - _id: 58d55e55fdc2eb20547edd1e
                        text: Gibt Feedback
                      - _id: 5a869af092cf001f4ce73c24
                        text: What was your biggest achievement?
                      - _id: 5a869af092cf001f4ce73c25
                        text: What is this person's most important development goal?
                      timeline:
                        start: '2018-03-02T08:46:11.444Z'
                        peerNominationsDeadline: '1970-01-01T00:00:00.000Z'
                        peerApprovalDeadline: '1970-01-01T00:00:00.000Z'
                        peerReviewsDeadline: '2018-04-13T08:46:11.444Z'
                        managerReviewsDeadline: '2018-04-27T08:46:11.444Z'
                        conversationsDeadline: '2018-05-07T08:46:11.444Z'
                      createdAt: '2018-02-16T08:48:48.363Z'
                    __v2: true
                properties:
                  data:
                    type: object
                    properties:
                      _id:
                        type: string
                      name:
                        type: string
                      status:
                        type: string
                        enum:
                        - new
                        - peerNominationsPending
                        - peerApprovalPending
                        - peerReviewsPending
                        - managerReviewsPending
                        - conversationsPending
                        - complete
                      questions:
                        type: array
                        items:
                          type: object
                          properties:
                            _id:
                              type: string
                            name:
                              type: string
                      timeline:
                        type: object
                        properties:
                          start:
                            type: string
                            format: date-time
                          peerNominationsDeadline:
                            type: string
                            format: date-time
                          peerApprovalDeadline:
                            type: string
                            format: date-time
                          peerReviewsDeadline:
                            type: string
                            format: date-time
                          managerReviewsDeadline:
                            type: string
                            format: date-time
                          conversationsDeadline:
                            type: string
                            format: date-time
                      createdAt:
                        type: string
                        format: date-time
                  __v2:
                    type: boolean
                  ? ''
                  : type: string
              examples:
                example-1:
                  value:
                    data:
                      _id: 5a869af092cf001f4ce73c26
                      name: Performance Review Q2
                      status: complete
                      questions:
                      - _id: 58d55e55fdc2eb20547edd16
                        name: Delivers results
                      - _id: 58d55e55fdc2eb20547edd0f
                        name: Takes ownership
                      - _id: 58d55e55fdc2eb20547edd20
                        name: Provides structure
                      - _id: 58d55e55fdc2eb20547edd21
                        name: Manages expectations
                      timeline:
                        start: '2018-03-02T08:46:11.444Z'
                        peerNominationsDeadline: '1970-01-01T00:00:00.000Z'
                        peerApprovalDeadline: '1970-01-01T00:00:00.000Z'
                        peerReviewsDeadline: '2018-04-13T08:46:11.444Z'
                        managerReviewsDeadline: '2018-04-27T08:46:11.444Z'
                        conversationsDeadline: '2018-05-07T08:46:11.444Z'
                      createdAt: '2018-02-16T08:48:48.363Z'
                    __v2: true
      tags:
      - reviews
    parameters:
    - schema:
        type: string
      name: reviewCycleId
      in: path
      required: true
      description: ID of your review cycle
  /reviews/{reviewCycleId}/participants:
    get:
      summary: List review cycle participants
      description: Provides a paginated list of cycle participants
      operationId: getReviewParticipants
      security:
      - bearerAuth: []
      parameters:
      - schema:
          type: number
        in: query
        name: page
        description: Number of page, starting at 0
      - schema:
          type: string
          default: '20'
        in: query
        name: pageSize
        description: Results per page
      responses:
        '200':
          description: Meta information for review cycle participants
          headers:
            X-Next:
              schema:
                type: string
              description: Next page
          content:
            application/json:
              schema:
                type: object
                x-examples:
                  example-1:
                    data:
                    - _id: 58d55e3ffdc2eb20547edd0a
                      reviewee:
                        user: 58d55e3ffdc2eb20547edd0a
                        name: Louise Leapsome
                        preferredName: null
                        status: pending
                        averageRating: 0 / 100
                      managers:
                      - user: 58d55e3ffdc2eb20547edd00
                        name: Peter Pan
                        preferredName: null
                        status: complete
                        averageRating: 50 / 100
                      additionalManagers:
                      - user: 58d625f5fdc2eb20547ede85
                        name: Jack Johnson
                        preferredName: null
                        status: pending
                        averageRating: 0 / 100
                      peers:
                      - user: 58d625f5fdc2eb20547ede83
                        name: Susanne Leader
                        preferredName: null
                        status: declined
                        averageRating: 0 / 100
                      - user: 62ab64e3339234d9c4a527f2
                        name: Jason Minor
                        preferredName: null
                        status: complete
                        averageRating: 75 / 100
                      directReports:
                      - user: 62ab64e3339234d9c4a527f1
                        name: Sandra Susie
                        preferredName: Sandra von Susie
                        status: complete
                        averageRating: 75 / 100
                    __v2: true
                properties:
                  data:
                    type: array
                    items:
                      type: object
                      properties:
                        _id:
                          type: string
                        reviewee:
                          type: object
                          properties:
                            user:
                              type: string
                            name:
                              type: string
                            status:
                              type: string
                              enum:
                              - pending
                              - started
                              - complete
                            averageRating:
                              type: string
                              example: 7 / 10
                        managers:
                          type: array
                          items:
                            type: object
                            properties:
                              user:
                                type: string
                              name:
                                type: string
                              status:
                                type: string
                                enum:
                                - pending
                                - started
                                - complete
                              averageRating:
                                type: string
                                example: 7 / 10
                        additionalManagers:
                          type: array
                          items:
                            type: object
                            properties:
                              user:
                                type: string
                              name:
                                type: string
                              status:
                                type: string
                                enum:
                                - pending
                                - started
                                - complete
                              averageRating:
                                type: string
                                example: 7 / 10
                        peers:
                          type: array
                          items:
                            type: object
                            properties:
                              user:
                                type: string
                              name:
                                type: string
                              status:
                                type: string
                                enum:
                                - invited
                                - pending
                                - started
                                - complete
                                - declined
                              averageRating:
                                type: string
                                example: 7 / 10
                        directReports:
                          type: array
                          items:
                            type: object
                            properties:
                              user:
                                type: string
                              name:
                                type: string
                              status:
                                type: string
                                enum:
                                - pending
                                - started
                                - complete
                              averageRating:
                                type: string
                                example: 7 / 10
                  __v2:
                    type: boolean
              examples:
                example-1:
                  value:
                    data:
                    - _id: 58d55e3ffdc2eb20547edd0a
                      signatureReviewee: '2025-03-04T13:15:11.574+00:00'
                      signatureManager: '2025-03-04T13:15:11.574+00:00'
                      lastModifiedOn: '2025-03-04T13:15:11.574+00:00'
                      lastModifiedBy: 58d55e3ffdc2eb20547edd0a
                      reviewee:
                        user: 58d55e3ffdc2eb20547edd0a
                        name: Louise Leapsome
                        preferredName: null
                        status: pending
                        averageRating: 0 / 100
                        lastModifiedOn: '2025-03-04T13:15:11.574+00:00'
                        lastModifiedBy: 58d55e3ffdc2eb20547edd0a
                      managers:
                      - user: 58d55e3ffdc2eb20547edd00
                        name: Peter Pan
                        preferredName: null
                        status: complete
                        averageRating: 50 / 100
                        lastModifiedOn: '2025-03-04T13:15:11.574+00:00'
                        lastModifiedBy: 58d55e3ffdc2eb20547edd00
                      additionalManagers:
                      - user: 58d625f5fdc2eb20547ede85
                        name: Jack Johnson
                        preferredName: null
                        status: pending
                        averageRating: 0 / 100
                        lastModifiedOn: '2025-03-04T13:15:11.574+00:00'
                        lastModifiedBy: 58d625f5fdc2eb20547ede85
                      peers:
                      - user: 58d625f5fdc2eb20547ede83
                        name: Susanne Leader
                        preferredName: null
                        status: declined
                        averageRating: 0 / 100
                        lastModifiedOn: '2025-03-04T13:15:11.574+00:00'
                        lastModifiedBy: 58d625f5fdc2eb20547ede83
                      - user: 62ab64e3339234d9c4a527f2
                        name: Jason Minor
                        preferredName: null
                        status: complete
                        averageRating: 75 / 100
                        lastModifiedOn: '2025-03-04T13:15:11.574+00:00'
                        lastModifiedBy: 62ab64e3339234d9c4a527f2
                      directReports:
                      - user: 62ab64e3339234d9c4a527f1
                        name: Sandra Susie
                        preferredName: Sandra von Susie
                        status: complete
                        averageRating: 75 / 100
                        lastModifiedOn: '2025-03-04T13:15:11.574+00:00'
                        lastModifiedBy: 62ab64e3339234d9c4a527f1
                    __v2: true
      tags:
      - reviews
    parameters:
    - schema:
        type: string
      name: reviewCycleId
      in: path
      required: true
      description: ID of your review cycle
  /reviews/{reviewCycleId}/participants/{userId}/overview:
    get:
      summary: Get results for a specific reviewee
      description: Provides answers of all reviewers for a specific reviewee, if admins have access to these
      operationId: getReviewParticipantResults
      security:
      - bearerAuth: []
      parameters: []
      responses:
        '200':
          description: Relevant questions, answers (if visible) and contributor details (if not anonymous)
          headers: {}
          content:
            application/json:
              schema:
                type: object
                x-examples:
                  example-1:
                    data:
                      lastModifiedOn: '2025-03-04T13:15:11.574+00:00'
                      questions:
                      - _id: 61f5656be4a7ef185491a621
                        name: Placeholder Company Skills
                      - _id: 58d55e55fdc2eb20547edd16
                        name: Delivers results
                      - _id: 58d55e55fdc2eb20547edd20
                        name: Provides structure
                      - _id: 58d55e55fdc2eb20547edd14
                        name: Drives innovation
                      - _id: 58d55e55fdc2eb20547edd0f
                        name: Takes ownership
                      - _id: 58d55e55fdc2eb20547edd21
                        name: Manages expectations
                      - _id: 58d55e55fdc2eb20547edd18
                        name: Communicates in written
                      - _id: 58d55e55fdc2eb20547edd1b
                        name: Motivates
                      - _id: 58d55e55fdc2eb20547edd17
                        name: Communicates verbally
                      answers:
                      - authorId: 62ac40b5f1f4baf9a1b6fb52
                        receiverId: 58d625f5fdc2eb20547ede84
                        question: 58d55e55fdc2eb20547edd16
                     

# --- truncated at 32 KB (105 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/leapsome/refs/heads/main/openapi/leapsome-content-api-openapi.yml