Download OpenAPI specification:

Make sure to use the API URL instead of the web domain. Instead of https://torshtalent.com/api/v2/, use https://api.torshtalent.com/api/v2/
There are two different APIs: Users API and Insights API:
We use Bearer token authentication. You will need to include your Bearer token in the Authorization header:
Authorization: Bearer <your_token> in your request headersNetwork vs System Requests: The type of request (network vs system/user) is automatically determined based on your Bearer token type. Network tokens automatically enable network-level access without needing additional parameters.
The Authorization header should be included in all API requests
This endpoint retrieves a paginated list of users based on optional filters such as role and status.
| pageNumber required | integer >= 1 The page number to retrieve. |
| limit required | integer >= 1 The number of users to return per page. |
{- "users": [
- {
- "email": "user@example.com",
- "role": "Admin",
- "name": "Jane Doe",
- "status": "Active",
- "lastSeen": "2023-10-01T12:00:00Z"
}
], - "pageNumber": 1,
- "usersListedCount": 10,
- "pageCount": 5
}This endpoint creates a new user in the system. It requires an email, role, and optionally a name and systemId.
string | |
| role | string Enum: "Teacher" "Coach" "Admin" |
| name | string |
| systemId | string |
| suppress_invite | boolean |
| groups | Array of strings |
{- "email": "user@example.com",
- "role": "Admin",
- "name": "Jane Doe",
- "systemId": "system123",
- "suppress_invite": false,
- "groups": [
- "Group A",
- "Group B"
]
}{- "userId": "newUserId123"
}This endpoint creates multiple users in the system. It requires an array of user invites with email (required) and name (optional), plus a role that applies to all users.
required | Array of objects |
| role required | string Enum: "Teacher" "Coach" "Admin" |
| suppress_invite | boolean |
{- "invites": [
- {
- "email": "user1@example.com",
- "name": "John Doe"
}, - {
- "email": "user2@example.com",
- "name": "Jane Smith"
}
], - "role": "Teacher",
- "suppress_invite": false
}{- "successes": [
- {
- "email": "user1@example.com",
- "userId": "userId123"
}, - {
- "email": "user2@example.com",
- "userId": "userId456"
}
], - "failures": [
- {
- "email": "existing@example.com",
- "error": "User already exists"
}
]
}This endpoint retrieves the details of a user based on their email.
| email required | string The email of the user to retrieve. |
{- "email": "user@example.com",
- "role": "Admin",
- "name": "Jane Doe",
- "status": "Active",
- "lastSeen": "2023-10-01T12:00:00Z",
- "groups": [
- "string"
]
}Updates the details of a user based on their email.
| email required | string The email of the user to update. |
| name | string |
| role | string Enum: "Teacher" "Coach" "Admin" |
| status | string |
| groups | Array of strings |
{- "name": "Jane Doe",
- "role": "Admin",
- "status": "Active",
- "groups": [
- "Group A",
- "Group B"
]
}{- "message": "User details updated successfully."
}Updates the groups associated with multiple users in the system.
| emails | Array of strings |
| groups | Array of strings |
{- "emails": [
- "user@example.com",
- "user2@example.com"
], - "groups": [
- "Group A",
- "Group B"
]
}{- "message": "User groups updated successfully for multiple users."
}This endpoint retrieves the groups associated with a user based on their email.
| email required | string The email of the user whose groups are to be retrieved. |
| pageNumber required | integer >= 1 The page number to retrieve. |
| limit required | integer >= 1 The number of groups to return per page. |
{- "groups": [
- "string"
], - "pageNumber": 1,
- "pageCount": 5
}This endpoint retrieves the notifications associated with a user based on their email.
| email required | string The email of the user whose notifications are to be retrieved. |
| pageNumber required | integer >= 1 The page number to retrieve. |
| limit required | integer >= 1 The number of notifications to return per page. |
{- "notifications": [
- {
- "id": "notificationId123",
- "message": "You have a new message.",
- "timestamp": "2023-10-01T12:00:00Z"
}
], - "pageNumber": 1,
- "pageCount": 5
}This endpoint retrieves a paginated list of groups based on optional filters such as name.
| pageNumber required | integer >= 1 The page number to retrieve. |
| limit required | integer >= 1 The number of groups to return per page. |
| name | string The name filter for group search. |
{- "groups": [
- "string"
], - "pageNumber": 1,
- "pageCount": 5
}This endpoint creates a new group in the system. It requires a name and optionally a systemId.
| name | string |
{- "name": "New Group"
}{- "_id": "newGroupId123",
- "name": "New Group"
}This endpoint updates the details of a group based on its name.
| name required | string The name of the group to update. |
| name | string |
{- "name": "Updated Group Name"
}{- "_id": "existingGroupId123",
- "name": "Updated Group Name"
}This endpoint deletes a group from the system based on the provided name.
| name required | string The name of the group to delete. |
| systemId | string |
{- "systemId": "system123"
}This endpoint retrieves a paginated list of systems based on optional filters.
| pageNumber required | integer >= 1 The page number to retrieve. |
| limit required | integer >= 1 The number of systems to return per page. |
| name | string The name filter for system search. |
{- "systems": [
- {
- "_id": "system123",
- "name": "System Name"
}
], - "pageNumber": 1,
- "totalCount": 100
}This endpoint retrieves a paginated list of roles for a system. You can filter by role name.
| pageNumber required | integer >= 1 The page number to retrieve. |
| limit required | integer >= 1 The number of roles to return per page. |
| name | string Filter roles by name (case-insensitive, partial match). |
| systemId | string The system ID to retrieve roles for. If not provided, uses the authenticated system. |
{- "roles": [
- {
- "_id": "roleId123",
- "name": "Administrator",
- "type": "System Admin",
- "usersCount": 5
}
], - "pageNumber": 1,
- "totalCount": 20
}This endpoint retrieves the profile attributes for a specific system.
| system required | string The system identifier to retrieve profile attributes for. |
[- {
- "label": "Attribute Label",
- "createdByUserName": "User Name",
- "viewableBy": [
- "string"
], - "question": "Is this a question?",
- "required": true,
- "for": [
- "string"
], - "options": [
- {
- "label": "Option Label"
}
]
}
]This endpoint retrieves the available filter options for reports.
| systemId | string The ID of the system to filter options. |
{- "filterOptions": {
- "rubricId": {
- "label": "Rubrics",
- "value": "rubricId",
- "options": [
- {
- "label": "Rubric Name",
- "value": "rubricIdValue"
}
]
}
}
}This endpoint triggers the generation of an insights report as a CSV export based on the provided parameters.
All reports are processed asynchronously and generate CSV files. This endpoint immediately returns an insightsReportRequestId that you can use to check the report status and retrieve the CSV download URL via the /reports/{reportId} endpoint.
Note: This endpoint does not support pagination as it generates complete CSV exports.
For reportBuilder reports, only saved reports are supported:
reportId to reference an existing saved reportBuilder reportfilterOptions - filter options are not accepted for reportBuilder reportsreportId refers to a SavedReport from the user interfaceFor non-reportBuilder reports (systemPerformance, videoUsage, etc.), only filterOptions is supported. These reports require specific filter parameters as documented in the filter options endpoint.
If you need real-time, paginated access to Report Builder data (not CSV export), use the /reports/reportBuilder/data endpoint instead.
| report required | string Enum: "systemPerformance" "domainsAndDimensions" "selfAssessments" "goals" "videoInteraction" "videoUsage" "fileUsage" "rubricUsage" "goalsActivity" "goalsCreation" "exemplarUsage" "forumUsage" "forumParticipation" "workflowParticipation" "observations" "coachingFrequency" "frequencySnapshot" "accountUsage" "activityStream" "learningPathsStatus" "reportBuilder" |
object Filter options for the report. Required for all report types EXCEPT reportBuilder reports. For reportBuilder reports: filterOptions are NOT supported - you must use Note: Pagination parameters are not supported since this endpoint generates complete CSV exports. | |
| reportId | string ID of an existing SavedReport (from the Report Builder UI) to run with its saved configuration. Required for reportBuilder reports. For reportBuilder reports, this is the ONLY way to specify what data to export. The SavedReport's configuration is used exactly as saved:
The report will be processed using the existing Access Control: Users can only reference SavedReports they have access to based on their system membership or network permissions. |
string <email> Email of the user to run the report as. Required for all report types EXCEPT reportBuilder reports. For reportBuilder reports, the report runs as the user who created the saved report. |
Run an existing SavedReport configuration - the only way to use reportBuilder reports. No email needed.
{- "report": "reportBuilder",
- "reportId": "savedReport123abc"
}Creating a new reportBuilder report with custom filterOptions
{- "insightsReportRequestId": "export_abc123def456"
}This endpoint retrieves the status and results of a report based on the provided report ID.
Use this endpoint to:
The reportId parameter should be the insightsReportRequestId returned from the POST /reports endpoint.
Report Processing States:
pending: Report is being processed (returns 202)complete: Report is ready (returns 200) failed: Report processing failed (returns 500)Report Builder CSV Downloads:
For reportBuilder reports, when complete, this endpoint returns a csvDownloadUrl instead of raw data. The CSV file contains the complete dataset and can be downloaded directly.
Other Report Types: For traditional insight reports (systemPerformance, videoUsage, etc.), this endpoint returns the processed data directly in JSON format.
This works for all report types, including:
filterOptionsreportId| reportId required | string Example: export_abc123def456 The report export ID returned by |
{- "reportId": "export_abc123def456",
- "filterOptions": {
- "rubricId": "rubric123",
- "startTime": 1640995200000,
- "endTime": 1641081600000
}, - "status": "complete",
- "reportData": [
- {
- "name": "John Doe",
- "score": 85
}, - {
- "name": "Jane Smith",
- "score": 92
}
]
}This endpoint provides real-time, paginated access to Report Builder data for interactive viewing and analysis using either saved reports or direct filter options.
Use this endpoint when you need:
Use the /reports endpoint instead when you need:
Use reportId to query data using an existing saved report's configuration:
Use filterOptions for simple direct database queries:
Note: You must provide either reportId OR filterOptions, but not both.
Same authentication rules as other endpoints:
| reportId required | string ID of an existing SavedReport (from the Report Builder UI) to query data from. Mutually exclusive with filterOptions. Use this for querying data with saved report configuration. The saved report's filterModel will be used to determine what data to return. Access Control: Users can only access saved reports they own or that belong to their system/network. |
object Direct filter options for querying Report Builder data. Mutually exclusive with reportId. Use this for simple direct filtering without a saved report. Supports basic filters like timestamp ranges, system restrictions, and action types. | |
| pageSize | integer [ 10 .. 100 ] Default: 50 Number of items per page (10-100) |
| pageNumber | integer >= 1 Default: 1 Page number to retrieve (1-based) |
Get Report Builder data using a saved report with pagination
{- "reportId": "savedReport123abc",
- "pageSize": 25,
- "pageNumber": 1
}Response when using reportId to query data
{- "reportData": [
- {
- "_id": "64a8f9b2c1d2e3f4a5b6c7d8",
- "userId": "user123",
- "systemId": "system456",
- "timestamp": 1641000000000,
- "typeAlias": "Video Upload",
- "actionData": {
- "videoTitle": "Math Lesson 1",
- "duration": 1800
}
}, - {
- "_id": "64a8f9b2c1d2e3f4a5b6c7d9",
- "userId": "user124",
- "systemId": "system456",
- "timestamp": 1641003600000,
- "typeAlias": "Rubric Score",
- "actionData": {
- "rubricName": "Teaching Standards",
- "score": 4.2
}
}
], - "pagination": {
- "pageNumber": 1,
- "pageSize": 50,
- "totalCount": 1250,
- "totalPages": 25
}, - "reportId": "savedReport123abc",
- "savedReportTitle": "Monthly Activity Report"
}