API Reference — Video Management
Endpoint untuk mengelola video yang diunggah ke Media Server — upload chunked, kontrol streaming, operasi CRUD, dan ekstraksi timestamp berbasis AI.
← Kembali ke Video Management
Panduan operator: unggah video, kelola streaming, restart device.
Otentikasi
Cara memperoleh dan menggunakan Bearer token JWT.
Semua endpoint memerlukan header Authorization: Bearer <token>. Basis URL mengikuti variabel lingkungan VITE_API_URL yang dikonfigurasi pada instalasi Lenz. Endpoint video diarahkan melalui Raisa Gateway ke Media Server target menggunakan path prefix {nvrServerId}. Jika Anda belum punya token, lihat halaman Otentikasi.
Video — CRUD
Endpoint utama untuk membaca, memperbarui, dan menghapus video yang telah diunggah.
Authorization
bearerAuth In: header
Path Parameters
ID numerik Media Server (NVR).
Query Parameters
Pencarian parsial case-insensitive pada ID dan nama file video.
Kolom pengurutan.
"created_at""original_filename" | "file_size" | "duration" | "started_at" | "created_at"Arah pengurutan.
"desc""asc" | "desc"Nomor halaman (1-indexed).
11 <= valueJumlah item per halaman. Nilai 0 mengembalikan semua item.
100 <= valueResponse Body
application/json
curl -X GET "https://lenz.example.com/api/visionaire-media/0/videos"{ "success": true, "data": { "videos": [ { "id": "abc123def456", "original_filename": "rekaman-2026-01.mp4", "file_path": "/storage/videos/rekaman-2026-01.mp4", "file_size": 104857600, "created_at": "2026-01-15T08:00:00Z", "status": "streaming", "duration": 3600, "started_at": "2026-01-15T00:00:00Z", "started_at_src": "metadata", "ended_at": "2026-01-15T01:00:00Z", "instance": null } ], "count": 1, "pagination": { "current_page": 1, "per_page": 10, "total_items": 1, "total_pages": 1 } }}Authorization
bearerAuth In: header
Path Parameters
ID numerik Media Server (NVR).
ID unik video.
Response Body
application/json
application/json
curl -X GET "https://lenz.example.com/api/visionaire-media/0/videos/string"{ "success": true, "data": { "video": { "id": "abc123def456", "original_filename": "rekaman-2026-01.mp4", "file_path": "/storage/videos/rekaman-2026-01.mp4", "file_size": 104857600, "created_at": "2026-01-15T08:00:00Z", "status": "streaming", "duration": 3600, "started_at": "2026-01-15T00:00:00Z", "started_at_src": "metadata", "ended_at": "2026-01-15T01:00:00Z", "device": { "name": "rekaman-2026-01", "url": "file:///storage/videos/rekaman-2026-01.mp4", "scheme": "file", "channel": "live", "silent_audio": false, "status": "running", "publish_url": "rtsp://192.168.1.10:1935/live/rekaman-2026-01", "created_at": "2026-01-15T08:00:00Z", "updated_at": "2026-01-15T08:01:00Z", "error_count": 0, "restart_count": 0, "uptime": 3600000 }, "instance": null } }}{ "success": false, "message": "video not found"}Authorization
bearerAuth In: header
Path Parameters
ID numerik Media Server (NVR).
ID unik video.
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
curl -X PATCH "https://lenz.example.com/api/visionaire-media/0/videos/string" \ -H "Content-Type: application/json" \ -d '{ "started_at": "2026-01-15T00:00:00Z", "started_at_src": "manual" }'{ "success": true, "data": { "video": { "id": "abc123def456", "original_filename": "rekaman-2026-01.mp4", "file_size": 104857600, "created_at": "2026-01-15T08:00:00Z", "status": "streaming", "duration": 3600, "started_at": "2026-01-15T00:00:00Z", "started_at_src": "manual" } }}Authorization
bearerAuth In: header
Path Parameters
ID numerik Media Server (NVR).
ID unik video.
Response Body
application/json
curl -X DELETE "https://lenz.example.com/api/visionaire-media/0/videos/string"{ "success": true, "message": "Video deleted successfully", "video_id": "abc123def456"}Upload Chunked
Mekanisme upload video dalam potongan (chunk) dengan dukungan resume. Upload yang terputus dapat dilanjutkan tanpa mengirim ulang chunk yang sudah diterima.
Authorization
bearerAuth In: header
Path Parameters
ID numerik Media Server (NVR).
Query Parameters
Jika true, video otomatis diputar sebagai stream RTSP setelah upload selesai.
trueRequest Body
multipart/form-data
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
curl -X POST "https://lenz.example.com/api/visionaire-media/0/videos/upload" \ -F file="string" \ -F filename="rekaman-2026-01.mp4" \ -F chunk_index="0" \ -F total_chunks="10" \ -F total_size="104857600"{ "success": true, "data": { "message": "Chunk received", "session_id": "sess-abc123", "video_id": "abc123def456", "chunk_index": 0, "chunks_received": 1, "total_chunks": 10, "bytes_written": 10485760, "total_size": 104857600, "progress": 10, "status": "uploading", "seq": 1, "instance": null }}Authorization
bearerAuth In: header
Path Parameters
ID numerik Media Server (NVR).
ID sesi upload yang dikembalikan saat chunk pertama diterima.
Response Body
application/json
curl -X GET "https://lenz.example.com/api/visionaire-media/0/videos/upload/status/string"{ "success": true, "data": { "session_id": "sess-abc123", "video_id": "abc123def456", "original_filename": "rekaman-2026-01.mp4", "status": "uploading", "bytes_written": 52428800, "total_size": 104857600, "chunks_received": 5, "total_chunks": 10, "progress": 50, "created_at": "2026-01-15T08:00:00Z", "updated_at": "2026-01-15T08:02:30Z" }}Authorization
bearerAuth In: header
Path Parameters
ID numerik Media Server (NVR).
ID sesi upload yang ingin dilanjutkan.
Query Parameters
Nama file asli (opsional, untuk verifikasi).
ID video yang terkait (opsional, untuk verifikasi).
Response Body
application/json
curl -X GET "https://lenz.example.com/api/visionaire-media/0/videos/upload/resume/string"{ "success": true, "data": { "message": "Session found, can resume", "session_id": "sess-abc123", "video_id": "abc123def456", "original_filename": "rekaman-2026-01.mp4", "status": "paused", "chunks_received": 5, "total_chunks": 10, "bytes_written": 52428800, "total_size": 104857600, "progress": 50, "missing_chunks": [ 5, 6, 7, 8, 9 ], "can_reuse_session": true }}Authorization
bearerAuth In: header
Path Parameters
ID numerik Media Server (NVR).
ID sesi upload yang akan dibatalkan.
Response Body
application/json
curl -X POST "https://lenz.example.com/api/visionaire-media/0/videos/upload/cancel/string"{ "success": true, "message": "Upload cancelled successfully", "session_id": "sess-abc123"}Kontrol Streaming
Jeda dan lanjutkan streaming RTSP per video tanpa menghentikan proses FFmpeg secara penuh.
Authorization
bearerAuth In: header
Path Parameters
ID numerik Media Server (NVR).
ID unik video.
Response Body
application/json
curl -X POST "https://lenz.example.com/api/visionaire-media/0/videos/string/pause"{ "message": "Video paused", "video_id": "abc123def456", "status": "paused"}Authorization
bearerAuth In: header
Path Parameters
ID numerik Media Server (NVR).
ID unik video.
Response Body
application/json
curl -X POST "https://lenz.example.com/api/visionaire-media/0/videos/string/resume"{ "message": "Video resumed", "video_id": "abc123def456", "status": "streaming"}Device Pipeline
Setiap video yang diunggah direpresentasikan sebagai device dengan skema file di Media Server. Gunakan endpoint ini untuk restart atau stop proses FFmpeg yang menayangkan stream RTSP video tersebut.
Authorization
bearerAuth In: header
Path Parameters
ID numerik Media Server (NVR).
Skema device. Untuk video yang diunggah, gunakan file.
"rtsp" | "rtmp" | "file"Path device dalam format channel/nama (contoh: live/rekaman-2026-01).
Query Parameters
Identifier instance pada mode Federation (opsional).
Response Body
application/json
curl -X POST "https://lenz.example.com/api/visionaire-media/0/devices/rtsp/string/restart"{ "success": true, "message": "Device restarted successfully"}Authorization
bearerAuth In: header
Path Parameters
ID numerik Media Server (NVR).
Skema device.
"rtsp" | "rtmp" | "file"Path device dalam format channel/nama.
Query Parameters
Identifier instance pada mode Federation (opsional).
Response Body
application/json
curl -X POST "https://lenz.example.com/api/visionaire-media/0/devices/rtsp/string/stop"{ "success": true, "message": "Device stopped successfully"}Ekstraksi Timestamp AI
Endpoint opsional untuk mendeteksi overlay timestamp pada frame video menggunakan model AI (Gemini). Digunakan saat ekstraksi otomatis dari metadata file tidak berhasil.
Authorization
bearerAuth In: header
Request Body
multipart/form-data
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X POST "https://lenz.example.com/api/llm/frame-timestamp-extraction" \ -F image_url="https://storage.example.com/frames/frame-001.jpg" \ -F model_api_key_id="apikey-gemini-001" \ -F timestamp_format="DD-MM-YYYYTHH:mm:ss"{ "ok": true, "message": "Timestamp extracted", "data": { "timestamp": "15-01-2026T08:00:00", "found": true, "confidence": 0.97 }}{ "ok": false, "message": "No timestamp found in frame", "data": { "timestamp": "", "found": false, "confidence": 0 }}