{
  "swagger": "2.0",
  "info": {
    "title": "public_reporting.proto",
    "version": "version not set"
  },
  "tags": [
    {
      "name": "PublicReporting"
    }
  ],
  "consumes": [
    "application/json"
  ],
  "produces": [
    "application/json"
  ],
  "paths": {
    "/svc/public-reporting/assignments": {
      "get": {
        "operationId": "PublicReporting_Assignments",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/public_reportingAssignmentsResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "query",
            "description": "Queries the users email and properties, assignment name",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "archivedUsers",
            "description": "Filter to either include archived users, exclusively show archived users, or exclude archived users\nIncluding archived users is the default case\nValid values are: all, archived_only, not_archived\n\n - not_archived: This is the default case if not provided",
            "in": "query",
            "required": false,
            "type": "string",
            "enum": [
              "all",
              "archived_only",
              "not_archived"
            ],
            "default": "all"
          },
          {
            "name": "dueDateAfter",
            "description": "Filter to return assignments that are due at or after this time\nTimestamp format: \"yyyy-MM-ddTHH:mm:ssZ\"",
            "in": "query",
            "required": false,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "dueDateBefore",
            "description": "Filter to return assignments that are due at or before this time\nTimestamp format: \"yyyy-MM-ddTHH:mm:ssZ\"",
            "in": "query",
            "required": false,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "status",
            "description": "Valid status values are: completed, in_progress, overdue, not_started",
            "in": "query",
            "required": false,
            "type": "string",
            "enum": [
              "not_started",
              "in_progress",
              "failed",
              "passed",
              "abandoned",
              "locked",
              "overdue",
              "completed"
            ],
            "default": "not_started"
          },
          {
            "name": "sortBy",
            "description": "The default sort order is by user email in ascending order\nValid values are: user_email, assignment_name, due_date, passed_lessons, total_lessons, assignment_status",
            "in": "query",
            "required": false,
            "type": "string",
            "enum": [
              "user_email",
              "assignment_name",
              "due_date",
              "passed_lessons",
              "total_lessons",
              "assignment_status"
            ],
            "default": "user_email"
          },
          {
            "name": "orderType",
            "description": "Valid values are: asc, desc",
            "in": "query",
            "required": false,
            "type": "string",
            "enum": [
              "asc",
              "desc"
            ],
            "default": "asc"
          },
          {
            "name": "limit",
            "description": "Max limit is 3000",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "tags": [
          "PublicReporting"
        ]
      }
    },
    "/svc/public-reporting/enrollments": {
      "get": {
        "operationId": "PublicReporting_Enrollments",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/public_reportingEnrollmentsResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "query",
            "description": "Queries the users email and properties, level name, path name",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "archivedUsers",
            "description": "Filter to either include archived users, exclusively show archived users, or exclude archived users\nIncluding archived users is the default case\nValid values are: all, archived_only, not_archived\n\n - not_archived: This is the default case if not provided",
            "in": "query",
            "required": false,
            "type": "string",
            "enum": [
              "all",
              "archived_only",
              "not_archived"
            ],
            "default": "all"
          },
          {
            "name": "levelEnrollmentStatus",
            "description": "Valid status values are: in_progress, passed, locked",
            "in": "query",
            "required": false,
            "type": "string",
            "enum": [
              "not_started",
              "in_progress",
              "failed",
              "passed",
              "abandoned",
              "locked",
              "overdue",
              "completed"
            ],
            "default": "not_started"
          },
          {
            "name": "pathEnrollmentStatus",
            "description": "Valid status values are: not_started, in_progress, passed, abandoned",
            "in": "query",
            "required": false,
            "type": "string",
            "enum": [
              "not_started",
              "in_progress",
              "failed",
              "passed",
              "abandoned",
              "locked",
              "overdue",
              "completed"
            ],
            "default": "not_started"
          },
          {
            "name": "completedAfter",
            "description": "Filter to return enrollments that were completed at or after this time\nTimestamp format: \"yyyy-MM-ddTHH:mm:ssZ\"",
            "in": "query",
            "required": false,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "completedBefore",
            "description": "Filter to return enrollments that were completed at or before this time\nTimestamp format: \"yyyy-MM-ddTHH:mm:ssZ\"",
            "in": "query",
            "required": false,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "sortBy",
            "description": "The default sort order is by user email in ascending order\nValid values are: user_email, level_name, level_status, path_name, path_status, total_lessons, passed_lessons, points_earned, completed_at, updated_at, created_at",
            "in": "query",
            "required": false,
            "type": "string",
            "enum": [
              "user_email",
              "level_name",
              "level_status",
              "path_name",
              "path_status",
              "total_lessons",
              "passed_lessons",
              "points_earned",
              "completed_at",
              "updated_at",
              "created_at"
            ],
            "default": "user_email"
          },
          {
            "name": "orderType",
            "description": "Valid values are: asc, desc",
            "in": "query",
            "required": false,
            "type": "string",
            "enum": [
              "asc",
              "desc"
            ],
            "default": "asc"
          },
          {
            "name": "limit",
            "description": "Max limit is 3000",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "tags": [
          "PublicReporting"
        ]
      }
    },
    "/svc/public-reporting/lesson-attempts": {
      "get": {
        "operationId": "PublicReporting_LessonAttempts",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/public_reportingLessonAttemptsResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "query",
            "description": "Queries the users email and properties, lesson name",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "archivedUsers",
            "description": "Filter to either include archived users, exclusively show archived users, or exclude archived users\nIncluding archived users is the default case\nValid values are: all, archived_only, not_archived\n\n - not_archived: This is the default case if not provided",
            "in": "query",
            "required": false,
            "type": "string",
            "enum": [
              "all",
              "archived_only",
              "not_archived"
            ],
            "default": "all"
          },
          {
            "name": "status",
            "description": "Valid status values are: in_progress, failed, passed, not_started",
            "in": "query",
            "required": false,
            "type": "string",
            "enum": [
              "not_started",
              "in_progress",
              "failed",
              "passed",
              "abandoned",
              "locked",
              "overdue",
              "completed"
            ],
            "default": "not_started"
          },
          {
            "name": "sortBy",
            "description": "The default sort order is by user email in ascending order\nValid values are: lesson_name, lesson_difficulty, lesson_length, lesson_attempt_status, questions, correct_answers, before_rating, after_rating, watched_video, read_transcript, experiment_status, started_at, completed_at, created_at, updated_at\n\n - lesson_name: The lesson name",
            "in": "query",
            "required": false,
            "type": "string",
            "enum": [
              "email",
              "lesson_name",
              "lesson_difficulty",
              "lesson_length",
              "lesson_attempt_status",
              "questions",
              "correct_answers",
              "before_rating",
              "after_rating",
              "watched_video",
              "read_transcript",
              "experiment_status",
              "started_at",
              "completed_at",
              "created_at",
              "updated_at"
            ],
            "default": "email"
          },
          {
            "name": "orderType",
            "description": "Valid values are: asc, desc",
            "in": "query",
            "required": false,
            "type": "string",
            "enum": [
              "asc",
              "desc"
            ],
            "default": "asc"
          },
          {
            "name": "limit",
            "description": "Max limit is 3000",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "tags": [
          "PublicReporting"
        ]
      }
    },
    "/svc/public-reporting/activities": {
      "get": {
        "operationId": "PublicReporting_Activities",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/public_reportingActivitiesResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "query",
            "description": "Queries the users email and properties, level name",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "archivedUsers",
            "description": "Filter to either include archived users, exclusively show archived users, or exclude archived users. Valid values: all, archived_only, not_archived. Default: all.",
            "in": "query",
            "required": false,
            "type": "string",
            "enum": ["all", "archived_only", "not_archived"],
            "default": "all"
          },
          {
            "name": "status",
            "description": "Valid status values: in_progress, submitted, passed, failed",
            "in": "query",
            "required": false,
            "type": "string",
            "enum": ["in_progress", "submitted", "passed", "failed"]
          },
          {
            "name": "sortBy",
            "description": "Sort order. Valid values: user_email, text, description, points, activity_status, level_name, updated_at, created_at. Default: user_email.",
            "in": "query",
            "required": false,
            "type": "string",
            "enum": ["user_email", "text", "description", "points", "activity_status", "level_name", "updated_at", "created_at"],
            "default": "user_email"
          },
          {
            "name": "orderType",
            "description": "Valid values: asc, desc. Default: asc.",
            "in": "query",
            "required": false,
            "type": "string",
            "enum": ["asc", "desc"],
            "default": "asc"
          },
          {
            "name": "limit",
            "description": "Max limit is 3000",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "tags": ["PublicReporting"]
      }
    },
    "/svc/public-reporting/user-profiles": {
      "get": {
        "operationId": "PublicReporting_UserProfiles",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/public_reportingUsersResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "email",
            "description": "Filter by email",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "givenName",
            "description": "Filter by given name (first name)",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "familyName",
            "description": "Filter by family name (last name or surname)",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "attributes.managersEmail",
            "description": "Filter by manager's email (dot notation for attributes)",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "includeArchived",
            "description": "Include archived users. False by default.",
            "in": "query",
            "required": false,
            "type": "boolean",
            "default": false
          },
          {
            "name": "limit",
            "description": "Maximum number of results to return. Max is 10,000.",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "offset",
            "description": "Number of results to skip for pagination",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "tags": ["PublicReporting"]
      }
    },
    "/svc/public-reporting/progress": {
      "get": {
        "operationId": "PublicReporting_Progress",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/public_reportingProgressResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "query",
            "description": "Queries the users email and properties, path name, level name",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "archivedUsers",
            "description": "Filter to either include archived users, exclusively show archived users, or exclude archived users\nIncluding archived users is the default case\nValid values are: all, archived_only, not_archived\n\n - not_archived: This is the default case if not provided",
            "in": "query",
            "required": false,
            "type": "string",
            "enum": [
              "all",
              "archived_only",
              "not_archived"
            ],
            "default": "all"
          },
          {
            "name": "status",
            "description": "Valid status values are: not_started, in_progress, passed, abandoned",
            "in": "query",
            "required": false,
            "type": "string",
            "enum": [
              "not_started",
              "in_progress",
              "failed",
              "passed",
              "abandoned",
              "locked",
              "overdue",
              "completed"
            ],
            "default": "not_started"
          },
          {
            "name": "startedAfter",
            "description": "Filter to return progress reports that started at or after this time\nTimestamp format: \"yyyy-MM-ddTHH:mm:ssZ\"",
            "in": "query",
            "required": false,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "startedBefore",
            "description": "Filter to return progress reports that started at or before this time\nTimestamp format: \"yyyy-MM-ddTHH:mm:ssZ\"",
            "in": "query",
            "required": false,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "completedAfter",
            "description": "Filter to return progress reports that completed at or after this time\nTimestamp format: \"yyyy-MM-ddTHH:mm:ssZ\"",
            "in": "query",
            "required": false,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "completedBefore",
            "description": "Filter to return progress reports that completed at or before this time\nTimestamp format: \"yyyy-MM-ddTHH:mm:ssZ\"",
            "in": "query",
            "required": false,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "sortBy",
            "description": "The default sort order is by user email in ascending order\nValid values are: email, path_name, level_name, progress_status, required_lessons, required_lessons_passed, lessons_passed, all_lessons, started_at, completed_at, last_engagement, created_at, updated_at",
            "in": "query",
            "required": false,
            "type": "string",
            "enum": [
              "email",
              "path_name",
              "level_name",
              "progress_status",
              "required_lessons",
              "required_lessons_passed",
              "lessons_passed",
              "all_lessons",
              "started_at",
              "completed_at",
              "last_engagement",
              "created_at",
              "updated_at"
            ],
            "default": "email"
          },
          {
            "name": "orderType",
            "description": "Valid values are: asc, desc",
            "in": "query",
            "required": false,
            "type": "string",
            "enum": [
              "asc",
              "desc"
            ],
            "default": "asc"
          },
          {
            "name": "limit",
            "description": "Max limit is 3000",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "tags": [
          "PublicReporting"
        ]
      }
    },
    "/svc/public-reporting/assessments": {
      "get": {
        "operationId": "PublicReporting_Assessments",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/public_reportingAssessmentsResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "query",
            "description": "Searches assessment name, given name (user), family name (user) or email",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "assignmentIds",
            "description": "Comma separated list of assignment IDs to filter by",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "completed_range.start",
            "description": "Filter assessments completed at or after this time\nTimestamp format: \"yyyy-MM-ddTHH:mm:ssZ\"",
            "in": "query",
            "required": false,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "completed_range.end",
            "description": "Filter assessments completed at or before this time\nTimestamp format: \"yyyy-MM-ddTHH:mm:ssZ\"",
            "in": "query",
            "required": false,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "due_range.start",
            "description": "Filter assessments due at or after this time\nTimestamp format: \"yyyy-MM-ddTHH:mm:ssZ\"",
            "in": "query",
            "required": false,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "due_range.end",
            "description": "Filter assessments due at or before this time\nTimestamp format: \"yyyy-MM-ddTHH:mm:ssZ\"",
            "in": "query",
            "required": false,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "programmingLanguage",
            "description": "Filter by programming language used in assessment",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "sortField",
            "description": "Field to sort results by\nValid values are: assessment_name, user_email, completion_date, due_date",
            "in": "query",
            "required": false,
            "type": "string",
            "enum": [
              "assessment_name",
              "user_email", 
              "completion_date",
              "due_date"
            ],
            "default": "user_email"
          },
          {
            "name": "orderType",
            "description": "Sort order\nValid values are: asc, desc",
            "in": "query",
            "required": false,
            "type": "string",
            "enum": [
              "asc",
              "desc"
            ],
            "default": "asc"
          },
          {
            "name": "limit",
            "description": "Maximum number of results to return",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "offset",
            "description": "Number of results to skip for pagination",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "tags": [
          "PublicReporting"
        ]
      }
    },
    "/svc/public-reporting/users": {
      "get": {
        "operationId": "PublicReporting_Users",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/public_reportingUsersResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/googlerpcStatus"
            }
          }
        },
        "parameters": [
          {
            "name": "query",
            "description": "Queries the users email and properties",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "archivedUsers",
            "description": "Filter to either include archived users, exclusively show archived users, or exclude archived users\nIncluding archived users is the default case\nValid values are: all, archived_only, not_archived\n\n - not_archived: This is the default case if not provided",
            "in": "query",
            "required": false,
            "type": "string",
            "enum": [
              "all",
              "archived_only",
              "not_archived"
            ],
            "default": "all"
          },
          {
            "name": "sortBy",
            "description": "The default sort order is by user email in ascending order\nValid values are: email, first_name, last_name, total_points, title, company, job_role, business_unit, country, phone_number, team, security_champion, department_number, managers_name, managers_email, archived",
            "in": "query",
            "required": false,
            "type": "string",
            "enum": [
              "email",
              "first_name",
              "last_name",
              "total_points",
              "title",
              "company",
              "job_role",
              "business_unit",
              "country",
              "phone_number",
              "team",
              "security_champion",
              "department_number",
              "managers_name",
              "managers_email",
              "archived"
            ],
            "default": "email"
          },
          {
            "name": "orderType",
            "description": "Valid values are: asc, desc",
            "in": "query",
            "required": false,
            "type": "string",
            "enum": [
              "asc",
              "desc"
            ],
            "default": "asc"
          },
          {
            "name": "limit",
            "description": "Max limit is 3000",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "tags": [
          "PublicReporting"
        ]
      }
    }
  },
  "definitions": {
    "AssignmentsRequestAssignmentsSortBy": {
      "type": "string",
      "enum": [
        "user_email",
        "assignment_name",
        "due_date",
        "passed_lessons",
        "total_lessons",
        "assignment_status"
      ],
      "default": "user_email",
      "title": "Enum for sort_by"
    },
    "AssignmentsResponseAssignment": {
      "type": "object",
      "properties": {
        "user": {
          "$ref": "#/definitions/public_reportingUser",
          "title": "The user who has the assignment"
        },
        "assignmentName": {
          "type": "string",
          "title": "The name of the assignment"
        },
        "pathName": {
          "type": "string",
          "title": "The path the assignment is on"
        },
        "dueDate": {
          "type": "string",
          "format": "date-time",
          "title": "The time the assignment is due\nThis is excluded from the response if the assignment has no due date"
        },
        "completedAt": {
          "type": "string",
          "format": "date-time",
          "title": "The time the assignment was completed\nThis is excluded from the response if the assignment has not been completed"
        },
        "passedLessons": {
          "type": "integer",
          "format": "int32",
          "title": "The number of lessons the user has passed"
        },
        "totalLessons": {
          "type": "integer",
          "format": "int32",
          "title": "The total number of lessons in the assignment"
        },
        "status": {
          "type": "string",
          "title": "The status of the assignment\nValid values are: completed, in_progress, overdue"
        }
      }
    },
    "EnrollmentsRequestEnrollmentsSortBy": {
      "type": "string",
      "enum": [
        "user_email",
        "level_name",
        "level_status",
        "path_name",
        "path_status",
        "total_lessons",
        "passed_lessons",
        "points_earned",
        "completed_at",
        "updated_at",
        "created_at"
      ],
      "default": "user_email",
      "title": "Enum for sort_by"
    },
    "EnrollmentsResponseEnrollment": {
      "type": "object",
      "properties": {
        "levelName": {
          "type": "string",
          "title": "The name of the level"
        },
        "levelType": {
          "$ref": "#/definitions/EnrollmentsResponseLevelType",
          "title": "The type of the level\nValid values are: level, quest"
        },
        "status": {
          "type": "string",
          "title": "The status of the level enrollment\nValid values are: in_progress, passed, locked"
        },
        "totalLessons": {
          "type": "integer",
          "format": "int32",
          "title": "The total lessons in the level"
        },
        "passedLessons": {
          "type": "integer",
          "format": "int32",
          "title": "The number of lessons the user has passed"
        },
        "pointsEarned": {
          "type": "integer",
          "format": "int32",
          "title": "The number of points the user has earned in the level"
        },
        "completedAt": {
          "type": "string",
          "format": "date-time",
          "title": "The time the level enrollment was completed\nThis is excluded from the response if the user has not completed the level"
        },
        "updatedAt": {
          "type": "string",
          "format": "date-time",
          "title": "The time the level enrollment was last updated"
        },
        "createdAt": {
          "type": "string",
          "format": "date-time",
          "title": "The time the level enrollment was created"
        }
      }
    },
    "EnrollmentsResponseEnrollmentReport": {
      "type": "object",
      "properties": {
        "user": {
          "$ref": "#/definitions/public_reportingUser",
          "title": "The user who has the enrollment"
        },
        "levelEnrollment": {
          "$ref": "#/definitions/EnrollmentsResponseEnrollment",
          "title": "The enrollment for the level"
        },
        "pathEnrollment": {
          "$ref": "#/definitions/EnrollmentsResponsePathEnrollment",
          "title": "The enrollment for the path"
        }
      }
    },
    "EnrollmentsResponseLevelType": {
      "type": "string",
      "enum": [
        "level",
        "quest"
      ],
      "default": "level"
    },
    "EnrollmentsResponsePathEnrollment": {
      "type": "object",
      "properties": {
        "pathName": {
          "type": "string",
          "title": "The name of the path"
        },
        "status": {
          "type": "string",
          "title": "The status of the path enrollment\nValid values are: not_started, in_progress, passed, abandoned"
        },
        "pathArchived": {
          "type": "boolean",
          "title": "Whether the path is archived"
        },
        "pathArchivedAt": {
          "type": "string",
          "format": "date-time",
          "title": "The time the path was archived"
        },
        "completedAt": {
          "type": "string",
          "format": "date-time",
          "title": "The time the path enrollment was completed\nThis is excluded from the response if the user has not completed the path"
        },
        "updatedAt": {
          "type": "string",
          "format": "date-time",
          "title": "The time the path enrollment was last updated"
        },
        "createdAt": {
          "type": "string",
          "format": "date-time",
          "title": "The time the path enrollment was created"
        }
      }
    },
    "LessonAttemptsRequestLessonAttemptsSortBy": {
      "type": "string",
      "enum": [
        "email",
        "lesson_name",
        "lesson_difficulty",
        "lesson_length",
        "lesson_attempt_status",
        "questions",
        "correct_answers",
        "before_rating",
        "after_rating",
        "watched_video",
        "read_transcript",
        "experiment_status",
        "started_at",
        "completed_at",
        "created_at",
        "updated_at"
      ],
      "default": "email",
      "description": "- lesson_name: The lesson name",
      "title": "Enum for sort_by"
    },
    "LessonAttemptsResponseLessonAttempt": {
      "type": "object",
      "properties": {
        "user": {
          "$ref": "#/definitions/public_reportingUser",
          "title": "The user who attempted the lesson"
        },
        "lessonName": {
          "type": "string",
          "title": "The name of the lesson"
        },
        "difficulty": {
          "type": "string",
          "title": "The difficulty of the lesson"
        },
        "length": {
          "type": "string",
          "title": "The length of the lesson in minutes"
        },
        "status": {
          "type": "string",
          "title": "The status of the lesson attempt\nValid values are: in_progress, failed, passed"
        },
        "questions": {
          "type": "integer",
          "format": "int32",
          "title": "The number of questions in the lesson"
        },
        "correctAnswers": {
          "type": "integer",
          "format": "int32",
          "title": "The number of correct answers the user got"
        },
        "beforeRating": {
          "type": "integer",
          "format": "int32",
          "title": "The rating the user gave before the lesson\nThis is excluded from the response if the user did not rate the lesson"
        },
        "afterRating": {
          "type": "integer",
          "format": "int32",
          "title": "The rating the user gave after the lesson\nThis is excluded from the response if the user did not rate the lesson"
        },
        "watchedVideo": {
          "type": "string",
          "title": "Whether the user watched the video"
        },
        "readTranscript": {
          "type": "string",
          "title": "Whether the user read the transcript"
        },
        "experimentStatus": {
          "type": "string",
          "title": "The status of the experiment if applicable\nValid values are: not passed, passed, failed"
        },
        "startedAt": {
          "type": "string",
          "format": "date-time",
          "title": "The time the user started the lesson"
        },
        "completedAt": {
          "type": "string",
          "format": "date-time",
          "title": "The time the user completed the lesson"
        },
        "createdAt": {
          "type": "string",
          "format": "date-time",
          "title": "The time the lesson attempt was created"
        },
        "updatedAt": {
          "type": "string",
          "format": "date-time",
          "title": "The time the lesson attempt was last updated"
        },
        "timeSpent": {
          "type": "string",
          "title": "The time the user spent on the lesson"
        }
      }
    },
    "ProgressRequestProgressSortBy": {
      "type": "string",
      "enum": [
        "email",
        "path_name",
        "level_name",
        "progress_status",
        "required_lessons",
        "required_lessons_passed",
        "lessons_passed",
        "all_lessons",
        "started_at",
        "completed_at",
        "last_engagement",
        "created_at",
        "updated_at"
      ],
      "default": "email",
      "title": "Enum for sort_by"
    },
    "ProgressResponseProgress": {
      "type": "object",
      "properties": {
        "user": {
          "$ref": "#/definitions/public_reportingUser",
          "title": "The user who has the progress report"
        },
        "pathName": {
          "type": "string",
          "title": "The path the user is on"
        },
        "levelName": {
          "type": "string",
          "title": "The level the user is on"
        },
        "status": {
          "type": "string",
          "title": "The status of the progress report\nValid values are: not_started, in_progress, passed, abandoned"
        },
        "requiredLessons": {
          "type": "integer",
          "format": "int32",
          "title": "The number of lessons required to pass the level"
        },
        "requiredLessonsPassed": {
          "type": "integer",
          "format": "int32",
          "title": "The number of required lessons the user has passed"
        },
        "lessonsPassed": {
          "type": "integer",
          "format": "int32",
          "title": "The number of lessons the user has passed"
        },
        "allLessons": {
          "type": "integer",
          "format": "int32",
          "title": "The total number of lessons in the level"
        },
        "startedAt": {
          "type": "string",
          "format": "date-time",
          "title": "The time the user started the path"
        },
        "completedAt": {
          "type": "string",
          "format": "date-time",
          "title": "The time the user completed the path\nThis is excluded from the response if the user has not completed the path"
        },
        "lastEngagement": {
          "type": "string",
          "format": "date-time",
          "title": "The time the user last engaged with the path\nThis is excluded from the response if the user has not engaged with the path"
        },
        "createdAt": {
          "type": "string",
          "format": "date-time",
          "title": "The time the progress report was created"
        },
        "updatedAt": {
          "type": "string",
          "format": "date-time",
          "title": "The time the progress report was last updated"
        },
        "timeSpent": {
          "type": "string",
          "title": "The total time the user has spent on the path\nThis is excluded from the response if the user has not started the path"
        },
        "pathArchived": {
          "type": "boolean",
          "title": "Whether the path associated with the progress report is archived\nThis is excluded from the response if the path is not archived"
        },
        "pathArchivedAt": {
          "type": "string",
          "format": "date-time",
          "title": "The time the path was archived"
        }
      }
    },
    "UsersRequestUserSortBy": {
      "type": "string",
      "enum": [
        "email",
        "first_name",
        "last_name",
        "total_points",
        "title",
        "company",
        "job_role",
        "business_unit",
        "country",
        "phone_number",
        "team",
        "security_champion",
        "department_number",
        "managers_name",
        "managers_email",
        "archived"
      ],
      "default": "email",
      "title": "Enum for UserSortBy"
    },
    "googlerpcStatus": {
      "type": "object",
      "properties": {
        "code": {
          "type": "integer",
          "format": "int32"
        },
        "message": {
          "type": "string"
        },
        "details": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/protobufAny"
          }
        }
      }
    },
    "protobufAny": {
      "type": "object",
      "properties": {
        "@type": {
          "type": "string"
        }
      },
      "additionalProperties": {}
    },
    "protopublic_reportingStatus": {
      "type": "string",
      "enum": [
        "not_started",
        "in_progress",
        "failed",
        "passed",
        "abandoned",
        "locked",
        "overdue",
        "completed"
      ],
      "default": "not_started",
      "title": "Enum for status"
    },
    "public_reportingArchived": {
      "type": "string",
      "enum": [
        "all",
        "archived_only",
        "not_archived"
      ],
      "default": "all",
      "description": "- not_archived: This is the default case if not provided",
      "title": "Enum for archived"
    },
    "public_reportingAssignmentsResponse": {
      "type": "object",
      "properties": {
        "assignments": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/AssignmentsResponseAssignment"
          },
          "title": "The assignments that match the query"
        }
      }
    },
    "public_reportingEnrollmentsResponse": {
      "type": "object",
      "properties": {
        "enrollments": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/EnrollmentsResponseEnrollmentReport"
          },
          "title": "The enrollments that match the query"
        }
      }
    },
    "public_reportingLessonAttemptsResponse": {
      "type": "object",
      "properties": {
        "lessonAttempts": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/LessonAttemptsResponseLessonAttempt"
          }
        }
      }
    },
    "public_reportingOrderType": {
      "type": "string",
      "enum": [
        "asc",
        "desc"
      ],
      "default": "asc",
      "title": "Enum for order_type"
    },
    "public_reportingProgressResponse": {
      "type": "object",
      "properties": {
        "progress": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/ProgressResponseProgress"
          },
          "title": "The progress reports that match the query"
        }
      }
    },
    "public_reportingUser": {
      "type": "object",
      "properties": {
        "email": {
          "type": "string",
          "title": "The email of the user"
        },
        "firstName": {
          "type": "string",
          "title": "The first name of the user"
        },
        "lastName": {
          "type": "string",
          "title": "The last name of the user"
        },
        "totalPoints": {
          "type": "integer",
          "format": "int32",
          "title": "The total points the user has in the platform"
        },
        "title": {
          "type": "string"
        },
        "company": {
          "type": "string"
        },
        "jobRole": {
          "type": "string"
        },
        "businessUnit": {
          "type": "string"
        },
        "country": {
          "type": "string"
        },
        "phoneNumber": {
          "type": "string"
        },
        "team": {
          "type": "string"
        },
        "securityChampion": {
          "type": "string"
        },
        "departmentNumber": {
          "type": "string"
        },
        "managersName": {
          "type": "string"
        },
        "managersEmail": {
          "type": "string"
        },
        "archived": {
          "type": "boolean",
          "title": "Whether the user is archived"
        },
        "archivedAt": {
          "type": "string",
          "format": "date-time",
          "title": "The time the user was archived"
        },
        "timeSpent": {
          "type": "string",
          "title": "The total time the user has spent in all lessons in the platform"
        }
      }
    },
    "public_reportingAssessmentsResponse": {
      "type": "object",
      "properties": {
        "records": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/AssessmentRecord"
          },
          "title": "The assessment records that match the query"
        },
        "pageResults": {
          "type": "integer",
          "format": "int32",
          "title": "Number of results on this page"
        },
        "totalResults": {
          "type": "integer",
          "format": "int32",
          "title": "Total number of results across all pages"
        },
        "pageNumber": {
          "type": "integer",
          "format": "int32",
          "title": "Current page number"
        },
        "totalPages": {
          "type": "integer",
          "format": "int32",
          "title": "Total number of pages"
        }
      }
    },
    "AssessmentRecord": {
      "type": "object",
      "properties": {
        "assessmentName": {
          "type": "string",
          "title": "The name of the assessment"
        },
        "userGivenName": {
          "type": "string",
          "title": "The given name of the user who took the assessment"
        },
        "userFamilyName": {
          "type": "string",
          "title": "The family name of the user who took the assessment"
        },
        "userEmail": {
          "type": "string",
          "title": "The email of the user who took the assessment"
        },
        "programmingLanguage": {
          "type": "string",
          "title": "The programming language used in the assessment"
        },
        "status": {
          "type": "string",
          "title": "The status of the assessment\nValid values are: completed, in_progress, not_started"
        },
        "scorePercentage": {
          "type": "number",
          "format": "float",
          "title": "The score percentage achieved (0.0-1.0)"
        },
        "completionDate": {
          "type": "string",
          "format": "date-time",
          "title": "The date and time when the assessment was completed"
        },
        "dueDate": {
          "type": "string",
          "format": "date-time",
          "title": "The due date of the assessment"
        },
        "proficiencyScore": {
          "type": "string",
          "title": "The proficiency level achieved (e.g., Foundational, Intermediate, Advanced)"
        },
        "timeSpentSeconds": {
          "type": "integer",
          "format": "int32",
          "title": "Total time spent on the assessment in seconds"
        }
      }
    },
    "public_reportingActivitiesResponse": {
      "type": "object",
      "properties": {
        "activities": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/Activity"
          },
          "title": "The activities that match the query"
        }
      }
    },
    "Activity": {
      "type": "object",
      "properties": {
        "user": {
          "$ref": "#/definitions/public_reportingUser",
          "title": "The user who performed the activity"
        },
        "text": {
          "type": "string",
          "title": "The activity text or description"
        },
        "points": {
          "type": "integer",
          "format": "int32",
          "title": "Points earned for the activity"
        },
        "status": {
          "type": "string",
          "title": "The status of the activity (e.g., in_progress, submitted, passed, failed)"
        },
        "levelName": {
          "type": "string",
          "title": "The level name associated with the activity"
        },
        "createdAt": {
          "type": "string",
          "format": "date-time",
          "title": "The time the activity was created"
        },
        "updatedAt": {
          "type": "string",
          "format": "date-time",
          "title": "The time the activity was last updated"
        }
      }
    },
    "public_reportingUsersResponse": {
      "type": "object",
      "properties": {
        "users": {
          "type": "array",
          "items": {
            "type": "object",
            "$ref": "#/definitions/public_reportingUser"
          },
          "title": "The users that match the query"
        }
      }
    }
  },
  "securityDefinitions": {
    "bearer": {
      "type": "apiKey",
      "description": "Supply API key in Authorization header; e.g. 'Authorization: Bearer ...'",
      "name": "Authorization",
      "in": "header"
    }
  },
  "security": [
    {
      "bearer": []
    }
  ]
}
