Recording
Each recording has 3 states. Start, stop, and finish. So you will receive 3 events in the meeting observer and the retrieve recording response.
You can distinguish them by the duration
and links.download
fields.
- At start, both are null
- At stop, duration is set, but download is null
- At finish, both are set
Example Observer message: start recording
{
"type": "recording_update",
"recording": {
"id": "67daad3af71a86c897058e33",
"created_at": 1742384442,
"duration": null,
"links": {
"self": "https://api.eyeson.team/recordings/67daad3af71a86c897058e33",
"download": null
},
"user": {
"id": "67daad29fe13f2745410bc88",
"name": "APIdoc",
"avatar": null,
"guest": false,
"joined_at": "2025-03-19T11:40:27.734Z"
},
"room": {
"id": "API",
"name": "API magic",
"ready": true,
"started_at": "2025-03-19T11:40:25.499Z",
"shutdown": false,
"guest_token": "epYFNNduQtISh9MkoalvmCeN"
}
}
}
Example Observer message: stop recording
{
"type": "recording_update",
"recording": {
"id": "67daad3af71a86c897058e33",
"created_at": 1742384443,
"duration": 56,
"links": {
"self": "https://api.eyeson.team/recordings/67daad3af71a86c897058e33",
"download": null
},
"user": {
"id": "67daad29fe13f2745410bc88",
"name": "APIdoc",
"avatar": null,
"guest": false,
"joined_at": "2025-03-19T11:40:27.734Z"
},
"room": {
"id": "API",
"name": "API magic",
"ready": true,
"started_at": "2025-03-19T11:40:25.499Z",
"shutdown": false,
"guest_token": "epYFNNduQtISh9MkoalvmCeN"
}
}
}
Example Observer message: finish
{
"type": "recording_update",
"recording": {
"id": "67daad3af71a86c897058e33",
"created_at": 1742384443,
"duration": 56,
"links": {
"self": "https://api.eyeson.team/recordings/67daad3af71a86c897058e33",
"download": "https://fs.eyeson.com/meetings/67daad29fe13f2745410bc87/67daad3af71a86c897058e33.webm?..."
},
"user": {
"id": "67daad29fe13f2745410bc88",
"name": "APIdoc",
"avatar": null,
"guest": false,
"joined_at": "2025-03-19T11:40:27.734Z"
},
"room": {
"id": "API",
"name": "API magic",
"ready": true,
"started_at": "2025-03-19T11:40:25.499Z",
"shutdown": false,
"guest_token": "epYFNNduQtISh9MkoalvmCeN"
}
}
}
Depending on the host server it might take some time to recieve a download link - bigger files take longer.
Start recording
Recordings are temporarily saved in Eyesons cloud storage and can be downloaded from there.
POST /rooms/`ACCESS_KEY`/recording
RESPONSES 201 CREATED, 404 NOT FOUND, 405 METHOD NOT ALLOWED, 406 NOT ACCEPTABLE, 410 GONE
NO RESPONSE - only HTTP status
Req/Res Example: Start Recording
curl -X POST "https://api.eyeson.team/rooms/$ACCESS_KEY/recording"
no response
Stop recording
DELETE /rooms/`ACCESS_KEY`/recording
RESPONSES 200 OK, 404 NOT FOUND, 410 GONE
Req/Res Example: Stop Recording
curl -X DELETE "https://api.eyeson.team/rooms/$ACCESS_KEY/recording"
no response
Recordings are stored for up to 14 days. Afterwards they get destroyed.
Retrieve recording
GET /recordings/`RECORDING_ID`
HEADERS Authorization
RESPONSES 200 OK, 404 NOT FOUND
Req/Res Example: Start Recording
curl -H "Authorization: $API_KEY" "https://api.eyeson.team/recordings/$RECORDING_ID"
{
"id": "67daad3af71a86c897058e33",
"created_at": 1742384443,
"duration": 56,
"links": {
"self": "https://api.eyeson.team/recordings/67daad3af71a86c897058e33",
"download": "https://fs.eyeson.com/meetings/67daad29fe13f2745410bc87/67daad3af71a86c897058e33.webm?..."
},
"user": {
"id": "67daad29fe13f2745410bc88",
"name": "APIdoc",
"avatar": null,
"guest": false,
"joined_at": "2025-03-19T11:40:27.734Z"
},
"room": {
"id": "API",
"name": "API magic",
"ready": false,
"started_at": "2025-03-19T11:40:25.499Z",
"shutdown": true,
"guest_token": "epYFNNduQtISh9MkoalvmCeN"
}
}
Direct URLs to downloads expire after one hour. Better use the recording identifier and fetch a valid resource link on demand.
Retrieve list of all recordings of a certain room
GET /rooms/`ROOM_ID`/recordings
HEADERS Authorization
RESPONSES 200 OK, 403 UNAUTHORIZED, 404 NOT FOUND
REMOMMENDED started_at
Req/Res Example: Retrieve Recordings
curl -X POST -H "Authorization: $API_KEY" -d "started_at=$(date -u -Iseconds --date="-7 hours")" "https://api.eyeson.team/$ROOM_ID/recordings" #recordings from the last 7 hours
{
"0": {
"id": "67dbd91360fcb88bbf8826d5",
"created_at": "3/20/2025, 10:00:03 AM",
"duration": "7",
"links": {
"self": "https://api.eyeson.team/recordings/67dbd91360fcb88bbf8826d5",
"download": "https://fs.eyeson.com/meetings/67dbd8e2fe13f2745410bcf0/67dbd91360fcb88bbf8826d5.webm?..."
},
"user": {
"id": "67dbd8e2fe13f2745410bcf1",
"name": "Recording Tester",
"avatar": null,
"guest": "false",
"joined_at": "2025-03-20T08:59:16.676Z"
},
"room": {
"id": "67dbd8e2fe13f2745410bcef",
"name": "Recording Room",
"ready": "true",
"started_at": "2025-03-20T08:59:14.427Z",
"shutdown": "false",
"guest_token": "gQ7vErrLlIlzch4pji8fBM8L"
}
},
"1": {
"id": "67dbd901e322de094090dbf6",
"created_at": "3/20/2025, 9:59:46 AM",
"duration": "16",
"links": {
"self": "https://api.eyeson.team/recordings/67dbd901e322de094090dbf6",
"download": "https://fs.eyeson.com/meetings/67dbd8e2fe13f2745410bcf0/67dbd901e322de094090dbf6.webm?..."
},
"user": {
"id": "67dbd8e2fe13f2745410bcf1",
"name": "Recording Tester",
"avatar": null,
"guest": "false",
"joined_at": "2025-03-20T08:59:16.676Z"
},
"room": {
"id": "67dbd8e2fe13f2745410bcef",
"name": "Recording Room",
"ready": "true",
"started_at": "2025-03-20T08:59:14.427Z",
"shutdown": "false",
"guest_token": "gQ7vErrLlIlzch4pji8fBM8L"
}
},
"2": {
"id": "67dbd8edf71a86c897058e93",
"created_at": "3/20/2025, 9:59:26 AM",
"duration": "19",
"links": {
"self": "https://api.eyeson.team/recordings/67dbd8edf71a86c897058e93",
"download": "https://fs.eyeson.com/meetings/67dbd8e2fe13f2745410bcf0/67dbd8edf71a86c897058e93.webm?..."
},
"user": {
"id": "67dbd8e2fe13f2745410bcf1",
"name": "Recording Tester",
"avatar": null,
"guest": "false",
"joined_at": "2025-03-20T08:59:16.676Z"
},
"room": {
"id": "67dbd8e2fe13f2745410bcef",
"name": "Recording Room",
"ready": "true",
"started_at": "2025-03-20T08:59:14.427Z",
"shutdown": "false",
"guest_token": "gQ7vErrLlIlzch4pji8fBM8L"
}
}
}
Newest recordings are on top of the list.
page
Type: INTEGER
(optional)
Fetch next set of recordings (limit is 25)
started_at
Type: ISO8601 Timestamp
(optional)
Filter for recordings, where the room instance was running at the current timestamp.
Delete recording
DELETE /recordings/`RECORDING_ID`
HEADERS Authorization
RESPONSES 200 OK, 404 NOT FOUND
Req/Res Example: Delete Recording
curl -X DELETE -H "Authorization: $API_KEY" "https://api.eyeson.team/recordings/$RECORDING_ID"
No Response