Overview
This API retrieves data from a specified Aggregate Table and supports querying multiple records in a single request.
API Version
API Version | Last Updated | Version Description |
V6 | 2026.08.13 | Initial version |
API Calling
This API retrieves data from a specified Aggregate Table and supports querying multiple records in a single request.
Request URL: https://api.jodoo.com/api/v6/beta/app/aggregate_view/data/list
Request Frequency: 30 requests/second
Request Method: POST
Request Parameters:
Parameter | Type | Required | Description |
| String | Yes | App ID. |
| String | Yes | Aggregate Table ID. |
| String[] | No | Names of the fields to return. Field names can be obtained through the Aggregate Table Field Query API. If this parameter is omitted or an empty array is passed, all aggregate fields, as well as the creation time and update time, are returned. |
| Object | No | Filter conditions. |
| String | No | Relation between filter conditions. Valid values: |
| Object[] | Yes, when | List of filter conditions. |
| String | Yes | Name of the field to filter. For aggregate fields, use the |
| String | Yes | Filter method. See the table below for supported methods. |
| Array | No | Filter value. This parameter can be omitted or passed as an empty array when |
| String | No | Pagination cursor. Omit this parameter for the first request. For subsequent requests, use the |
| Number | No | Number of records returned per page. Default: |
Sample Request:
{
"app_id": "59264073a2a60c0c08e20bfb",
"entry_id": "66a1f08ca83a80a53193d121",
"fields": [
"_widget_1720000000001",
"_widget_1720000000002",
"updateTime"
],
"filter": {
"rel": "and",
"cond": [
{
"field": "_widget_1720000000001",
"method": "eq",
"value": [
"East China"
]
}
]
},
"limit": 200
}
Response Parameters:
Parameter | Type | Description |
| Object[] | List of Aggregate Table records. Each record contains the data ID and the fields specified in the request. If |
| String | Data ID. Use |
| Any | Value of an aggregate field. The property name is the field |
| String | Record creation time in ISO 8601 format. Returned only when this field is requested. |
| String | Record update time in ISO 8601 format. Returned only when this field is requested. |
| Boolean | Indicates whether more records are available. |
| String | Cursor for the next page. Returned only when |
Sample Response:
{
"data": [
{
"_id": "66a1f08ca83a80a53193d130",
"_widget_1720000000001": "East China",
"_widget_1720000000002": 120000,
"updateTime": "2026-08-05T08:00:00.000Z"
}
],
"has_more": false
}
Filter Conditions
Field Type | Supported Filter Methods |
Single Line | eq, ne, in, nin, empty, not_empty |
Member | eq, ne, in, nin, empty, not_empty |
Department | eq, ne, in, nin, empty, not_empty |
Date&Time | eq, ne, range, formula, empty, not_empty |
Number | eq, ne, range, gt, lt, empty, not_empty |
data_id | eq, in, empty, not_empty |
Sample Request:
{ "app_id": "59264073a2a60c0c08e20bfb", "entry_id": "59264073a2a60c0c08e20bfd", "data_id": "59e9a2fe283ffa7c11b1ddbf", // data_id used for pagination "limit": 100, "fields": [ "_widget_1508400000001", "_widget_1508400000002", "_widget_1508400000003" ], "filter": { "rel": "and", // or "or" "cond": [ { "field": "_widget_1732071387201", "type": "datetime", // Field type: datetime "method": "range", // Filter method: range "value": ["2024-11-20", "2024-11-21"] }, { "field": "_widget_1732071387201", "type": "datetime", // Field type: datetime "method": "eq", // Filter method: eq "value": ["2024-11-30"] }, { "field": "_widget_1732071387201", "type": "datetime", // Field type: datetime "method": "ne", // Filter method: ne "value": ["2024-11-30"] }, { "field": "_widget_1732071387201", "type": "datetime", // Field type: datetime "method": "empty" // Filter method: empty }, { "field": "_widget_1732071387201", "type": "datetime", // Field type: datetime "method": "not_empty" // Filter method: not_empty }, { "field": "_widget_123456789", "method": "formula", "value": [ { "mode": "preset", "formula": "today" } ] }, { "field": "_widget_1732071387200", "type": "number", // Field type: number "method": "eq", // Filter method: eq "value": [1] }, { "field": "_widget_1732071387200", "type": "number", // Field type: number "method": "ne", // Filter method: ne "value": [1] }, { "field": "_widget_1732071387200", "type": "number", // Field type: number "method": "range", // Filter method: range "value": [100, 200] }, { "field": "_widget_1732071387200", "type": "number", // Field type: number "method": "empty" // Filter method: empty }, { "field": "_widget_1732071387200", "type": "number", // Field type: number "method": "not_empty" // Filter method: not_empty }, { "field": "_widget_1732071387201", "type": "number", // Field type: number "method": "gt", // Filter method: gt "value": [1000] }, { "field": "_widget_1732071387202", "type": "number", // Field type: number "method": "lt", // Filter method: lt "value": [1000] }, { "field": "_widget_1732071387199", "type": "text", // Field type: text "method": "eq", // Filter method: eq "value": ["111"] }, { "field": "_widget_1732071387199", "type": "text", // Field type: text "method": "ne", // Filter method: ne "value": ["111"] }, { "field": "_widget_1732071387199", "type": "text", // Field type: text "method": "in", // Filter method: in "value": ["111", "2222"] }, { "field": "_widget_1732071387199", "type": "text", // Field type: text "method": "nin", // Filter method: nin "value": ["111", "2222"] }, { "field": "_widget_1732071387199", "type": "text", // Field type: text "method": "empty" // Filter method: empty }, { "field": "_widget_1732071387199", "type": "text", // Field type: text "method": "not_empty" // Filter method: not_empty }, { "field": "_widget_1732071387206", "type": "user", // Field type: user "method": "empty" // Filter method: empty }, { "field": "_widget_1732071387206", "type": "user", // Field type: user "method": "not_empty" // Filter method: not_empty }, { "field": "_widget_1732071387207", "type": "user", // Field type: user "method": "eq", // Filter method: eq "value": ["R-3XcOLjhg"] // Member No. }, { "field": "_widget_1732071387208", "type": "user", // Field type: user "method": "ne", // Filter method: ne "value": ["R-3XcOLjhg"] // Member No. }, { "field": "_widget_1732071387209", "type": "user", // Field type: user "method": "in", // Filter method: in "value": ["R-3XcOLjhg", "R-3XcOLpho"] // Member Nos. }, { "field": "_widget_1732071387210", "type": "user", // Field type: user "method": "nin", // Filter method: nin "value": ["R-3XcOLjhg", "R-3XcOLpho"] // Member Nos. }, { "field": "_widget_1732071387213", "type": "dept", // Field type: dept "method": "eq", // Filter method: eq "value": [1] // Department No. }, { "field": "_widget_1732071387214", "type": "dept", // Field type: dept "method": "ne", // Filter method: ne "value": [1] // Department No. }, { "field": "_widget_1732071387215", "type": "dept", // Field type: dept "method": "in", // Filter method: in "value": [1, 2] // Department Nos. }, { "field": "_widget_1732071387216", "type": "dept", // Field type: dept "method": "nin", // Filter method: nin "value": [1, 2] // Department Nos. }, { "field": "_widget_1732071387217", "type": "dept", // Field type: dept "method": "empty" // Filter method: empty }, { "field": "_widget_1732071387218", "type": "user", // Field type: dept "method": "not_empty" // Filter method: not_empty }, { "field": "data_id", // data_id used for filtering "type": "dataid", // Field type: dataid "method": "eq", // Filter method: eq "value": ["507f1f77bcf86cd799439037"] }, { "field": "data_id", // data_id used for filtering "type": "dataid", // Field type: dataid "method": "in", // Filter method: in "value": [ "507f1f77bcf86cd799439038", "507f1f77bcf86cd799439039", "507f1f77bcf86cd799439040" ] }, { "field": "data_id", // data_id used for filtering "type": "dataid", // Field type: dataid "method": "empty" // Filter method: empty }, { "field": "data_id", "type": "dataid", // Field type: dataid "method": "not_empty" // Filter method: not_empty } ] } }
Dynamic Date&Time Filtering with Formulas
Date&Time fields support dynamic time filtering with the formula method.
The request format is as follows:
{ "filter": { "rel": "and", "cond": [ { "field": "_widget_123456789", "method": "formula", "value": [ { "mode": "preset", "formula": "today" } ] } ] } }Note: value is an array containing exactly one formula configuration object.
Two formula modes are supported: preset and custom.
Preset Formulas
Sample Request:
{ "field": "_widget_123456789", "method": "formula", "value": [ { "mode": "preset", "formula": "lastMonth" } ] }
Supported preset formulas are listed below:
formula | Description |
| Today |
| Yesterday |
| Tomorrow |
| This week |
| Last week |
| Next week |
| This month |
| Last month |
| Next month |
| This quarter |
| Last quarter |
| Next quarter |
| This year |
| Last year |
| Next year |
| First quarter of this year |
| Second quarter of this year |
| Third quarter of this year |
| Fourth quarter of this year |
| First half of this year |
| Second half of this year |
| Past 7 days, including today |
| Past 30 days, including today |
Note: When using formula for dynamic time filtering, the string value must be one of the supported formula values listed above. An unknown formula may fail to generate a valid time range.
Custom Formulas
The format of a custom formula is as follows:
{
"mode": "custom",
"formula": ["lower-bound formula", "upper-bound formula"]
}
Supported time units:
Unit | Description |
| Day |
| Week |
| Month |
| Quarter |
| Year |
Common formulas:
Formula | Description |
| Today |
| Yesterday |
| Tomorrow |
| This week |
| This month |
| The full month two months ago |
| The full month two months from now |
| This quarter |
| This year |
To query records from the beginning of last week through the end of next week, use:
{
"field": "_widget_123456789",
"method": "formula",
"value": [
{
"mode": "custom",
"formula": ["-1w", "+1w"]
}
]
}
To query records starting from the beginning of the month two months ago, without an upper bound, specify only the lower bound:
{
"mode": "custom",
"formula": ["-2M"]
}
To query records through the end of the month two months from now, without a lower bound, specify only the upper bound:
{
"mode": "custom",
"formula": [null, "+2M"]
}
Notes:
Dynamic time ranges in both preset and custom formulas are calculated based on the tenant's time zone. For week-based formulas, the start and end of the week also depend on the tenant's regional settings.
For custom formulas, the resulting query condition is: field value ≥ start time and field value ≤ end time.
When using a custom formula for dynamic time filtering, the lower-bound and upper-bound values only need to follow the supported formula format, such as
+1d,+2w,-1Q,+2y, or1d.
More to Know
Aggregate Table data cannot be queried until the Aggregate Table has finished calculating. If the calculation is incomplete, go to the Aggregate Table and run the calculation first.
The API returns a snapshot of the data at the time of the query. If the Aggregate Table is updated afterward, data returned across multiple requests may become inconsistent.