Skip to main content

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.

ReportScopeOne row perTypical use
bulbsInstance, Super InstanceInteractive video created in the date rangeInventory of content, its owners, privacy, view counts, and duration.
instructorsInstance, Super InstanceInstructor who logged in during the date rangeActivity and adoption reporting; seat reconciliation.
video-sourcesInstance, Super InstanceVideo attached to an interactive videoAuditing video hosts (Kaltura, YouTube, HLS, Panopto…), source URLs, and course IDs.
bulb-attemptsUserInteractive video attempt, plus every interaction in itAll of a learner's activity on interactive videos, with their responses. Delivered as a zip.
playlist-attemptsUserPlaylist attemptA 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.

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, as text/csv for the CSV reports and application/zip for bulb-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.
Pull video sources inline
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'
Response
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
Queue a full-year export and have it emailed
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'
Response
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 marked Archived in 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.
Pull a learner's Fall semester activity inline
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
summary.csv
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,
attempts/9120331 - Cell Division.csv
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.

Response
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​

ParameterApplies toDescription
fromDateallStart of the date range, as YYYY-MM-DD. Required for bulbs and instructors; optional for video-sources, bulb-attempts and playlist-attempts.
toDateallEnd of the date range, as YYYY-MM-DD. Required for bulbs and instructors; optional for video-sources, bulb-attempts and playlist-attempts.
videoHostvideo-sourcesRestrict to videos on specific hosts, e.g. kaltura, youtube, hls, panopto, techconnect. Repeat the parameter for several.
runAsyncalltrue (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​

StatusLikely cause
400Missing fromDate/toDate on a report that requires them, a malformed date, or an unrecognised videoHost.
401Missing, malformed, or wrong Authorization header. See Authentication.
403Credentials are valid but the user does not administer the Instance, Super Instance or user in the path, or the user ID does not exist.
429An 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.