POST

Customer.List

Return a clean JSON customer list with paging, filters, ordering, tags, folders, and supported custom-field filters. The maximum page size is 25.

Permissions

  • User sees only customers allowed by account permissions, team access, folder access, and sharing rules.

Action

  • Returns customer rows with filters and paging.
  • Caps page size to 25.
  • Returns total/count fields when available.

Push Service

No push is sent because this is a read method.

Automation

No automation is run because this is a read method.

Special Instructions

  • For total rows, call Customer.Count with the same filters.
  • Keep length, limit, or per_page at 25 or less.

Required Parameters

No body parameters are required for this function.

Optional Parameters

NameTypeSampleWhat it gives
start
post
int0First row offset for paging.
length
post
int25Maximum number of rows to return. Values above 25 are capped to 25.
draw
post
int1Optional datatable draw counter.
search[value]
post
stringjohnDatatable search text.
filter_data
post
stringjohnSearch text or filter value supported by the customer list.
show_sub_customer_on_check
post
int0When 1, includes sub-customers in the list when allowed.
include_trash_customer
post
int0Includes archived customers when set to 1. Default list keeps archive = 0.
get_folder_wise_client
post
mixed1Folder filter value for customer lists.
check_fields_of_folder
post
int1Optional flag used together with folder filters.
folder_id
post
int1Customer folder/status filter when used by the account.
folder
post
mixed1,2One or more folder ids for customer folder filtering.
status_id
post
int1Filters by customer status when the account uses status_id.
get_status_wise_client
post
mixed1Customer status filter value.
status_wise_client_new
post
mixed1Folder status filter value.
internal_status_wise_client_new
post
mixed1Folder sub-status filter value.
tag
post
string1Filters by one or more customer tag ids when supported.
source
post
stringwebsiteFilters by lead/customer source.
team_member_id
post
int24209Dashboard "Team member" filter. Matches contactus.shared_with LIKE %"id"% (same as total_filters_fields=shared_with). Aliases: get_shared_with_wise_client, get_shared_with_wise_client_new.
get_customer_manager_wise_client_new
post
mixed47Dashboard customer-manager filter. Matches contactus.customer_manager. Alias: customer_manager_id.
get_shared_with_wise_client
post
mixed24209Same as team_member_id: filter customers shared with this team member id.
get_shared_with_wise_client_new
post
mixed24209Same as team_member_id / get_shared_with_wise_client.
get_campaigns_wise_client
post
mixed123Campaign customer filter value.
from_date
post
date2026-07-01Filters customers created or updated from this date when the list supports date filtering. Send date filters and date values as UTC Y-m-d H:i:s when the route accepts date/time; date-only table columns store the Y-m-d date part.
to_date
post
date2026-07-17Filters customers created or updated until this date when the list supports date filtering. Send date filters and date values as UTC Y-m-d H:i:s when the route accepts date/time; date-only table columns store the Y-m-d date part.
date_field
post
stringdate_createdDate column selector for from_date/to_date. Supports date_created, last_updated, updated, followup, and date_of_due.
created_from
post
date2026-07-01Filters customers created from this date. Send date filters and date values as UTC Y-m-d H:i:s when the route accepts date/time; date-only table columns store the Y-m-d date part.
created_to
post
date2026-07-17Filters customers created until this date. Send date filters and date values as UTC Y-m-d H:i:s when the route accepts date/time; date-only table columns store the Y-m-d date part.
updated_from
post
date2026-07-01Filters customers updated from this date. Send date filters and date values as UTC Y-m-d H:i:s when the route accepts date/time; date-only table columns store the Y-m-d date part.
updated_to
post
date2026-07-17Filters customers updated until this date. Send date filters and date values as UTC Y-m-d H:i:s when the route accepts date/time; date-only table columns store the Y-m-d date part.
extra_fields[field_name]
post
mixedgoldFilters by a customer custom field when supported. Replace field_name with a key from User.Basic field_settings.customer.extra_fields.
custom_field
post
stringvip_levelCustom field name for list filtering when the dashboard list accepts custom_field/custom_field_value.
custom_field_value
post
mixedgoldCustom field value paired with custom_field.
order[0][column]
post
int0Datatable column index to order by when supported by the customer list.
order[0][dir]
post
stringdescOrder direction: asc or desc.
limit
post
int25Maximum number of rows to return. Values above 25 are capped to 25.
per_page
post
int25Alternative page-size field. Values above 25 are capped to 25.
search
post
stringjohnSearch text for list routes when supported.
order_by
post
stringdate_createdColumn/key to order by when supported.
sort
post
stringdate_descSort preset when supported.
order_dir
post
stringdescOrder direction: asc or desc.
tag_id
post
mixed1Tag id filter when the list supports tags.

Authentication

Send the bearer token returned by Login in the request header.

Authorization: Bearer YOUR TOKEN

Sample Request

{
    "url": "\/app\/Customer.List",
    "method": "POST",
    "headers": {
        "Authorization": "Bearer YOUR TOKEN"
    },
    "body": {
        "start": "0",
        "length": "25",
        "folder_id": "1"
    },
    "url_user": "https:\/\/{user}.bull36.com\/app\/Customer.List",
    "url_domain": "https:\/\/{domain}\/app\/Customer.List"
}

Endpoint

POST /app/Customer.List
POST https://{user}.bull36.com/app/Customer.List
POST https://{domain}/app/Customer.List

Sample Output

{
    "success": "1",
    "recordsTotal": 25,
    "recordsFiltered": 25,
    "data": [
        {
            "id": "123",
            "customer_id": "123",
            "name": "John Demo",
            "mobile": "0500000000",
            "email": "[email protected]"
        }
    ]
}

Fail Response

{
    "success": 0,
    "message": "Bearer token is required"
}

Count Only

Use the matching count route with the same filters when the UI only needs total rows for paging.

{
    "url": "\/app\/Customer.Count",
    "url_user": "https:\/\/{user}.bull36.com\/app\/Customer.Count",
    "url_domain": "https:\/\/{domain}\/app\/Customer.Count",
    "method": "POST",
    "headers": {
        "Authorization": "Bearer YOUR TOKEN"
    },
    "body": {
        "folder_id": "1"
    },
    "sample_output": {
        "success": 1,
        "count": 123
    },
    "notes": {
        "recordsTotal": "Total customers before filtering when returned.",
        "recordsFiltered": "Total customers after filtering when returned.",
        "data_count": "Use count(data) when only rows are returned."
    }
}

Count JavaScript

const token = 'YOUR TOKEN';
const body = new URLSearchParams();
body.set('folder_id', '1');

const res = await fetch('https://{domain}/app/Customer.Count', {
  method: 'POST',
  headers: { Authorization: `Bearer ${token}` },
  body
});
const data = await res.json();
console.log(data.count);

JavaScript Example

const token = 'YOUR TOKEN';
const body = new URLSearchParams({
  start: '0',
  length: '25',
  folder_id: '1'
});

const res = await fetch('/app/Customer.List', {
  method: 'POST',
  headers: { Authorization: `Bearer ${token}` },
  body
});

const data = await res.json();
console.log(data);

Error Example

{
    "success": "0",
    "error": "bearer_token_required",
    "message": "Authorization bearer token is required. Send header: Authorization: Bearer YOUR TOKEN"
}