openapi: 3.1.0 info: title: Wizer Training API description: | **Welcome to the Wizer Training API guide!** This guide will help you get up and running quickly by covering the essentials: obtaining your API key, authenticating requests, understanding role-based access, and making your first API call. ### Get Your API Key Before you begin, you need an API key to authenticate your requests. You can generate or manage your API key by visiting our integration settings: [Integration Settings Page](https://admin.wizer-training.com/settings/integration) *Note: Keep your API key secure, as it grants access to your account and endpoints.* ### Authentication All API requests require your **API key**. Include your **API key** in the request header as follows: ```curl --header 'apikey: YOUR_API_KEY' ``` Replace `YOUR_API_KEY` with the key you generated. This header authenticates your requests. ### Role-Based Access Our API endpoints are secured by role-based access controls. Depending on your company’s assigned access level, you will have permission to use certain sections of the API: **For companies which licensed the platform directly though Wizer** - the following sections are available: - *COMPANY CULTURE DASHBOARD*: Access metrics and insights about your company’s culture, - *REPORTS*: Generate and view detailed analytical reports, - *USER MANAGEMENT*: Manage user profiles, permissions, and account settings; **As a Partners (with access to the Partner Portal)** - in addition to the sections available to direct companies, you can also access: - *PARTNER PORTAL*: Gain access to partner-specific features and integrations. *Note: If your company does not have access to the partner portal, any request made to this section will return an authorization error.* *Tip: Before making requests to a section, ensure your company has the required access. If you encounter an authorization error, verify your company's access level and adjust accordingly.* ### Making Your First Request Here’s an example of how to retrieve data from the *COMPANY CULTURE DASHBOARD* using `curl`: ```curl curl -X GET "https://gateway.wizer-training.com/api/v1/external/reports/metrics" -H "apiKey: YOUR_API_KEY" ``` Replace `YOUR_API_KEY` with your actual API key. This request should return JSON data with the dashboard metrics. Similarly, you can access other sections by substituting the URL path with the appropriate section (e.g., `/reports`, `/user-management`, `/partner-portal`). ### Handling Rate Limits Some endpoints enforce rate limits. If you exceed the allowed number of requests within a certain period, you may receive a `429 Too Many Requests` response. To handle rate limits: - *Monitor your request frequency*: Adjust your application to avoid burst requests. - *Implement retry logic*: Wait for the recommended time before retrying after a 429 error. - *Check the response headers*: Some responses include rate limit details to help you manage your usage. ### Next Steps Explore Detailed Documentation: For each section (e.g., Reports, User Management, Partner Portal), review the complete endpoint details, parameters, and response formats. *Test in a Sandbox*: Use the sandbox environment to experiment with the API calls before integrating into your production application. ### Need Help? If you have any questions or run into issues, please consult our troubleshooting guide or contact our support team at support@wizer-training.com or post a `Help` ticket directly from Wizer the admin console. version: 1.0.0 license: name: Wizer Training Terms of Service url: https://www.wizer-training.com/agreement servers: - url: https://gateway.wizer-training.com description: API Gateway paths: /reports/api/v1/external/company/{companyId}/training/dashboard: get: description: This endpoint returns current and previous period statistics for trainings. summary: Trainings operationId: get-trainings-v1 tags: - Company Culture Dashboard parameters: - $ref: '#/components/parameters/companyId' responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/TrainingsSuccessResponse' examples: Success: $ref: '#/components/examples/TrainingsSuccessResponse' '400': description: Bad Request. Please check the request parameters and try again. content: application/json: schema: $ref: '#/components/schemas/LegacyErrorResponse' examples: Invalid Company ID: $ref: '#/components/examples/InvalidCompanyIDResponse' '500': description: An unexpected server error occurred. Please retry the request later. If the issue persists, contact support. content: application/json: schema: $ref: '#/components/schemas/LegacyErrorResponse' examples: Internal Error: $ref: '#/components/examples/LegacyInternalErrorResponse' /reports/api/v1/external/company/{companyId}/gaming/dashboard: get: description: An endpoint to get data for gaming summary dashboard. summary: Phishing Exercise operationId: get-gaming-summary-dashboard-v1 tags: - Company Culture Dashboard parameters: - $ref: '#/components/parameters/companyId' responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/PhishingExerciseSuccessResponse' examples: Success: $ref: '#/components/examples/PhishingExerciseSuccessResponse' Empty Response: $ref: '#/components/examples/EmptyResponse' '400': description: Bad Request. Please check the request parameters and try again. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Invalid Argument: $ref: '#/components/examples/InvalidDepartmentIDResponse' '500': description: An unexpected server error occurred. Please retry the request later. If the issue persists, contact support. content: application/json: schema: $ref: '#/components/schemas/LegacyErrorResponse' examples: Internal Error: $ref: '#/components/examples/LegacyInternalErrorResponse' /phishing/api/v3/external/company/{companyId}/dashboard/report: get: description: | This endpoint returns summary dashboard statistics for phishing simulations for both the previous and the current reporting periods. The **previous period** includes aggregated statistics for all phishing campaigns that were active during the previous month, covering their activity up to the end of that month. The **current period** includes aggregated statistics for phishing campaigns that are active during the current month. summary: Phishing Simulation operationId: get-phishing-simulation-dashboard-v3 tags: - Company Culture Dashboard parameters: - $ref: '#/components/parameters/companyId' responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/PhishingSimulationSuccessResponse' examples: Phishing Simulation Success Response: $ref: '#/components/examples/PhishingSimulationSuccessResponse' '400': description: Bad Request. Please check the request parameters and try again. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: InvalidDepartmentID: $ref: '#/components/examples/InvalidDepartmentIDResponse' '500': description: An unexpected server error occurred. Please retry the request later. If the issue persists, contact support. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Internal Error: $ref: '#/components/examples/InternalErrorResponse' /api/v1/external/reports/metrics: get: summary: Metrics operationId: get-metrics-v1 deprecated: true description: "Retrieves various metrics and statistics related to onboarding, training, gaming, and phishing activities. The \nresponse includes information about registered and not registered users, training assignments, gaming assignments, \nand phishing campaigns.\n\nThis endpoint retrieves various metrics and statistics related to onboarding, training, gaming, and phishing activities. \nThe response includes information about registered and not registered users, training assignments, gaming assignments, and phishing campaigns.\n\n### Response description\n\n*Onboarding metrics*\n\n- `users` parameter:\n```json\n \"users\": // (object) provides information about user registration\n {\n \"registered\": 1, // (integer) number of registered users \n \"notRegistered\": 1, // (integer) number of not registered users\n \"total\": 2 // (integer) total number of users\n }\n```\n\n*Training*\n\n- `training.summary` parameter:\n```json\n \"summary\": // (object) provides a summary of training assignments\n {\n \"completed\": 0, // (integer) number of completed assignments \n \"inProgress\": 0, // (integer) number of completed assignments\n \"notStarted\": 6, // (integer) number of assignments in progress\n \"assigned\": 6 // (integer) number of not started assignments\n }\n```\n\n- `training.campaigns` parameter:\n```json\n \"campaigns\": // (array) provides information about training campaigns \n [\n {\n \"name\": \"Annual Refresher 2023 2nd May 2023 11:35:58 pm Campaign\", // (string)\n \"campaignId\": \"382b86401eb54547a1fc3f5ccee8db21\", // (string\n \"courseId\": \"8f9e23e7c79b42bf95663bf24be0715a\", // (string\n \"assigned\": 1, // (integer) number of assignments\n \"completed\": 0, // (integer) number of completed assignments\n \"inProgress\": 0, // (integer) number of in progress assignments\n \"notStarted\": 1, // (integer) number of not started assignments\n \"startedAt\": \"2023-04-12T14:07:40Z\", // (timestamp) The start time of the campaign\n \"endedAt\": null // (nullable timestamp) The end time of the campaign, or null if not ended yet\n }\n ]\n```\n\n*Gaming*\n\n- `gaming.summary` parameter:\n```json\n \"summary\": // (object) provides a summary of training assignments\n {\n \"completed\": 0, // (integer) number of completed assignments\n \"notStarted\": 1, // (integer) number of not started assignments\n \"assigned\": 1 // (integer) number of all assignments\n }\n```\n\n- `gaming.campaigns` parameter\n```json\n \"campaigns\": // (array) provides information about gaming campaigns\n [\n {\n \"name\": \"Phishing Exercise\", // (string) name of the gaming campaign\n \"campaignId\": \"382b86401eb54547a1fc3f5ccee8db21\", // (string) gaming campaign ID\n \"assigned\": 1, // (integer) number of assignments\n \"completed\": 0, // (integer) number of completed assignments\n \"notStarted\": 1, // (integer) number of not started assignments\n \"averageScore\": null, // (float) average gaming score\n \"startedAt\": \"2023-04-12T14:07:40Z\", // (timestamp) The start time of the campaign\n \"endedAt\": null // (nullable timestamp) The end time of the campaign, or null if not ended yet\n }\n ]\n```\n\n*Phishing*\n\n- `phishing.summary` parameter:\n```json\n \"summary\": { // (object) provides a summary of phishing activities\n \"participated\": 14, // (integer) users participated number\n \"clicked\": 0, // (integer) users clicked number\n \"reported\": 0 // (integer) users reported number\n }\n```\n\n- `phishing.campaigns` parameter:\n```json\n \"campaigns\": // (array) provides information about phishing campaigns\n [\n {\n \"campaignId\": 1014, // (integer) campaign ID\n \"participated\": 12, // (integer) number of participated users\n \"clicked\": 0,\t\t// (integer) number of clicked users\n \"reported\": 0 // (integer) number of reported users\n }\n ]\n```\n" tags: - Reports parameters: - name: companyId in: query description: The ID of the company. schema: type: string example: a6438c623d1b4303992fbd1d1651ce04 responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/MetricsSuccessResponse' examples: Success: $ref: '#/components/examples/MetricsSuccessResponse' '400': description: Bad Request. Please check the request parameters and try again. content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse' examples: Invalid CompanyID: $ref: '#/components/examples/InvalidCompanyIDResponse-3' '500': description: An unexpected server error occurred. Please retry the request later. If the issue persists, contact support. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Internal Error: $ref: '#/components/examples/InternalErrorResponse' /api/v1/external/reports/master_report: get: summary: Master Report operationId: get-master-report-v1 description: | This endpoint is used to get a user progress statistics report grouped by all active campaigns. **FOR PARTNERS ONLY**: Use the `customerCompanyId` param to get a report for your customers company. tags: - Reports parameters: - name: customerCompanyId in: query description: "The customer’s company id (partners only). If the parameter is provided, the report will be generated for your \ncustomer’s company users. To generate a report for your own company, leave this parameter empty.\n" schema: type: string responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/MasterReportSuccessResponse' examples: Success: $ref: '#/components/examples/MasterReportSuccessResponse' '401': description: Unauthorized. Please check your credentials and try again. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Invalid API Key: $ref: '#/components/examples/InvalidAPIKeyResponse' API Key Not Set: $ref: '#/components/examples/APIKeyNotSetResponse' '403': description: Forbidden. The account making the request does not have permission to access the requested resource. content: application/json: schema: $ref: '#/components/schemas/ForbiddenResponse' examples: Forbidden: $ref: '#/components/examples/ForbiddenResponse' '500': description: An unexpected server error occurred. Please retry the request later. If the issue persists, contact support. content: application/json: schema: $ref: '#/components/schemas/SomethingWentWrongErrorResponse' examples: Internal Error: $ref: '#/components/examples/SomethingWentWrongErrorResponse' /reports/api/v1/external/company/{companyId}/training/campaigns: get: summary: Awareness Courses operationId: get-awareness-courses-v1 description: | This endpoint returns an overall statistics(summary) report by regular training campaigns and a list of regular training campaigns. The endpoint supports pagination and can return `5`, `10`, `25`, `50`, or `100` records per request. Filtering by the `status` field is possible. Summary data depends on the selected filter. The endpoint can be used by partners, who have an ability to get statistics of their authorized child and grandchild companies. tags: - Reports parameters: - $ref: '#/components/parameters/companyId' - name: status in: query required: false schema: type: array items: type: string enum: - ACTIVE - ENDED - SUSPENDED - SCHEDULED examples: Multiple Statuses: value: - ACTIVE - ENDED - name: pageNumber in: query description: | Parameter indicates the page number, the page being the one requested. By default, this query parameter is equal to 0. required: true schema: type: integer example: 0 - name: pageSize in: query description: Maximum number of campaigns to return from the collection in one page. required: true schema: type: integer enum: - 5 - 10 - 25 - 50 - 100 example: 5 - name: orderBy in: query description: | Allows sorting collection by one field. required: false schema: type: string enum: - name - status - completed - inProgress - notStarted - overdue - startedAt - endedAt - $ref: '#/components/parameters/order' responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/AwarenessCoursesSuccess' examples: Success: $ref: '#/components/examples/AwarenessCoursesSuccess' '400': description: Bad Request. Please check the request parameters and try again. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Invalid Order: $ref: '#/components/examples/InvalidOrderResponse' Invalid Status: $ref: '#/components/examples/InvalidStatusResponse' '500': description: An unexpected server error occurred. Please retry the request later. If the issue persists, contact support. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Internal Error: $ref: '#/components/examples/InternalErrorResponse' /reports/api/v1/external/company/{companyId}/w4d/campaigns: get: summary: Developer Courses operationId: get-developer-courses-v1 tags: - Reports parameters: - $ref: '#/components/parameters/companyId' - name: status in: query description: Filter by training status. Repeat the parameter to pass several values. required: false schema: type: array items: type: string enum: - ACTIVE - ENDED - SUSPENDED - SCHEDULED examples: Multiple Statuses: value: - ACTIVE - ENDED - $ref: '#/components/parameters/pageNumber' - name: pageSize in: query description: Maximum number of campaigns to return from the collection in one page. required: false schema: type: integer enum: - 5 - 10 - 25 - 50 - 100 - $ref: '#/components/parameters/order' - name: orderBy in: query description: Allows sorting collection on one field. required: false schema: type: string enum: - name - status - completed - inProgress - notStarted - overdue - startedAt - endedAt responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/DeveloperCoursesSuccessResponse' examples: Success: $ref: '#/components/examples/DeveloperCoursesSuccessResponse' '400': description: Bad Request. Please check the request parameters and try again. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Invalid Order: $ref: '#/components/examples/InvalidOrderResponse' Invalid Status: $ref: '#/components/examples/InvalidStatusResponse' '500': description: An unexpected server error occurred. Please retry the request later. If the issue persists, contact support. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Internal Error: $ref: '#/components/examples/InternalErrorResponse' /reports/api/v1/external/company/{companyId}/phishing_exercise/campaigns: get: summary: Phishing Exercise Statistics operationId: get-phishing-exercise-statistics-v1 description: "This endpoint returns an overall statistics(summary) report by Phishing Exercise and a list of Phishing Exercise campaigns.\n\nThe endpoint supports pagination and can return `5`, `10`, `25`, `50`, or `100` records per request.\n\nFiltering by the status field is possible. Summary data depends on the selected filter.\n\nThe endpoint can be used by partners, who have the ability to get statistics of their authorized child and grandchild companies.\n\n```json\n\"campaigns\": [\n {\n \"name\": \"Phishing Exercise\", // (string) name of the gaming campaign \n \"campaignId\": \"382b86401eb54547a1fc3f5ccee8db21\", // (string) gaming campaign ID\n \"status\": \"ACTIVE\",\n \"assigments\": 1, // (integer) number of assignments \n \"completed\": 0, // (integer) number of completed assignments \n \"notStarted\": 1, // (integer) number of not started assignments \n \"overdue\": 1, // (integer) number of overdue assignments\n \"averageScore\": null, // (float) average gaming score \n \"startedAt\": \"2023-04-12T14:07:40Z\", // (timestamp) The start time of the campaign\n \"endedAt\": null // (nullable timestamp) The end time of the campaign, or null if not ended yet\n }, ...\n]\n```\n" tags: - Reports parameters: - $ref: '#/components/parameters/companyId' - name: status in: query description: | Status of training. required: false schema: type: array items: type: string enum: - ACTIVE - ENDED - SUSPENDED examples: Multiple Statuses: value: - ACTIVE - ENDED - $ref: '#/components/parameters/pageNumber' - name: pageSize in: query description: Maximum number of campaigns to return from the collection in one page. required: false schema: type: integer enum: - 5 - 10 - 25 - 50 - 100 - $ref: '#/components/parameters/order' - name: orderBy in: query description: Allows sorting collection on one field. required: false schema: type: string enum: - name - status - completed - notStarted - overdue - startedAt - endedAt responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/PhishingExerciseSuccessResponse-2' examples: Success: $ref: '#/components/examples/PhishingExerciseSuccessResponse-2' '400': description: Bad Request. Please check the request parameters and try again. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Invalid Order: $ref: '#/components/examples/InvalidOrderResponse' Invalid Status: $ref: '#/components/examples/InvalidStatusResponse' '401': description: Unauthorized. Please check your credentials and try again. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Invalid API Key: $ref: '#/components/examples/InvalidAPIKeyResponse' '500': description: An unexpected server error occurred. Please retry the request later. If the issue persists, contact support. content: application/json: schema: $ref: '#/components/schemas/LegacyErrorResponse' examples: Internal Error: $ref: '#/components/examples/LegacyInternalErrorResponse' /phishing/api/v3/external/company/{companyId}/campaigns/statistic: get: summary: Phishing Simulation operationId: get-phishing-simulation-reports-v3 description: | The endpoint returns a list of campaigns with their statuses: - `QUEUED` - `IN_PROGRESS` - `ARCHIVED` and statistics on user actions in the current round of each specific campaign. The endpoint supports pagination and can return `5`, `10`, `25`, `50`, or `100` records per request. Filtering by the status field is possible. The endpoint can be used by partners, who have the ability to get statistics of their authorized child and grandchild companies. tags: - Reports parameters: - $ref: '#/components/parameters/companyId' - name: statuses in: query description: | Status for filter. required: false schema: type: array items: type: string enum: - QUEUED - IN_PROGRESS - ARCHIVED examples: Multiple Statuses: value: - QUEUED - IN_PROGRESS - $ref: '#/components/parameters/pageNumber' - name: pageSize in: query description: Maximum number of campaigns to return from the collection in one page. required: false schema: type: integer enum: - 5 - 10 - 25 - 50 - 100 - $ref: '#/components/parameters/order' - name: orderBy in: query description: Field to sort by. required: false schema: type: string enum: - id - name - createdAt - archivedAt - currentRoundNumber - assignmentType - status - isSmart - usersCount - sent - opened - reported - clickPhished - credPhished responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/PhishingSimulationSuccessResponse-2' examples: Phishing Simulation Success Response: $ref: '#/components/examples/PhishingSimulationSuccessResponse-2' '400': description: Bad Request. Please check the request parameters and try again. content: application/json: schema: $ref: '#/components/schemas/LegacyErrorResponse' examples: Invalid CompanyID: $ref: '#/components/examples/InvalidCompanyIDResponse-4' '500': description: An unexpected server error occurred. Please retry the request later. If the issue persists, contact support. content: application/json: schema: $ref: '#/components/schemas/LegacyErrorResponse' examples: Internal Error: $ref: '#/components/examples/LegacyInternalErrorResponse' /reports/api/v1/external/company/{companyId}/monthly_video/report: get: summary: Monthly Videos operationId: get-monthly-videos-v1 tags: - Reports parameters: - $ref: '#/components/parameters/companyId' - name: statuses in: query description: | Status for filter. required: false schema: type: array items: type: string enum: - QUEUED - IN_PROGRESS - ARCHIVED examples: Multiple Statuses: value: - QUEUED - IN_PROGRESS - $ref: '#/components/parameters/pageNumber' - name: pageSize in: query description: Maximum number of campaigns to return from the collection in one page. required: false schema: type: integer enum: - 5 - 10 - 25 - 50 - 100 - $ref: '#/components/parameters/order' - name: orderBy description: Allows sorting collection by one field. in: query schema: type: string enum: - completed - notStarted - overdue - startedAt - endedAt responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/MonthlyVideosSuccessResponse' examples: Success: $ref: '#/components/examples/MonthlyVideosSuccessResponse' '400': description: Bad Request. Please check the request parameters and try again. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Invalid Order: $ref: '#/components/examples/InvalidOrderResponse' Invalid Status: $ref: '#/components/examples/InvalidStatusResponse' '500': description: An unexpected server error occurred. Please retry the request later. If the issue persists, contact support. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Internal Error: $ref: '#/components/examples/InternalErrorResponse' /reports/api/v1/external/company/{companyId}/policies/report: get: summary: Policy operationId: get-policy-v1 tags: - Reports parameters: - $ref: '#/components/parameters/companyId' - $ref: '#/components/parameters/order' - $ref: '#/components/parameters/pageNumber' - name: pageSize in: query description: Maximum number of campaigns to return from the collection in one page. required: false schema: type: integer enum: - 5 - 10 - 25 - 50 - 100 - name: orderBy description: Allows sorting collection by one field. in: query schema: type: string enum: - name - revision - assignments - acknowledged - notOpened - progress - overdue - averageAcknowledge - createdAt - endedAt - status - assignmentType - name: status in: query description: | Status for filter. required: false schema: type: array items: type: string enum: - active - ended examples: Multiple Statuses: value: - ACTIVE - ENDED responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/PolicySuccess' examples: Success: $ref: '#/components/examples/PolicySuccess' '400': description: Bad Request. Please check the request parameters and try again. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Invalid Order: $ref: '#/components/examples/InvalidOrderResponse' Invalid Status: $ref: '#/components/examples/InvalidStatusResponse' '500': description: An unexpected server error occurred. Please retry the request later. If the issue persists, contact support. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Internal Error: $ref: '#/components/examples/InternalErrorResponse' '501': description: Not Implemented. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Not Implemented: $ref: '#/components/examples/NotImplementedResponse' /reports/api/v1/external/company/{companyId}/monthly_video/users/report: get: summary: Users Monthly Videos operationId: get-users-monthtly-videos-v1 description: | This endpoint returns report about monthly videos by each enabled user of the company. The endpoint supports pagination and can return `5`, `10`, `25`, `50`, or `100` records per request. The endpoint can be used by partners, who have the ability to get statistics of their authorized child and grandchild companies. tags: - Reports parameters: - $ref: '#/components/parameters/companyId' - $ref: '#/components/parameters/order' - name: pageNumber in: query description: | Parameter indicates the number of the requested page if pagination applied. By default, this query parameter is equal to `0`. required: true schema: type: integer example: 0 - name: pageSize in: query description: Maximum number of campaigns to return from the collection in one page. required: true schema: type: integer default: 100 enum: - 5 - 10 - 25 - 50 - 100 - name: orderBy description: Allows sorting collection by one field. in: query schema: type: string default: email enum: - email - firstName - lastName - isRegistered - videoName - videoUrl - startedAt - isCompleted - completedAt - isInvited - invitedAt - daysToComplete - daysToCompleteLeft - assignmentDate - name: videoName in: query description: Filter by video name. required: false schema: type: string - name: videoId in: query description: Filter by video ID. required: false schema: type: string example: 123e4567e89b12d3a456426614174000 responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/UsersMonthlyVideosSuccessResponse' examples: Success: $ref: '#/components/examples/UsersMonthlyVideosSuccessResponse' '400': description: Bad Request. Please check the request parameters and try again. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Page Params Must Be Set: $ref: '#/components/examples/PageParamsMustBeSet' '401': description: Unauthorized. Please check your credentials and try again. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Invalid API Key: $ref: '#/components/examples/InvalidAPIKeyResponse' '403': description: Forbidden. The account making the request does not have permission to access the requested resource. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Forbidden: $ref: '#/components/examples/ForbiddenResponse-2' '500': description: An unexpected server error occurred. Please retry the request later. If the issue persists, contact support. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Internal Error: $ref: '#/components/examples/InternalErrorResponse' /reports/api/v1/external/company/{companyId}/training/awareness/users/report: get: summary: Users Courses operationId: get-users-awareness-courses-v1 description: | This endpoint returns report about trainings by each enabled user of the company. The endpoint supports pagination and can return `5`, `10`, `25`, `50`, or `100` records per request. The endpoint can be used by partners, who have the ability to get statistics of their authorized child and grandchild companies. tags: - Reports parameters: - $ref: '#/components/parameters/companyId' - $ref: '#/components/parameters/order' - name: pageNumber in: query description: | Parameter indicates the number of the requested page if pagination applied. By default, this query parameter is equal to `0`. required: true schema: type: integer example: 0 - name: pageSize in: query description: Maximum number of campaigns to return from the collection in one page. required: true schema: type: integer enum: - 5 - 10 - 25 - 50 - 100 - name: orderBy description: Allows sorting collection by one field. in: query schema: type: string enum: - lastName - firstName - email - courseName - isInvited - isStarted - isCompleted - completedAt - progress - courseStartedAt - courseEndedAt - daysToComplete - daysToCompleteLeft - assignmentDate - name: courseId in: query description: Filter by course ID. required: false schema: type: string - name: campaignId in: query description: Filter by campaign ID. required: false schema: type: string - name: courseName in: query description: Filter by course name. required: false schema: type: string - name: courseType in: query required: false schema: type: string enum: - AWARENESS - SPECIALIZED - COMPLIANCE - FOR_ADMINS - AI_SAFETY - CUSTOM - SHARED - ROLE_BASED responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/UsersAwarenessCoursesSuccessResponse' examples: Success: $ref: '#/components/examples/UsersAwarenessCoursesSuccessResponse' '400': description: Bad Request. Please check the request parameters and try again. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Page Params Must Be Set: $ref: '#/components/examples/PageParamsMustBeSet-2' '403': description: Forbidden. The account making the request does not have permission to access the requested resource. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Forbidden: $ref: '#/components/examples/ForbiddenResponse-3' '500': description: An unexpected server error occurred. Please retry the request later. If the issue persists, contact support. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Internal Error: $ref: '#/components/examples/InternalErrorResponse' /reports/api/v1/external/company/{companyId}/training/developers/users/report: get: summary: Users Developers Courses operationId: get-users-developers-courses-v1 description: | This endpoint returns report about developers trainings by each enabled user of the company. The endpoint supports pagination and can return `5`, `10`, `25`, `50`, or `100` records per request. The endpoint can be used by partners, who have the ability to get statistics of their authorized child and grandchild companies. tags: - Reports parameters: - $ref: '#/components/parameters/companyId' - $ref: '#/components/parameters/order' - name: pageNumber in: query description: | Parameter indicates the number of the requested page if pagination applied. By default, this query parameter is equal to `0`. required: true schema: type: integer example: 0 - name: pageSize in: query description: Maximum number of campaigns to return from the collection in one page. required: true schema: type: integer enum: - 5 - 10 - 25 - 50 - 100 - name: orderBy description: Allows sorting collection by one field. in: query schema: type: string enum: - lastName - firstName - email - courseName - isInvited - isStarted - isCompleted - completedAt - progress - courseStartedAt - courseEndedAt - daysToComplete - daysToCompleteLeft - assignmentDate - name: courseId in: query description: Filter by course ID. required: false schema: type: string - name: campaignId in: query description: Filter by campaign ID. required: false schema: type: string - name: courseName in: query description: Filter by course name. required: false schema: type: string responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/UsersDevelopersCoursesSuccessResponse' examples: Success: $ref: '#/components/examples/UsersDevelopersCoursesSuccessResponse' '400': description: Bad Request. Please check the request parameters and try again. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Page Params Must Be Set: $ref: '#/components/examples/PageParamsMustBeSet-3' '403': description: Forbidden. The account making the request does not have permission to access the requested resource. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Forbidden: $ref: '#/components/examples/ForbiddenResponse-4' '500': description: An unexpected server error occurred. Please retry the request later. If the issue persists, contact support. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Internal Error: $ref: '#/components/examples/InternalErrorResponse' /reports/api/v1/external/company/{companyId}/policies/users/report: get: summary: Users Policies operationId: get-users-policies-v1 description: | This endpoint returns report about policies by each enabled user of the company. The endpoint supports pagination and can return `5`, `10`, `25`, `50`, or `100` records per request. The endpoint can be used by partners, who have the ability to get statistics of their authorized child and grandchild companies. tags: - Reports parameters: - $ref: '#/components/parameters/companyId' - $ref: '#/components/parameters/order' - name: pageNumber in: query description: | Parameter indicates the number of the requested page if pagination applied. By default, this query parameter is equal to `0`. required: true schema: type: integer example: 0 - name: pageSize in: query description: Maximum number of campaigns to return from the collection in one page. required: true schema: type: integer default: 100 enum: - 5 - 10 - 25 - 50 - 100 - name: orderBy description: Allows sorting collection by one field. in: query required: false schema: type: string default: email enum: - policyName - firstName - lastName - email - isAcknowledged - isOpened - isInvited - enrolledAt - daysToComplete - daysToCompleteLeft - startedAt - revisionStartedAt - revisionEndedAt - acknowledgedAt - name: policyId in: query description: Filter by policy ID. required: false schema: type: string - name: policyName in: query description: Filter by policy name. required: false schema: type: string responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/UsersPoliciesSuccessResponse' examples: Success: $ref: '#/components/examples/UsersPoliciesSuccessResponse' '400': description: Bad Request. Please check the request parameters and try again. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Page Params Must Be Set: $ref: '#/components/examples/PageParamsMustBeSet-4' '401': description: Unauthorized. Please check your credentials and try again. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Invalid API Key: $ref: '#/components/examples/InvalidAPIKeyResponse' '403': description: Forbidden. The account making the request does not have permission to access the requested resource. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Forbidden: $ref: '#/components/examples/ForbiddenResponse-5' '500': description: An unexpected server error occurred. Please retry the request later. If the issue persists, contact support. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Internal Error: $ref: '#/components/examples/InternalErrorResponse' /exercises/api/v1/external/company/{companyId}/game/{gameCode}/report/users: get: summary: Users Fake Or Not operationId: get-users-fake-or-not-v1 tags: - Reports parameters: - $ref: '#/components/parameters/companyId' - name: gameCode in: path description: Game code required: true schema: type: string enum: - fake_or_not default: fake_or_not - $ref: '#/components/parameters/order' - $ref: '#/components/parameters/pageNumber' - name: pageSize in: query description: Maximum number of campaigns to return from the collection in one page. required: false schema: type: integer enum: - 5 - 10 - 25 - 50 - 100 - name: orderBy description: Allows sorting collection by one field. in: query schema: type: string enum: - lastName - firstName - email - progress - completedAt - correctAnswers - incorrectAnswers - remainingAnswers - gameId - gameName - campaignId - campaignName - name: campaignId in: query description: ID of root campaign. required: false schema: type: string responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/UsersFakeOrNotSuccessResponse' examples: Success: $ref: '#/components/examples/UsersFakeOrNotSuccessResponse' '400': description: Bad Request. Please check the request parameters and try again. content: application/json: schema: $ref: '#/components/schemas/LegacyErrorResponse' examples: Invalid CampaignID: $ref: '#/components/examples/InvalidCampaignIDResponse' '403': description: Forbidden. The account making the request does not have permission to access the requested resource. content: application/json: schema: $ref: '#/components/schemas/LegacyErrorResponse' examples: Forbidden: $ref: '#/components/examples/ForbiddenResponse-6' '500': description: An unexpected server error occurred. Please retry the request later. If the issue persists, contact support. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Internal Error: $ref: '#/components/examples/InternalErrorResponse' /customers/api/v1/external/company/{companyId}/users: get: summary: Fetch Users operationId: get-users-v1 description: Returns a paginated list of company users. Supports searching, filtering, and sorting by user attributes such as email, name, role, registration status, disablement status, departments, and groups. tags: - User Management parameters: - $ref: '#/components/parameters/companyId' - name: pageSize in: query description: Amount of entities per page. schema: type: integer enum: - 5 - 10 - 25 - 50 - 100 - name: pageNumber in: query description: | Parameter indicates the number of the requested page if pagination applied. By default, this query parameter is equal to `0`. required: false schema: type: integer example: 0 - name: orderBy in: query description: Users ordering property. schema: type: string enum: - email - firstName - lastName - role - createdAt - registeredAt - disabledAt - registrationStatus - disablementStatus - $ref: '#/components/parameters/order' - name: role in: query description: Role to search users by. schema: type: string enum: - ADMIN - LEARNER - name: isDisabled in: query description: Filter by disablement status. schema: type: boolean - name: isRegistered in: query description: Filter by registration status. schema: type: boolean - name: departments in: query description: Filter by department ID's. MUST be in UUID format! schema: type: array items: type: string format: uuid - name: groups in: query description: Filter by group ID's. MUST be in UUID format! schema: type: array items: type: string format: uuid - name: searchText in: query description: | Text to search in: `email`, `firstName` and `lastName`. required: false schema: type: string responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/EmptyResponse' examples: Empty Success Response: $ref: '#/components/examples/EmptyResponse' '400': description: Bad Request. Please check the request parameters and try again. content: application/json: schema: $ref: '#/components/schemas/LegacyBadRequestResponse' examples: Invalid Argument: $ref: '#/components/examples/InvalidArgumentResponse-2' '403': description: Forbidden. The account making the request does not have permission to access the requested resource. content: application/json: schema: $ref: '#/components/schemas/LegacyBadRequestResponse' examples: Forbidden: $ref: '#/components/examples/ForbiddenResponse-7' '500': description: An unexpected server error occurred. Please retry the request later. If the issue persists, contact support. content: application/json: schema: $ref: '#/components/schemas/LegacyErrorResponse' examples: Internal Error: $ref: '#/components/examples/LegacyInternalErrorResponse' /api/v1/external/user: post: summary: Invite User operationId: post-invite-user-v1 description: Adds one or more users to a company and sends invitation emails when notifications are enabled. Users with assigned activities receive instructions to register and start completing them. Invalid invites or emails that are already in use are skipped. tags: - User Management requestBody: description: Invite User Payload required: true content: application/json: schema: $ref: '#/components/schemas/InviteUserRequest' responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/EmptyResponse' examples: Empty Success Response: $ref: '#/components/examples/EmptyResponse' '207': description: Multi-Status. Request was partially successful. content: application/json: schema: $ref: '#/components/schemas/MultiStatusResponse' examples: Multi-Status: $ref: '#/components/examples/MultiStatusResponse' '400': description: Bad Request. Please check the request parameters and try again. content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse-2' examples: Wrong Customers CompanyID: $ref: '#/components/examples/WrongCustomersCompanyIDResponse' No Access To Company: $ref: '#/components/examples/NoAccessToCompanyResponse' SSO error: $ref: '#/components/examples/SSOErrorResponse' No Valid Invites: $ref: '#/components/examples/NoValidInvitesResponse' '403': description: Forbidden. The target company is disabled. content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse-2' examples: Company Disabled: $ref: '#/components/examples/CompanyDisabledResponse' '500': description: An unexpected server error occurred. Please retry the request later. If the issue persists, contact support. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Internal Error: $ref: '#/components/examples/InternalErrorResponse' /api/v1/external/user/by_email/{email}/disable: patch: summary: Disable User operationId: patch-disable-user-v1 description: Disables a user account by email. The user loses access to the Security Awareness Platform, while existing user data and training history remain available. tags: - User Management parameters: - name: email in: path description: The email of the user to disable. required: true schema: type: string example: test@example.com responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/EmptyResponse' examples: Empty Success Response: $ref: '#/components/examples/EmptyResponse' '404': description: User not found. content: application/json: schema: type: object properties: message: type: string examples: User Not Found: $ref: '#/components/examples/UserNotFoundResponse' '409': description: Conflict. Request can't be processed. content: application/json: schema: $ref: '#/components/schemas/ConflictResponse' examples: Company Creator Account: $ref: '#/components/examples/CompanyCreatorAccountResponse' '422': description: Bad format. Please check the request parameters and try again. content: application/json: schema: $ref: '#/components/schemas/ConflictResponse' examples: Bad Format: $ref: '#/components/examples/BadFormatResponse' '500': description: An unexpected server error occurred. Please retry the request later. If the issue persists, contact support. content: application/json: schema: $ref: '#/components/schemas/LegacyErrorResponse' examples: Internal Error: $ref: '#/components/examples/LegacyInternalErrorResponse' /customers/api/v1/external/company/{companyId}/users/{userId}/rename: patch: summary: Rename User operationId: patch-rename-user-v1 description: Updates the first and/or last name of a user in the specified company. tags: - User Management parameters: - $ref: '#/components/parameters/companyId' - $ref: '#/components/parameters/userId' requestBody: description: Rename User Payload required: true content: application/json: schema: $ref: '#/components/schemas/RenameUserRequest' responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/EmptyResponse' examples: Empty Success Response: $ref: '#/components/examples/EmptyResponse' '400': description: Bad Request. Please check the request parameters and try again. content: application/json: schema: $ref: '#/components/schemas/LegacyBadRequestResponse' examples: Invalid Argument: $ref: '#/components/examples/InvalidArgumentResponse-3' '403': description: Forbidden. The account making the request does not have permission to access the requested resource. content: application/json: schema: $ref: '#/components/schemas/LegacyBadRequestResponse' examples: Company Creator Account: $ref: '#/components/examples/ForbiddenResponse-7' '404': description: Not Found. The requested resource doesn't exist. Please check the request parameters and try again. content: application/json: schema: $ref: '#/components/schemas/LegacyBadRequestResponse' examples: User Not Found: $ref: '#/components/examples/UserNotFoundResponse-2' '500': description: An unexpected server error occurred. Please retry the request later. If the issue persists, contact support. content: application/json: schema: $ref: '#/components/schemas/LegacyErrorResponse' examples: Internal Error: $ref: '#/components/examples/LegacyInternalErrorResponse' /customers/api/v1/external/company/{companyId}/users/{userId}: delete: summary: Delete User operationId: delete-user-v1 tags: - User Management description: | Delete a user from the company. Access to this endpoint is restricted. Please contact our support team if you would like to request access. parameters: - $ref: '#/components/parameters/userId' - $ref: '#/components/parameters/companyId' responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/EmptyResponse' examples: Empty Success Response: $ref: '#/components/examples/EmptyResponse' '400': description: Bad format. Please check the request parameters and try again. content: application/json: schema: type: object properties: message: type: string examples: Bad Format: $ref: '#/components/examples/BadFormatResponse-3' '404': description: User not found. content: application/json: schema: type: object properties: message: type: string examples: User Not Found: $ref: '#/components/examples/UserNotFoundResponse-3' '500': description: Unexpected error. Requires contacting the development team. content: application/json: schema: $ref: '#/components/schemas/LegacyErrorResponse' examples: Internal Error: $ref: '#/components/examples/LegacyInternalErrorResponse' /customers/api/v1/external/company/{companyId}/groups: get: summary: Fetch Groups operationId: get-groups-v1 description: Returns a paginated list of company groups. Groups can be used to organize users for assignment and reporting purposes. tags: - User Management parameters: - $ref: '#/components/parameters/companyId' - name: pageSize in: query description: Amount of entities per page. required: false schema: type: integer enum: - 5 - 10 - 25 - 50 - 100 default: 10 - name: pageNumber in: query description: | Parameter indicates the number of the requested page if pagination applied. By default, this query parameter is equal to `0`. required: false schema: type: integer example: 0 - $ref: '#/components/parameters/order' - name: orderBy in: query description: Users ordering property. schema: type: string enum: - name responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/FetchGroupsSuccessResponse' examples: Success: $ref: '#/components/examples/FetchGroupsSuccessResponse' '400': description: Bad Request. Please check the request parameters and try again. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Invalid Argument: $ref: '#/components/examples/InvalidArgumentResponse-4' '401': description: Unauthorized. Please check your credentials and try again. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Invalid API Key: $ref: '#/components/examples/InvalidAPIKeyResponse' '500': description: An unexpected server error occurred. Please retry the request later. If the issue persists, contact support. content: application/json: schema: $ref: '#/components/schemas/LegacyErrorResponse' examples: Internal Error: $ref: '#/components/examples/LegacyInternalErrorResponse' /customers/api/v1/external/company/{companyId}/users/{userId}/groups/assign: post: summary: Assign User to Groups operationId: post-assign-user-to-groups-v1 description: Assigns a user to one or more company groups. tags: - User Management parameters: - $ref: '#/components/parameters/companyId' - $ref: '#/components/parameters/userId' requestBody: content: application/json: schema: $ref: '#/components/schemas/AssignUserToGroupsRequest' responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/EmptyResponse' examples: success: $ref: '#/components/examples/EmptyResponse' '400': description: Bad Request. Please check the request parameters and try again. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: User Already Assigned: $ref: '#/components/examples/UserAlreadyAssignedResponse' '404': description: Resource not found. Please check the request parameters and try again. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Group Not Found: $ref: '#/components/examples/GroupNotFoundResponse' '500': description: An unexpected server error occurred. Please retry the request later. If the issue persists, contact support. content: application/json: schema: $ref: '#/components/schemas/LegacyErrorResponse' examples: Internal Error: $ref: '#/components/examples/LegacyInternalErrorResponse' /customers/api/v1/external/company/{companyId}/users/{userId}/groups/unassign: post: summary: Unassign User from Groups operationId: post-unassign-user-to-groups-v1 description: Removes a user from one or more company groups. tags: - User Management parameters: - $ref: '#/components/parameters/companyId' - $ref: '#/components/parameters/userId' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UnassignUserFromGroupsRequest' responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/EmptyResponse' examples: Empty Success Response: $ref: '#/components/examples/EmptyResponse' '400': description: Bad Request. Please check the request parameters and try again. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Invalid GroupID: $ref: '#/components/examples/InvalidGroupIDResponse' '404': description: Resource not found. Please check the request parameters and try again. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Invalid Argument: $ref: '#/components/examples/GroupNotFoundResponse' '500': description: An unexpected server error occurred. Please retry the request later. If the issue persists, contact support. content: application/json: schema: $ref: '#/components/schemas/LegacyErrorResponse' examples: Internal Error: $ref: '#/components/examples/LegacyInternalErrorResponse' /customers/api/v1/external/company/{companyId}/departments: get: summary: Fetch departments operationId: get-departments-v1 description: Returns a paginated list of company departments. Departments can be used to organize users for assignment, reporting, and progress tracking. tags: - User Management parameters: - $ref: '#/components/parameters/companyId' - name: pageSize in: query description: Amount of entities per page. required: false schema: type: integer enum: - 5 - 10 - 25 - 50 - 100 - name: pageNumber in: query description: | Parameter indicates the number of the requested page if pagination applied. By default, this query parameter is equal to `0`. required: false schema: type: integer example: 0 - $ref: '#/components/parameters/order' - name: orderBy in: query description: Users ordering property. schema: type: string enum: - name responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/FetchDepartmentsSuccessResponse' examples: success: $ref: '#/components/examples/FetchDepartmentsSuccessResponse' '400': description: Bad Request. Please check the request parameters and try again. content: application/json: schema: $ref: '#/components/schemas/EmptyResponse' examples: Invalid Argument: $ref: '#/components/examples/EmptyResponse' '500': description: An unexpected server error occurred. Please retry the request later. If the issue persists, contact support. content: application/json: schema: $ref: '#/components/schemas/LegacyErrorResponse' examples: Internal Error: $ref: '#/components/examples/LegacyInternalErrorResponse' /customers/api/v1/external/company/{companyId}/users/{userId}/departments/assign: post: summary: Assign User to Departments operationId: post-assign-user-to-departments-v1 description: Assigns a user to one or more company departments. tags: - User Management parameters: - $ref: '#/components/parameters/companyId' - $ref: '#/components/parameters/userId' requestBody: content: application/json: schema: $ref: '#/components/schemas/AssignUserToDepartmentsRequest' responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/EmptyResponse' examples: success: $ref: '#/components/examples/EmptyResponse' '400': description: Bad Request. Please check the request parameters and try again. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: No Departments Provided: $ref: '#/components/examples/NoDepartmentsProvidedResponse' Invalid DepartmentID Length: $ref: '#/components/examples/InvalidDepartmentIDLengthResponse' Invalid DepartmentID Format: $ref: '#/components/examples/InvalidDepartmentIDFormatResponse' User Already Assigned: $ref: '#/components/examples/UserAlreadyAssignedResponse-2' Department Not Found Within Company: $ref: '#/components/examples/DepartmentNotFoundWithinCompanyResponse' Assign to Default Department: $ref: '#/components/examples/AssignToDefaultDepartmentResponse' '404': description: Resource not found. Please check the request parameters and try again. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Not Found: $ref: '#/components/examples/DepartmentNotFoundResponse' '500': description: An unexpected server error occurred. Please retry the request later. If the issue persists, contact support. content: application/json: schema: $ref: '#/components/schemas/LegacyErrorResponse' examples: Internal Error: $ref: '#/components/examples/LegacyInternalErrorResponse' /customers/api/v1/external/company/{companyId}/users/{userId}/departments/unassign: post: summary: Unassign User from Departments operationId: post-unassign-user-from-departments-v1 description: Removes a user from one or more company departments. tags: - User Management parameters: - $ref: '#/components/parameters/companyId' - $ref: '#/components/parameters/userId' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UnassignUserFromDepartmentsRequest' responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/EmptyResponse' examples: success: $ref: '#/components/examples/EmptyResponse' '400': description: Bad Request. Please check the request parameters and try again. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: No Departments Provided: $ref: '#/components/examples/NoDepartmentsProvidedResponse' Invalid DepartmentID Length: $ref: '#/components/examples/InvalidDepartmentIDLengthResponse' Invalid DepartmentID Format: $ref: '#/components/examples/InvalidDepartmentIDFormatResponse' User is Not Assigned to Provided Departments: $ref: '#/components/examples/UserIsNotAssignedToProvidedDepartmentsResponse' Department Not Found Within Company: $ref: '#/components/examples/DepartmentNotFoundWithinCompanyResponse' User cannot be Unassigned From All Departments: $ref: '#/components/examples/UserCannotBeUnassignedFromAllDepartmentsResponse' '404': description: Resource not found. Please check the request parameters and try again. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Department Not Found: $ref: '#/components/examples/DepartmentNotFoundResponse' '500': description: An unexpected server error occurred. Please retry the request later. If the issue persists, contact support. content: application/json: schema: $ref: '#/components/schemas/LegacyErrorResponse' examples: Internal Error: $ref: '#/components/examples/LegacyInternalErrorResponse' /api/v1/external/training/{trainingId}/start: post: summary: Start Training description: | This endpoint can be used both by **partners** and **direct customers**. FOR DIRECT CUSTOMERS: If you are a direct customer, you can start training only for your company. FOR PARTNERS ONLY: If you are a partner, you can start training for your company, or for any of your child companies. In case of starting a custom training, the custom training will also be shared with the child company. operationId: post-start-training-v1 tags: - Partner Portal parameters: - $ref: '#/components/parameters/trainingId' requestBody: description: The array of department ID's to unassign the user to. required: true content: application/json: schema: $ref: '#/components/schemas/StartTrainingRequest' responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/StartTrainingSuccessResponse' examples: success: $ref: '#/components/examples/StartTrainingSuccessResponse' '400': description: Bad Request. Please check the request parameters and try again. content: application/json: schema: $ref: '#/components/schemas/LegacyBadRequestResponse' examples: Wrong CompanyID: $ref: '#/components/examples/WrongCompanyIDResponse' Course Not Found: $ref: '#/components/examples/CourseNotFoundResponse' Custom Course Access: $ref: '#/components/examples/CustomCourseAccessResponse' '401': description: Unauthorized. Please check your credentials and try again. content: application/json: schema: type: object properties: message: type: string examples: Invalid API Key: $ref: '#/components/examples/InvalidAPIKeyResponse-2' '500': description: An unexpected server error occurred. Please retry the request later. If the issue persists, contact support. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: internal_error: $ref: '#/components/examples/InternalErrorResponse' /api/v1/external/training/{trainingId}/start/batch: post: summary: Start Training - Batch Version description: | This endpoint starts a training for multiple child companies. If a custom training is started, it will be shared within the selected child companies. This request returns the location of a long-running operation. The response contains the `operationStatusUrl` parameter, which can be polled to check the status of the long-running operation. For more information, see operation Status `[GET]` API endpoint. operationId: post-start-training-batch-v1 tags: - Partner Portal parameters: - $ref: '#/components/parameters/trainingId' requestBody: description: The array of department ID's to unassign the user to. required: true content: application/json: schema: $ref: '#/components/schemas/StartTrainingBatchRequest' responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/StartTrainingBatchSuccessResponse' examples: success: $ref: '#/components/examples/StartTrainingBatchSuccessResponse' '401': description: Unauthorized. Please check your credentials and try again. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Invalid API Key: $ref: '#/components/examples/InvalidAPIKeyResponse' '500': description: An unexpected server error occurred. Please retry the request later. If the issue persists, contact support. content: application/json: schema: $ref: '#/components/schemas/LegacyErrorResponse' examples: Internal Error: $ref: '#/components/examples/LegacyInternalErrorResponse' /api/v1/external/training/{trainingId}/share: post: summary: Share Training description: | This endpoint can share any of your custom training you have on your instance with your child companies (customers). Following this action, your customer will be able to see this training in the Admin Panel. operationId: post-share-training-v1 tags: - Partner Portal parameters: - $ref: '#/components/parameters/trainingId' requestBody: description: The array of department ID's to unassign the user to. required: true content: application/json: schema: $ref: '#/components/schemas/ShareTrainingRequest' responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/ShareTrainingSuccessResponse' examples: success: $ref: '#/components/examples/ShareTrainingSuccessResponse' '400': description: Bad Request. Please check the request parameters and try again. content: application/json: schema: $ref: '#/components/schemas/LegacyBadRequestResponse' examples: Wrong CompanyID: $ref: '#/components/examples/WrongCompanyIDResponse-2' Course Not Found: $ref: '#/components/examples/CourseNotFoundResponse-2' Custom Course Access: $ref: '#/components/examples/CustomCourseAccessResponse-2' '401': description: Unauthorized. Please check your credentials and try again. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Invalid API Key: $ref: '#/components/examples/InvalidAPIKeyResponse' '500': description: An unexpected server error occurred. Please retry the request later. If the issue persists, contact support. content: application/json: schema: $ref: '#/components/schemas/LegacyErrorResponse' examples: Internal Error: $ref: '#/components/examples/LegacyInternalErrorResponse' /api/v1/external/training/{trainingId}/share/batch: post: summary: Share Training - Batch Version operationId: post-share-training-batch-v1 description: | This endpoint can share any custom training you have on your instance with your child companies (customers). Following this action, a child customer company will be able to see this training in the Admin Panel. This request returns the location of a long-running operation. The response contains the `operationStatusUrl` parameter, which can be polled to check the status of the long-running operation. For more information, see operation Status `[GET]` API endpoint tags: - Partner Portal parameters: - $ref: '#/components/parameters/trainingId' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ShareTrainingBatchRequest' responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/ShareTrainingBatchSuccessResponse' examples: Success: $ref: '#/components/examples/ShareTrainingBatchSuccessResponse' '400': description: Bad Request. Please check the request parameters and try again. content: application/json: schema: $ref: '#/components/schemas/LegacyBadRequestResponse' examples: Training Not Found: $ref: '#/components/examples/TrainingNotFoundResponse' Custom Training Access: $ref: '#/components/examples/CustomCourseAccess' '401': description: Unauthorized. Please check your credentials and try again. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Invalid API Key: $ref: '#/components/examples/InvalidAPIKey' '500': description: An unexpected server error occurred. Please retry the request later. If the issue persists, contact support. content: application/json: schema: $ref: '#/components/schemas/LegacyErrorResponse' examples: Internal Error: $ref: '#/components/examples/LegacyInternalErrorResponse' /api/v1/external/operations/{operationId}: get: summary: Operation Status description: | **Operation statuses**: - `pending` - operation hasn't been processed yet, - `queued` - operation is in the queue, - `in progress` - operation is currently being processed, - `succeeded` - operation finished successfully, and all sub-operations were finished successfully, - `partially_succeeded` - operation finished with partial success, meaning that one or more sub-operations failed, - `failed` - operation failed, meaning that all sub-operations failed; In the case of a batch operation, an array of `subOperations` will be presented in the response, showing the status of each sub-operation. Each operation has the `result` parameter, which shows the success or error message. operationId: get-operation-status-v1 tags: - Partner Portal parameters: - name: operationId in: path description: Long-running Operation ID required: true schema: type: string responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/OperationStatusResponse' examples: Success: $ref: '#/components/examples/OperationStatusResponse' '400': description: Bad Request. Please check the request parameters and try again. content: application/json: schema: $ref: '#/components/schemas/EmptyResponse' examples: Invalid Argument: $ref: '#/components/examples/InvalidArgumentResponse' '500': description: An unexpected server error occurred. Please retry the request later. If the issue persists, contact support. content: application/json: schema: $ref: '#/components/schemas/LegacyErrorResponse' examples: internal_error: $ref: '#/components/examples/LegacyInternalErrorResponse' /api/v1/external/auth/companies/{companyId}/users/by_email/{email}/magic_link: get: summary: Generate Magic Link operationId: get-generate-magic-link-v1 description: | Generates a magic link for a user to log in without a password in Wizer Admin Panel or Employee App (depends on platformType). Magic link expires after 30 minutes. User will be redirected to the page depending on `redirectTo` query param. tags: - Partner Portal parameters: - name: companyId in: path description: | The ID of the customer's company. The user for whom the magic link is being generated should belong to this company. required: true schema: type: string - name: email in: path description: User's Email. required: true schema: type: string - name: platformType in: query description: | Determines to what platform user will be redirected (admin or employee app) required: true schema: type: string enum: - admin - employee - name: redirectTo in: query description: "Determines where user will be redirected. \n\nPossible `redirectTo` values:\n- platformType = admin: `trainings`, `users`,\n- platformType = employee: `dashboard`;\n" required: true schema: type: string enum: - trainings - users - dashboard responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/GenerateMagicLinkSuccessResponse' examples: Success: $ref: '#/components/examples/GenerateMagicLinkSuccessResponse' '400': description: Bad Request. Please check the request parameters and try again. content: application/json: schema: $ref: '#/components/schemas/LegacyErrorResponse' examples: Wrong CompanyID: $ref: '#/components/examples/WrongCompanyIDResponse-3' '401': description: Unauthorized. Please check your credentials. content: application/json: schema: $ref: '#/components/schemas/InvalidAPIKeyResponse' examples: Invalid API Key: $ref: '#/components/examples/InvalidAPIKeyResponse-3' '422': description: Unprocessable Entity. Please check the request parameters and try again. content: application/json: schema: $ref: '#/components/schemas/LegacyErrorResponse' examples: RedirectTo and PlatformType mismatch: $ref: '#/components/examples/RedirectToAndPlatformTypeMismatchResponse' '500': description: An unexpected server error occurred. Please retry the request later. If the issue persists, contact support. content: application/json: schema: $ref: '#/components/schemas/LegacyErrorResponse' examples: Internal Error: $ref: '#/components/examples/LegacyInternalErrorResponse' /partnership/api/v1/external/company/{companyId}/invite: post: summary: Invite Customer / Company operationId: post-invite-customer-v1 description: | Creates a new customer account in the Wizer system and automatically sends an invitation email containing login credentials to the customer. tags: - Partner Portal parameters: - $ref: '#/components/parameters/companyId' requestBody: description: Start Fishing Exercise request body. required: true content: application/json: schema: $ref: '#/components/schemas/InviteCustomerRequest' responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/InviteCustomerResponse' examples: success: $ref: '#/components/examples/InviteCustomerResponse' '400': description: Bad Request. Please check the request parameters and try again. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Company Name Already Taken: $ref: '#/components/examples/CompanyNameAlreadyTakenResponse' Malformed Input: $ref: '#/components/examples/MalformedInputResponse' Email is Already Taken: $ref: '#/components/examples/EmailIsAlreadyTakenResponse' Email is Already Taken (Pending Registration): $ref: '#/components/examples/EmailIsAlreadyTakenPendingRegistrationResponse' Email is Banned: $ref: '#/components/examples/EmailIsBannedResponse' Partnership Required: $ref: '#/components/examples/PartnershipRequiredResponse' Invalid Partner Type: $ref: '#/components/examples/InvalidPartnerTypeResponse' Access Request Is Not Allowed: $ref: '#/components/examples/AccessRequestIsNotAllowedResponse' '401': description: Unauthorized. Please check your credentials and try again. content: application/json: schema: $ref: '#/components/schemas/LegacyBadRequestResponse' examples: Invalid API Key: $ref: '#/components/examples/InvalidAPIKeyResponse-5' API Key Not Set: $ref: '#/components/examples/APIKeyNotSetResponse' '429': description: Too Many Requests. Please wait and try again later. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Too Many Requests: $ref: '#/components/examples/TooManyRequestsResponse' '500': description: An unexpected server error occurred. Please retry the request later. If the issue persists, contact support. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Internal Error: $ref: '#/components/examples/InternalErrorResponse' /api/v1/external/partner_portal/customers: get: summary: Get Customers / Company operationId: get-customer-v1 description: Retrieves all customers of a partner company. tags: - Partner Portal parameters: - name: limitPerPage in: query description: | Maximum number of items to return from the collection. required: false schema: type: integer enum: - 5 - 10 - 25 - 50 - 100 - 200 default: 10 - name: page in: query description: | Parameter indicates the page number, the page being the one requested. By default, this query parameter is equal to 0. required: false schema: type: integer - name: orderBy in: query description: | Allows sorting collection on one field. required: true schema: type: string enum: - parentCompany - email - $ref: '#/components/parameters/order' responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/GetCustomersSuccessResponse' examples: success: $ref: '#/components/examples/GetCustomersSuccessResponse' '400': description: Bad Request. Please check the request parameters and try again. content: application/json: schema: $ref: '#/components/schemas/EmptyResponse' examples: Empty Response: $ref: '#/components/examples/EmptyResponse' '401': description: Unauthorized. Please check your credentials and try again. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Invalid API Key: $ref: '#/components/examples/InvalidAPIKeyResponse' '500': description: An unexpected server error occurred. Please retry the request later. If the issue persists, contact support. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Internal Error: $ref: '#/components/examples/InternalErrorResponse' /partnership/api/v1/external/company/{companyId}/invite/resend: post: summary: Resend Invite operationId: post-resend-invite-v1 description: This API endpoint allows resending the invite to the already invited customer company. tags: - Partner Portal parameters: - name: companyId in: path required: true description: ID of the company to resend invite to. schema: type: string responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/EmptyResponse' examples: Empty Success Response: $ref: '#/components/examples/EmptyResponse' '400': description: Bad Request. Please check the request parameters and try again. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Company Is Invalid State: $ref: '#/components/examples/CompanyIsInvalidState' Requested Company Has No Owner: $ref: '#/components/examples/RequestedCompanyHasNoOwner' '401': description: Unauthorized. Please check your credentials and try again. content: application/json: schema: $ref: '#/components/schemas/LegacyBadRequestResponse' examples: Invalid API Key: $ref: '#/components/examples/InvalidAPIKeyResponse-5' API Key Not Set: $ref: '#/components/examples/APIKeyNotSetResponse' '403': description: Forbidden. The account making the request does not have permission to access the requested resource. content: application/json: schema: $ref: '#/components/schemas/LegacyBadRequestResponse' examples: Forbidden: $ref: '#/components/examples/Forbidden' '500': description: An unexpected server error occurred. Please retry the request later. If the issue persists, contact support. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Internal Error: $ref: '#/components/examples/InternalErrorResponse' /partnership/api/v1/external/company/{companyId}/customers: get: summary: Get External Customers List operationId: get-customer-v2 description: | Returns a paginated list of all companies within the authenticated partner's tree, including direct customers, sub-resellers, and their customers (grandchildren). **Company types:** - `DIRECT_CUSTOMER` — company directly under the caller MSP - `PARTNER` — sub-reseller directly under the caller MSP - `PARTNER_CUSTOMER` — company under a sub-reseller (grandchild from the caller's perspective) **Licensing statuses:** - `FREE` — no active subscription - `TRIAL` — active trial subscription - `LICENSED` — paid subscription **Standing statuses:** - `ENABLED` — company is active - `SUSPENDED` — company is disabled **Registration statuses:** - `REGISTERED` — company owner has completed registration - `UNREGISTERED` — company owner invitation is pending tags: - Partner Portal parameters: - $ref: '#/components/parameters/companyId' - name: pageNumber in: query description: | Page number to return, starting from 0. Defaults to 0 when omitted. required: false schema: type: integer default: 0 example: 0 - name: pageSize in: query description: Maximum number of items to return per page. Defaults to 25 when omitted. required: false schema: type: integer enum: - 10 - 25 - 50 - 100 default: 25 example: 25 - name: orderBy in: query description: Field to sort by. required: false schema: type: string enum: - companyName - companyType - parentCompanyName - standingStatus - registrationStatus - licensingStatus - companyOwnerEmail - userCount - $ref: '#/components/parameters/order' - name: customerCompanyId in: query description: Filter results to a specific customer company by ID. required: false schema: type: string format: uuid - name: parentCompanyId in: query description: Filter results to companies whose direct parent matches this ID. required: false schema: type: string format: uuid - name: companyType in: query description: Filter by company type. Multiple values allowed. required: false schema: type: array items: type: string enum: - DIRECT_CUSTOMER - PARTNER - PARTNER_CUSTOMER - name: standingStatus in: query description: Filter by standing status. Multiple values allowed. required: false schema: type: array items: type: string enum: - ENABLED - SUSPENDED - name: registrationStatus in: query description: Filter by registration status. Multiple values allowed. required: false schema: type: array items: type: string enum: - REGISTERED - UNREGISTERED - name: licensingStatus in: query description: Filter by licensing status. Multiple values allowed. required: false schema: type: array items: type: string enum: - FREE - TRIAL - LICENSED responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/GetExternalCustomersListViewResponse' examples: success: $ref: '#/components/examples/GetExternalCustomersListViewSuccessResponse' '400': description: Bad Request. Please check the request parameters and try again. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '401': description: Unauthorized. Please check your credentials and try again. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Invalid API Key: $ref: '#/components/examples/InvalidAPIKeyResponse-5' API Key Not Set: $ref: '#/components/examples/APIKeyNotSetResponse' '404': description: Not Found. The specified parent company was not found within your partner tree. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Parent Company Not Found: $ref: '#/components/examples/ParentCompanyNotFoundResponse' '429': description: Too Many Requests. Please wait and try again later. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Too Many Requests: $ref: '#/components/examples/TooManyRequestsResponse' '500': description: An unexpected server error occurred. Please retry the request later. If the issue persists, contact support. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Internal Error: $ref: '#/components/examples/InternalErrorResponse' /api/v1/external/partner_portal/validations/email/{email}: get: summary: Check Email Availability description: Indicates if email can be used to invite a customer. operationId: get-check-email-availability-v1 tags: - Partner Portal parameters: - name: email in: path description: The email availability of which should be checked. required: true schema: type: string responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/EmptyResponse' examples: Empty Success Response: $ref: '#/components/examples/EmptyResponse' '400': description: Bad Request. Please check the request parameters and try again. content: application/json: schema: $ref: '#/components/schemas/BadRequestResponse-3' examples: Bad format: $ref: '#/components/examples/BadFormatResponse-2' '409': description: Conflict. Please check the request parameters and try again. content: application/json: schema: $ref: '#/components/schemas/ConflictResponse-2' examples: Email Exists: $ref: '#/components/examples/EmailExistsResponse' '422': description: Unprocessable Entity. Please check the request parameters and try again. content: application/json: schema: $ref: '#/components/schemas/UnprocessableEntityResponse' examples: Email is Not Provided: $ref: '#/components/examples/EmailIsNotProvided' '500': description: An unexpected server error occurred. Please retry the request later. If the issue persists, contact support. content: application/json: schema: $ref: '#/components/schemas/LegacyErrorResponse' examples: Internal Error: $ref: '#/components/examples/LegacyInternalErrorResponse' /customers/api/v1/external/company/{companyId}/disable: post: summary: Disable Customer / Company operationId: post-disable-customer-v1 description: Disables a child or a grandchild customer. Available for partners only. Can not disable itself or another customer. tags: - Partner Portal parameters: - name: companyId in: path description: Child company ID to disable. required: true schema: type: string responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/EmptyResponse' examples: Empty Success Response: $ref: '#/components/examples/EmptyResponse' '401': description: Unauthorized. Please check your credentials and try again. content: application/json: schema: $ref: '#/components/schemas/LegacyBadRequestResponse' examples: Invalid API Key: $ref: '#/components/examples/InvalidAPIKeyResponse-5' API Key Not Set: $ref: '#/components/examples/APIKeyNotSetResponse' '403': description: Forbidden. The account making the request does not have permission to access the requested resource. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Disable itself: $ref: '#/components/examples/DisableItself' '409': description: Conflict. Please check the request parameters and try again. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Already Disabled: $ref: '#/components/examples/AlreadyDisabled' '500': description: An unexpected server error occurred. Please retry the request later. If the issue persists, contact support. content: application/json: schema: $ref: '#/components/schemas/LegacyErrorResponse' examples: Internal Error: $ref: '#/components/examples/LegacyInternalErrorResponse' /phishing/api/v1/external/campaigns/active/{companyId}: get: summary: Active Campaigns operationId: get-active-campaigns-v1 description: | Find all active campaigns by `companyId`. Active campaign means, that campaign is not archived and not deleted. tags: - Partner Portal parameters: - name: companyId in: path description: ID of needed company. required: true schema: type: string - name: pageSize in: query description: Maximum number of campaigns to return from the collection in one page. required: true schema: type: integer enum: - 5 - 10 - 25 - 50 - 100 - name: pageNumber in: query description: Count campaigns by one page. required: true schema: type: integer example: 0 responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/ActiveCampaignsSuccessResponse' examples: Success: $ref: '#/components/examples/ActiveCampaignsSuccessResponse' '400': description: Bad Request. Please check the request parameters and try again. content: application/json: schema: $ref: '#/components/schemas/LegacyErrorResponse' examples: Invalid Argument: $ref: '#/components/examples/InvalidArgument' '500': description: An unexpected server error occurred. Please retry the request later. If the issue persists, contact support. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Internal Error: $ref: '#/components/examples/InternalErrorResponse' /phishing/api/v1/external/companies/related/include_cloned_campaign: get: summary: Companies include cloned campaign operationId: get-companies-include-cloned-campaign-v1 description: Find all related companies, that include campaigns cloned from the root campaign. tags: - Partner Portal parameters: - name: companyId in: query description: ID of the parent company. required: true schema: type: string - name: campaignId in: query description: ID of root campaign. required: true schema: type: integer - name: pageSize in: query description: Maximum number of campaigns to return from the collection in one page. required: true schema: type: integer enum: - 5 - 10 - 25 - 50 - 100 - name: pageNumber in: query description: | Parameter indicates the number of the requested page if pagination applied. By default, this query parameter is equal to `0`. required: true schema: type: integer example: 0 - name: searchText in: query description: Filter by company name. required: false schema: type: string responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/CompaniesIncludeClonedCampaignSuccessResponse' examples: success: $ref: '#/components/examples/CompaniesIncludeClonedCampaignSuccessResponse' '400': description: Bad Request. Please check the request parameters and try again. content: application/json: schema: $ref: '#/components/schemas/LegacyErrorResponse' examples: Empty Response: $ref: '#/components/examples/EmptyResponse' '500': description: An unexpected server error occurred. Please retry the request later. If the issue persists, contact support. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Internal Error: $ref: '#/components/examples/InternalErrorResponse' /phishing/api/v1/external/companies/related/exclude_cloned_campaign: get: summary: Companies exclude cloned campaign operationId: get-companies-exclude-cloned-campaign-v1 description: Find all related companies, that exclude campaigns cloned from the root campaign. tags: - Partner Portal parameters: - name: companyId in: query description: ID of the parent company. required: true schema: type: string - name: campaignId in: query description: ID of root campaign. required: true schema: type: integer - name: pageSize in: query description: Maximum number of campaigns to return from the collection in one page. required: true schema: type: integer enum: - 5 - 10 - 25 - 50 - 100 - name: pageNumber in: query description: | Parameter indicates the number of the requested page if pagination applied. By default, this query parameter is equal to `0`. required: true schema: type: integer example: 0 - name: searchText in: query description: Filter related companies by name. required: false schema: type: string responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/CompaniesExcludeClonedCampaignSuccessResponse' examples: success: $ref: '#/components/examples/CompaniesExcludeClonedCampaignSuccessResponse' '400': description: Bad Request. Please check the request parameters and try again. content: application/json: schema: $ref: '#/components/schemas/LegacyErrorResponse' examples: Invalid Argument: $ref: '#/components/examples/InvalidArgument-2' '404': description: Resource not found. Please check the request parameters and try again. content: application/json: schema: $ref: '#/components/schemas/LegacyErrorResponse' examples: Not Found: $ref: '#/components/examples/NotFound' '500': description: An unexpected server error occurred. Please retry the request later. If the issue persists, contact support. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Internal Error: $ref: '#/components/examples/InternalErrorResponse' /phishing/api/v3/external/campaign/{campaignId}/clone: post: summary: Share Campaign operationId: post-share-campaign-v1 description: The endpoint allows copying an existing campaign to subsidiary companies. It enables creating a copy with a new name and start date. tags: - Partner Portal parameters: - name: campaignId in: path required: true description: Campaign ID to share. schema: type: integer requestBody: content: application/json: schema: $ref: '#/components/schemas/ShareCampaignRequest' responses: '201': description: Success content: application/json: schema: $ref: '#/components/schemas/ShareCampaignSuccessResponse' examples: Share Campaign Success: $ref: '#/components/examples/ShareCampaignSuccessResponse' '400': description: Bad Request. Please check the request parameters and try again. content: application/json: schema: $ref: '#/components/schemas/LegacyErrorResponse' examples: Invalid CompanyID: $ref: '#/components/examples/InvalidCompanyID' '401': description: Unauthorized. Please check your credentials and try again. content: application/json: schema: $ref: '#/components/schemas/LegacyBadRequestResponse' examples: Invalid API Key: $ref: '#/components/examples/InvalidAPIKeyResponse-5' '403': description: Forbidden. The account making the request does not have permission to access the requested resource. content: application/json: schema: $ref: '#/components/schemas/LegacyErrorResponse' examples: Forbidden: $ref: '#/components/examples/ForbiddenResponse-8' '500': description: An unexpected server error occurred. Please retry the request later. If the issue persists, contact support. content: application/json: schema: $ref: '#/components/schemas/LegacyErrorResponse' examples: internal_error: $ref: '#/components/examples/LegacyInternalErrorResponse' /phishing-exercise/api/v2/external/company/{companyId}/campaign/create: post: summary: Start Phishing Exercise 2.0 operationId: post-start-phishing-exercise-v2 description: | This API Endpoint can be used to start the Phishing Exercise 2.0 campaign. This endpoint can be used both by partners and direct customers. FOR DIRECT CUSTOMERS: If you are a direct customer, you can start the Phishing Exercise 2.0 campaign only for your company. FOR PARTNERS ONLY: If you are a partner, you can start the Phishing Exercise 2.0 campaign for your company, or for any of your child companies. tags: - Partner Portal parameters: - name: companyId in: path required: true description: The unique identifier of the company for which the campaign should be launched. schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/StartPhishingExerciseRequest' responses: '201': description: Created content: application/json: schema: $ref: '#/components/schemas/StartFishingExerciseResponse' examples: Success: $ref: '#/components/examples/StartFishingExerciseResponse' '400': description: Bad Request. Please check the request parameters and try again. content: application/json: schema: $ref: '#/components/schemas/LegacyErrorResponse' examples: Pack Not Found: $ref: '#/components/examples/PackNotFoundResponse' Validation Error: $ref: '#/components/examples/ValidationErrorResponse' No Active Users: $ref: '#/components/examples/NoActiveUsersResponse' Company Is Not Boosted: $ref: '#/components/examples/CompanyIsNotBoostedResponse' '401': description: Unauthorized. Please check your credentials and try again. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Invalid API Key: $ref: '#/components/examples/InvalidAPIKeyResponseV2' API Key Not Set: $ref: '#/components/examples/APIKeyNotSetResponse' '403': description: Forbidden. The account making the request does not have permission to access the requested resource. content: application/json: schema: $ref: '#/components/schemas/LegacyErrorResponse' examples: Notification Validation: $ref: '#/components/examples/NotificationValidation' '500': description: An unexpected server error occurred. Please retry the request later. If the issue persists, contact support. content: application/json: schema: $ref: '#/components/schemas/LegacyErrorResponse' examples: Internal Error: $ref: '#/components/examples/LegacyInternalErrorResponse' /phishing/api/v3/external/company/{companyId}/users/report: get: summary: Users Phishing Simulation operationId: get-users-phishing-simulation-v1 description: | This endpoint returns report about phishing simulation campaigns by each enabled user of the company. The endpoint supports pagination and can return `5`, `10`, `25`, `50`, or `100` records per request. The endpoint can be used by partners, who have the ability to get statistics of their authorized child and grandchild companies. tags: - Reports parameters: - $ref: '#/components/parameters/companyId' - $ref: '#/components/parameters/order' - $ref: '#/components/parameters/pageNumber' - name: pageSize in: query description: Maximum number of campaigns to return from the collection in one page. required: false schema: type: integer enum: - 5 - 10 - 25 - 50 - 100 - name: orderBy description: Allows sorting collection by one field. in: query schema: type: string enum: - email - firstName - lastName - campaignId - campaignName - round - campaignStatus - isCampaignSmart - sent - sentFailed - opened - clicked - phished - campaignStartedAt - campaignEndedAt - roundStartedAt - roundEndedAt - assignmentDate - name: campaignId in: query description: Filter by campaign ID. required: false schema: type: string - name: campaignName in: query description: Filter by campaign name. required: false schema: type: string responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/UsersPhishingSimulationSuccessResponse' examples: Success: $ref: '#/components/examples/UsersPhishingSimulationSuccessResponse' '400': description: Bad Request. Please check the request parameters and try again. content: application/json: schema: $ref: '#/components/schemas/LegacyErrorResponse' examples: Invalid Input: $ref: '#/components/examples/InvalidInputResponse' '401': description: Unauthorized. Please check your credentials and try again. content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' examples: Invalid API Key: $ref: '#/components/examples/InvalidAPIKeyResponse' '500': description: An unexpected server error occurred. Please retry the request later. If the issue persists, contact support. content: application/json: schema: $ref: '#/components/schemas/LegacyErrorResponse' examples: Internal Error: $ref: '#/components/examples/LegacyInternalErrorResponse' /phishing-exercise/api/v1/external/company/{companyId}/users/report: get: summary: Users Phishing Exercise operationId: get-users-phishing-exercise-v1 description: | This endpoint returns report about phishing exercise campaigns by each enabled user of the company. The endpoint supports pagination and can return `5`, `10`, `25`, `50`, or `100` records per request. The endpoint can be used by partners, who have the ability to get statistics of their authorized child and grandchild companies. tags: - Reports parameters: - $ref: '#/components/parameters/companyId' - $ref: '#/components/parameters/order' - $ref: '#/components/parameters/pageNumber' - name: pageSize in: query description: Maximum number of campaigns to return from the collection in one page. required: false schema: type: integer enum: - 5 - 10 - 25 - 50 - 100 - name: orderBy description: Allows sorting collection by one field. in: query schema: type: string enum: - lastName - firstName - email - campaignName - campaignStatus - completedAt - totalTemplatesCount - answeredTemplatesCount - campaignStartedAt - campaignEndedAt - assignmentDate - daysToComplete - daysToCompleteLeft - name: campaignId in: query description: Filter by campaign ID. required: false schema: type: string - name: campaignName in: query description: Filter by campaign name. required: false schema: type: string responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/UsersPhishingExerciseSuccessResponse' examples: Success: $ref: '#/components/examples/UsersPhishingExerciseSuccessResponse' '400': description: Bad Request. Please check the request parameters and try again. content: application/json: schema: $ref: '#/components/schemas/LegacyErrorResponse' examples: Invalid Input: $ref: '#/components/examples/InvalidInputResponse' '500': description: An unexpected server error occurred. Please retry the request later. If the issue persists, contact support. content: application/json: schema: $ref: '#/components/schemas/LegacyErrorResponse' examples: Internal Error: $ref: '#/components/examples/LegacyInternalErrorResponse' components: securitySchemes: APIKey: type: apiKey name: apiKey description: API authorization key generated by customer. in: header parameters: companyId: name: companyId in: path description: The ID of the company. required: true schema: type: string example: a6438c623d1b4303992fbd1d1651ce04 order: name: order in: query description: | `asc` for ascending order or `desc` for descending order. required: false schema: type: string enum: - asc - desc default: asc pageNumber: name: pageNumber in: query description: | Parameter indicates the number of the requested page if pagination applied. By default, this query parameter is equal to `0`. required: false schema: type: integer example: 0 userId: name: userId in: path description: The ID of the user. required: true schema: type: string trainingId: name: trainingId in: path description: | Represents the same value as `courseId`. Refer to the unique identifier of the training course. required: true schema: type: string schemas: TrainingsSuccessResponse: type: object description: Get features response. properties: data: type: object properties: currentPeriod: type: object properties: assignedUsers: type: number completed: type: object properties: percent: type: number count: type: number inProgress: type: object properties: percent: type: number count: type: number overdue: type: object properties: percent: type: number count: type: number totalCampaigns: type: number previousPeriod: type: object properties: assignedUsers: type: number completed: type: object properties: percent: type: number count: type: number inProgress: type: object properties: percent: type: number count: type: number overdue: type: object properties: percent: type: number count: type: number totalCampaigns: type: number required: - currentPeriod - previousPeriod error: type: - object - 'null' required: - data LegacyErrorResponse: type: object description: Common error response. properties: data: type: - object - 'null' error: type: - object - 'null' properties: status: type: integer description: HTTP status code. message: type: string description: Error response message. code: type: string description: Unique error response code. May be used for BE / FE messages matching. details: type: - array - 'null' description: A set of details (errors) that characterize the error response. items: type: object properties: domain: type: string description: Domain allows to determine the feature that cause the error. reason: type: string description: Cause of the problem and possible ways to resolve it. field: type: string description: Field represents an object field name. Commonly used for validation errors. description: type: string description: Error description. code: type: string description: Unique error code that is related to a particular part of the problem. | May be used for BE / FE errors messages matching. required: - status - message - code required: - error PhishingExerciseSuccessResponse: type: object description: Get features response. properties: data: type: - object - 'null' properties: previousPeriod: type: - object - 'null' properties: averageScore: type: number completedUsers: type: number industryScore: type: number assignedUsers: type: number currentPeriod: type: - object - 'null' properties: averageScore: type: number completedUsers: type: number industryScore: type: number assignedUsers: type: number required: - currentPeriod - previousPeriod error: type: - object - 'null' ErrorResponse: type: object description: Common error response. properties: data: type: - object - 'null' error: type: object properties: status: type: integer description: HTTP status code. message: type: string description: Error response message. code: type: string description: Unique error response code. May be used for BE / FE messages matching. enum: - INVALID_ARGUMENT - FAILED_PRECONDITION - OUT_OF_RANGE - UNAUTHENTICATED - PERMISSION_DENIED - NOT_FOUND - ABORTED - ALREADY_EXISTS - REMOVED - RESOURCE_EXHAUSTED - DATA_CORRUPTED - INTERNAL - UNKNOWN - NOT_IMPLEMENTED - UNAVAILABLE - DEADLINE_EXCEEDED - CANCELLED details: type: - array - 'null' description: A set of details (errors) that characterize the error response. items: type: object properties: domain: type: string description: Domain allows to determine the feature that cause the error. reason: type: string description: Cause of the problem and possible ways to resolve it. field: type: string description: Field represents an object field name. Commonly used for validation errors. description: type: string description: Error description. code: type: string description: Unique error code that is related to a particular part of the problem. | May be used for BE / FE errors messages matching. details: type: - object - 'null' required: - status - message - code required: - error PhishingSimulationSuccessResponse: type: object properties: data: type: object properties: current: type: object properties: recipients: type: number recipientsSent: type: number recipientsIgnored: type: number campaigns: type: number reportedAfterOpenValue: type: number reportedAfterOpenPercent: type: number reportedAfterPhishedValue: type: number reportedAfterPhishedPercent: type: number notReportedAfterPhishedValue: type: number notReportedAfterPhishedPercent: type: number previous: type: object properties: recipients: type: number recipientsSent: type: number recipientsIgnored: type: number campaigns: type: number reportedAfterOpenValue: type: number reportedAfterOpenPercent: type: number reportedAfterPhishedValue: type: number reportedAfterPhishedPercent: type: number notReportedAfterPhishedValue: type: number notReportedAfterPhishedPercent: type: number error: type: - object - 'null' PhishingExerciseDashboardSuccessResponse: type: object properties: data: type: object properties: industry: type: object properties: current: type: object properties: score: type: number previous: type: object properties: score: type: number company: type: object properties: current: type: object properties: totalCount: type: number score: type: number previous: type: object properties: totalCount: type: number score: type: number required: - industry - company error: type: - object - 'null' required: - data - error CompanyDashboardSuccessResponse: type: object description: Get features response. properties: data: type: object properties: current: type: object properties: recipients: type: number recipientsSent: type: number recipientsIgnored: type: number campaigns: type: number reportedAfterOpenValue: type: number reportedAfterOpenPercent: type: number reportedAfterPhishedValue: type: number reportedAfterPhishedPercent: type: number notReportedAfterPhishedValue: type: number notReportedAfterPhishedPercent: type: number previous: type: object properties: recipients: type: number recipientsSent: type: number recipientsIgnored: type: number campaigns: type: number reportedAfterOpenValue: type: number reportedAfterOpenPercent: type: number reportedAfterPhishedValue: type: number reportedAfterPhishedPercent: type: number notReportedAfterPhishedValue: type: number notReportedAfterPhishedPercent: type: number required: - current - previous error: type: - object - 'null' required: - data MetricsSuccessResponse: type: object description: Metrics and statistics properties: data: type: object description: Data field properties: users: type: object properties: registered: type: number notRegistered: type: number total: type: number training: type: object properties: summary: type: object properties: completed: type: number inProgress: type: number notStarted: type: number assigned: type: number campaigns: type: array items: type: object properties: name: type: string campaignId: type: string assigned: type: number completed: type: number inProgress: type: number notStarted: type: number startedAt: type: string format: date-time endedAt: type: string format: date-time gaming: type: object properties: summary: type: object properties: completed: type: number notStarted: type: number assigned: type: number campaigns: type: array items: type: object properties: name: type: string campaignId: type: string assigned: type: number completed: type: number notStarted: type: number averageScore: type: number startedAt: type: string format: date-time endedAt: type: string format: date-time phishing: type: object properties: summary: type: object properties: participated: type: number clicked: type: number reported: type: number campaigns: type: array items: type: object properties: campaignId: type: number participated: type: number clicked: type: number reported: type: number required: - users - training - gaming - phishing error: type: - object - 'null' required: - data BadRequestResponse: type: object properties: message: type: string success: type: boolean details: type: array items: type: object code: type: string MasterReportSuccessResponse: type: object properties: userProgress: type: array items: type: object properties: email: type: string firstName: type: - string - 'null' lastName: type: - string - 'null' progress: type: number status: type: string completedAt: type: string course: type: string departments: type: array items: type: string assignmentDate: type: - string - 'null' daysToComplete: type: number daysToCompleteLeft: type: number ForbiddenResponse: type: object properties: message: type: string SomethingWentWrongErrorResponse: type: object properties: message: type: string AwarenessCoursesSuccess: type: object properties: data: type: object properties: summary: type: object properties: total: type: number completed: type: number inProgress: type: number notStarted: type: number overdue: type: number campaigns: type: array items: type: object properties: name: type: string campaignId: type: string courseId: type: string status: type: string assignments: type: number completed: type: number inProgress: type: number notStarted: type: number overdue: type: number startedAt: type: string format: date-time endedAt: type: string format: date-time pageInfo: type: object properties: size: type: number number: type: number totalCount: type: number error: type: - object - 'null' required: - data DeveloperCoursesSuccessResponse: type: object properties: data: type: object properties: summary: type: object properties: total: type: number completed: type: number inProgress: type: number notStarted: type: number overdue: type: number campaigns: type: array items: type: object properties: name: type: string campaignId: type: string courseId: type: string status: type: string assignments: type: number completed: type: number inProgress: type: number notStarted: type: number overdue: type: number startedAt: type: string format: date-time endedAt: type: string format: date-time pageInfo: type: object properties: size: type: number number: type: number totalCount: type: number error: type: - object - 'null' required: - data PhishingExerciseSuccessResponse-2: type: object properties: data: type: object properties: summary: type: object properties: total: type: number completed: type: number inProgress: type: number notStarted: type: number overdue: type: number campaigns: type: array items: type: object properties: name: type: string campaignId: type: string status: type: string assigments: type: number completed: type: number notStarted: type: number overdue: type: number averageScore: type: number format: float startedAt: type: string format: date-time endedAt: type: string format: date-time pageInfo: type: object properties: size: type: number number: type: number totalCount: type: number error: type: - object - 'null' required: - data PhishingSimulationSuccessResponse-2: type: object properties: data: type: object properties: summary: type: object properties: sent: type: number opened: type: number clickPhished: type: number credPhished: type: number reported: type: number campaigns: type: array items: type: object properties: id: type: number name: type: string createdAt: type: string archivedAt: type: - string - 'null' status: type: string currentRoundNumber: type: number assignmentType: type: string isSmart: type: boolean usersCount: type: number sent: type: number opened: type: number reported: type: number clickPhished: type: number credPhished: type: number pageInfo: type: object properties: size: type: number number: type: number totalCount: type: number error: type: - object - 'null' MonthlyVideosSuccessResponse: type: object properties: data: type: object properties: summary: type: object properties: total: type: number completed: type: number inProgress: type: number notStarted: type: number overdue: type: number videos: type: array items: type: object properties: month: type: string eventId: type: string video: type: object properties: id: type: string name: type: string url: type: string thumbnail: type: string assignments: type: number progress: type: number completed: type: number notStarted: type: number overdue: type: number averageCompletion: type: number format: float startedAt: type: string format: date-time endedAt: type: string format: date-time pageInfo: type: object properties: size: type: number number: type: number totalCount: type: number error: type: - object - 'null' required: - data PolicySuccess: type: object properties: data: type: object properties: summary: type: object properties: total: type: number acknowledged: type: number notOpened: type: number overdue: type: number policies: type: array items: type: object properties: name: type: string policyId: type: string revision: type: number revisionId: type: string assignments: type: number assignmentType: type: string progress: type: number acknowledged: type: number notOpened: type: number overdue: type: number averageAcknowledge: type: number createdAt: type: string endedAt: type: string status: type: string error: type: - object - 'null' required: - data UsersMonthlyVideosSuccessResponse: type: object properties: data: type: object properties: items: type: array items: type: object properties: userId: type: string description: Unique identifier of the user. email: type: string description: Email address of the user. firstName: type: string description: First name of the user. lastName: type: string description: Last name of the user. isRegistered: type: boolean description: Indicates if the user is registered. videoName: type: string description: Name of the video. videoId: type: string description: Unique identifier of the video. videoUrl: type: string description: URL of the video. format: uri startedAt: type: - string - 'null' description: Timestamp indicating when the video was started to the user. format: date-time isCompleted: type: boolean description: Indicates if the video was completed by the user. completedAt: type: - string - 'null' description: Timestamp indicating when the video was completed by the user. format: date-time isInvited: type: boolean description: Indicates if the user was invited. invitedAt: type: - string - 'null' description: Timestamp indicating when the user was invited. format: date-time daysToComplete: type: integer description: The number of days from the event date to the end of its month, defining how long the user has to complete the video. example: 20 daysToCompleteLeft: type: - integer - 'null' description: The number of days remaining until end of the event's month. Always >= 0; returns 0 if the due date is today or has already passed (overdue). Returns null if the user has completed the video (isCompleted = true). example: 10 assignmentDate: type: - string - 'null' description: The timestamp when the activity was assigned to this user. format: date-time example: '2026-01-05T08:00:00Z' pageInfo: type: object properties: size: type: number number: type: number totalCount: type: number error: type: - object - 'null' required: - data UsersAwarenessCoursesSuccessResponse: type: object properties: data: type: object properties: items: type: array items: type: object properties: email: type: string lastName: type: string firstName: type: string userId: type: string courseId: type: string courseName: type: string courseType: type: string isInvited: type: boolean isStarted: type: boolean isCompleted: type: boolean completedAt: type: - string - 'null' campaignStartedAt: type: - string - 'null' campaignEndedAt: type: - string - 'null' campaignId: type: string progress: type: number daysToComplete: type: integer format: int32 example: 30 daysToCompleteLeft: type: - integer - 'null' format: int32 example: 12 assignmentDate: type: string format: date-time example: '2026-01-12T10:00:00Z' pageInfo: type: object properties: size: type: number number: type: number totalCount: type: number error: type: - object - 'null' UsersDevelopersCoursesSuccessResponse: type: object properties: data: type: object properties: items: type: array items: type: object properties: email: type: string lastName: type: string firstName: type: string userId: type: string courseId: type: string courseName: type: string isInvited: type: boolean isStarted: type: boolean isCompleted: type: boolean completedAt: type: - string - 'null' campaignStartedAt: type: - string - 'null' campaignEndedAt: type: - string - 'null' campaignId: type: string progress: type: number daysToComplete: type: integer format: int32 example: 30 daysToCompleteLeft: type: - integer - 'null' format: int32 example: 12 assignmentDate: type: string format: date-time example: '2026-01-12T10:00:00Z' pageInfo: type: object properties: size: type: number number: type: number totalCount: type: number error: type: - object - 'null' UsersPoliciesSuccessResponse: type: object properties: data: type: object required: - items - pageInfo properties: items: type: array items: type: object required: - policyName - policyId - revisionId - firstName - lastName - email - userId - isAcknowledged - isOpened - isInvited - daysToComplete - daysToCompleteLeft - startedAt - revisionStartedAt - revisionEndedAt - assignmentDate properties: policyName: type: string example: Privacy Policy policyId: type: string example: policy123 revisionId: type: string example: revision456 firstName: type: string example: John lastName: type: string example: Doe email: type: string example: user@example.com userId: type: string example: user123 isAcknowledged: type: boolean example: true isOpened: type: boolean example: true isInvited: type: boolean example: true enrolledAt: type: - string - 'null' format: date-time description: The timestamp when the activity was assigned to this user. example: '2026-01-15T10:00:00Z' daysToComplete: type: integer description: The number of days selected when creating the activity defines how long the user has to complete it. example: 30 daysToCompleteLeft: type: - integer - 'null' description: The number of days remaining until the activity due date. Always >= 0; returns 0 if the due date is today or has already passed. Returns null if the user has completed the activity (isAcknowledged = true). example: 15 startedAt: type: string format: date-time description: The timestamp when the policy was added. example: '2026-01-01T00:00:00Z' revisionStartedAt: type: string format: date-time description: The timestamp when the policy revision was added. example: '2026-01-10T00:00:00Z' revisionEndedAt: type: - string - 'null' format: date-time description: The timestamp when the policy revision was ended (i.e. the start of the next revision). Null if this is the current revision. example: '2026-06-01T00:00:00Z' acknowledgedAt: type: string format: date-time description: The timestamp when the activity was acknowledged by user. example: '2026-01-15T10:00:00Z' pageInfo: type: object required: - size - number - totalCount properties: size: type: number example: 100 number: type: number example: 0 totalCount: type: number example: 4 error: type: - object - 'null' required: - data UsersFakeOrNotSuccessResponse: type: object properties: data: type: object properties: items: type: array items: type: object properties: userId: type: string email: type: string firstName: type: string lastName: type: string campaignId: type: string campaignName: type: string campaignStartedAt: type: - string - 'null' campaignEndedAt: type: - string - 'null' assignedAt: type: - string - 'null' daysToComplete: type: number daysLeft: type: - number - 'null' gameName: type: string gameId: type: string completedAt: type: - string - 'null' correctAnswers: type: number incorrectAnswers: type: number remainingAnswers: type: number progress: type: number pageInfo: type: object properties: size: type: number number: type: number totalCount: type: number error: type: - object - 'null' EmptyResponse: type: object description: Empty response. properties: data: type: - object - 'null' error: type: - object - 'null' required: - data LegacyBadRequestResponse: type: object properties: message: type: string success: type: boolean code: type: string data: type: - object - 'null' InviteUserRequest: type: object description: Invite user request properties: invites: type: array items: type: object required: - email properties: name: type: string description: First Name lastName: type: string description: Last Name email: type: string description: Email address of the user to invite role: type: string description: The user’s role. Should be one of “user” or “admin”. enum: - admin - user departments: type: array description: List of departments for the user to assign. items: type: string sso: type: boolean example: false customerCompanyId: type: string description: | [PARTNERS] The customer’s company id. If this parameter is provided, the users will be added to your customer’s company. required: - invites MultiStatusResponse: type: object properties: message: type: string success: type: boolean BadRequestResponse-2: type: object properties: message: type: string success: type: boolean ConflictResponse: type: object properties: message: type: string RenameUserRequest: type: object properties: firstName: type: string description: | First name of the user. If left empty, no update will happen. Shouldn’t contain any of those symbols [<>@&{}()\/|~!#$%^*+=?:;,"`]. lastName: type: string description: | Last name of the user. If left empty, no update will happen. Shouldn’t contain any of those symbols [<>@&{}()/|~!#$%^*+=?:;,"`]. FetchGroupsSuccessResponse: type: object properties: data: type: object properties: items: type: array items: type: object properties: id: type: string name: type: string pageInfo: type: object properties: size: type: number number: type: number totalCount: type: number error: type: - object - 'null' required: - data AssignUserToGroupsRequest: type: object properties: groupIds: type: array description: The array of group IDs to assign the user to. items: type: string UnassignUserFromGroupsRequest: type: object properties: groupIds: type: array description: | The array of group IDs to unassign the user from. Maximum length: 50. items: type: string FetchDepartmentsSuccessResponse: type: object properties: data: type: object properties: items: type: array items: type: object properties: id: type: string name: type: string pageInfo: type: object properties: size: type: number number: type: number totalCount: type: number error: type: - object - 'null' required: - data AssignUserToDepartmentsRequest: type: object properties: departmentIds: type: array description: The array of department ID's to assign the user to. items: type: string UnassignUserFromDepartmentsRequest: type: object properties: departmentIds: type: array description: An array of department IDs from which the user must be unassigned. items: type: string StartTrainingRequest: type: object required: - customerCompanyId properties: customerCompanyId: type: string description: Your customer's company id. daysToComplete: type: integer description: The number of days employees will have to complete the training. Defaults to 30 example: 30 startDate: type: string format: date-time description: Start date of training in ISO 8601 format. Defaults to the current time and can't be in the past. example: '2026-04-10T10:00:00Z' notificationsEnabled: type: boolean description: If false, launches the training without sending the assignment notification to learners. True by default. example: false StartTrainingSuccessResponse: type: object properties: success: type: boolean StartTrainingBatchRequest: type: object properties: customerCompanyIds: type: array items: type: string description: Your customers' company ids. Empty by default. isAllCustomers: type: boolean description: If true, selects all your customers. False by default. example: false daysToComplete: type: integer description: The number of days employees will have to complete the training. Defaults to 30 example: 30 startDate: type: string format: date-time description: 'Start date of training in ISO 8601 format. Defaults to the current time. Example: 2026-09-15T14:21:43Z' example: '2026-01-01T00:00:00.000Z' notificationsEnabled: type: boolean description: If false, launches the training without sending the assignment notification to learners. True by default. example: false StartTrainingBatchSuccessResponse: type: object properties: success: type: boolean operationStatusUrl: type: string operationId: type: string ShareTrainingRequest: type: object required: - customerCompanyId properties: customerCompanyId: type: string description: Your customer's company id. ShareTrainingSuccessResponse: type: object properties: success: type: boolean ShareTrainingBatchRequest: type: object properties: customerCompanyIds: type: array items: type: string description: Affected customer's company IDs. isAllCustomers: type: boolean description: 'If true: `customerCompanyIds` ignored, selects all your customers' example: false ShareTrainingBatchSuccessResponse: type: object properties: success: type: boolean operationStatusUrl: type: string operationId: type: string OperationStatusResponse: type: object properties: success: type: boolean operation: type: object properties: id: type: string status: type: string type: type: string result: type: string createdAt: type: string finishedAt: type: string metadata: type: object properties: trainingId: type: string subOperations: type: array items: type: object properties: id: type: string status: type: string type: type: string result: type: string createdAt: type: string finishedAt: type: string metadata: type: object properties: trainingId: type: string customerCompanyId: type: string StartFishingExerciseRequest: type: object required: - companyId properties: companyId: type: string description: "The unique identifier of the company for which the campaign should be launched. If you are launching the \ncampaign for your own company, the `companyId` in the Path and Body must match.\n" startDate: type: string format: date-time description: | The date when the campaign should start. Cannot be in the past. If empty, the campaign will start immediately. example: '2026-01-01T00:00:00.000Z' daysToComplete: type: string description: | Number of days to complete the campaign. If empty, the default value of 30 days will be applied. notificationsEnabled: type: boolean description: If false, launches the campaign without sending the assignment notification to learners. True by default. example: false StartFishingExerciseResponse: type: object properties: data: type: object properties: message: type: string success: type: boolean error: type: - object - 'null' GenerateMagicLinkSuccessResponse: type: object properties: data: type: object properties: link: type: string error: type: - object - 'null' required: - data InvalidAPIKeyResponse: type: object properties: message: type: string success: type: boolean data: type: - object - 'null' GenerateMagicLinkSuccessResponse-2: type: object properties: magicLink: type: string required: - magicLink InvalidArgumentResponse: type: object properties: message: type: string InviteCustomerRequest: type: object properties: email: type: string description: The email of the customer to invite. firstName: type: string description: The first name of the customer to invite. lastName: type: string description: The last of name of the customer to invite. companyName: type: string description: The company name of the customer to invite. customMessage: type: string description: The custom message that will be sent to the invited customer. requestAccess: type: boolean description: Indicates if request to manage the customer’s company should be sent. setAsPartner: type: boolean description: Defines if the invited company should be allowed to manage child organizations. InviteCustomerResponse: type: object properties: data: type: object properties: companyId: type: string error: type: - object - 'null' GetCustomersSuccessResponse: type: object properties: customers: type: array items: type: object properties: companyId: type: string companyName: type: string email: type: string parentCompany: type: string itemsCount: type: string InviteCustomerRequest-2: type: object required: - firstName - lastName - email - companyName properties: firstName: type: string description: The first name of the customer to invite. lastName: type: string description: The last of name of the customer to invite. email: type: string description: The email of the customer to invite. companyName: type: string description: The company name of the customer to invite. requestAccess: type: boolean description: Indicates if request to manage the customer’s company should be sent. example: false licensesToAllocate: type: integer description: | (only for OEM/Package MSP partners). Indicates how many licenses should be allocated to your customer. Should be greated than or equal to 1 (only for OEM/Package MSP partners). Indicates how many licenses should be allocated to your customer. Should be greated than or equal to 1. parentCompanyId: type: string description: | ID of a partner company under which a new customer will be created (only if this parameter is provided). partnerType: type: string description: | If provided, customer will be invited as a subreseller (only if your company has reseller type). enum: - subreseller InviteCustomerSuccessResponse: type: object properties: message: type: string customerCompanyId: type: string InvalidAPIKey: type: object properties: message: type: string InviteCustomerConflictResponse: type: object properties: message: type: string customerCompanyId: type: - string - 'null' GetExternalCustomersListViewResponse: type: object properties: data: type: object properties: customers: type: array items: type: object properties: companyId: type: string format: uuid companyName: type: string companyType: type: string enum: - DIRECT_CUSTOMER - PARTNER - PARTNER_CUSTOMER parentCompanyId: type: string format: uuid parentCompanyName: type: string standingStatus: type: string enum: - ENABLED - SUSPENDED registrationStatus: type: string enum: - REGISTERED - UNREGISTERED licensingStatus: type: string enum: - FREE - TRIAL - LICENSED companyOwnerEmail: type: string format: email userCount: type: integer pageInfo: type: object properties: number: type: number size: type: number totalCount: type: number error: type: - object - 'null' required: - data BadRequestResponse-3: type: object properties: message: type: string ConflictResponse-2: type: object properties: message: type: string emailExists: type: boolean UnprocessableEntityResponse: type: object properties: message: type: string validationResults: type: object properties: email: type: object properties: param: type: string location: type: string message: type: string ActiveCampaignsSuccessResponse: type: object properties: data: type: object properties: items: type: array items: type: object properties: id: type: number companyId: type: string name: type: string createdDate: type: string launchDate: type: string sendByDate: type: string completedDate: type: - string - 'null' format: date-time startWorkdayTime: type: string endWorkdayTime: type: string nextCampaignDate: type: string status: type: string frequency: type: string isActive: type: boolean isSmart: type: boolean usersCount: type: number usersType: type: string startDate: type: string deliveryPeriod: type: number timezone: type: string pageInfo: type: object properties: size: type: number number: type: number totalCount: type: number error: type: - object - 'null' CompaniesIncludeClonedCampaignSuccessResponse: type: object properties: data: type: object properties: parentCampaignName: type: string totalBoostedCount: type: number companies: type: array items: type: object properties: companyName: type: string campaignName: type: string companyId: type: string roundNumber: type: - number - 'null' format: float campaignId: type: number createdDate: type: string startDate: type: string isSmart: type: boolean totalCount: type: number sentCount: type: number sentPercent: type: number pageInfo: type: object properties: size: type: number number: type: number totalCount: type: number error: type: - object - 'null' CompaniesExcludeClonedCampaignSuccessResponse: type: object properties: data: type: object properties: totalAvailableCount: type: number companies: type: array items: type: object properties: companyId: type: string companyName: type: string isBoosted: type: boolean isWithRegisteredUsers: type: boolean pageInfo: type: object properties: size: type: number number: type: number totalCount: type: number error: type: - object - 'null' ShareCampaignRequest: type: object properties: companyIds: type: array items: type: string description: Destination companies (copy to). isAllSelected: type: boolean startDate: type: string format: date-time description: Date format example 2026-01-06T18:13:40+01:00. example: '2026-01-01T00:00:00.000Z' name: type: string timezone: type: string description: Example Europe/Madrid. ShareCampaignSuccessResponse: type: object properties: data: type: object properties: campaignId: type: number clonedIds: type: array items: type: number error: type: - object - 'null' StartPhishingExerciseRequest: type: object properties: startDate: type: string format: date-time description: | The date when the campaign should start. Cannot be in the past. If empty, the campaign will start immediately. example: '2026-01-01T00:00:00.000Z' daysToComplete: type: integer description: | Number of days to complete the campaign. If empty, the default value of 30 days will be applied. example: 7 UsersPhishingSimulationSuccessResponse: type: object properties: data: type: object required: - items - pageInfo properties: items: type: array items: type: object required: - email - firstName - lastName - userId - campaignId - campaignName - round - campaignStatus - isCampaignSmart - sent - sentFailed - opened - clicked - phished - reported - campaignStartedAt - campaignEndedAt - roundStartedAt - roundEndedAt - assignmentDate properties: email: type: string example: user1@wizer-training.com firstName: type: string example: John lastName: type: string example: Doe userId: type: string example: 4c4e789546614a5bb379214746d76dfe campaignId: type: integer example: 7058 campaignName: type: string example: campaign1_ot_all round: type: string example: Round 1 campaignStatus: type: string enum: - QUEUED - IN_PROGRESS - ARCHIVED example: IN_PROGRESS isCampaignSmart: type: boolean example: false sent: type: boolean example: true sentFailed: type: boolean example: false opened: type: boolean example: true clicked: type: boolean example: false phished: type: boolean example: false reported: type: boolean example: true campaignStartedAt: type: string format: date-time example: '2026-01-26T10:50:58Z' campaignEndedAt: type: - string - 'null' format: date-time example: roundStartedAt: type: string format: date-time example: '2026-01-26T05:00:00Z' roundEndedAt: type: - string - 'null' format: date-time example: '2026-01-26T14:00:00Z' assignmentDate: type: string format: date-time description: The timestamp when the campaign was assigned to this user. example: '2026-02-05T12:52:14Z' pageInfo: type: object required: - size - number - totalCount properties: size: type: integer example: 25 number: type: integer example: 0 totalCount: type: integer example: 11 error: type: - object - 'null' required: - data UsersPhishingExerciseSuccessResponse: type: object properties: data: type: object properties: items: type: array items: type: object properties: campaignId: type: string campaignName: type: string campaignStatus: type: string campaignStartedAt: type: string format: date-time example: '2026-01-12T10:00:00Z' campaignEndedAt: type: - string - 'null' format: date-time example: '2026-01-12T10:00:00Z' email: type: string firstName: type: string lastName: type: string userId: type: string assignmentDate: type: string format: date-time example: '2026-01-12T10:00:00Z' completedAt: type: - string - 'null' daysToComplete: type: integer format: int32 example: 30 daysToCompleteLeft: type: - integer - 'null' format: int32 example: 12 totalTemplatesCount: type: number answeredTemplatesCount: type: number scorePercentage: type: number pageInfo: type: object properties: size: type: number number: type: number totalCount: type: number error: type: - object - 'null' examples: TrainingsSuccessResponse: summary: Trainings Success value: data: currentPeriod: assignedUsers: 6 completed: percent: 34 count: 2 inProgress: percent: 33 count: 2 overdue: percent: 33 count: 2 totalCampaigns: 1 previousPeriod: assignedUsers: 13 completed: percent: 84 count: 11 inProgress: percent: 8 count: 1 overdue: percent: 8 count: 1 totalCampaigns: 5 error: null InvalidCompanyIDResponse: summary: Invalid CompanyID value: data: null error: status: 400 code: company/dashboard/report/input_validation message: 'Key: '''' Error:Field validation for '''' failed on the ''alphanum'' tag' details: null LegacyInternalErrorResponse: summary: Internal Error (Legacy) value: data: null error: status: 500 code: internal error message: internal error details: null PhishingExerciseSuccessResponse: summary: Phishing Exercise Success value: data: previousPeriod: averageScore: 1.3 completedUsers: 3 industryScore: 1.3 assignedUsers: 5 currentPeriod: averageScore: 6.25 completedUsers: 4 industryScore: 5.2 assignedUsers: 4 error: null EmptyResponse: summary: Empty Response value: data: null error: null InvalidDepartmentIDResponse: summary: Invalid DepartmentID value: data: null error: status: 400 message: invalid argument code: INVALID_ARGUMENT details: - domain: gaming.report code: invalid_department_id PhishingSimulationSuccessResponse: summary: Phishing Simulation Success value: data: current: recipients: 0 recipientsSent: 62 recipientsIgnored: 62 campaigns: 289 reportedAfterOpenValue: 0 reportedAfterOpenPercent: 0 reportedAfterPhishedValue: 0 reportedAfterPhishedPercent: 0 notReportedAfterPhishedValue: 0 notReportedAfterPhishedPercent: 0 previous: recipients: 8 recipientsSent: 103 recipientsIgnored: 95 campaigns: 53 reportedAfterOpenValue: 2 reportedAfterOpenPercent: 25 reportedAfterPhishedValue: 0 reportedAfterPhishedPercent: 0 notReportedAfterPhishedValue: 6 notReportedAfterPhishedPercent: 75 error: null InternalErrorResponse: summary: Internal Error value: data: null error: status: 500 code: UNKNOWN message: unexpected internal error details: null PhishingExerciseDashboardSuccessResponse: summary: Phishing Exercise Dashboard Success value: data: industry: current: score: 0.33 previous: score: 0.44 company: current: totalCount: 10 score: 0.44 previous: totalCount: 9 score: 0.24 error: null InvalidCompanyIDResponse-2: summary: Invalid CompanyID value: data: null error: status: 400 code: company/report_dashboard/input_validation message: 'Key: ''ReportDashboardInput.CompanyID'' Error:Field validation for ''CompanyID'' failed on the ''alphanum'' tag' details: null CompanyDashboardSuccessResponse: summary: Company Dashboard Success value: data: current: recipients: 44 recipientsSent: 10 recipientsIgnored: 12 campaigns: 12 reportedAfterOpenValue: 12 reportedAfterOpenPercent: 27 reportedAfterPhishedValue: 32 reportedAfterPhishedPercent: 73 notReportedAfterPhishedValue: 0 notReportedAfterPhishedPercent: 0 previous: recipients: 44 recipientsSent: 10 recipientsIgnored: 12 campaigns: 12 reportedAfterOpenValue: 12 reportedAfterOpenPercent: 27 reportedAfterPhishedValue: 32 reportedAfterPhishedPercent: 73 notReportedAfterPhishedValue: 0 notReportedAfterPhishedPercent: 0 error: null InvalidArgumentResponse: summary: Invalid Argument value: data: null error: status: 400 message: invalid argument code: INVALID_ARGUMENT details: null MetricsSuccessResponse: summary: Metrics Success value: data: users: registered: 1 notRegistered: 1 total: 2 training: summary: completed: 4 inProgress: 0 notStarted: 6 assigned: 10 campaigns: - name: Custom Training-07.07.2020-tes12 2nd May 2023 11:35:49 pm Campaign campaignId: 4f93fcc999b74b49918a42286c55e112 assigned: 4 completed: 2 inProgress: 0 notStarted: 2 startedAt: '2023-05-02T18:05:49Z' endedAt: '2023-05-02T18:05:49Z' - name: Annual Refresher 2023 2nd May 2023 11:35:58 pm Campaign campaignId: d626be5d98b44134a09f6b925b6f908a assigned: 4 completed: 2 inProgress: 0 notStarted: 2 startedAt: '2023-05-02T18:05:58Z' endedAt: '2023-05-02T18:05:49Z' - name: Annual Training 2022 2nd May 2023 11:36:13 pm Campaign campaignId: 72d0ece7f7aa4943b5c64fe66adebecf assigned: 2 completed: 0 inProgress: 0 notStarted: 2 startedAt: '2023-05-02T18:06:13Z' endedAt: '2023-05-02T18:05:49Z' gaming: summary: completed: 1 notStarted: 1 assigned: 2 campaigns: - name: Phishing Exercise campaignId: 382b86401eb54547a1fc3f5ccee8db21 assigned: 2 completed: 1 notStarted: 1 averageScore: 7 startedAt: '2023-04-12T14:07:40Z' endedAt: '2023-05-02T18:05:49Z' phishing: summary: participated: 14 clicked: 2 reported: 1 campaigns: - campaignId: 1089 participated: 12 clicked: 0 reported: 1 - campaignId: 1096 participated: 14 clicked: 2 reported: 0 error: null InvalidCompanyIDResponse-3: summary: Invalid CompanyID value: message: Provided company is not your customer, please validate companyId parameter success: false details: [] code: invalid_company_id MasterReportSuccessResponse: summary: Master Report Success value: userProgress: - email: example@wizer-training.com firstName: John lastName: Doe progress: 0 status: Not Started completedAt: '' course: File Upload Vulnerabilities (Level 2) departments: - No Department assignmentDate: '2025-06-01T16:00:14.560Z' daysToComplete: 30 daysToCompleteLeft: 0 - email: exampletest1@wizer-training.com firstName: null lastName: null progress: 0 status: Not Registered completedAt: '' course: File Upload Vulnerabilities (Level 2) departments: - No Department assignmentDate: '2025-06-01T16:00:14.560Z' daysToComplete: 30 daysToCompleteLeft: 0 - email: example@wizer-training.com firstName: John lastName: Doe progress: 0 status: Not Started completedAt: '' course: Using AI Dev Tools (Level 2) departments: - No Department assignmentDate: '2025-08-01T16:00:40.402Z' daysToComplete: 30 daysToCompleteLeft: 0 - email: exampletest1@wizer-training.com firstName: null lastName: null progress: 0 status: Not Registered completedAt: '' course: Using AI Dev Tools (Level 2) departments: - No Department assignmentDate: '2025-08-01T16:00:40.402Z' daysToComplete: 30 daysToCompleteLeft: 0 InvalidAPIKeyResponse: summary: API Key Invalid value: data: null error: status: 401 message: unauthenticated code: UNAUTHENTICATED details: - domain: gateway description: invalid API key code: invalid_api_key APIKeyNotSetResponse: summary: API Key not set value: message: API Key not set success: false data: null ForbiddenResponse: summary: Forbidden value: message: Forbidden. Please make sure that it's your customer's company id SomethingWentWrongErrorResponse: summary: Something Went Wrong value: message: Something went wrong AwarenessCoursesSuccess: summary: Awareness Courses Success value: data: summary: total: 15 completed: 5 inProgress: 7 notStarted: 2 overdue: 3 campaigns: - name: Annual Refresher 2023 2nd May 2023 11:35:58 pm Campaign campaignId: 382b86401eb54547a1fc3f5ccee8db21 courseId: 10200836e1214a8c849996fa2d7e695d status: ACTIVE assignments: 1 completed: 0 inProgress: 0 notStarted: 1 overdue: 1 startedAt: '2023-04-12T14:07:40Z' endedAt: '2023-04-12T14:07:40Z' pageInfo: size: 0 number: 0 totalCount: 15 error: null InvalidOrderResponse: summary: Invalid Order value: data: null error: status: 400 message: invalid argument code: INVALID_ARGUMENT details: - code: invalid_order InvalidStatusResponse: summary: Invalid Status value: data: null error: status: 400 message: invalid argument code: INVALID_ARGUMENT details: - domain: training.report code: invalid_status DeveloperCoursesSuccessResponse: summary: Developer Courses Success value: data: summary: total: 15 completed: 5 inProgress: 7 notStarted: 2 overdue: 3 campaigns: - name: Annual Refresher 2023 2nd May 2023 11:35:58 pm Campaign campaignId: 382b86401eb54547a1fc3f5ccee8db21 courseId: 10200836e1214a8c849996fa2d7e695d status: ACTIVE assignments: 1 completed: 0 inProgress: 0 notStarted: 1 overdue: 1 startedAt: '2023-04-12T14:07:40Z' endedAt: '2023-04-13T14:07:40Z' pageInfo: size: 0 number: 0 totalCount: 1 error: null PhishingExerciseSuccessResponse-2: summary: Phishing Exercise Success value: data: summary: total: 15 completed: 5 inProgress: 7 notStarted: 2 overdue: 1 campaigns: - name: Phishing Exercise campaignId: 382b86401eb54547a1fc3f5ccee8db21 status: ACTIVE assigments: 1 completed: 0 notStarted: 1 overdue: 1 averageScore: 1 startedAt: '2023-04-12T14:07:40Z' endedAt: '2023-05-12T14:07:40Z' pageInfo: size: 0 number: 0 totalCount: 1 error: null PhishingSimulationSuccessResponse-2: summary: Phishing Simulation Success value: data: summary: sent: 39 opened: 19 clickPhished: 10 credPhished: 6 reported: 6 campaigns: - id: 31941 name: api_users_from_departmens_2026-06-11 createdAt: '2026-06-11T14:39:31.951246Z' archivedAt: null status: IN_PROGRESS currentRoundNumber: 1 assignmentType: USERS_FROM_DEPARTMENTS isSmart: false usersCount: 1 sent: 1 opened: 0 reported: 0 clickPhished: 0 credPhished: 0 pageInfo: size: 100 number: 0 totalCount: 19 error: null InvalidCompanyIDResponse-4: summary: Invalid CompanyID value: data: null error: status: 400 code: campaigns/find_all_with_statistic/input_validation message: 'Key: ''CampaignsFindAllWithStatisticInput.CompanyID'' Error:Field validation for ''CompanyID'' failed on the ''required'' tag' details: null MonthlyVideosSuccessResponse: summary: Monthly Video Success value: data: summary: total: 15 completed: 5 inProgress: 7 notStarted: 2 overdue: 1 videos: - month: 2024-07 eventId: 288fada00f564ab29ad239ff9592fe5a video: id: 9ca05bc85d79469bb08b904bed0c9893 name: Some video name url: https://g-friedlander.wistia.com/medias/8edq6mmrag thumbnail: https://embed-ssl.wistia.com/deliveries/509f8fd28786f508d92b1d64b2fec471.jpg assignments: 1016 progress: 0 completed: 0 notStarted: 1016 overdue: 0 averageCompletion: 0 startedAt: '2024-07-01T00:00:00Z' endedAt: '2024-08-01T00:00:00Z' pageInfo: size: 0 number: 0 totalCount: 1 error: null PolicySuccess: summary: Policy Success value: data: summary: total: 43 acknowledged: 15 notOpened: 13 overdue: 15 policies: - name: B_policy_1 policyId: CsHeKDyWytC1JvIKHYen revision: 1 revisionId: revision_id_1 assignments: 7 assignmentType: ALL_USERS progress: 28.57 acknowledged: 2 notOpened: 4 overdue: 1 averageAcknowledge: 2 createdAt: '2022-06-01T12:00:00Z' endedAt: '2022-06-04T12:00:00Z' status: ended - name: A_policy_2 policyId: EYM6iYN6vBTszC6cvIpO revision: 1 revisionId: revision_id_3 assignments: 9 assignmentType: ALL_USERS progress: 44.44 acknowledged: 4 notOpened: 1 overdue: 4 averageAcknowledge: 3 createdAt: '2022-06-02T12:00:00Z' endedAt: '2022-06-03T12:00:00Z' status: ended error: null NotImplementedResponse: summary: Not Implemented value: data: null error: status: 501 message: not implemented code: NOT_IMPLEMENTED details: - field: '14' UsersMonthlyVideosSuccessResponse: summary: Users Monthly Video Users Report Success Response value: data: items: - userId: user1 email: user1@gm.com firstName: user1 lastName: user1 isRegistered: true videoName: video2 videoId: video2 videoUrl: video2.com startedAt: '2026-03-04T08:46:43Z' isCompleted: false completedAt: null isInvited: true invitedAt: '2026-03-04T12:46:43Z' daysToComplete: 31 daysToCompleteLeft: 10 assignmentDate: '2026-03-04T12:46:43Z' - userId: user1 email: user1@gm.com firstName: user1 lastName: user1 isRegistered: true videoName: video1 videoId: video1 videoUrl: video1.com startedAt: '2026-07-21T08:46:43Z' isCompleted: true completedAt: '2026-07-21T18:46:43Z' isInvited: true invitedAt: '2026-07-21T08:46:43Z' daysToComplete: 31 daysToCompleteLeft: null assignmentDate: '2026-08-04T12:46:43Z' - userId: user2 email: user2@gm.com firstName: user2 lastName: user2 isRegistered: false videoName: video2 videoId: video2 videoUrl: video2.com startedAt: '2026-03-04T08:46:43Z' isCompleted: true completedAt: '2026-07-21T08:46:43Z' isInvited: true invitedAt: '2026-07-01T08:46:43Z' daysToComplete: 31 daysToCompleteLeft: null assignmentDate: '2026-08-04T12:46:43Z' pageInfo: size: 100 number: 0 totalCount: 3 error: null PageParamsMustBeSet: summary: Page params must be set value: data: {} error: status: 400 message: invalid argument code: INVALID_ARGUMENT details: - domain: monthlyVideo.external_users_monthly_videos_report description: page params is required for that request code: required_page_params ForbiddenResponse-2: summary: Company not found value: data: {} error: status: 403 message: permission denied code: PERMISSION_DENIED details: - domain: monthlyVideo.external_users_monthly_videos_report field: companyId code: company_not_found UsersAwarenessCoursesSuccessResponse: summary: Users courses value: data: items: - email: email2@mail.com lastName: last_name2 firstName: name2 userId: 0123456789abcdef0123456789abcdef courseId: 0123456789abcdef0123456789abcdef courseName: course name 1 courseType: AWARENESS isInvited: true isStarted: true isCompleted: false completedAt: null campaignStartedAt: '2026-01-01T12:00:00Z' campaignEndedAt: '2026-02-01T12:00:00Z' campaignId: 0123456789abcdef0123456789abcdef progress: 0 daysToComplete: 30 daysToCompleteLeft: 12 assignmentDate: '2026-01-01T00:00:00.000Z' - email: email2@mail.com lastName: last_name2 firstName: name2 userId: 0123456789abcdef0123456789abcdef courseId: 0123456789abcdef0123456789abcdef courseName: course name 2 courseType: CUSTOM isInvited: true isStarted: true isCompleted: true completedAt: '2026-01-10T12:00:00Z' campaignStartedAt: '2026-01-01T12:00:00Z' campaignEndedAt: null campaignId: 0123456789abcdef0123456789abcdef progress: 60 daysToComplete: 30 daysToCompleteLeft: null assignmentDate: '2026-01-01T00:00:00.000Z' - email: email1@mail.com lastName: last_name1 firstName: name1 userId: 0123456789abcdef0123456789abcdef courseId: 0123456789abcdef0123456789abcdef courseName: course name 1 courseType: AWARENESS isInvited: true isStarted: true isCompleted: true completedAt: '2026-01-10T12:00:00Z' campaignStartedAt: '2026-01-01T12:00:00Z' campaignEndedAt: '2026-02-01T12:00:00Z' campaignId: 0123456789abcdef0123456789abcdef progress: 40 daysToComplete: 30 daysToCompleteLeft: null assignmentDate: '2026-01-01T00:00:00.000Z' - email: email1@mail.com lastName: last_name1 firstName: name1 userId: 0123456789abcdef0123456789abcdef courseId: 0123456789abcdef0123456789abcdef courseName: course name 2 courseType: SHARED isInvited: false isStarted: false isCompleted: false completedAt: null campaignStartedAt: '2026-01-01T12:00:00Z' campaignEndedAt: null campaignId: 0123456789abcdef0123456789abcdef progress: 0 daysToComplete: 30 daysToCompleteLeft: 5 assignmentDate: '2026-01-01T00:00:00.000Z' pageInfo: size: 100 number: 0 totalCount: 4 error: null PageParamsMustBeSet-2: summary: Page params must be set value: data: {} error: status: 400 message: invalid argument code: INVALID_ARGUMENT details: - domain: training.external_users_awareness_report description: page params is required for that request code: required_page_params ForbiddenResponse-3: summary: Company not found value: data: {} error: status: 403 message: permission denied code: PERMISSION_DENIED details: - domain: training.external_users_awareness_report field: companyId code: company_not_found UsersDevelopersCoursesSuccessResponse: summary: Users developers courses success response value: data: items: - email: email2@mail.com lastName: last_name2 firstName: name2 userId: 0123456789abcdef0123456789abcdef courseId: 0123456789abcdef0123456789abcdef courseName: course name 1 isInvited: true isStarted: true isCompleted: false completedAt: null campaignStartedAt: '2026-01-01T12:00:00Z' campaignEndedAt: '2026-02-01T12:00:00Z' campaignId: 0123456789abcdef0123456789abcdef progress: 0 daysToComplete: 30 daysToCompleteLeft: 12 assignmentDate: '2026-01-01T00:00:00.000Z' - email: email2@mail.com lastName: last_name2 firstName: name2 userId: 0123456789abcdef0123456789abcdef courseId: 0123456789abcdef0123456789abcdef courseName: course name 2 isInvited: true isStarted: true isCompleted: true completedAt: '2026-01-10T12:00:00Z' campaignStartedAt: '2026-01-01T12:00:00Z' campaignEndedAt: null campaignId: 0123456789abcdef0123456789abcdef progress: 60 daysToComplete: 30 daysToCompleteLeft: null assignmentDate: '2026-01-01T00:00:00.000Z' - email: email1@mail.com lastName: last_name1 firstName: name1 userId: 0123456789abcdef0123456789abcdef courseId: 0123456789abcdef0123456789abcdef courseName: course name 1 isInvited: true isStarted: true isCompleted: true completedAt: '2026-01-10T12:00:00Z' campaignStartedAt: '2026-01-01T12:00:00Z' campaignEndedAt: null campaignId: 0123456789abcdef0123456789abcdef progress: 40 daysToComplete: 30 daysToCompleteLeft: null assignmentDate: '2026-01-01T00:00:00.000Z' - email: email1@mail.com lastName: last_name1 firstName: name1 userId: 0123456789abcdef0123456789abcdef courseId: 0123456789abcdef0123456789abcdef courseName: course name 2 isInvited: false isStarted: false isCompleted: false completedAt: null campaignStartedAt: '2026-01-01T12:00:00Z' campaignEndedAt: null campaignId: 0123456789abcdef0123456789abcdef progress: 0 daysToComplete: 30 daysToCompleteLeft: 12 assignmentDate: '2026-01-01T00:00:00.000Z' pageInfo: size: 100 number: 0 totalCount: 4 error: null PageParamsMustBeSet-3: summary: Page params must be set value: data: {} error: status: 400 message: invalid argument code: INVALID_ARGUMENT details: - domain: training.external_users_developers_report description: page params is required for that request code: required_page_params ForbiddenResponse-4: summary: Company not found value: data: {} error: status: 403 message: permission denied code: PERMISSION_DENIED details: - domain: training.external_users_developers_report field: companyId code: company_not_found UsersPoliciesSuccessResponse: summary: Users policies report value: data: items: - policyName: C_policy_3 policyId: 4fe289416198479eade678af4b418c81 revisionId: revision_id_5 firstName: user_name_1 lastName: user_last_name_1 email: email@email.com userId: user_id_1 isAcknowledged: false isOpened: true isInvited: false enrolledAt: '2026-01-05T12:00:00Z' daysToComplete: 21 daysToCompleteLeft: 0 startedAt: '2026-01-01T12:00:00Z' revisionStartedAt: '2026-01-05T12:00:00Z' revisionEndedAt: null acknowledgedAt: '2026-01-05T12:00:00Z' - policyName: C_policy_3 policyId: 4fe289416198479eade678af4b418c81 revisionId: revision_id_5 firstName: '' lastName: '' email: email@email.com userId: user_id_10 isAcknowledged: false isOpened: false isInvited: false enrolledAt: '2026-01-05T12:00:00Z' daysToComplete: 21 daysToCompleteLeft: 25 startedAt: '2026-01-01T12:00:00Z' revisionStartedAt: '2026-01-05T12:00:00Z' revisionEndedAt: null acknowledgedAt: '2026-01-05T12:00:00Z' pageInfo: size: 100 number: 0 totalCount: 2 error: null PageParamsMustBeSet-4: summary: Page params must be set value: data: {} error: status: 400 message: invalid argument code: INVALID_ARGUMENT details: - domain: policies.external_by_users_report description: page params is required for that request code: required_page_params ForbiddenResponse-5: summary: Forbidden value: data: {} error: status: 403 message: permission denied code: PERMISSION_DENIED details: - domain: policies.external_by_users_report field: companyId code: company_not_found UsersFakeOrNotSuccessResponse: summary: Success value: data: items: - userId: testUserID email: email1@gmail.com firstName: name1 lastName: last1 campaignId: c36d6b4c-04ec-46ac-9212-6aea31aa2741 campaignName: testCampaign campaignStartedAt: '2022-10-11T23:23:23Z' campaignEndedAt: '2022-10-11T23:23:23Z' assignedAt: '2022-10-11T23:23:23Z' daysToComplete: 30 daysLeft: null gameName: testGame gameId: c36d6b4c-04ec-46ac-9212-6aea31aa2741 completedAt: '2022-10-11T23:23:23Z' correctAnswers: 11 incorrectAnswers: 2 remainingAnswers: 0 progress: 100 - userId: testUserID email: email2@gmail.com firstName: name2 lastName: last2 campaignId: c36d6b4c-04ec-46ac-9212-6aea31aa2741 campaignName: testCampaign campaignStartedAt: '2022-10-11T23:23:23Z' campaignEndedAt: null assignedAt: '2022-10-11T23:23:23Z' daysToComplete: 30 daysLeft: 15 gameName: testGame gameId: c36d6b4c-04ec-46ac-9212-6aea31aa2741 completedAt: null correctAnswers: 9 incorrectAnswers: 2 remainingAnswers: 4 progress: 78.6 pageInfo: size: 100 number: 0 totalCount: 2 error: null InvalidCampaignIDResponse: summary: The campaign ID is invalid. value: data: null error: status: 400 code: fon_company_report/external_report/input_validation message: Validation failed details: - domain: fon_company_report/external_report code: input_validation/invalid-campaign-id description: CampaignID validation failed field: campaignID reason: invalid uuid format ForbiddenResponse-6: summary: Forbidden value: data: {} error: status: 403 code: fon_company_report/users_master/company_not_found message: company was not found details: null InvalidArgumentResponse-2: summary: Invalid Argument value: message: invalid argument success: false data: null ForbiddenResponse-7: summary: Forbidden value: message: forbidden success: false data: null MultiStatusResponse: summary: Multi Status value: message: 'Not all users have been processed, please check if emails are valid, departments don''t contain any of the following characters: . [ $ ] / # Role is one of [''admin'', ''user'']' success: false WrongCustomersCompanyIDResponse: summary: Wrong Customers Company ID value: message: Provided company is not your customer, please validate companyId parameter success: false NoAccessToCompanyResponse: summary: No Access To Company value: message: The company has not granted access success: false SSOErrorResponse: summary: SSO Error value: message: Please check your SSO settings in the admin panel success: false NoValidInvitesResponse: summary: Not Valid Invites value: message: 'No valid user invites! All emails are already used or not valid or department names contain any of the following characters: . [ $ ] / #' success: false CompanyDisabledResponse: summary: Company Disabled value: message: Company is disabled success: false UserNotFoundResponse: summary: User not found value: message: User not found CompanyCreatorAccountResponse: summary: Company Creator account value: message: Company Creator account can't be disabled BadFormatResponse: summary: Bad format value: message: The email address is badly formatted. InvalidArgumentResponse-3: summary: Invalid argument value: message: invalid argument success: false data: null UserNotFoundResponse-2: summary: User not found value: message: user is not found success: false data: null BadFormatResponse-3: summary: Bad format value: message: The user ID is badly formatted. UserNotFoundResponse-3: summary: User not found value: message: not found FetchGroupsSuccessResponse: summary: Success value: data: items: - id: d6131154-8fc9-11ec-9a30-4201ac12811f name: Company 1 pageInfo: size: 1 number: 1 totalCount: 98 error: null InvalidArgumentResponse-4: summary: Invalid Argument value: data: null error: status: 400 message: invalid argument code: INVALID_ARGUMENT details: - domain: '' code: invalid_pageNumber UserAlreadyAssignedResponse: summary: Invalid argument value: data: null error: status: 400 message: precondition failed code: FAILED_PRECONDITION details: - domain: user reason: user is already assigned to some of the provided group IDs code: groups_already_assigned GroupNotFoundResponse: summary: Not Found value: data: null error: status: 404 message: not found code: NOT_FOUND details: - domain: user reason: none of the specified groups exist within this company code: groups_not_found InvalidGroupIDResponse: summary: Invalid group ID value: data: {} error: status: 400 message: precondition failed code: FAILED_PRECONDITION details: - domain: user reason: company has no groups for some of the provided IDs code: invalid_group_id FetchDepartmentsSuccessResponse: summary: Fetch Departments Success value: data: items: - id: 29bbfcbc-27c8-4c92-8954-b0cea8a06ecc name: Finance pageInfo: size: 1 number: 1 totalCount: 7 error: null NoDepartmentsProvidedResponse: summary: No Departments Provided value: data: null error: status: 400 message: invalid argument code: INVALID_ARGUMENT details: - domain: user field: departmentIds.0 description: cannot be blank code: validation_required InvalidDepartmentIDLengthResponse: summary: Invalid Department ID Length value: data: null error: status: 400 message: invalid argument code: INVALID_ARGUMENT details: - domain: user field: departmentIds description: the length must be between 1 and 50 code: validation_length_out_of_range InvalidDepartmentIDFormatResponse: summary: Invalid Department ID Format value: data: null error: status: 400 message: invalid argument code: INVALID_ARGUMENT details: - domain: user field: departmentIds.1 description: must be a valid UUID code: validation_is_uuid UserAlreadyAssignedResponse-2: summary: User already assigned value: data: null error: status: 400 message: precondition failed code: FAILED_PRECONDITION details: - domain: user reason: user is already assigned to some of the provided department IDs code: departments_already_assigned DepartmentNotFoundWithinCompanyResponse: summary: Department not found within company value: data: null error: status: 400 message: precondition failed code: FAILED_PRECONDITION details: - domain: user reason: company has no departments for some of the provided IDs code: invalid_department_id AssignToDefaultDepartmentResponse: summary: Assign to default department value: data: null error: status: 400 message: precondition failed code: FAILED_PRECONDITION details: - domain: user reason: user cannot be assigned to default department code: cannot_assign_to_default_department DepartmentNotFoundResponse: summary: Department Not Found value: data: null error: status: 404 message: not found code: NOT_FOUND details: - domain: user reason: none of the specified departments exist within this company code: departments_not_found UserIsNotAssignedToProvidedDepartmentsResponse: summary: User already assigned value: data: null error: status: 400 message: precondition failed code: FAILED_PRECONDITION details: - domain: user reason: user is not assigned to some of the provided department IDs code: departments_not_assigned UserCannotBeUnassignedFromAllDepartmentsResponse: summary: User cannot be unassigned from all departments value: data: null error: status: 400 message: precondition failed code: FAILED_PRECONDITION details: - domain: user reason: user cannot be unassigned from all departments. If all department assignments are removed, the user will be automatically assigned to the default department code: user_departments_list_cannot_be_empty StartTrainingSuccessResponse: summary: Success value: success: true WrongCompanyIDResponse: summary: Wrong company ID value: message: Provided company is not your customer, please validate companyId parameter success: false CourseNotFoundResponse: summary: Course not found value: message: Course not found success: false CustomCourseAccessResponse: summary: Custom course access value: message: This custom course doesnt belong to requested company id success: false InvalidAPIKeyResponse-2: summary: API Key Invalid value: message: Unauthorized, API key not valid StartTrainingBatchSuccessResponse: summary: Success value: success: true operationStatusUrl: https://api.wizer-training.com/api/v1/external/operations/c29d13bf42174135b635899ad177f3aa operationId: c29d13bf42174135b635899ad177f3aa ShareTrainingSuccessResponse: summary: Success value: success: true WrongCompanyIDResponse-2: summary: Wrong company ID value: message: Provided company is not your customer, please validate companyId parameter success: false code: invalid_company_id CourseNotFoundResponse-2: summary: Course not found value: message: Course not found success: false code: course/not_found CustomCourseAccessResponse-2: summary: Custom course access value: message: This custom course doesnt belong to requested company id success: false code: course/not_found ShareTrainingBatchSuccessResponse: summary: Success value: success: true operationStatusUrl: https://api.wizer-training.com/api/v1/external/operations/c29d13bf42174135b635899ad177f3aa operationId: c29d13bf42174135b635899ad177f3aa TrainingNotFoundResponse: summary: Training not found value: message: Course not found success: false CustomCourseAccess: summary: Custom course access value: message: This custom course doesnt belong to requested company id success: false InvalidAPIKey: summary: API Key Invalid value: data: null error: status: 401 message: unauthenticated code: UNAUTHENTICATED details: - domain: gateway description: invalid API key code: invalid_api_key OperationStatusResponse: summary: Success value: success: true operation: id: fed5406d-ebfc-465b-b0e0-9d0469aa34id status: succeeded type: share_training_batch result: Operation is finished createdAt: '2023-05-05T06:02:39.232Z' finishedAt: '2023-05-05T06:02:50.552Z' metadata: trainingId: dade5aa9d8a54a26b2668eeb76632043 subOperations: - id: cf39e533-8c9d-4d72-8a0e-28a984433009 status: succeeded type: share_training result: Operation is finished createdAt: '2023-05-05T06:02:39.232Z' finishedAt: '2023-05-05T06:02:40.889Z' metadata: trainingId: dade5aa9d8a54a26b2668eeb76632043 customerCompanyId: f7510a39c531495091ee78600a1b7234 - id: b6732370-b761-4dae-89c5-4b742222e8a8 status: succeeded type: share_training result: Operation is finished createdAt: '2023-05-05T06:02:39.232Z' finishedAt: '2023-05-05T06:02:42.545Z' metadata: trainingId: dade5aa9d8a54a26b2668eeb76632043 customerCompanyId: 429854783c0e44639a35554fc6d7aebd - id: 46e132cb-8d1e-4489-80a8-22cb99beb621 status: succeeded type: share_training result: Operation is finished createdAt: '2023-05-05T06:02:39.232Z' finishedAt: '2023-05-05T06:02:43.547Z' metadata: trainingId: dade5aa9d8a54a26b2668eeb76632043 customerCompanyId: 02c7cd8592564d628f21671e69c648a3 - id: 3ed4d31c-7308-4be7-9c42-f2629777dbd4 status: succeeded type: share_training result: Operation is finished createdAt: '2023-05-05T06:02:39.232Z' finishedAt: '2023-05-05T06:02:45.549Z' metadata: trainingId: dade5aa9d8a54a26b2668eeb76632043 customerCompanyId: 03e26babec944e858fab8ad7dbf77853 - id: b1acd0b1-070f-4d74-bea0-2297c36e9025 status: succeeded type: share_training result: Operation is finished createdAt: '2023-05-05T06:02:39.232Z' finishedAt: '2023-05-05T06:02:48.576Z' metadata: trainingId: dade5aa9d8a54a26b2668eeb76632043 customerCompanyId: a280f27065674cfd80881ea3bbfa6470 - id: f13304de-d921-41d5-bcbc-e433aeab509b status: succeeded type: share_training result: Operation is finished createdAt: '2023-05-05T06:02:39.232Z' finishedAt: '2023-05-05T06:02:41.672Z' metadata: trainingId: dade5aa9d8a54a26b2668eeb76632043 customerCompanyId: 5020f937432a4d9ba663d7dcf6dd1c7d - id: ae03450b-0a30-43f5-805f-ee9fe1c3dd86 status: succeeded type: share_training result: Operation is finished createdAt: '2023-05-05T06:02:39.232Z' finishedAt: '2023-05-05T06:02:44.550Z' metadata: trainingId: dade5aa9d8a54a26b2668eeb76632043 customerCompanyId: 7034b39a1b6842d8bd9736dcaaaa27e8 - id: b3da7556-7c46-4efa-a460-19f3080354b6 status: succeeded type: share_training result: Operation is finished createdAt: '2023-05-05T06:02:39.232Z' finishedAt: '2023-05-05T06:02:46.550Z' metadata: trainingId: dade5aa9d8a54a26b2668eeb76632043 customerCompanyId: 703ecebdbf344f938fa5d8240e729d67 - id: 2d64fdc5-e2c8-44bb-99ae-d9ab8ac7f15c status: succeeded type: share_training result: Operation is finished createdAt: '2023-05-05T06:02:39.232Z' finishedAt: '2023-05-05T06:02:47.585Z' metadata: trainingId: dade5aa9d8a54a26b2668eeb76632043 customerCompanyId: 4e356353dbeb45aaa44f9cfbc51609f9 - id: 57d9aa5e-8412-42bb-9852-2a5b98e15226 status: succeeded type: share_training result: Operation is finished createdAt: '2023-05-05T06:02:39.232Z' finishedAt: '2023-05-05T06:02:49.587Z' metadata: trainingId: dade5aa9d8a54a26b2668eeb76632043 customerCompanyId: aa57141414544080837c079bdd74e339 - id: 6a051aab-4d10-4006-98b2-618a6f63dc98 status: succeeded type: share_training result: Operation is finished createdAt: '2023-05-05T06:02:39.232Z' finishedAt: '2023-05-05T06:02:50.545Z' metadata: trainingId: dade5aa9d8a54a26b2668eeb76632043 customerCompanyId: 670c956b4831423f99478925fba95bc6 StartFishingExerciseResponse: summary: Success value: data: message: Campaign created success: true error: null CompanyNotFoundResponse: summary: Company not found value: data: null error: status: 400 code: campaign/create_external/bad_request message: company not found details: null GenerateMagicLinkSuccessResponse: summary: Success value: data: link: | https://admin.wizer-training.com/login?magicLinkVerificationToken=P49EPoZHhK92qMuxvhu4Pg53QDfPtA1c2aFzoz wWdIVRbCYAYO52t2t4lcZBCZhMYQUfIy0el5PBnsTmcRQEj96AatxMmBEl1gTvFw3RThTTTveBc3fpV2hE WrongCompanyIDResponse-3: summary: Wrong Company ID value: data: null error: status: 400 message: Provided company is not your customer, please validate companyId parameter code: invalid_company_id details: null InvalidAPIKeyResponse-3: summary: Invalid API Key value: message: Unauthorized, API key not valid success: false data: null RedirectToAndPlatformTypeMismatchResponse: summary: RedirectTo and PlatformType mismatch value: data: null error: status: 422 code: input_properties_validation message: Property values were not valid details: - code: query/redirectTo description: Invalid value field: redirectTo reason: Invalid value GenerateMagicLinkSuccessResponse-2: summary: Success value: magicLink: | https://app.wizer-training.com/magicLink?redirectTo=dashboard&magicLinkVerificationToken=NzwYC7FrhBReU1fKWgAeaz45 rEQ2Ypxs3WZLRLZzyblUmHydi9wGVpxROEkjTM4GP4XUgeezJEZC1M3ZOOtw1SV3tOcURwU68mnsMNTWxZ8nZiWRdMqtNft0 WrongCompanyIDResponse-4: summary: Wrong Company ID value: message: Provided company is not your customer, please validate companyId parameter MismatchResponse: summary: RedirectTo and PlatformType mismatch value: message: redirectTo param doesnt match with platformType param InvalidAPIKeyResponse-4: summary: Invalid API Key value: message: Unauthorized, API key not valid InviteCustomerResponse: summary: Success value: data: companyId: f0ae37efcd9f46068df31729a803902c error: null CompanyNameAlreadyTakenResponse: summary: Company Name Already Taken value: data: null error: status: 400 message: invalid argument code: INVALID_ARGUMENT details: - domain: partnership description: cannot invite company code: invite_company details: companyName: AlreadyExistingCompany error: - domain: company description: such company is already registered code: company_already_exists MalformedInputResponse: summary: Malformed input value: data: null error: status: 400 message: invalid argument code: INVALID_ARGUMENT details: - domain: partnership reason: input data rely on data that can not be processed in its current state description: can not perform operation with the requested input code: invalid_entities EmailIsAlreadyTakenResponse: summary: Email is already taken value: data: null error: status: 400 message: invalid argument code: INVALID_ARGUMENT details: - domain: partnership description: cannot invite company code: invite_company details: companyName: RegisteredEmail error: - domain: user description: this email is taken, please contact your company administrator code: user_already_exists details: signInLink: /login EmailIsAlreadyTakenPendingRegistrationResponse: summary: Email is already taken (Pending Registration) value: data: null error: status: 400 message: invalid argument code: INVALID_ARGUMENT details: - domain: partnership description: cannot invite company code: invite_company details: companyName: NotRegistered error: - domain: user description: this email is pending confirmation code: invitation_pending EmailIsBannedResponse: summary: Email is banned value: data: null error: status: 400 message: invalid argument code: INVALID_ARGUMENT details: - domain: partnership description: cannot invite company code: invite_company details: companyName: Dummy Inc. error: - domain: user field: email code: invalid_field_value PartnershipRequiredResponse: summary: Partnership required value: data: null error: status: 400 message: invalid argument code: INVALID_ARGUMENT details: - domain: partnership description: requested company was not found code: no_such_company InvalidPartnerTypeResponse: summary: Invalid Partner Type value: data: null error: status: 400 message: invalid argument code: INVALID_ARGUMENT details: - domain: partnership description: cannot invite company code: invite_company details: companyName: Dummy Inc. error: - domain: partnership description: This functionality is available only for Resellers code: not_reseller AccessRequestIsNotAllowedResponse: summary: Access request is not allowed value: data: null error: status: 400 message: invalid argument code: INVALID_ARGUMENT details: - domain: partnership description: cannot invite company code: invite_company details: companyName: Dummy Inc. error: - domain: partnership description: company is disallowed to request access to child companies code: request_access_not_allowed InvalidAPIKeyResponse-5: summary: Invalid API Key value: message: Invalid API Key success: false data: null TooManyRequestsResponse: summary: Too Many Requests value: data: null error: status: 429 message: resource exhausted code: RESOURCE_EXHAUSTED details: - domain: gateway description: requests limit reached for this endpoint, try again later code: request_limit_enforced GetCustomersSuccessResponse: summary: Success value: customers: - companyId: testCompanyId1 companyName: Customer Company Name 1 email: test@example.com1 parentCompany: Direct - companyId: testCompanyId2 companyName: Customer Company Name 2 email: test@example.com2 parentCompany: Direct - companyId: testCompanyId3 companyName: Customer Company Name 3 email: test@example.com3 parentCompany: Customer Company Name 1 - companyId: testCompanyId4 companyName: Customer Company Name 4 email: test@example.com4 parentCompany: Direct - companyId: testCompanyId5 companyName: Customer Company Name 5 email: test@example.com5 parentCompany: Customer Company Name 2 itemsCount: '19' InviteCustomerSuccessResponse: summary: Success value: message: Customer has been successfully added customerCompanyId: companyId NotEnoughLicensesResponse: summary: Not enough licenses value: message: Not enough licenses available success: false NoGrandchildrenAccessResponse: summary: No grandchildren access value: message: Company doesnt have grandchildren access success: false NotAResellerResponse: summary: Not a reseller value: message: This functionality is available only for Resellers success: false GrandchildCanNotBeASubResellerResponse: summary: Grandchild can not be a sub reseller value: message: Inviting a grandchild as a sub-reseller is not allowed success: false InvalidAPIKey-2: summary: Invalid API Key value: message: Unauthorized, API key not valid EmailIsTakenResponse: summary: Email is taken value: message: Email already in use customerCompanyId: null EmailIsTakenYourCustomerResponse: summary: Email is taken value: message: Email already in use customerCompanyId: customerCompanyId CompanyNameIsTakenYourCustomerResponse: summary: Company name is taken value: message: Company name already in use customerCompanyId: customerCompanyId CompanyNameIsTakenResponse: summary: Company name is taken value: message: Company name already in use customerCompanyId: null InvalidEmailFormatResponse: summary: Invalid email format value: message: Email is badly formatted RequestingAccessWithoutActivatingATrialResponse: summary: Requesting access without activating a trial value: message: Trial is not active. For request access, you need to activate trial or buy licenses for this customer. CompanyIsInvalidState: summary: Company is invalid state value: data: null error: status: 500 message: data corrupted code: DATA_CORRUPTED details: - domain: partnership description: company is invalid state, please contact support code: reinvitation_not_allowed RequestedCompanyHasNoOwner: summary: Requested company has no owner value: data: null error: status: 400 message: precondition failed code: FAILED_PRECONDITION details: - domain: partnership description: child company has no assigned owner code: child_company_has_no_owner Forbidden: summary: Forbidden value: message: forbidden success: false data: null GetExternalCustomersListViewSuccessResponse: summary: Success value: data: customers: - companyId: 22222222-2222-2222-2222-222222222222 companyName: Alpha Reseller companyType: PARTNER parentCompanyId: 11111111-1111-1111-1111-111111111111 parentCompanyName: Main Partner standingStatus: ENABLED registrationStatus: REGISTERED licensingStatus: FREE companyOwnerEmail: alpha@example.com userCount: 3 - companyId: 33333333-3333-3333-3333-333333333333 companyName: Beta Customer companyType: DIRECT_CUSTOMER parentCompanyId: 11111111-1111-1111-1111-111111111111 parentCompanyName: Main Partner standingStatus: ENABLED registrationStatus: REGISTERED licensingStatus: LICENSED companyOwnerEmail: beta@example.com userCount: 12 pageInfo: number: 0 size: 10 totalCount: 2 error: null ParentCompanyNotFoundResponse: summary: Parent company not found value: data: null error: status: 404 code: company_not_found message: company not found details: null BadFormatResponse-2: summary: Bad format value: message: Email is badly formatted EmailExistsResponse: summary: Email already exists value: emailExists: true message: Email already in use EmailIsNotProvided: summary: Email is not provided value: message: Property values were not valid validationResults: email: param: email location: params message: Invalid value EnableItselfResponse: summary: Enable itself value: data: null error: status: 403 message: permission denied code: PERMISSION_DENIED details: - domain: gateway description: can access only another companies data code: not_same_company_rule_violation CompanyCanBeEnabledOnlyOnce: summary: Company can be enabled only once value: data: null error: code: ABORTED message: aborted status: 409 details: - code: already_enabled description: company can be enabled only once domain: company DisableItself: summary: Disable itself value: data: null error: status: 403 message: permission denied code: PERMISSION_DENIED details: - domain: gateway description: can access only another companies data code: not_same_company_rule_violation AlreadyDisabled: summary: Already disabled value: data: null error: code: ABORTED message: aborted status: 409 details: - code: already_disabled description: company can be disabled only once domain: company ActiveCampaignsSuccessResponse: summary: Success value: data: items: - id: 1 companyId: companyId name: TestCampaign_mxUbUlRABB createdDate: '2022-01-19T13:04:08Z' launchDate: '2022-01-19T10:59:07Z' sendByDate: '2022-01-19T21:00:00Z' completedDate: null startWorkdayTime: '2021-07-20T05:00:00Z' endWorkdayTime: '2021-07-20T22:00:00Z' nextCampaignDate: '2021-07-21T20:00:00Z' status: In progress frequency: once isActive: true isSmart: false usersCount: 1 usersType: USERS_SELECTED startDate: '2022-01-19T12:59:08Z' deliveryPeriod: 1 timezone: Europe/Kiev - id: 2 companyId: companyId name: Campaign 08/13/21 createdDate: '2021-08-13T11:38:08Z' launchDate: '2021-08-13T11:36:55Z' sendByDate: '2021-08-13T14:00:00Z' completedDate: null startWorkdayTime: '2021-08-13T02:00:00Z' endWorkdayTime: '2021-08-13T05:00:00Z' nextCampaignDate: '2021-08-13T14:00:00Z' status: In progress frequency: monthly isActive: true isSmart: false usersCount: 4 usersType: USERS_FROM_GROUPS startDate: '2021-08-13T11:36:55Z' deliveryPeriod: 0 timezone: Europe/Kiev pageInfo: size: 100 number: 0 totalCount: 2 error: null InvalidArgument: summary: Invalid argument value: data: null error: status: 400 code: campaign/find_active_short/input_validation message: 'Key: '''' Error:Field validation for '''' failed on the ''alphanum'' tag' details: null CompaniesIncludeClonedCampaignSuccessResponse: summary: Success value: data: parentCampaignName: ParentCampaignName totalBoostedCount: 1 companies: - companyName: company2 campaignName: campaign2 companyId: company2 roundNumber: null campaignId: 121212 createdDate: '2021-10-10T00:00:00Z' startDate: '2021-11-11T00:00:00Z' isSmart: false totalCount: 10 sentCount: 9 sentPercent: 90 - companyName: company4 campaignName: campaign4 companyId: company4 roundNumber: 2 campaignId: 141414 createdDate: '2021-10-10T00:00:00Z' startDate: '2021-11-11T00:00:00Z' isSmart: true totalCount: 6 sentCount: 6 sentPercent: 100 pageInfo: size: 100 number: 0 totalCount: 2 error: null CompaniesExcludeClonedCampaignSuccessResponse: summary: Company Exclude Cloned Campaign Success value: data: totalAvailableCount: 1 companies: - companyId: company2 companyName: company2 isBoosted: false isWithRegisteredUsers: false - companyId: company4 companyName: company4 isBoosted: false isWithRegisteredUsers: true pageInfo: size: 100 number: 0 totalCount: 2 error: null InvalidArgument-2: summary: Invalid argument value: data: null error: status: 400 code: '' message: '' details: null NotFound: summary: Not Found value: data: null error: status: 404 code: '' message: '' details: null ShareCampaignSuccessResponse: summary: Share Campaign Success value: data: campaignId: 7058 clonedIds: - 1 error: null InvalidCompanyID: summary: Invalid company ID value: data: null error: status: 400 code: campaign/clone/input_validation message: | Key: 'CampaignCloneInput.CompanyIDs[0]' Error:Field validation for 'CompanyIDs[0]' failed on the 'company_id' tag details: null ForbiddenResponse-8: summary: Forbidden value: data: null error: status: 403 code: campaign/clone/no_access message: 'campaign clone check access: company has no access to clone campaign' details: null PackNotFoundResponse: summary: Pack not found value: data: null error: status: 400 code: campaign/create_external_v2/bad_request message: pack not found ValidationErrorResponse: summary: Validation Error value: data: null error: status: 400 code: campaign/create_external_v2/input_validation message: Validation failed details: - domain: campaign code: create_external/invalid-start-date description: StartDate validation failed field: startDate reason: value must be greater than or equal to now - domain: campaign code: create_external/invalid-days-to-complete description: DaysToComplete validation failed field: daysToComplete reason: value must be greater than or equal to 0 NoActiveUsersResponse: summary: No active users value: data: null error: status: 400 code: campaign/create_external/bad_request message: no active users CompanyIsNotBoostedResponse: summary: Company is not boosted value: data: null error: status: 400 code: campaign/create_external_v2/not_boosted message: company is not boosted InvalidAPIKeyResponseV2: summary: API Key Invalid value: data: null error: status: 401 message: unauthenticated code: UNAUTHENTICATED details: - domain: gateway description: invalid API key code: invalid_api_key NotificationValidation: summary: Validation error value: data: null error: status: 403 code: campaign/create_external_v2/notifications_validation message: custom notifications are not available for this company details: null UsersPhishingSimulationSuccessResponse: summary: Users phishing simulation success response value: data: items: - email: usr1@gmail.com firstName: usr1 lastName: usr1 userId: usr1 campaignId: 1111 campaignName: 1111 name round: Round 1 campaignStatus: IN_PROGRESS isCampaignSmart: true sent: true sentFailed: true opened: true clicked: true phished: true reported: true campaignStartedAt: '2026-01-26T10:50:58Z' campaignEndedAt: null roundStartedAt: '2026-01-26T05:00:00Z' roundEndedAt: '2026-01-26T14:00:00Z' assignmentDate: '2026-02-05T12:52:14Z' - email: usr2@gmail.com firstName: usr2 lastName: usr2 userId: usr2 campaignId: 1111 campaignName: 1111 name round: Round 2 campaignStatus: IN_PROGRESS isCampaignSmart: true sent: true sentFailed: true opened: true clicked: true phished: true reported: true campaignStartedAt: '2026-01-26T10:50:58Z' campaignEndedAt: null roundStartedAt: '2026-01-26T05:00:00Z' roundEndedAt: null assignmentDate: '2026-02-05T12:52:14Z' pageInfo: size: 100 number: 0 totalCount: 3 error: null InvalidInputResponse: summary: Invalid input value: data: {} error: status: 400 code: users/external_report/input_validation message: Validation failed details: - domain: users/external_report code: input_validation/invalid-size description: Size validation failed field: size reason: value must be one of 5 10 25 50 100 - domain: users/external_report code: input_validation/invalid-number description: Number validation failed field: number reason: value must be greater than or equal to 0 UsersPhishingExerciseSuccessResponse: summary: Users phishing exercise success response value: data: items: - campaignId: 01234567-89ab-cdef-0123-456789abcdef campaignName: Phishing Test campaignStatus: IN_PROGRESS campaignStartedAt: '2026-01-01T00:00:00.000Z' campaignEndedAt: null email: test@example.com firstName: John lastName: Doe userId: 0123456789abcdef0123456789abcdef assignmentDate: '2026-01-01T00:00:00.000Z' completedAt: null daysToComplete: 30 daysToCompleteLeft: 12 totalTemplatesCount: 5 answeredTemplatesCount: 5 scorePercentage: 14 - campaignId: 01234567-89ab-cdef-0123-456789abcdef campaignName: Phishing Test campaignStatus: IN_PROGRESS campaignStartedAt: '2026-01-01T00:00:00.000Z' campaignEndedAt: '2026-02-01T00:00:00.000Z' email: jane@example.com firstName: Jane lastName: Smith userId: 0123456789abcdef0123456789abcdef assignmentDate: '2026-01-01T00:00:00.000Z' completedAt: null daysToComplete: 30 daysToCompleteLeft: null totalTemplatesCount: 5 answeredTemplatesCount: 5 scorePercentage: 12 pageInfo: size: 10 number: 0 totalCount: 2 error: null security: - APIKey: [] tags: - name: Company Culture Dashboard description: | The Company Cybersecurity Culture Dashboard provides critical insights into the cybersecurity awareness, practices, and overall security culture within your organization. Designed for IT security teams, risk managers, and executives, this dashboard aggregates data from training programs, phihsing exercises, and phishing simulations to help you identify strengths and vulnerabilities in your cybersecurity posture. - name: Reports description: "The Reports section provides comprehensive, real-time analytics and detailed insights into your organization's \nperformance metrics. Whether you need high-level summaries or granular data, this section delivers customizable \nreports to support data-driven decision-making.\n" - name: User Management description: "The User Management section provides a basic set of endpoints for managing user accounts, roles, and permissions \nwithin your organization. These endpoints ensure secure and efficient user administration.\n" - name: Partner Portal description: "The Partner Portal section provides a set of endpoints for managing training programs, phishing exercises, and \nphishing simulations. These endpoints allow you to easily create, manage, and share training programs with your \norganization's employees.'\n"