You can search for multiple customers by the value of their attributes in order to fetch exactly the ones you want.
➡️ Request
| URL | https://api.helpcrunch.com/v1/customers/search | 
| Method | POST | 
| Headers | Authorization: Bearer <your_api_key> | 
Search filters should be placed to the body of your POST request. Check a couple of examples below.
Read more about authorization header here.
Example: Search with a single filter
{
	"filter": [
        {
            "field": "customers.email",
			"operator": "~",
			"value": "gmail"
        }
	],
	"limit": 5,
	"offset": 0,
	"sort": "customers.firstSeen",
	"order": "DESC"
}
Example: Search with multiple filters
If you want to get customers that match all the filters, use "comparison": "AND" attribute in the body of your POST request. To fetch customers matching any of the given filters, use OR value instead.
{
  "comparison": "AND",
  "filter": [
    {
      "field": "customers.name",
      "operator": "=",
      "value": "John"
    },
    {
      "field": "customers.id",
      "operator": ">",
      "value": 18
    },
    {
      "field": "customers.lastSeen",
      "operator": ">=",
      "value": 1603885746
    },
    {
      "field": "customers.tagsData",
      "operator": "=",
      "value": [
        {
          "name": "Lead"
        }
      ]
    }
  ],
  "sort": "customers.firstSeen",
  "order": "desc",
  "offset": 0,
  "limit": 100
}
Accepted searchable fields
| Field | Type | Description | 
| customers.id | Integer | Unique id of the customer provided by HelpCrunch | 
| customers.telegramId | String | Unique id of the customer provided by Telegram. | 
| customers.facebookId | String | Unique id of the customer provided by Facebook. | 
| customers.instagramId | String | Unique id of the customer provided by Instagram. | 
| customers.viberId | String | Unique id of the customer provided by Viber. | 
| customers.whatsappId | String | Unique id of the customer provided by WhatsApp. | 
| customers.name | String | Customer name | 
| customers.email | String | Customer email | 
| customers.company | String | Customer company | 
| customers.phone | String | Customer phone number | 
| customers.countryCode | String | Customer country code | 
| customers.city | String | Customer city | 
| customers.regionCode | String | Customer region code | 
| customers.tagsData | Array of Strings | Tags assigned to the chat, e.g. [{"name": "Lead"}, {"name": "Paid"}] | 
| customers.lastSeen | Date (UNIX timestamp) | Date and time of customer's last visit | 
| customers.userId | String | Unique id of the customer that you can pass to HelpCrunch with User Authentication | 
Accepted operators
| Operator | Valid Field Data Types | Description | 
| = | All data types | Equals | 
| != | All data types (except arrays) | Doesn't Equal | 
| > | Integer or Date (UNIX Timestamp) | Greater than | 
| < | Integer or Date (UNIX Timestamp) | Lower than | 
| >= | Integer or Date (UNIX Timestamp) | Greater than or equal | 
| <= | Integer or Date (UNIX Timestamp) | Lower than or equal | 
| ~ | String | Contains | 
| !~ | String | Doesn't Contain | 
Sorting options
To specify the sorting type, you should add sort and order attributes to the body of your POST request.
    "sort": "customers.firstSeen",
    "order": "ASC"
You can sort customers by the following fields:
| Field | Description | 
| customers.firstSeen | by date of the customers' first visit | 
| customers.lastSeen | by date of the customers' last visit | 
To sort customers in descending order, use DESC value. For ascending order use ASC value.
✅ Successful Response
If your request has succeeded, you'll get a 200 OK success status code together with the following response body.
{
  "data": [
    {
      "id": 542335,
      "name": "John Doe",
      "email": "[email protected]",
      "userId": "user_1234567890",
      "company": "Example Inc.",
      "phone": "+10233456781",
      "firstSeen": "1603885746",
      "lastSeen": "1603885746",
      "location": {
        "regionCode": "Kyyivs'ka Oblast",
        "countryCode": "UA",
        "city": "Kyiv"
      },
      "device": {
        "id": 542335,
        "ip": "192.168.1.1",
        "timezone": "Europe/Kiev",
        "platform": "desktop",
        "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36"
      },
      "unsubscribed": false,
      "blocked": false,
      "source": "https://example.com",
      "referer": "https://example.com",
      "lastPage": "https://example.com",
      "locale": "uk",
      "createdFrom": "telegram",
      "integrationId": "465847687",
      "notes": "Lorem ipsum",
      "tags": [
        {
          "name": "vip",
          "color": "#ff0000"
        }
      ],
      "customData": {
        "subscription_status": "active",
        "number_of_payments": 15,
        "last_paid_amount": 15.99,
        "last_payment_date": 1603885746,
        "last_invoice_url": "https://example.com/invoice.html",
        "last_payment_was_successful": true
      }
    }
  ],
  "total": 256
}
You can get details on every Customer Object field in the Customer model article.
Limits
By default, this method returns only the first 100 customers. To get a different set of customers, you should use the offset and limit parameters in the body of your POST request.
    "limit": 50,
    "offset": 100,
The overall requests limit is 120 per minute
🛑 Error Responses
You may get one of the following error status codes and responses. More info on the errors is available here.
400 Bad Request
{
  "errors": [
    {
      "code": "invalid_request",
      "message": "Invalid request"
    },
    {
      "code": "customer",
      "message": "This value should be of type numeric."
    },
    {
      "code": "filter[0].field",
      "message": "This value should not be blank."
    }
  ]
}
401 Unauthorized
{
  "errors": [
    {
      "code": "invalid_request",
      "message": "Invalid request"
    },
    {
      "code": "unauthorized",
      "message": "Unauthorized"
    }
  ]
}
429 Too Many Requests
{
  "errors": [
    {
      "code": "invalid_request",
      "message": "Invalid request"
    },
    {
      "code": "too_many_requests",
      "message": "Too many requests"
    }
  ]
}
If you have any questions regarding the REST API, feel free to chat us any time.
👩💻 Happy Coding! 👨💻