Skip to main content

Aggregate Table Data Query API

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

app_id

String

Yes

App ID.

entry_id

String

Yes

Aggregate Table ID.

fields

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.

filter

Object

No

Filter conditions.

filter.rel

String

No

Relation between filter conditions. Valid values: and and or. Default: and.

filter.cond

Object[]

Yes, when filter is specified

List of filter conditions.

filter.cond[].field

String

Yes

Name of the field to filter. For aggregate fields, use the name returned by the Aggregate Table Field Query API. For the data ID, use data_id.

filter.cond[].method

String

Yes

Filter method. See the table below for supported methods.

filter.cond[].value

Array

No

Filter value. This parameter can be omitted or passed as an empty array when empty or not_empty is used.

cursor

String

No

Pagination cursor. Omit this parameter for the first request. For subsequent requests, use the next_cursor returned in the previous response.

limit

Number

No

Number of records returned per page. Default: 200. Maximum: 300.

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

data

Object[]

List of Aggregate Table records. Each record contains the data ID and the fields specified in the request. If fields is not specified, all aggregate fields, as well as the creation time and update time, are returned.

data[]._id

String

Data ID. Use data_id as the field name when filtering by data ID.

data[].<field_name>

Any

Value of an aggregate field. The property name is the field name returned by the Aggregate Table Field Query API. The value format is consistent with the response format of the corresponding field type in the Open API.

data[].createTime

String

Record creation time in ISO 8601 format. Returned only when this field is requested.

data[].updateTime

String

Record update time in ISO 8601 format. Returned only when this field is requested.

has_more

Boolean

Indicates whether more records are available.

next_cursor

String

Cursor for the next page. Returned only when has_more=true.

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

Today

yesterday

Yesterday

tomorrow

Tomorrow

thisWeek

This week

lastWeek

Last week

nextWeek

Next week

thisMonth

This month

lastMonth

Last month

nextMonth

Next month

thisQuarter

This quarter

lastQuarter

Last quarter

nextQuarter

Next quarter

thisYear

This year

lastYear

Last year

nextYear

Next year

firstQuarter

First quarter of this year

secondQuarter

Second quarter of this year

thirdQuarter

Third quarter of this year

fourthQuarter

Fourth quarter of this year

firstHalfYear

First half of this year

nextHalfYear

Second half of this year

past7Day

Past 7 days, including today

past30Day

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

d

Day

w

Week

M

Month

Q

Quarter

y

Year

Common formulas:

Formula

Description

1d

Today

-1d

Yesterday

+1d

Tomorrow

1w

This week

1M

This month

-2M

The full month two months ago

+2M

The full month two months from now

1Q

This quarter

1y

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:

  1. 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.

  2. For custom formulas, the resulting query condition is: field value ≥ start time and field value ≤ end time.

  3. 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, or 1d.


More to Know

  1. 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.

  2. 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.

Did this answer your question?