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

List phishing scenarios for a customer

As a Reseller you can list a customer's phishing scenarios (templates used to run campaigns) scoped to that company. Get the customer's Company ID, then call the phishing-scenario search endpoint with X-KEEPNET-Company-Id. Use a credential with Client Role = Reseller. Use the scenario resourceId when creating or managing phishing campaigns for that customer.


POST /api/companies/search

Get the customer's Company ID. Use the resourceId of the desired company in the next steps.

Retrieves a paginated list of all companies you manage with license details. Each item includes resourceId — use it as the Company ID for scoped requests. 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 and note its resourceId. Example: "resourceId": "xC5kfGz7w2Nz" → use as X-KEEPNET-Company-Id in the scenario requests below.


POST /api/phishing-simulator/phishing-scenario/search

Returns a paginated list of phishing scenarios for that customer. Send X-KEEPNET-Company-Id. Response includes scenario resourceId, name, and other fields — use a scenario ID when creating a phishing campaign.

Returns a list of the phishing scenarios. As a Reseller, send X-KEEPNET-Company-Id: <companyResourceId>. Request body: optional filter, pageNumber, pageSize, orderBy, ascending. Test it: Endpoints → PhishingScenario — use dummy data (H8d) and set the header to a Company ID from companies/search.

Returns a list of the phishing scenarios

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: 20
orderBystringOptionalExample: Name
ascendingbooleanOptionalExample: true
Responses
200

OK

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

{
  "pageNumber": 1,
  "pageSize": 20,
  "orderBy": "Name",
  "ascending": true,
  "filter": {
    "Condition": "AND",
    "SearchInputTextValue": ""
  }
}
200

OK

{
  "data": {
    "pageNumber": 1,
    "pageSize": 1,
    "totalNumberOfPages": 1,
    "totalNumberOfRecords": 1,
    "results": [
      {
        "resourceId": "text",
        "name": "text",
        "quishingType": "text",
        "method": "text",
        "difficulty": "text",
        "category": "text",
        "languageTypeName": [
          "text"
        ],
        "languageTypeCode": [
          "text"
        ],
        "tags": [
          "text"
        ],
        "isOwner": true,
        "isSelected": true,
        "createdBy": "text",
        "createTime": "2026-01-01T00:00:00.000Z",
        "roles": [
          {
            "name": "text"
          }
        ]
      }
    ]
  },
  "status": "text",
  "message": "text",
  "validationMessages": [
    "text"
  ]
}

To export the scenario list: POST /api/phishing-simulator/phishing-scenario/search/export — same header and body shape; see Endpoints → PhishingScenario.


Common errors

  • 403 Forbidden — Credential is not Reseller, or the Company ID 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 / 400 Bad Request — Invalid Company ID. Verify Company ID from POST /api/companies/search and ensure you send X-KEEPNET-Company-Id for the customer.

Related: Scope API requests to a customer →. View customer's campaign list and report → (campaigns and job reports). Create and start phishing campaign for a customer →.

Last updated