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
Req/Res Example: Retrieve Recordings
curl -X GET \
-H "Authorization: $API_KEY" \
"https://api.eyeson.team/rooms/$ROOM_ID/recordings"
[
{
"id": "67ed5d50346343ce096906c2",
"created_at": 1743609169,
"duration": 12,
"links": {
"self": "https://api.eyeson.team/recordings/67ed5d50346343ce096906c2",
"download": "https://fs.eyeson.com/meetings/67ed5cfb4228aaac048d09f5/67ed5d50346343ce096906c2.webm?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AH07FBAZO9IYS38J6742%2F20250402%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250402T155745Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=2ca0d82a4252ad4e0075c5e0cc0a519be311f86f39a47de1eb7d3eddb8fdb0a2&COMAPI-TOK=0f1XoAKaBuTa2Y663sm1X5GK"
},
"user": {
"id": "johndoe",
"name": "John Doe",
"avatar": null,
"guest": false,
"joined_at": "2025-04-02T15:51:45.072Z"
},
"room": {
"id": "67ed5cfb4228aaac048d09f4",
"name": "API magic",
"ready": true,
"started_at": "2025-04-02T15:51:23.040Z",
"shutdown": false,
"guest_token": "4uWWGwHp2AgQ0BKdKEq8Ide9"
}
},
{
"id": "67ed5d3f8b685617d40c4725",
"created_at": 1743609151,
"duration": 8,
"links": {
"self": "https://api.eyeson.team/recordings/67ed5d3f8b685617d40c4725",
"download": "https://fs.eyeson.com/meetings/67ed5cfb4228aaac048d09f5/67ed5d3f8b685617d40c4725.webm?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AH07FBAZO9IYS38J6742%2F20250402%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20250402T155745Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=6b3c5e5959fc742c17dca7101eb2011d68e188e3b4ebad705e19c4e1055f80aa&COMAPI-TOK=4JWp6JDSZUU1nVVrMb3VWCIA"
},
"user": {
"id": "johndoe",
"name": "John Doe",
"avatar": null,
"guest": false,
"joined_at": "2025-04-02T15:51:45.072Z"
},
"room": {
"id": "67ed5cfb4228aaac048d09f4",
"name": "API magic",
"ready": true,
"started_at": "2025-04-02T15:51:23.040Z",
"shutdown": false,
"guest_token": "4uWWGwHp2AgQ0BKdKEq8Ide9"
}
}
]
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 started at the current timestamp. This value origins from the meeting start response.
since
Type: ISO8601 Timestamp
(optional)
Filter for recordings, where the room instance was running since the timestamp.
until
Type: ISO8601 Timestamp
(optional)
Filter for recordings, where the room instance was running before the 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