For the complete documentation index, see llms.txt. This page is also available as Markdown.

Get a company

As a Reseller you can retrieve a single company you manage by its ID to view full details (license, settings, etc.). Get the company resourceId from the companies list, then call GET /api/companies/{resourceId}. Use a credential with Client Role = Reseller.


POST /api/companies/search

Get the company's resourceId by calling this endpoint; use it in the next step as {resourceId}.

Retrieves a paginated list of all companies you manage with license details. Each item includes resourceId — use it as the Company ID. Test it: Authorize with Client ID/Secret, then Send — request body is pre-filled.

Retrieves a list of all companies

post
Required scopes
This endpoint requires the following scopes:
  • : API
Authorizations
OAuth2clientCredentialsRequired

Client ID and Client Secret from Company → Company Settings → REST API. Enter credentials to auto-fetch token.

Token URL:
Body
pageNumberintegerRequiredExample: 1
pageSizeintegerRequiredExample: 10
orderBystringRequiredExample: CreateTime
ascendingbooleanRequiredExample: false
isTargetUserCountExceededLimitbooleanOptional

If true, only companies exceeding license limit are returned

Example: false
Responses
200

OK

application/json
statusstringOptional
messagestring · nullableOptional
validationMessagesstring[] · nullableOptional
post/api/companies/search
POST /api/companies/search HTTP/1.1
Host: api.keepnetlabs.com
Authorization: Bearer YOUR_OAUTH2_TOKEN
Content-Type: application/json-patch+json
Accept: */*
Content-Length: 126

{
  "pageNumber": 1,
  "pageSize": 10,
  "orderBy": "CreateTime",
  "ascending": false,
  "filter": {
    "Condition": "AND",
    "SearchInputTextValue": ""
  }
}
200

OK

{
  "data": {
    "limitExceededCompanyCount": 1,
    "pageNumber": 1,
    "pageSize": 1,
    "totalNumberOfPages": 1,
    "totalNumberOfRecords": 1,
    "results": [
      {
        "companyName": "text",
        "companyResourceId": "text",
        "resellerName": "text",
        "industryName": "text",
        "industryResourceId": "text",
        "licenseTypeName": "text",
        "licenseTypeResourceId": "text",
        "isNumberOfUsersLimited": true,
        "numberOfUsers": "text",
        "privacyDurationId": 1,
        "licenceExpired": true,
        "licenseEndDate": "2026-01-01T00:00:00.000Z",
        "createTime": "2026-01-01T00:00:00.000Z",
        "targetUserCount": 1,
        "children": [
          {
            "companyName": "text",
            "companyResourceId": "text",
            "resellerName": "text",
            "industryName": "text",
            "industryResourceId": "text",
            "licenseTypeName": "text",
            "licenseTypeResourceId": "text",
            "isNumberOfUsersLimited": true,
            "numberOfUsers": "text",
            "privacyDurationId": 1,
            "licenceExpired": true,
            "licenseEndDate": "2026-01-01T00:00:00.000Z",
            "createTime": "2026-01-01T00:00:00.000Z",
            "targetUserCount": 1,
            "children": "[Circular Reference]",
            "tags": [
              "text"
            ],
            "deletedTargetUserCount": 1,
            "inactiveTargetUserCount": 1,
            "monthlyActiveUserCount": 1
          }
        ],
        "tags": [
          "text"
        ],
        "deletedTargetUserCount": 1,
        "inactiveTargetUserCount": 1,
        "monthlyActiveUserCount": 1
      }
    ]
  },
  "status": "text",
  "message": "text",
  "validationMessages": [
    "text"
  ]
}

From the response, pick the company (e.g. by name) and note its resourceId. Example: "resourceId": "xC5kfGz7w2Nz" → use in GET /api/companies/xC5kfGz7w2Nz.


GET /api/companies/{resourceId}

Returns full details for that company (license, settings, etc.). Replace {resourceId} with the company ID from the search response. No request body.

Retrieves a single company by ID. Test it: Authorize, then set path parameter to a company ID from companies/search.

Retrieves an existing company

get
Required scopes
This endpoint requires the following scopes:
  • : API
Authorizations
OAuth2clientCredentialsRequired

Client ID and Client Secret from Company → Company Settings → REST API. Enter credentials to auto-fetch token.

Token URL:
Path parameters
resourceIdstringRequired
Responses
200

OK

application/json
statusstringOptional
messagestring · nullableOptional
validationMessagesstring[] · nullableOptional
get/api/companies/{resourceId}
GET /api/companies/{resourceId} HTTP/1.1
Host: api.keepnetlabs.com
Authorization: Bearer YOUR_OAUTH2_TOKEN
Accept: */*
200

OK

{
  "data": {
    "resourceId": "text",
    "name": "text",
    "description": "text",
    "industryResourceId": "text",
    "industryName": "text",
    "countryResourceId": "text",
    "countryName": "text",
    "countryCode": "text",
    "address": "text",
    "websiteUrl": "text",
    "logoUrl": "text",
    "licenseTypeResourceId": "text",
    "licenseTypeName": "text",
    "licensePeriodTypeResourceId": "text",
    "licensePeriodTypeName": "text",
    "licenseStartDate": "2026-01-01T00:00:00.000Z",
    "licenseEndDate": "2026-01-01T00:00:00.000Z",
    "isNumberOfUsersLimited": true,
    "numberOfUsers": 1,
    "notificationTemplateTypeResourceId": "text",
    "notificationTemplateTypeName": "text",
    "trainingContentTypeResourceId": "text",
    "trainingContentTypeName": "text",
    "smtpConfigurationTypeResourceId": "text",
    "smtpConfigurationTypeName": "text",
    "preferredLanguageTypeResourceId": "text",
    "preferredLanguageTypeName": "text",
    "isVersionVisible": true,
    "isReleaseNotesVisible": true,
    "releaseNotesUrl": "text",
    "companyGroups": [
      {
        "resourceId": "text",
        "name": "text"
      }
    ],
    "parentId": 1,
    "baseManHourCost": 1,
    "baseManHour": 1,
    "statusId": 1,
    "statusName": "text",
    "licenseModules": [
      "text"
    ],
    "targetUserCount": 1,
    "timeZoneId": "text",
    "callBackNumberBookingCount": 1,
    "dateFormat": "text",
    "timeFormat": "text",
    "tags": [
      "text"
    ],
    "hasAgenticAILicense": true
  },
  "status": "text",
  "message": "text",
  "validationMessages": [
    "text"
  ]
}

Common errors

  • 403 Forbidden — Credential is not Reseller, or company is not one you manage. Set Client Role = Reseller. Roles and permissions →

  • 401 Unauthorized — Missing or invalid token. Request a new token via POST /connect/token.

  • 404 Not Found — Invalid or unknown company ID. Verify from POST /api/companies/search.

Related: Scope API requests to a customer →. List companies with license details →. Update a company →.

Last updated