Gainsight PX REST API

The Gainsight PX REST API — the one Gainsight surface with a published machine-readable contract. Swagger 2.0, 59 paths, 74 operations, 93 definitions, covering users, accounts, custom events, engagements, features, segments, survey responses and the product-analytics event streams (page view, session, identify, form submit, feature match, segment match, email, engagement view). Harvested verbatim from Gainsight's own documentation host on 2026-09-17.

Operations 74

GET /v1/accounts Get accounts #
POST /v1/accounts Create account #
PUT /v1/accounts/update Update account (accountId passed via request body) #
GET /v1/accounts/{accountId} Get account #
PUT /v1/accounts/{accountId} Update account #
DELETE /v1/accounts/{accountId} Delete account #
GET /v1/admin/model/{type}/attributes Get Attributes #
GET /v1/admin/monitoring/engagement_collisions Get engagement collisions #
GET /v1/admin/monitoring/engagement_error_details/{engagementId} Get engagement error details #
GET /v1/admin/monitoring/engagement_errors Get engagement errors summary #
GET /v1/admin/monitoring/integrations Get integration statuses #
GET /v1/admin/subscription Get Subscription detail #
GET /v1/admin/subscription/users/notSeenAfter Get Subscription users #
GET /v1/articles Get Articles #
GET /v1/articles/{articleId} Get Article #
GET /v1/engagement Get engagements #
PUT /v1/engagement/env Set engagement environment #
PUT /v1/engagement/envs Set engagement environments #
GET /v1/engagement/extended Get engagements with list of custom events from rules #
GET /v1/engagement/metadata/survey getEngagementViewEvents #
PUT /v1/engagement/state Set engagement state #
GET /v1/engagement/{engagementId} Get engagement #
DELETE /v1/engagement/{engagementId} deleteEngagement #
GET /v1/events/custom Get Custom events #
POST /v1/events/custom Create custom event #
GET /v1/events/email Get Email events #
GET /v1/events/engagementView Get Engagement View events #
GET /v1/events/feature_match Get feature match events #
GET /v1/events/formSubmit Get formSubmit events #
GET /v1/events/identify Get Identify events #
GET /v1/events/lead Get Lead events #
GET /v1/events/pageView Get Page View events #
GET /v1/events/segment_match Get segment match events #
GET /v1/events/session Get Session events #
POST /v1/external_segment/metadata createExternalSegment #
PUT /v1/external_segment/metadata updateExternalSegment #
POST /v1/external_segment/update_membership Update External Segment membership #
GET /v1/feature Get features #
GET /v1/feature/adoption/{featureId} Get feature adoption statistics #
POST /v1/feature/backfill/{featureId} Request backfill for feature #
GET /v1/feature/{featureId} Get feature #
PUT /v1/feature/{featureId} Update feature #
GET /v1/kcbot Get KC Bots #
PUT /v1/kcbot/state Set KC state #
GET /v1/kcbot/{kcId} Get KC Bot #
GET /v1/localization/export/articles export XLIFF for articles #
GET /v1/localization/export/content export XLIFF #
GET /v1/localization/export/engagement export XLIFF #
GET /v1/localization/export/kcbot export XLIFF #
POST /v1/localization/import/articles import XLIFF #
POST /v1/localization/import/content import XLIFF #
POST /v1/localization/import/engagement import XLIFF #
POST /v1/localization/import/kcbot import XLIFF #
GET /v1/segment Get segments #
GET /v1/segment/{segmentId} Get segment #
GET /v1/survey/responses Get Survey responses #
POST /v1/user/preferences Get user preferences (identifyId passed via request body) #
PUT /v1/user/preferences Update user preferences (identifyId passed via request body) #
GET /v1/user/preferences/{identifyId} Get user preferences #
PUT /v1/user/preferences/{identifyId} Update user preferences #
GET /v1/users Get users #
POST /v1/users Create user #
DELETE /v1/users/delete Delete user (identifyId passed via request body) #
GET /v1/users/denylist/{identifyId} Get user Denylist flag #
PUT /v1/users/denylist/{identifyId} Update user Denylist flag #
PUT /v1/users/update Update user (identifyId passed via request body) #
GET /v1/users/{identifyId} Get user #
PUT /v1/users/{identifyId} Update user #
DELETE /v1/users/{identifyId} Delete user #
GET /v2/feature_ext getFeaturesExtended #
POST /v2/user/preferences Get user preferences. This version of API includes extra property 'trackEmailAnalytics' in the response. (identifyId passed via request body) #
PUT /v2/user/preferences Update user preferences, this version of API can take 'trackEmailAnalytics' and 'identifyId' property in the payload. #
GET /v2/user/preferences/{identifyId} Get user preferences. This version of API includes extra property 'trackEmailAnalytics' in the response. #
PUT /v2/user/preferences/{identifyId} Update user preferences, this version of API can take 'trackEmailAnalytics' property in the payload. #

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/gainsight-px-rest-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

gainsight-px-rest-api-openapi.yml Raw ↑
swagger: '2.0'
info:
  description: >
    <p>Gainsight PX API provides a programmatic (server-based) method to access
    the users, accounts, and events that have been captured by the Gainsight PX
    subscription.  The Gainsight PX REST APIs can be used to perform most
    standard CRUD (Create, Read, Update, Delete) operations on entity (e.g. User
    and Account) objects, create custom events and fetch historical event
    data.</p>

    <table> 

    <tr><th>Data Center</td><th>Base Endpoint</td></tr> 

    <tr><td>US</td><td>https://api.aptrinsic.com/v1</td></tr> 

    <tr><td>EU</td><td>https://api-eu.aptrinsic.com/v1</td></tr> 

    <tr><td>US2</td><td>https://api-us2.aptrinsic.com/v1</td></tr> 

    </table> 

    <h1 class="resourceGroupName">Data Payload</h1>

    <p>The API data (and

    responses) are JSON encoded with UTF-8 as either a single JSON object, or as

    a list of JSON objects.</p>

    <h1 class="resourceGroupName">Authorization</h1>

    <p>Authorization and access to the API is managed via API Keys. The API key
    value is passed on calls by adding a request header with the key
    <i>X-APTRINSIC-API-KEY</i>.</p>

    <h2>Generate API Keys</h2>

    <p>An API Key is required to access the Gainsight PX REST API.</p>

    <p>To generate an API key:</p>

    <p>&nbsp; 1. Navigate to Administration > REST API to access the API Keys
    page.</p>

    <p>&nbsp; 2. Click New API Key. The New API Key window appears. </p>

    <p>&nbsp; 3. Enter the following details:</p>
       <p>&nbsp;&emsp; A. Name: Enter a name for API Key.</p>
       <p>&nbsp;&emsp; B. Description: Enter a description.</p>
       <p>&nbsp;&emsp; C. Permissions:  Configure the following permissions.</p>
         <p>&nbsp;&emsp;&emsp; a. Read: This allows calls to read PX data via GET API calls. </p>
         <p>&nbsp;&emsp;&emsp; b. Write: This allows calls to edit, update and delete PX data via PUT and DELETE API calls.</p>
         <p>&nbsp;&emsp;&emsp; c. Production Launch: This access allows calls to launch engagements in production. </p>
    <p>&nbsp; 4. Click Generate.</li>

    <h1 class="resourceGroupName">Errors</h1>

    <p>Errors are returned with error code and JSON response.

    <h1 class="resourceGroupName">HTTP</h1>

    <ul>
      <li>Requests are sent using HTTPS.</li>
      <li>Methods exposed are based on HTTP Verbs (GET, POST and DELETE).</li>
      <li>Resources are identified using URI’s.</li>
    </ul>

    <h1 class="resourceGroupName">Rate Limiting</h1>

    <p>The rate limit for public REST APIs is around 200 requests per second and
    1 Million requests per day. </span>

    <h1 class="resourceGroupName">Page Handling</h1>

    <ul>
      <li>The default pageSize on list calls (i.e. /users and /accounts) is 25.  The pageSize can be changed by adding a pageSize parameter to the URL (i.e. /users?pageSize=100) with a max pageSize=1000.</li>
      <li>Use the returned scrollId to make a request for the next page of results (i.e. /users?pageSize=100&scrollId=XXXXXXX)</li>
      <li>Scroll until the returned result list is less than the requested size. Do not depend on the scrollId becoming null, in some cases it does not be null even though the last page of results is returned.</li>
    </ul>

    <h1 class="resourceGroupName">Historical Date Range Restrictions</h1>

    <ul>
      <li>For all calls that return historical event information, the maximum date range is 190 days (~ 6 months).</li>
      <li>If no date range is specified, the last 1 day is the default date window.  For quicker response times, it is recommended to use your needed date range and not full 6 months.</li>
      <li>If a date range larger than the maximum is specified, a 400 Bad Request error is thrown, with the message: “Exceeded date range190days”.</li>
      <li>To fetch more than 190 days of data, multiple calls will need to be made for smaller date ranges that are no more than the max allowed.</li>
    </ul>

    <h1 class="resourceGroupName">Case Sensitivity</h1>

    <ul>
      <li>Case sensitivity is enforced when making a call to get user/account by id.  Therefore, .../users/id=nora@example.com will not find a user whose id is Nora@example.com</li>
      <li>Case sensitivity is not enforced when using filters. For example, .../users/filter=id==nora@example.com; will find a user whose id is Nora@example.com.</li>
    </ul>

    <h1 class="resourceGroupName">Getting Started with Postman</h1>

    <p>Click <a
    href='https://storage.googleapis.com/gainsight-px-cloud-public-assets/api/Gainsight_PX_REST_API_v1.2.postman_collection'>here</a>
    to download a Postman collection file containing sample calls that you can
    use to query and test the Gainsight PX REST API. The Postman tool is used to
    test the PX APIs. To use the sample API calls, you must define a Postman
    variable <i>apiKey</i>.  This variable must be set to the PX API key which
    you have generated. This API key is not the same as your Product API
    key.</p>
  version: 0.1.6
  title: Gainsight PX REST API
  contact:
    name: Gainsight PX
    url: 'https://www.gainsight.com/product-experience/'
    email: pxsupport@gainsight.com
  license:
    name: internal
host: api.aptrinsic.com
basePath: /
tags:
  - name: Accounts
    description: Account Operations
  - name: Admin
    description: Admin Model
  - name: Article
    description: Article related endpoints
  - name: Custom events
    description: Custom events operations
  - name: EmailEvent
    description: Email Event Operations
  - name: Engagement
    description: Engagement Operations
  - name: EngagementViewEvent
    description: Engagement View Event Operations
  - name: ExternalSegments
    description: External Segment Operations
  - name: Feature
    description: Feature Operations
  - name: FeatureMatchEvent
    description: Feature Match Event Operations
  - name: FormSubmitEvent
    description: Form Submit Event Operations
  - name: IdentifyEvent
    description: Identify Event Operations
  - name: KCbot
    description: KC Bot related endpoints
  - name: LeadEvent
    description: Lead Event Operations
  - name: Localization
    description: localization
  - name: PageViewEvent
    description: Page View Event Operations
  - name: Segment
    description: Segment Operations
  - name: SegmentMatchEvent
    description: Segment Match Event Operations
  - name: SessionEvent
    description: Session Event Operations
  - name: SurveyResponse
    description: Survey Response Events
  - name: UserPreferences
    description: User Preferences
  - name: UserPreferences V2
    description: >-
      User Preferences Version 2 API. Version 2 has support for new setting
      called 'trackEmailAnalytics' which is to specify whether to track email
      analytics or not for the given user.
  - name: Users
    description: User Operations
schemes:
  - https
paths:
  /v1/accounts:
    get:
      tags:
        - Accounts
      summary: Get accounts
      description: >+
        Retrieves accounts.  Supports filtering, sorting and paging.

        ### Filtering

        The filter parameter accepts a list of semicolon-separated filters in
        the form: {fieldName}{operator}{fieldValue}

        Filter terms within a single filter parameter are joined by a logical
        AND. 

        Separate filter parameters are joined by a logical OR.

        #### Operators

        | Operator   | Meaning  |

        | ----- | -------- |

        | == | Exact match |

        | != | Not equal |

        | &lt;  | Less than |

        | &lt;= | Less than or equal |

        | &gt;  | Greater than |

        | &gt;= | Greater than or equal |

        | ~  | Matches string, supports wildcard characters * and ? |

        | !~ | Not like, supports wildcard characters * and ? |


        Examples: 


        | URI   | Results  |

        | ----- | -------- |

        | GET /v1/accounts?filter=sicCode==64;numberOfEmployees>25 | Accounts
        with sicCode of 64 and more than 25 employees. |

        | GET
        /v1/accounts?filter=sicCode==64;numberOfEmployees>25&filter=sicCode==63;numberOfEmployees>3000
        | Accounts with: (sicCode of 64 AND more than 25 employees) OR (sicCode
        of 63 AND more than 3000 employees). |

        | GET /v1/accounts?filter=location.cityName==Portland | Accounts with a
        city of 'Portland'. |

        | GET /v1/accounts?filter=customAttributes.internalId==12345 | Accounts
        with a custom attribute of internalId equal to 12345'. |



        ### Sorting

        The sort parameter accepts a list of semi-colon separated fields names,
        each with an optional dash to imply descending sort order.

        Examples: 


        | URI   | Results  |

        | ----- | -------- |

        | GET /v1/accounts?sort=name;location.stateCode | Accounts sorted by
        name and state code in ascending order. |

        | GET /v1/accounts?sort=-createDate | Accounts sorted by createDate in
        descending order. |

      operationId: getAccountsUsingGET
      produces:
        - '*/*'
      parameters:
        - name: filter
          in: query
          description: Filters
          required: false
          type: array
          items:
            type: string
          collectionFormat: multi
          allowEmptyValue: false
        - name: pageSize
          in: query
          description: Number of accounts per page
          required: false
          type: integer
          default: 25
          maximum: 1000
          exclusiveMaximum: false
          minimum: 1
          exclusiveMinimum: false
          format: int32
          allowEmptyValue: false
        - name: scrollId
          in: query
          description: >-
            Used for fetching subsequent pages after the first one.  Returned in
            response.scrollId
          required: false
          type: string
          allowEmptyValue: false
        - name: sort
          in: query
          description: Sort
          required: false
          type: string
          allowEmptyValue: false
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/AccountsPage'
        '400':
          description: Bad request
        '401':
          description: Unauthorized or bad API Key
        '429':
          description: Rate limit exceeded
      deprecated: false
    post:
      tags:
        - Accounts
      summary: Create account
      description: Creates a new account with the given data
      operationId: createAccountUsingPOST
      consumes:
        - application/json
      produces:
        - '*/*'
      parameters:
        - in: body
          name: account
          description: Account data
          required: true
          schema:
            $ref: '#/definitions/Account'
      responses:
        '201':
          description: Created Account
          schema:
            $ref: '#/definitions/ResponseEntity'
        '400':
          description: 'Bad request, possible duplicate'
        '401':
          description: Unauthorized or bad API Key
        '429':
          description: Rate limit exceeded
      deprecated: false
  /v1/accounts/update:
    put:
      tags:
        - Accounts
      summary: Update account (accountId passed via request body)
      description: >
        Updates an account with accountId specified in the request body.

        This update method is useful when the account ID contains special
        characters that make it impossible to use the update method with the
        accountId in the request path.
      operationId: updateAccountUsingPUT
      consumes:
        - application/json
      produces:
        - '*/*'
      parameters:
        - in: body
          name: account
          description: Account data
          required: true
          schema:
            $ref: '#/definitions/Account'
      responses:
        '204':
          description: Updated
          schema:
            $ref: '#/definitions/ResponseEntity'
        '401':
          description: Unauthorized or bad API Key
        '404':
          description: Account not found
        '429':
          description: Rate limit exceeded
      deprecated: false
  '/v1/accounts/{accountId}':
    get:
      tags:
        - Accounts
      summary: Get account
      description: Retrieves the account with the given id
      operationId: getAccountUsingGET
      produces:
        - '*/*'
      parameters:
        - name: accountId
          in: path
          description: Account id
          required: true
          type: string
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/Account'
        '400':
          description: Bad request
        '401':
          description: Unauthorized or bad API Key
        '404':
          description: Account not found
        '429':
          description: Rate limit exceeded
      deprecated: false
    put:
      tags:
        - Accounts
      summary: Update account
      description: Updates an account with the given data
      operationId: updateAccountUsingPUT_1
      consumes:
        - application/json
      produces:
        - '*/*'
      parameters:
        - in: body
          name: account
          description: Account data
          required: true
          schema:
            $ref: '#/definitions/Account'
        - name: accountId
          in: path
          description: Account id
          required: true
          type: string
      responses:
        '204':
          description: Updated
          schema:
            $ref: '#/definitions/ResponseEntity'
        '401':
          description: Unauthorized or bad API Key
        '404':
          description: Account not found
        '429':
          description: Rate limit exceeded
      deprecated: false
    delete:
      tags:
        - Accounts
      summary: Delete account
      description: >
        Deletes Account

        Note: Performs a cascading delete of all users associated with the
        account
      operationId: deleteAccountUsingDELETE
      produces:
        - '*/*'
      parameters:
        - name: accountId
          in: path
          description: Account id
          required: true
          type: string
      responses:
        '200':
          description: Deleted
          schema:
            $ref: '#/definitions/ResponseEntity'
        '204':
          description: No Content
          schema:
            $ref: '#/definitions/ResponseEntity'
        '401':
          description: Unauthorized or bad API Key
        '404':
          description: Account not found
        '429':
          description: Rate limit exceeded
      deprecated: false
  '/v1/admin/model/{type}/attributes':
    get:
      tags:
        - Admin
      summary: Get Attributes
      description: Retrieves the model attributes for a given type
      operationId: getModelAttributesUsingGET
      produces:
        - '*/*'
      parameters:
        - name: type
          in: path
          description: Type
          required: true
          type: string
          enum:
            - user
            - account
      responses:
        '200':
          description: Success
          schema:
            type: array
            items:
              $ref: '#/definitions/AttributeMetadata'
        '400':
          description: Bad request
        '401':
          description: Unauthorized or bad API Key
        '404':
          description: Type not found
        '429':
          description: Rate limit exceeded
      deprecated: false
  /v1/admin/monitoring/engagement_collisions:
    get:
      tags:
        - Admin
      summary: Get engagement collisions
      description: >+
        Retrieves engagement collision events. Will return one row for each
        engagement collision in the given date range.  Supports filtering and
        paging.

        ### Filtering

        The date range must be less than or equal to 180 days

        Dates are specified as epoch milliseconds, GMT

        Examples: 


        | URI   | Results  |

        | ----- | -------- |

        | GET
        /v1/admin/monitoring/engagement_collisions?dateRangeStart=1670283822000&dateRangeEnd=1672962222000&propertyKey=AP-XXXXXXXXXXX-2
        | Fetches first page of results |

        | GET
        /v1/admin/monitoring/engagement_collisions?dateRangeStart=1670283822000&dateRangeEnd=1672962222000&propertyKey=AP-XXXXXXXXXXX-2&pageNumber=1&scrollId=abcxyz
        | Fetches second page of results |


      operationId: getEngagementCollisionsUsingGET
      produces:
        - '*/*'
      parameters:
        - name: dateRangeEnd
          in: query
          description: Date range end (epoch milliseconds)
          required: false
          type: integer
          format: int64
          allowEmptyValue: false
          x-example: dateRangeEnd=1672962222000
        - name: dateRangeStart
          in: query
          description: Date range start (epoch milliseconds)
          required: false
          type: integer
          format: int64
          allowEmptyValue: false
          x-example: dateRangeStart=1670283822000
        - name: pageNumber
          in: query
          description: Page Number (zero based)
          required: false
          type: integer
          default: 0
          format: int32
          allowEmptyValue: false
        - name: pageSize
          in: query
          description: Number of records per page
          required: false
          type: integer
          default: 25
          maximum: 1000
          exclusiveMaximum: false
          minimum: 1
          exclusiveMinimum: false
          format: int64
          allowEmptyValue: false
        - name: propertyKey
          in: query
          description: Product Key
          required: false
          type: string
          allowEmptyValue: false
        - name: scrollId
          in: query
          description: >-
            Used for fetching subsequent pages after the first one.  Returned in
            response.scrollId. If null, no additional pages are available
          required: false
          type: string
          allowEmptyValue: false
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/EngagementCollisionPage'
        '400':
          description: Bad request
        '401':
          description: Unauthorized or bad API Key
        '429':
          description: Rate limit exceeded
      deprecated: false
  '/v1/admin/monitoring/engagement_error_details/{engagementId}':
    get:
      tags:
        - Admin
      summary: Get engagement error details
      description: >+
        Retrieves engagement error details. Will return one row for each
        engagement error.

        Examples: 


        | URI   | Results  |

        | ----- | -------- |

        | GET
        /v1/admin/monitoring/engagement_error_details/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx?dateRangeStart=1670283822000&dateRangeEnd=1672962222000&groupByBrowser=true
        | Error details grouped by browser|

        | GET
        /v1/admin/monitoring/engagement_error_details/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx?dateRangeStart=1670283822000&dateRangeEnd=1672962222000&groupByBrowser=false
        | Error details grouped by type|


      operationId: getEngagementErrorDetailsUsingGET
      produces:
        - '*/*'
      parameters:
        - name: dateRangeEnd
          in: query
          description: Date range end (epoch milliseconds)
          required: false
          type: integer
          format: int64
          allowEmptyValue: false
          x-example: dateRangeEnd=1672962222000
        - name: dateRangeStart
          in: query
          description: Date range start (epoch milliseconds)
          required: false
          type: integer
          format: int64
          allowEmptyValue: false
          x-example: dateRangeStart=1670283822000
        - name: engagementId
          in: path
          description: Engagement id
          required: true
          type: string
        - name: groupByBrowser
          in: query
          description: 'True to group by browser type, false to group by error'
          required: false
          type: boolean
          allowEmptyValue: false
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/EngagementErrorDetailsPage'
        '400':
          description: Bad request
        '401':
          description: Unauthorized or bad API Key
        '429':
          description: Rate limit exceeded
      deprecated: false
  /v1/admin/monitoring/engagement_errors:
    get:
      tags:
        - Admin
      summary: Get engagement errors summary
      description: >+
        Retrieves engagement error summary. Will return one row for each
        engagement that has errors in the given date range.  Supports filtering
        and paging.

        ### Filtering

        The date range must be less than or equal to 180 days

        Dates are specified as epoch milliseconds, GMT

        Examples: 


        | URI   | Results  |

        | ----- | -------- |

        | GET
        /v1/admin/monitoring/engagement_errors?dateRangeStart=1670283822000&dateRangeEnd=1672962222000&propertyKey=AP-XXXXXXXXXXX-2
        | Fetches first page of results |

        | GET
        /v1/admin/monitoring/engagement_errors?dateRangeStart=1670283822000&dateRangeEnd=1672962222000&propertyKey=AP-XXXXXXXXXXX-2&pageNumber=1&scrollId=abcxyz
        | Fetches second page of results |


      operationId: getEngagementErrorSummariesUsingGET
      produces:
        - '*/*'
      parameters:
        - name: dateRangeEnd
          in: query
          description: Date range end (epoch milliseconds)
          required: false
          type: integer
          format: int64
          allowEmptyValue: false
          x-example: dateRangeEnd=1672962222000
        - name: dateRangeStart
          in: query
          description: Date range start (epoch milliseconds)
          required: false
          type: integer
          format: int64
          allowEmptyValue: false
          x-example: dateRangeStart=1670283822000
        - name: pageNumber
          in: query
          description: Page Number (zero based)
          required: false
          type: integer
          default: 0
          format: int32
          allowEmptyValue: false
        - name: pageSize
          in: query
          description: Number of records per page
          required: false
          type: integer
          default: 25
          maximum: 1000
          exclusiveMaximum: false
          minimum: 1
          exclusiveMinimum: false
          format: int32
          allowEmptyValue: false
        - name: propertyKey
          in: query
          description: Product Key
          required: false
          type: string
          allowEmptyValue: false
        - name: scrollId
          in: query
          description: >-
            Used for fetching subsequent pages after the first one.  Returned in
            response.scrollId. If null, no additional pages are available
          required: false
          type: string
          allowEmptyValue: false
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/EngagementErrorSummaryPage'
        '400':
          description: Bad request
        '401':
          description: Unauthorized or bad API Key
        '429':
          description: Rate limit exceeded
      deprecated: false
  /v1/admin/monitoring/integrations:
    get:
      tags:
        - Admin
      summary: Get integration statuses
      description: >+
        Retrieves the current statuses for the configured integrations. Will
        return one row for each integration.

        Example: 


        | URI   | Results  |

        | ----- | -------- |

        | GET /v1/admin/monitoring/integrations | Fetches all integration
        statuses |


      operationId: getIntegrationStatusesUsingGET
      produces:
        - '*/*'
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/IntegrationStatusPage'
        '400':
          description: Bad request
        '401':
          description: Unauthorized or bad API Key
        '429':
          description: Rate limit exceeded
      deprecated: false
  /v1/admin/subscription:
    get:
      tags:
        - Admin
      summary: Get Subscription detail
      description: Retrieves Subscription detail for the current sub
      operationId: getDetailUsingGET
      produces:
        - '*/*'
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/SubscriptionDetail'
        '400':
          description: Bad request
        '401':
          description: Unauthorized or bad API Key
        '404':
          description: Account not found
        '429':
          description: Rate limit exceeded
      deprecated: false
  /v1/admin/subscription/users/notSeenAfter:
    get:
      tags:
        - Admin
      summary: Get Subscription users
      description: Retrieves Subscription users
      operationId: getSubscriptionUsersNotSeenAfterUsingGET
      produces:
        - '*/*'
      parameters:
        - name: notSeenAfterTimestamp
          in: query
          description: Not seen after datetime (epoch milliseconds)
          required: true
          type: integer
          format: int64
          allowEmptyValue: false
        - name: pageNumber
          in: query
          description: Page number
          required: false
          type: integer
          default: 0
          format: int32
          allowEmptyValue: false
        - name: pageSize
          in: query
          description: Number of users per page
          required: false
          type: integer
          default: 200
          maximum: 1000
          exclusiveMaximum: false
          minimum: 1
          exclusiveMinimum: false
          format: int32
          allowEmptyValue: false
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/SubscriptionDetail'
        '400':
          description: Bad request
        '401':
          description: Unauthorized or bad API Key
        '404':
          description: Account not found
        '429':
          description: Rate limit exceeded
      deprecated: false
  /v1/articles:
    get:
      tags:
        - Article
      summary: Get Articles
      description: >+
        Fetch metadata for Articles from your PX Subscription. The API provides
        you with the summary of basic information of each article that makes it
        easy to work with specific data. 


        Examples: 


        | URI   | Results  |

        | ----- | -------- |

        | GET /v1/articles?pageSize=100 | Get first 100 articles. |

        | GET /v1/articles?pageSize=100&pageNumber=1 | Get next 100 articles. |

        | GET /v1/articles?productId=1234LPSWUBFW | Get Articles of product
        1234LPSWUBFW. |


        <b>Important:</b> The default pageSize on list calls is 200. The
        pageSize can be changed by adding a pageSize parameter to the URL (i.e.
        /v1/articles?pageSize=100) with a max pageSize=500. 


        To fetch a particular page, use the pageNumber parameter (zero based)

      operationId: getArticlesUsingGET
      produces:
        - application/json
      parameters:
        - name: pageNumber
          in: query
          description: Page number
          required: false
          type: integer
          default: 0
          format: int32
          allowEmptyValue: false
        - name: pageSize
          in: query
          description: 'Number of events per page range[1,500]'
          required: false
          type: integer
          default: 200
          format: int32
          allowEmptyValue: false
        - name: productId
          in: query
          description: Property Group
          required: false
          type: string
          allowEmptyValue: false
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/ArticleExternalViewPage'
        '400':
          description: Bad request
        '401':
          description: Unauthorized or bad API Key
        '429':
          description: Rate limit exceeded
      deprecated: false
  '/v1/articles/{articleId}':
    get:
      tags:
        - Article
      summary: Get Article
      description: |+
        Retrieves article with the given article Id
        Examples: 

        | URI   | Results  |
        | ----- | -------- |
        | GET /v1/articles/{articleId} | Get article with id {articleId}. |

      operationId: getArticleUsingGET
      produces:
        - application/json
      parameters:
        - name: articleId
          in: path
          description: Article id
          required: true
          type: string
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/ArticleExternalView'
        '400':
          description: Bad request
        '401':
          description: Unauthorized or bad API Key
        '429':
          description: Rate limit exceeded
      deprecated: false
  /v1/engagement:
    get:
      tags:
        - Engagement
      summary: Get engagements
      description: >+
        Retrieves engagements. Supports paging.

        Examples: 


        | URI   | Results  |

        | ----- | -------- |

        | GET /v1/engagement?pageSize=100 | Get first 100 engagements. |

        | GET /v1/engagement?pageSize=100&pageNumber=1 | Get next 100
        engagements. |

        | GET /v1/engagement?contentTypes=IN_APP_DIALOG,IN_APP_GUIDE | Get
        dialog and guide engagements. |

      operationId: getEngagementsUsingGET
      produces:
        - application/json
      parameters:
        - name: contentTypes
          in: query
          description: Content Types
          required: false
          type: array
          items:
            type: string
            enum:
              - IN_APP_DIALOG
              - IN_APP_CAROUSEL
              - IN_APP_GUIDE
              - IN_APP_NOTIFICATION
              - OUT_BOUND_EMAIL
              - IN_APP_NPS_SURVEY
              - IN_APP_CES_SURVEY
              - IN_APP_RATING_SURVEY
              - IN_APP_BOOLEAN_SURVEY
              - IN_APP_MULTIPLE_QUESTION_SURVEY
              - UNRECOGNIZE
          collectionFormat: multi
          allowEmptyValue: false
          enum:
            - IN_APP_DIALOG
            - IN_APP_CAROUSEL
            - IN_APP_GUIDE
            - IN_APP_NOTIFICATION
            - OUT_BOUND_EMAIL
            - IN_APP_NPS_SURVEY
            - IN_APP_CES_SURVEY
            - IN_APP_RATING_SURVEY
            - IN_APP_BOOLEAN_SURVEY
            - IN_APP_MULTIPLE_QUESTION_SURVEY
            - UNRECOGNIZE
        - name: createdById
          in: query
          description: Created by ID
          required: false
          type: string
          allowEmptyValue: false
        - name: pageNumber
          in: query
          description: Page number
          required: false
          type: integer
          default: 0
          format: int32
          allowEmptyValue: false
        - name: pageSize
          in: query
          description: Number of events per page
          required: false
          type: integer
          default: 200
          maximum: 500
          exclusiveMaximum: false
          minimum: 1
          exclusiveMinimum: false
          format: int32
          allowEmptyValue: false
      responses:
        '200':
          description: Success
          schema:
            $ref: '#/definitions/EngagementsPage'
        '400':
          description: Bad request
        '401':
          description: Unauthorized or bad API Key
        '429':
          description: Rate limit exceeded
      deprecated: false
  /v1/engagement/env:
    put:
      tags:
        - Engagement
      summary: Set engagement environment
      description: >+
        Move engagement between environments.

        ### Parameters

        - engagementId: ID of engagement to be modified

        - env:  Which environment to set the engagement to.  Valid values:
        Production,Stage,QA,Integration (case insensitive)

      operationId: changeEngagementEnvUsingPUT
      consumes:
        - application/json
      produces:
        - application/json
      parameters:
        - in: body
          name: e

# --- truncated at 32 KB (178 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/gainsight/refs/heads/main/openapi/gainsight-px-rest-api-openapi.yml