Reporting exports
The reporting endpoints pull reports that aren't practical through the app UI: auditing which videos stream from which host, reconciling instructor activity against your SIS, tying interactive videos back to LMS course IDs, or gathering everything a single learner did for an academic integrity review.
There are two families of reports. Content reports cover an Instance or Super Instance; user activity reports cover a single learner.
| Report | Scope | One row per | Typical use |
|---|---|---|---|
bulbs | Instance, Super Instance | Interactive video created in the date range | Inventory of content, its owners, privacy, view counts, and duration. |
instructors | Instance, Super Instance | Instructor who logged in during the date range | Activity and adoption reporting; seat reconciliation. |
video-sources | Instance, Super Instance | Video attached to an interactive video | Auditing video hosts (Kaltura, YouTube, HLS, Panopto…), source URLs, and course IDs. |
bulb-attempts | User | Interactive video attempt, plus every interaction in it | All of a learner's activity on interactive videos, with their responses. Delivered as a zip. |
playlist-attempts | User | Playlist attempt | A learner's progress through playlists across classes. |
Permissions
Reports are admin-only, and the scope in the path decides which admin right is required:
- Instance reports (
/instance/{instanceId}/…) require the calling user to be an owner or admin of that Instance. - Super Instance reports (
/superinstance/{superInstanceId}/…) require manage permission on that Super Instance. - User reports (
/users/{userId}/…) require the calling user to be an owner or admin of the user's Instance, or to have manage permission on a Super Instance the user's Instance belongs to.
The IDs are explicit in the path rather than derived from your credentials, because one set of credentials can administer several Instances. A request for an Instance you don't administer returns 403. So does a user report for a user you don't administer, or for a user ID that doesn't exist, so that the endpoint can't be used to discover which user IDs are in use.
Delivery: emailed link or inline file
These are heavy database pulls, and a report covering a large district can take minutes. So the default is asynchronous:
runAsync=true(the default). The report is generated in the background and emailed to the calling user as a download link, valid for 24 hours. The request returns immediately with a plain-text confirmation.runAsync=false. The file comes back in the response body, astext/csvfor the CSV reports andapplication/zipforbulb-attempts. Use this when you're pulling a narrow date range and want to pipe the result straight into your own tooling. Be prepared for a slow response on large scopes — if generation runs long, the report is emailed as well.
curl 'https://www.wevideo.com/api/5/public/reports/instance/1234/video-sources?videoHost=kaltura&videoHost=youtube&runAsync=false' \
-H 'Authorization: WEVSIMPLE your-api-secret-here'
Bulb ID,Bulb Name,Owner Email,Video ID,Video Name,Video Host,Video URL,LMS Course ID(s),Created
88213,Cell Division,instructor@example.edu,55901,Mitosis lecture,kaltura,https://cdnapisec.kaltura.com/...,canvas:4471,2026-02-11 09:14:02
88240,Photosynthesis Lab,instructor@example.edu,55938,Lab walkthrough,youtube,https://www.youtube.com/watch?v=...,canvas:4471; canvas:4488,2026-02-14 15:02:47
curl 'https://www.wevideo.com/api/5/public/reports/superinstance/77/bulbs?fromDate=2026-01-01&toDate=2026-12-31' \
-H 'Authorization: WEVSIMPLE your-api-secret-here'
Your export is being generated and will be emailed to admin@example.edu when it is ready.
User activity reports
The user reports collect everything a single learner has done across every class, playlist and interactive video they have access to. The usual case is an academic integrity review or a records request, where you need the learner's responses and when they were submitted, not just a score.
Interactive video attempts
GET /public/reports/users/{userId}/bulb-attempts returns a zip rather than a single CSV, because every interactive video has its own set of interactions and a flat file would need a column group per video. The archive contains:
summary.csv: one row per attempt with the attempt ID, video, class, points, score, status, start time, time spent, furthest point reached in the video, and completion time. Archived attempts are included and markedArchivedin the status column.attempts/{attemptId} - {video name}.csv: one file per attempt, with one row per interaction in that video in the order they appear. Interactions the learner never reached are listed too, with-in the response columns. A retaken interaction produces one row per response.
curl 'https://www.wevideo.com/api/5/public/reports/users/4157144433/bulb-attempts?fromDate=2026-08-15&toDate=2026-12-20&runAsync=false' \
-H 'Authorization: WEVSIMPLE your-api-secret-here' \
-o bulb-attempts.zip
Attempt Id,Bulb Id,Bulb Name,Learner Id,Learner Name,Learner Email,Class,Points Earned,Points Available,Score,Status,Started Bulb Time,Time Spent (hh:mm:ss),Max Video Timestamp (hh:mm:ss),Completion Time
9120331,88213,Cell Division,4157144433,Jamie Rivera,jrivera@example.edu,BIO 101 - Fall 2026,8.0,10.0,80%,Completed,2026-09-03 14:02:11,00:12:40,00:14:55,2026-09-03 14:14:51
9131877,88240,Photosynthesis Lab,4157144433,Jamie Rivera,jrivera@example.edu,BIO 101 - Fall 2026,0.0,6.0,0%,Started,2026-09-10 09:31:02,00:03:12,00:04:10,
Interaction Id,Type,Display Time (hh:mm:ss),Interaction Text,Points Available,Response,Submission Timestamp,Time Spent (hh:mm:ss),Points Earned,Autograde Correct/Incorrect
771204,Multiple Choice,00:02:10,Which phase follows metaphase?,2.0,Anaphase,2026-09-03 14:04:33,00:00:41,2.0,Correct
771205,Free Response,00:06:45,Describe the role of the spindle fibres.,4.0,They pull the chromatids apart towards the poles.,2026-09-03 14:09:02,00:02:15,3.0,-
771206,Pause,00:11:30,,0.0,-,-,-,-,-
Timestamps are in the calling user's WeVideo time zone. When a time zone is set on the account, its name is appended to the time column headers, for example Started Bulb Time (America/New_York).
Playlist attempts
GET /public/reports/users/{userId}/playlist-attempts is a single CSV with one row per playlist attempt: playlist, class, status, overall score, start time, total time spent, and completion time. It shows the learner's progress through each playlist; the per-video detail for the videos inside a playlist is in the interactive video attempts export, since those are interactive video attempts too.
Playlist Id,Playlist Name,Learner Id,Learner Name,Learner Email,Class,Status,Overall Playlist Score,Started Playlist Time,Total Time Spent (hh:mm:ss),Completion Time
5278,Unit 2 - The Cell,4157144433,Jamie Rivera,jrivera@example.edu,BIO 101 - Fall 2026,In Progress,8.0,2026-09-03 13:58:40,00:15:52,
Parameters
| Parameter | Applies to | Description |
|---|---|---|
fromDate | all | Start of the date range, as YYYY-MM-DD. Required for bulbs and instructors; optional for video-sources, bulb-attempts and playlist-attempts. |
toDate | all | End of the date range, as YYYY-MM-DD. Required for bulbs and instructors; optional for video-sources, bulb-attempts and playlist-attempts. |
videoHost | video-sources | Restrict to videos on specific hosts, e.g. kaltura, youtube, hls, panopto, techconnect. Repeat the parameter for several. |
runAsync | all | true (default) emails a download link; false returns the file inline. |
fromDate and toDate filter on creation date for bulbs and video-sources, on last login for instructors, and on the time the attempt was started for bulb-attempts and playlist-attempts. Omitting them on the optional reports exports everything in the scope.
One export at a time
Only one export can run per Instance, Super Instance or user at a time. While a report is being generated, further requests for the same scope return 429 Too Many Requests:
{
"status": 429,
"error": "Too Many Requests",
"message": "An export is already running for this instance. Please wait for it to finish before starting another one."
}
The scopes are counted separately, so a Super Instance pull doesn't block an export for one of its member Instances, and a user report doesn't block either. If you're scripting several reports, run them in sequence and retry on 429 with a backoff of a minute or two rather than in parallel.
Errors
| Status | Likely cause |
|---|---|
400 | Missing fromDate/toDate on a report that requires them, a malformed date, or an unrecognised videoHost. |
401 | Missing, malformed, or wrong Authorization header. See Authentication. |
403 | Credentials are valid but the user does not administer the Instance, Super Instance or user in the path, or the user ID does not exist. |
429 | An export is already running for that scope. |
Next steps
- Core entities — how Instances and Super Instances relate.
- API reference — the full parameter list for each reporting endpoint.