Process Session Videos at Scale
Securely download and manage session videos at scale using temporary pre-signed URLs
Introduction
This tutorial shows how to securely download and manage UserTesting session videos at scale using the Results API. Session videos are one of UserTesting’s most valuable assets, enabling deep qualitative analysis, multimodal AI workflows, and long-term research archiving.
Because videos are large and sensitive, the API uses temporary pre-signed URLs. This tutorial explains how to work with those URLs safely and efficiently in production-grade pipelines.
What you’ll build
A scalable video ingestion workflow that:
- Requests temporary download URLs for session videos
- Downloads videos immediately and securely
- Handles URL expiration and retries
- Supports parallel downloads for high-volume workloads
- Stores videos in long-term object storage
Target audience
- Media pipeline engineers
- ML / computer vision teams
- Data platform engineers
- Research infrastructure teams
This tutorial is especially relevant for organizations running:
- Multimodal AI (speech + vision)
- Large-scale video archives
- Offline or batch video processing jobs
Prerequisites
- A valid access token (
ACCESS_TOKEN). Go to Authorization for details. - A known session ID, referred to as
SESSION_IDorsessionId. Use the GET /api/v2/sessionResults endpoint to find all completed sessions within a test. - Object storage (S3, GCS, Azure Blob, etc.)
- A runtime capable of streaming large files (Python, Java, Go, etc.)
How session video access works
UserTesting videos are accessed via pre-signed URLs:
- URLs are generated on demand
- URLs expire after one hour
- URLs provide temporary, scoped access to a single video
This design ensures:
- Secure access
- No long-lived public URLs
- Minimal exposure risk
Steps
Step 1 — Request a video download URL
Endpoint
GET /api/v2/sessionResults/SESSION_ID/videoDownloadUrlRequest sample
curl --location 'https://api.use2.usertesting.com/api/v2/sessionResults/SESSION_ID/videoDownloadUrl' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer ACCESS_TOKEN'What this returns
- A temporary
videoUrl - An
expiresAttimestamp - The associated
sessionId
Step 2 — Download the video immediately
Critical rule: Always download the video as soon as the URL is issued.
Do not:
- Store the URL
- Share the URL
- Reuse the URL later
Recommended download behavior
- Stream the response directly to disk or object storage
- Avoid loading the entire file into memory
- Validate successful completion
Step 3 — Handle URL expiration and retries
Pre-signed URLs cannot be refreshed. If a download fails due to expiration:
- Request a new video download URL
- Restart the download
Retry strategy
- Retry only on network failures or expired URLs
- Limit retry attempts to avoid rate limits (maximum 10 per minute)
- Use backoff between retries
Step 4 — Store videos in long-term storage
Once downloaded, videos should be moved to secure object storage.
Recommended storage metadata
- session_id
- test_id
- ingestion_timestamp
- original_filename
- storage_path
- checksum (optional)
Example storage path
s3://ux-research-videos/
└── test_id=abc/
└── session_id=xyz/
└── session.mp4
Step 5 — Parallel downloads (safely)
Large studies may include hundreds or thousands of sessions.
Best practices for parallelism
- Limit concurrency (e.g., 3–5 parallel downloads)
- Request URLs just-in-time
- Do not prefetch URLs in bulk
- Monitor API rate limits
Example workflow (pseudo-code)
for session_id in session_ids:
url = get_video_download_url(session_id)
try:
stream_download(url, destination_path)
record_success(session_id)
except ExpiredUrlError:
retry_with_new_url(session_id)Code overview: This pseudo-code loops through session IDs to download session videos, records successful downloads, and retries with a new URL if the download fails due to an expired link.
Step 6 — Integrate with AI and media pipelines
Once videos are stored, they can be used for:
- Speech-to-text (ASR)
- Emotion detection
- Visual attention modeling
- Multimodal UX analysis
- Training internal AI models
Rate limits and performance considerations
- Video URL requests are rate-limited (maximum 10 requests per minute)
- Download bandwidth depends on the storage provider
- Use monitoring to detect failures early
Common pitfalls
| Pitfall | Recommendation |
|---|---|
| Saving pre-signed URLs | Always store videos, not URLs |
| Requesting URLs too early | Request immediately before download |
| Unlimited concurrency | Cap parallel downloads |
| Retrying expired URLs | Request a fresh URL |
What you can build next
With a reliable video pipeline, teams can:
- Build large-scale multimodal datasets
- Power AI-driven UX analysis
- Archive research for compliance
- Create highlight reels and clips automatically
Summary
You now have a robust pattern to:
- Securely access session videos
- Download them at scale
- Manage expiration, retries, and concurrency
- Prepare video data for AI and analytics pipelines
Handled correctly, session video ingestion becomes a strategic advantage, unlocking insights that text-only data cannot provide.
Updated 22 days ago
