What is the Multiple Records Query API?
Multiple records of the form can be queried once through querying the interface of them.
API Calling
The returned records are always sorted in ascending order based on the data ID.
Request URL: https://api.jodoo.com/api/v5/app/entry/data/list
Request frequency: five times/second
Request method: POST
Request parameters:
Parameter | Type | Required | Description |
app_id | String | Yes | App ID |
entry_id | String | Yes | Form ID |
data_id | String | No | ID of the last record from the last query. Leave blank in case no data is returned. |
fields | Array | No | Data fields to be queried |
filter | JSON | No | Data Filter |
limit | Number | No | The number of data entries retrieved in a single query can be set from 1 to 100. It is set as 10 by default. |
Data Filter
Multiple Records Query API supports filtering the called records based on the filter parameters.
Filter Structure:
Parameter | Required | Type | Description |
rel | Yes | String | Filter grouping relations; "and" (meet all filter conditions) or "or" (meet any of filter conditions) |
cond | Yes | [JSON] | List of filter conditions |
Sample Structure:
{ "rel": "and", // or "or" "cond": [ // filter condition ] }
Filter Condition:
Parameter | Required | Type | Description |
field | Yes | String | Field name |
type | No | String | Field type |
method | Yes | String | Filter method:
"not_empty" (not empty)
"empty" (empty)
"eq" (equal)
"in" (equal to any), up to 200 records that can be transferred
"range" (between x and y, including x and y)
"nin" (not equal to any), up to 200 records that can be transferred
"ne" (not equal)
"like" (text included)
"verified" (represent values for which the email has been filled and that are verified)
"unverified" (represent values for which the email has been filled and that are not verified) |
value | No | Array | Filter value |
Sample Condition:
// filter condition without parameters { "field": "_widget_1508400000001", "type": "text", "method": "empty" } // filter condition with parameters { "field": "flowState", "type": "flowstate", "method": "eq", "value": [1] }
Supported fields:
Field Type | Filter Method | Description |
flowState | eq, ne | Workflow status, which only takes effects for workflow forms |
Date&Time | eq, ne, range, empty, not_empty | / |
Number | eq, ne, range, empty, not_empty | / |
Text | eq, ne, in, nin, empty, not_empty | Single Line, Single Select, Radio, or Serial No. |
Fields in other forms (exclude subfields) | empty, not_empty | / |
Sample Request:
{ "app_id": "59264073a2a60c0c08e20bfb", "entry_id": "59264073a2a60c0c08e20bfd", "data_id": "59e9a2fe283ffa7c11b1ddbf", "limit": 100, "fields": ["_widget_1508400000001", "_widget_1508400000002", "_widget_1508400000003"], "filter": { "rel": "and", // or "or" "cond": [ { "field": "_widget_1508400000001", "type": "text", "method": "empty" }, { "field": "_widget_1508400000002", "type": "number", "method": "not_empty" }, { "field": "flowState", "type": "flowstate", "method": "eq", "value": ["2022-01-01",0] } ] } }
Response Parameter:
Parameter | Type | Description |
data | Array | Collection of multiple records |
Sample Response:
{ "data": [{ "_id": "59e9a2fe283ffa7c11b1ddbe", "appId": "59264073a2a60c0c08e20bfb", "entryId": "59264073a2a60c0c08e20bfd", "creator": { "name": "James", "username": "James", "status": 1, "type": 0, "departments": [1, 3], "integrate_id": "James" }, "createTime": "2017-10-20T22:41:51.430Z", "updateTime": "2017-10-20T11:12:15.293Z", "_widget_1432728651402": "Class A", "_widget_1615777739673": [{ "_id": "604ed0298e2ade077c7245f1", "_widget_1615777739744": "Subform Data1" }, { "_id": "604ed0298e2ade077c7245f2", "_widget_1615777739744": "Subform Data2" } ] }, { "_id": "59e9a2fe283ffa7c11b1ddbf", "appId": "59264073a2a60c0c08e20bfb", "entryId": "59264073a2a60c0c08e20bfd", "creator": { "name": "James", "username": "James", "status": 1, "type": 0, "departments": [1, 3], "integrate_id": "James" }, "createTime": "2017-10-20T22:41:51.430Z", "updateTime": "2017-10-20T11:12:15.293Z", "_widget_1432728651402": "Class B", "_widget_1615777739673": [{ "_id": "604ed0298e2ade077c7245f3", "_widget_1615777739744": "Subform Data1" }, { "_id": "604ed0298e2ade077c7245f4", "_widget_1615777739744": "Subform Data2" } ] } ] }
More to Know
To implement looped data retrieval and avoid fetching duplicate records, you can use the data_id
parameter as a marker.
For example, you need to retrieve 230 records:
First Request: Do not need
data_id
parameter. Set limit = 100. Then it will return the first 100 records (Record 1-100).Second Request: Use the
data_id
of the 100th record returned from the previous call as the new parameter. Set limit = 100. Then it will return the next 100 records (Record 101-200).Third Request: Use the
data_id
of the 200th record from the second call. Set limit = 100. Then it will return the remaining 30 records (Record 201–230).
Since the number of records returned in the third request (30) is less than the specified limit (100), this indicates that all available data has been retrieved. So the retrieval ends.
I have finished reading. 🏆
👉I can't wait to SET THE API.
👉I need more HELP in Discord Forum.