POST
Entries.List
Return rows inside a selected entry tab. First call User.Basic, show data.entries.list to the user, and send the selected id as entry_id. customer_id is optional: send it to show rows for one customer, or omit it to show rows for the selected tab without customer filtering.
Permissions
- User must be logged in with a valid bearer token.
- Returned or changed records are limited by the user permissions, team access, folder access, and account settings.
Action
- Reads rows from the selected entry/tab only.
- Returns JSON rows with id, row_id, entry_id, customer_id when linked, and data1/data2/etc. field values.
- When a tab field has input_type=customer, the stored dataN value stays the customer id and the response also includes dataN_name plus dataN_customer, matching the dashboard importer/customer column.
- status stays the unique id; status_name is the dashboard label_en. sub_status stays the unique id; sub_status_name is the dashboard sub_status_label.
Push Service
No socket push is sent because this function only reads data.
Automation
No automation is run because this function only reads data.
Special Instructions
- Call User.Basic after login and let the user choose an entry from data.entries.list.
- Send the selected id as entry_id on every Entries route.
- Use customer_id only when the entry rows should be scoped to one customer.
- If the selected entry has use_customer_for_entry=1 in User.Basic, each row can include entry_cust_id and the response includes entry_customer_data.
- Send custom entry fields as data1, data2, data3, etc. according to the selected entry field settings.
- Customer-type fields store a contactus id in dataN. The list/get response keeps that id and adds dataN_name plus dataN_customer so the UI can show the importer/customer name like the dashboard.
- Row status/sub_status stay the stored unique ids. The response also adds status_name, status_color, sub_status_name, and sub_status_color from tabs_setting.status, same labels the dashboard table shows.
- Use EntriesSettings routes only when you are creating or editing the tab definition itself.
Required Parameters
| Name | Type | Sample | Explanation |
|---|---|---|---|
entry_idpost | int | 7 | Selected entry/tab id from User.Basic data.entries.list. tab_id is also accepted. |
Optional Parameters
| Name | Type | Sample | What it gives |
|---|---|---|---|
customer_idpost | int | 123 | Filters rows linked to one customer. Omit to list rows in this entry for the account. |
entry_cust_idpost | int | 456 | Filters rows linked to one entry customer when the selected entry uses customer linking. entry_customer_id is also accepted. |
searchpost | string | TIANLU | Searches data1..dataN values, customer-type field names (contactus.name, like the dashboard importer column), and the row customer name/phone/company_id. Multiple values: comma string or JSON array. Matches if any value is found. search_text and filter_data are also accepted. |
limitpost | int | 25 | Maximum rows to return. Values above 25 are capped. |
offsetpost | int | 0 | Skips rows for paging. start is also accepted. |
orderpost | string | id_desc | Orders by newest or oldest id. Use id_desc or id_asc. |
Authentication
Send the bearer token returned by Login in the request header.
Authorization: Bearer YOUR TOKEN
Sample Request
{
"url": "\/app\/Entries.List",
"method": "POST",
"headers": {
"Authorization": "Bearer YOUR TOKEN"
},
"body": {
"entry_id": "7",
"customer_id": "123",
"limit": "25"
},
"url_user": "https:\/\/{user}.bull36.com\/app\/Entries.List",
"url_domain": "https:\/\/{domain}\/app\/Entries.List"
}Endpoint
POST /app/Entries.List
POST https://{user}.bull36.com/app/Entries.List
POST https://{domain}/app/Entries.ListSample Output
{
"success": 1,
"entry_id": 7,
"count": 1,
"data": [
{
"id": "66aa00000000000000000001",
"row_id": "66aa00000000000000000001",
"entry_id": 7,
"customer_id": 123,
"customer_name": "Demo Customer",
"entry_cust_id": 456,
"entry_customer_data": {
"id": 456,
"name": "Linked customer",
"phone": "0500000000"
},
"status": "17338636546758a8e6481dd",
"status_name": "Open",
"status_color": "#ffa500",
"sub_status": "172346612866ba018d99c1a",
"sub_status_name": "Waiting",
"data1": "12557482",
"data1_name": "TIANLU",
"data1_customer": {
"id": 12557482,
"name": "TIANLU"
}
}
]
}Count Only
Use the matching count route with the same filters when the UI only needs total rows for paging.
{
"url": "\/app\/Entries.Count",
"url_user": "https:\/\/{user}.bull36.com\/app\/Entries.Count",
"url_domain": "https:\/\/{domain}\/app\/Entries.Count",
"method": "POST",
"headers": {
"Authorization": "Bearer YOUR TOKEN"
},
"body": {
"entry_id": "7",
"customer_id": "123"
},
"sample_output": {
"success": 1,
"count": 123
},
"notes": {
"route": "Entries.Count",
"max_limit": 25
}
}Count JavaScript
const token = 'YOUR TOKEN';
const body = new URLSearchParams();
body.set('entry_id', '7');
body.set('customer_id', '123');
const res = await fetch('https://{domain}/app/Entries.Count', {
method: 'POST',
headers: { Authorization: `Bearer ${token}` },
body
});
const data = await res.json();
console.log(data.count);JavaScript Example
const token = 'YOUR TOKEN';
const basicRes = await fetch('/app/User.Basic', { method: 'POST', headers: { Authorization: `Bearer ${token}` } });
const basic = await basicRes.json();
const entry = basic.data.entries.list[0];
const body = new URLSearchParams({ entry_id: String(entry.id), limit: '25' });
const res = await fetch('/app/Entries.List', { method: 'POST', headers: { Authorization: `Bearer ${token}` }, body });
const data = await res.json();
console.log(entry.name, data.data);Error Example
{
"success": 0,
"message": "Missing required parameter: entry_id"
}