record.file.list (Get local recordings)
record.file.list: Get local recordings
record.file.list · channel scope · permission RecordReplay
What it does
Local recordings: fetches the local recording file list for this channel by time (not player playback control). Input beginTime, endTime, type, and limit (30–100). sessionId is optional; if the previous response included sessionId, you may send it on the next call to optimize the query—it is not a pagination token. Paginate with beginTime, endTime, and limit by sliding the time window. Returns up to 100 records. Do not mix with legacy queryLocalRecords count/queryRange. Each call runs once. type enums follow this page’s table (includes 17 vlog, 21 localRecord). Count and bitmap do not allow the exact same set (e.g. count omits 21, bitmap omits 17). Trust device.capability.list and each leaf’s table.
Routing: externally unified v2 device.service.invoke; on some devices the platform maps to device-side Open-OPS (e.g. record/list). The open platform does not proxy queryLocalRecords again. Devices that list this service in device.capability.list use invoke. For playback, see SDK/player docs.
Request URL
POST https://openapi-[DataCenter].easy4ip.com/openapi/v2/device.service.invoke
Minimum permission
The administrator does not need an extra permission on a device they bound. A shared device needs the local recording view permission. A bound sub-user does not. A sub-account needs RecordReplay. Omitting channelId on channel-scope capabilities returns DV2007. Mixing device and channel properties in one request returns DV2008. A timeout does not mean the invoke failed.
Request parameters
| Name | Type | Required | Description |
|---|---|---|---|
token | String | yes | Access token for an administrator, sub-user, or sub-account |
deviceId | String | yes | Device serial number |
productId | String | no | Optional. If sent and it does not match the device model → DV2009 |
channelId | String | yes | Channel ID; "0" is common for IPC |
serviceId | String | yes | record.file.list |
inputData | Object | yes | See table below |
| Name | Description | Type | Required | Values |
|---|---|---|---|---|
type | Recording type. | enum | yes | 0 all; 1 normal; 2 videomotion; 3 human; 4 faceDetect; 5 faceRecognition; 6 crossLine; 7 crossRegion; 8 leftDetection; 9 takenAwayDetection; 10 abAlarmSound; 11 callEvent; 12 muti; 13 smdTypeHuman; 14 smdTypeVehicle; 15 smdTypeHumanAndVehicle; 17 vlog; 18 packageOnDuty; 19 aor (AOV+audio); 20 aov; 21 localRecord |
beginTime | Start time. Wall-clock, format YYYY-MM-DD HH:mm:ss. | text | yes | Format YYYY-MM-DD HH:mm:ss |
endTime | End time. Wall-clock, format YYYY-MM-DD HH:mm:ss. | text | yes | Format YYYY-MM-DD HH:mm:ss |
sessionId | Session ID for query optimization; not used for pagination. | text | no | String; may reuse sessionId from the previous response |
limit | Count. Range 30–100, step 1. | int | yes | 30–100, step 1 |
For common request fields and signing, see Signing conventions and Common request payload.
Request example
{
"id": "d5c287b4-5b2f-4f03-baf5-8032c5c354af",
"system": {
"ver": "1.0",
"appId": "lcdxxxxxxxxx",
"sign": "xjhCQBoJ9hRDsCjyDcHjtDNzRZ3ZJezcawsfWeiaoxU=",
"time": 1706511734,
"nonce": "f5a1ae2d-c09c-4d39-a744-83a5c2c653c2"
},
"params": {
"token": "<yourAccessToken>",
"deviceId": "TESTIPC000012345",
"channelId": "0",
"serviceId": "record.file.list",
"inputData": {
"type": "0",
"beginTime": "2026-09-19 00:00:00",
"endTime": "2026-09-19 23:59:59",
"limit": 30
}
}
}
Response data fields
Output is in result.data.outputData.
| Name | Description | Type | Required | Values |
|---|---|---|---|---|
sessionId | Session ID; may be sent on the next request to optimize the query. | text | no | String |
records | Recording list. Up to 100 items. | array | no | Up to 100 items |
records.item.fileName | File name. | text | no | String |
records.item.fileLength | File length. Range 0–999999, step 1, unit byte. | int | no | 0–999999, step 1, unit byte |
records.item.type | Type. | enum | no | 0 all; 1 normal; 2 videomotion; 3 human; 4 faceDetect; 5 faceRecognition; 6 crossLine; 7 crossRegion; 8 leftDetection; 9 takenAwayDetection; 10 abAlarmSound; 11 callEvent; 12 muti; 13 smdTypeHuman; 14 smdTypeVehicle; 15 smdTypeHumanAndVehicle; 17 vlog; 18 packageOnDuty; 19 aor (AOV+audio); 20 aov; 21 localRecord |
records.item.streamType | Stream type. | enum | no | 0 main stream; 1 sub stream 1; 2 sub stream 2; 3 sub stream 3 |
records.item.beginTime | Start time. Wall-clock, format YYYY-MM-DD HH:mm:ss. | text | no | Format YYYY-MM-DD HH:mm:ss |
records.item.endTime | End time. Wall-clock, format YYYY-MM-DD HH:mm:ss. | text | no | Format YYYY-MM-DD HH:mm:ss |
records.item.localBeginTime | Device start time. Wall-clock, format YYYY-MM-DD HH:mm:ss. | text | no | Format YYYY-MM-DD HH:mm:ss |
records.item.localEndTime | Device end time. Wall-clock, format YYYY-MM-DD HH:mm:ss. | text | no | Format YYYY-MM-DD HH:mm:ss |
records.item.objectType | Object type. | text | no | String |
records.item.xseq | Sequence number. Range 0–9999999, step 1. | int | no | 0–9999999, step 1 |
records.item.multiType | Composite type. | text | no | String |
records.item.picId | Cover image ID. Range 0–999999, step 1. | int | no | 0–999999, step 1 |
Response example
{
"id": "d5c287b4-5b2f-4f03-baf5-8032c5c354af",
"result": {
"code": "0",
"msg": "Operation is successful",
"data": {
"outputData": {
"sessionId": "s-1",
"records": [
{
"fileName": "rec-1",
"fileLength": 1024,
"type": "1",
"streamType": "0",
"beginTime": "2026-09-19 08:00:00",
"endTime": "2026-09-19 08:10:00",
"localBeginTime": "2026-09-19 08:00:00",
"localEndTime": "2026-09-19 08:10:00",
"objectType": "",
"xseq": 1,
"multiType": "",
"picId": 0
}
]
}
}
}
}
Error codes
| Code | Meaning | Next step |
|---|---|---|
SN1001 | Signature error | Check sign per Development specification |
TK1002 | Token invalid or expired | Refresh accessToken |
OP1002 | Missing required parameter | Add required fields |
OP1003 | Invalid parameter | Match this page’s parameter table |
OP1009 | Permission denied | Check token and device bind/share grants |
OP1013 | Total call limit exceeded | Reduce call rate |
OP1014 | Daily per-interface limit exceeded | See Interface call limits |
DV1007 | Device offline | Wait until the device is online |
See Return codes · OP/SN/TK for the full catalog.
| Code | Meaning | Next step |
|---|---|---|
DV2003 | Capability not on device | Use device.capability.list |
DV2007 | channelId vs scope mismatch | Required for channel scope; omit for device scope |
DV2008 | Mixed device and channel in one call | Split the request |
DV2009 | productId mismatch | Omit or set actual model id |
DV2011 | No capability permission | See Permission codes |
See Capability errors.
