These endpoints return presigned URLs for a recording’s associated resources. All five endpoints share the same path parameters and response shape.
Presigned URLs are temporary and expire after a limited time. Always fetch them on demand — do not
cache or persist them.
Endpoints
| Endpoint | Description |
|---|
GET /public/workspace/{workspaceId}/recordings/{recordingId}/video | Recording video |
GET /public/workspace/{workspaceId}/recordings/{recordingId}/thumbnail | Recording thumbnail image |
GET /public/workspace/{workspaceId}/recordings/{recordingId}/console-log | Browser console logs |
GET /public/workspace/{workspaceId}/recordings/{recordingId}/network-log | Network request logs |
GET /public/workspace/{workspaceId}/recordings/{recordingId}/action | Client action replay data |
Path parameters
Response
Presigned URL for the resource. null if the resource is not available.
Status message describing the resource availability
MIME type of the resource
Video sources with URL and MIME type (video endpoint only)
Duration in milliseconds (video only)
Whether this resource type was captured for this recording
Example
Video
Thumbnail
Console Log
Network Log
Action
curl https://api.userplane.com/api/v1/public/workspace/ws_abc123/recordings/rec_abc123/video \
-H "Authorization: Bearer uspl_your_api_key"
{
"message": "Recording video retrieved successfully",
"data": {
"recordingId": "rec_abc123",
"resource": {
"url": "https://s3.amazonaws.com/userplane-recordings/rec_abc123/video.webm?X-Amz-...",
"message": "Video available",
"type": "video/webm",
"sources": [
{
"url": "https://s3.amazonaws.com/userplane-recordings/rec_abc123/video.webm?X-Amz-...",
"type": "video/webm"
}
],
"size": 2456789,
"durationMs": 45200,
"captureEnabled": true
}
}
}
curl https://api.userplane.com/api/v1/public/workspace/ws_abc123/recordings/rec_abc123/thumbnail \
-H "Authorization: Bearer uspl_your_api_key"
{
"message": "Recording thumbnail retrieved successfully",
"data": {
"recordingId": "rec_abc123",
"resource": {
"url": "https://s3.amazonaws.com/userplane-recordings/rec_abc123/thumb.jpg?X-Amz-...",
"message": "Thumbnail available",
"type": "image/jpeg",
"size": 34567,
"captureEnabled": true
}
}
}
curl https://api.userplane.com/api/v1/public/workspace/ws_abc123/recordings/rec_abc123/console-log \
-H "Authorization: Bearer uspl_your_api_key"
{
"message": "Recording console log retrieved successfully",
"data": {
"recordingId": "rec_abc123",
"resource": {
"url": "https://s3.amazonaws.com/userplane-recordings/rec_abc123/console.json?X-Amz-...",
"message": "Console log available",
"type": "application/json",
"size": 12345,
"captureEnabled": true
}
}
}
curl https://api.userplane.com/api/v1/public/workspace/ws_abc123/recordings/rec_abc123/network-log \
-H "Authorization: Bearer uspl_your_api_key"
{
"message": "Recording network log retrieved successfully",
"data": {
"recordingId": "rec_abc123",
"resource": {
"url": "https://s3.amazonaws.com/userplane-recordings/rec_abc123/network.json?X-Amz-...",
"message": "Network log available",
"type": "application/json",
"size": 89012,
"captureEnabled": true
}
}
}
curl https://api.userplane.com/api/v1/public/workspace/ws_abc123/recordings/rec_abc123/action \
-H "Authorization: Bearer uspl_your_api_key"
{
"message": "Recording action replay retrieved successfully",
"data": {
"recordingId": "rec_abc123",
"resource": {
"url": "https://s3.amazonaws.com/userplane-recordings/rec_abc123/action.json?X-Amz-...",
"message": "Action data available",
"type": "application/json",
"size": 5678,
"captureEnabled": true
}
}
}
Errors
| Error code | Status | Description |
|---|
RECORDING_NOT_FOUND | 404 | Recording does not exist |
RECORDING_GONE | 410 | Recording has already been deleted |
Also returns common authentication errors.
Get Recording
Full recording details and metadata
List Recordings
Find recordings to download resources from
Best Practices
Handle presigned URLs and transient resources
Error Handling
Handle 404 and 410 errors for recordings