Get contacts grid
Returns a paginated, filterable, and sortable grid of all contacts in the workspace.
What are Contacts? The contacts grid provides a unified view of all people in your workspace:
- Employees: Internal team members from your own company
- Organization Members: External contacts from partner or customer organizations
This unified view allows you to search, filter, and manage all contacts in one place, regardless of whether they are internal employees or external contacts.
What is returned:
- Contact identification (ID, name, type)
- Contact information (email, phone, position, title, degree)
- Organization information (for organization members)
- Complete address details
- Employee-specific fields (employment mode, entry/exit dates, tax class)
- Organization member-specific fields (influence level, attitude, personality type)
- Status information (active, can login)
- Personal details (birth date, gender, avatar)
Filtering and search:
- Quick search across name, email, phone, position, organization, and address fields
- Advanced filtering by contact type, status, organization, and many other fields
- Sorting by any sortable field
- Server-side pagination for large contact lists
Note: This endpoint requires the Contacts.canSeeContacts permission. The contacts grid is the foundation for the Address Book feature, which can be synced via CardDAV or exported as vCard.
GET
/contacts/gridAuthorization
AuthorizationOAuth2 access token · headerrequiredScopes:
api:reador
AuthorizationBearer token (JWT) · headerrequiredQuery parameters
pagenumberPage number (1-based)
pageSizenumberNumber of items per page
viewIdstringView identifier for saved grid configurations
quickSearchstringQuick search text. Searches across: firstName, lastName, email, phone, position, organizationName, addressStreet, addressZip, addressCity, addressCountry, addressHouseNumber
filtersstringJSON string containing filter configuration.
**Available Fields:**
- **id** (string): Contact ID
- **type** (set): Contact type (EMPLOYEE, ORGANIZATION_MEMBER)
- **firstName** (string): First name
- **lastName** (string): Last name
- **email** (string): Email address
- **phone** (string): Phone number
- **position** (string): Job position
- **title** (string): Title (e.g., Dr., Prof.)
- **degree** (string): Academic degree
- **organizationId** (string): Organization ID (for organization members)
- **organizationName** (string): Organization name (for organization members)
- **addressStreet** (string): Street address
- **addressZip** (string): ZIP/Postal code
- **addressCity** (string): City
- **addressCountry** (string): Country
- **addressHouseNumber** (string): House number
- **avatarId** (string): Avatar file ID
- **isActive** (boolean): Whether contact is active
- **canLogin** (boolean): Whether contact can login to the system
- **employmentMode** (string): Employment mode (for employees)
- **entryDate** (date): Entry date (for employees)
- **exitDate** (date): Exit date (for employees)
- **incomeTaxClass** (string): Income tax class (for employees)
- **influenceLevel** (string): Influence level (for organization members)
- **attitudeLevel** (string): Attitude level (for organization members)
- **personalityType** (string): Personality type (for organization members)
- **socialNetworkLink** (string): Social network profile link (for organization members)
- **birthDate** (date): Birth date
- **gender** (string): Gender
- **createdAt** (date): Creation timestamp
**Filter Structure:**
```json
[
{
"type": "string|number|date|set|boolean|array|task_status|task_type",
"fieldName": "field_name",
"value": {
"comparison": "comparison_type",
"value": "filter_value"
}
}
]
```
**Group Filters (AND/OR Combinations):**
```json
[
{
"type": "group",
"fieldName": "group0.18807479823070028",
"value": {
"type": "or",
"filters": [
{
"type": "string",
"fieldName": "fileName",
"value": {
"comparison": "contain",
"value": "aa"
}
},
{
"type": "number",
"fieldName": "rowCount",
"value": {
"comparison": ">=",
"value": 33
}
}
]
}
}
]
```
**Available Comparison Operators:**
- **id** (string): Contact ID (string filter). Available comparisons: contain, not_contain, equal, starts_with, ends_with, is_empty, is_not_empty
- **type** (set): Contact type (EMPLOYEE, ORGANIZATION_MEMBER) (set filter). Available comparisons: in, not_in, is_empty, is_not_empty
- **firstName** (string): First name (string filter). Available comparisons: contain, not_contain, equal, starts_with, ends_with, is_empty, is_not_empty
- **lastName** (string): Last name (string filter). Available comparisons: contain, not_contain, equal, starts_with, ends_with, is_empty, is_not_empty
- **email** (string): Email address (string filter). Available comparisons: contain, not_contain, equal, starts_with, ends_with, is_empty, is_not_empty
- **phone** (string): Phone number (string filter). Available comparisons: contain, not_contain, equal, starts_with, ends_with, is_empty, is_not_empty
- **position** (string): Job position (string filter). Available comparisons: contain, not_contain, equal, starts_with, ends_with, is_empty, is_not_empty
- **title** (string): Title (e.g., Dr., Prof.) (string filter). Available comparisons: contain, not_contain, equal, starts_with, ends_with, is_empty, is_not_empty
- **degree** (string): Academic degree (string filter). Available comparisons: contain, not_contain, equal, starts_with, ends_with, is_empty, is_not_empty
- **organizationId** (string): Organization ID (for organization members) (string filter). Available comparisons: contain, not_contain, equal, starts_with, ends_with, is_empty, is_not_empty
- **organizationName** (string): Organization name (for organization members) (string filter). Available comparisons: contain, not_contain, equal, starts_with, ends_with, is_empty, is_not_empty
- **addressStreet** (string): Street address (string filter). Available comparisons: contain, not_contain, equal, starts_with, ends_with, is_empty, is_not_empty
- **addressZip** (string): ZIP/Postal code (string filter). Available comparisons: contain, not_contain, equal, starts_with, ends_with, is_empty, is_not_empty
- **addressCity** (string): City (string filter). Available comparisons: contain, not_contain, equal, starts_with, ends_with, is_empty, is_not_empty
- **addressCountry** (string): Country (string filter). Available comparisons: contain, not_contain, equal, starts_with, ends_with, is_empty, is_not_empty
- **addressHouseNumber** (string): House number (string filter). Available comparisons: contain, not_contain, equal, starts_with, ends_with, is_empty, is_not_empty
- **avatarId** (string): Avatar file ID (string filter). Available comparisons: contain, not_contain, equal, starts_with, ends_with, is_empty, is_not_empty
- **isActive** (boolean): Whether contact is active (boolean filter). Available comparisons: equal, not_equal
- **canLogin** (boolean): Whether contact can login to the system (boolean filter). Available comparisons: equal, not_equal
- **employmentMode** (string): Employment mode (for employees) (string filter). Available comparisons: contain, not_contain, equal, starts_with, ends_with, is_empty, is_not_empty
- **entryDate** (date): Entry date (for employees) (date filter). Available comparisons: equal, not_equal, >, <, >=, <=, between, lastMonth, thisMonth, is_empty, is_not_empty
- **exitDate** (date): Exit date (for employees) (date filter). Available comparisons: equal, not_equal, >, <, >=, <=, between, lastMonth, thisMonth, is_empty, is_not_empty
- **incomeTaxClass** (string): Income tax class (for employees) (string filter). Available comparisons: contain, not_contain, equal, starts_with, ends_with, is_empty, is_not_empty
- **influenceLevel** (string): Influence level (for organization members) (string filter). Available comparisons: contain, not_contain, equal, starts_with, ends_with, is_empty, is_not_empty
- **attitudeLevel** (string): Attitude level (for organization members) (string filter). Available comparisons: contain, not_contain, equal, starts_with, ends_with, is_empty, is_not_empty
- **personalityType** (string): Personality type (for organization members) (string filter). Available comparisons: contain, not_contain, equal, starts_with, ends_with, is_empty, is_not_empty
- **socialNetworkLink** (string): Social network profile link (for organization members) (string filter). Available comparisons: contain, not_contain, equal, starts_with, ends_with, is_empty, is_not_empty
- **birthDate** (date): Birth date (date filter). Available comparisons: equal, not_equal, >, <, >=, <=, between, lastMonth, thisMonth, is_empty, is_not_empty
- **gender** (string): Gender (string filter). Available comparisons: contain, not_contain, equal, starts_with, ends_with, is_empty, is_not_empty
- **createdAt** (date): Creation timestamp (date filter). Available comparisons: equal, not_equal, >, <, >=, <=, between, lastMonth, thisMonth, is_empty, is_not_empty
**Note:** Use `quickSearch` parameter for simple text search instead of adding it to filters.
sortstringJSON array of sort objects.
**Sortable Fields:**
- **id**: Contact ID
- **type**: Contact type (EMPLOYEE, ORGANIZATION_MEMBER)
- **firstName**: First name
- **lastName**: Last name
- **name**: Full name (firstName + lastName, virtual field)
- **position**: Job position
- **organizationId**: Organization ID (for organization members)
- **organizationName**: Organization name (for organization members)
- **addressCity**: City
- **addressCountry**: Country
- **isActive**: Whether contact is active
- **canLogin**: Whether contact can login to the system
- **employmentMode**: Employment mode (for employees)
- **entryDate**: Entry date (for employees)
- **exitDate**: Exit date (for employees)
- **influenceLevel**: Influence level (for organization members)
- **attitudeLevel**: Attitude level (for organization members)
- **personalityType**: Personality type (for organization members)
- **birthDate**: Birth date
- **createdAt**: Creation timestamp
**Sort Structure:**
```json
[
{
"field": "field_name",
"direction": "asc|desc"
}
]
```
**Default Sort:** name (asc)
fieldsToReturnany[]Comma-separated list of field names to include in response items. If not provided, all fields are returned.
**Available Fields:** id, type, firstName, lastName, name, email, phone, position, title, degree, organizationId, organizationName, addressStreet, addressZip, addressCity, addressCountry, addressHouseNumber, avatarId, isActive, canLogin, employmentMode, entryDate, exitDate, incomeTaxClass, influenceLevel, attitudeLevel, personalityType, socialNetworkLink, birthDate, gender, createdAt
Responses
200Successfully retrieved contacts grid
401Unauthorized - Invalid or missing authentication token
403Forbidden - Insufficient API scopes or permissions
Request
curl -X GET "https://leadtime.app/api/public/contacts/grid" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"const response = await fetch("https://leadtime.app/api/public/contacts/grid", {
method: "GET",
headers: {
"Authorization": "Bearer YOUR_ACCESS_TOKEN"
}
});import requests
response = requests.get(
"https://leadtime.app/api/public/contacts/grid",
headers={
"Authorization": "Bearer YOUR_ACCESS_TOKEN"
},
)Response
Successfully retrieved contacts grid
Unauthorized - Invalid or missing authentication token
Forbidden - Insufficient API scopes or permissions