---
title: "Search endpoint for contacts"
method: GET
path: "/clients"
tags: ["clients"]
---

# Search endpoint for contacts

`GET /clients`

Returns a paginated list of contacts. This endpoint can fetch up to 50,000 records. Use `/v2/clients/scroll` when you need to iterate over larger result sets.

## Search and filters

- `q` - Searches by contact name, company, email, address, description, warning notice, and phone-like input
- `phone_number` - Searches by exact telephone number. Spaces and hyphens do not matter
- `property_ids` - Finds contacts linked to one or more properties
- `client_status_id` - Finds contacts by client status ID
- `group_ids` - Finds contacts assigned to one or more client group IDs
- `broker_id` - Finds contacts by responsible broker ID
- `team_id` - Finds contacts by team ID
- `updated_at_from` - Finds contacts updated at or after this date
- `updated_at_to` - Finds contacts updated at or before this date

All results are scoped to the authenticated shop. Unknown IDs or IDs that do not belong to that shop simply return no matching contacts.

## Pagination and response shape

- `page` - Page number. Defaults to `1`
- `per` - Number of contacts per page. Defaults to `10`, maximum `1000`
- `with_total` - Set to `true` to include the total matching count
- `fields` - Comma-separated list of response fields to include

## Filtering for empty/null values on custom fields

To filter records where a custom field is empty or not empty, use these special values:

- `__empty__` - Finds records where the field is null, not set, or equals an empty string
- `__not_empty__` - Finds records where the field exists and has a value

## Examples

Find contacts by search query:
`https://api.propstack.de/v2/clients?q=smith`

Find contacts by client status:
`https://api.propstack.de/v2/clients?client_status_id=123`

Find contacts assigned to any of the given groups:
`https://api.propstack.de/v2/clients?group_ids=1,2`

Find contacts by responsible broker:
`https://api.propstack.de/v2/clients?broker_id=45`

Find contacts by team:
`https://api.propstack.de/v2/clients?team_id=9`

Find contacts linked to properties:
`https://api.propstack.de/v2/clients?property_ids=10,11`

Return only selected fields:
`https://api.propstack.de/v2/clients?fields=id,first_name,last_name,email`

Find contacts where custom field "rating" is empty:
`?cf_rating=__empty__`

Find contacts where custom field "notes" has a value:
`?cf_notes=__not_empty__`

If the telephone number `0157 123 456 78` is stored with a contact, the following enquiries can be made:

`https://api.propstack.de/v2/clients?phone_number=015712345678`
or
`https://api.propstack.de/v2/clients?phone_number=0157-123-456-78`

## Query parameters

- `with_total` boolean
- `page` integer
- `per` integer
- `updated_at_from` string, date
- `updated_at_to` string, date
- `phone_number` string
- `q` string
- `client_status_id` integer
- `broker_id` integer
- `team_id` integer

## Response `200`

Search endpoint for contacts

- EndpointsClients — Endpoints_Clients model
  - `data` ClientEntity[]
    - `id` integer
    - `old_crm_id` integer
    - `broker_id` integer
    - `broker_ids` integer[]
    - `second_broker_id` integer
    - `item_id` integer
    - `salutation` string
    - `academic_title` string
    - `first_name` string
    - `last_name` string
    - `name` string
    - `home_address` string
    - `office_address` string
    - `phone` string
    - `home_phone` string
    - `home_cell` string
    - `office_phone` string
    - `office_cell` string
    - `email` string
    - `dob` string
    - `birth_name` string
    - `birth_place` string
    - `birth_country` string
    - `identity_number` string
    - `issuing_authority` string
    - `nationality` string
    - `rating` integer
    - `description` string
    - `company` string
    - `position` string
    - `full_salutation` string
    - `emails` string[]
    - `photo` ClientPhotoEntity
      - `urls` object — Photo URLs by size: original keeps the uploaded dimensions, small is 100x100, medium is 512x512, large is 1024x1024
    - `home_street` string
    - `home_house_number` string
    - `home_zip_code` string
    - `home_city` string
    - `home_country` string
    - `office_street` string
    - `office_house_number` string
    - `office_zip_code` string
    - `office_city` string
    - `office_country` string
    - `tax_identification_number` string
    - `token` string
    - `parent_id` integer
    - `client_status_id` integer
    - `client_source_id` integer
    - `folder_ids` integer[]
    - `group_ids` integer[]
    - `child_ids` integer[]
    - `mailchimp_interest_ids` string[]
    - `delete_with_activities` boolean
    - `client_addresses` ClientAddressEntity
      - `id` integer
      - `value` string
      - `label` string
    - `language` string
    - `custom_fields` object
    - `income` string
    - `handover_date` string
    - `rent_date` string
    - `mvsigned` boolean
    - `hvsigned` boolean
    - `followup_date` string
    - `newsletter` boolean
    - `newsletter_unsubscribed` boolean
    - `property_mailing_wanted` boolean
    - `accept_contact` boolean
    - `locked` boolean
    - `archived` boolean
    - `message_salutation` string
    - `warning_notice` string
    - `pass_type` string
    - `conspicuity` string
    - `legal_form` string
    - `register_number` string
    - `creator_id` integer
    - `updater_id` integer
    - `home_url` string
    - `office_url` string
    - `matrimonial_property_scheme` string
    - `bank_name` string
    - `bank_account_owner` string
    - `bank_iban` string
    - `bank_bic` string
    - `gdpr_status` integer
    - `client_reason_id` integer
    - `project_ids` integer[]
    - `commercial` boolean
    - `has_tipster` boolean
    - `cp_delete_request_date` string
    - `keep_data_till` string
    - `created_at` string
    - `updated_at` string
    - `last_contact_at` string
    - `last_interaction_at` string
    - `last_response_at` string
  - `total` integer — Show the total count of clients

## Other responses

- `400` — validation_error
- `401` — authentication_error
- `403` — authorization_error
- `404` — not_found_error
- `422` — validation_error
- `500` — internal_server_error

---

[API](https://skmtc.net/propstack/apis/propstack-api-v2-beta.md) · [All operations](https://skmtc.net/propstack/apis/propstack-api-v2-beta/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/propstack/propstack-api-v2-beta/revisions/ae1e0fe6da1a/schema)
