GET/ users/ search/ ?custom_attr__gte=:10
Filter users by custom attribute
You can return users based on their custom attributes.
| Attributes | Type | Required | Description |
|---|---|---|---|
| custom_attr | string | yes | A name of your custom attribute. |
| Lookups | Works with | Description |
|---|---|---|
| __lt | integer | less than |
| __lte | integer | less than or equal |
| __gt | integer | greater than |
| __gte | integer | greater than or equal |
| __startswith | string | value of given attribute starts with (case sensitive) |
| __istartswith | string | value of given attribute starts with (case insensitive) |
| __endswith | string | value of given attribute ends with (case sensitive) |
| __iendswith | string | value of given attribute ends with (case insensitive) |
| __contains | string | value of given attribute contains string (case insensitive) |
| __icontains | string | value of given attribute contains string (case insensitive) |
Request
- cURL
- JavaScript
- PHP
- Python
curl -X GET "https://<your_app_subdomain>.user.com/api/public/users/search/?custom_attr__gte=:10" \
-H "Authorization: Token <your_64_char_api_key>" \
-H "Accept: */*; version=2"
const response = await fetch(
"https://<your_app_subdomain>.user.com/api/public/users/search/?custom_attr__gte=:10",
{
method: "GET",
headers: {
Authorization: "Token <your_64_char_api_key>",
Accept: "*/*; version=2",
},
},
);
const data = await response.json();
console.log(data);
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://<your_app_subdomain>.user.com/api/public/users/search/?custom_attr__gte=:10",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Token <your_64_char_api_key>",
"Accept: */*; version=2",
],
]);
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import requests
response = requests.get(
"https://<your_app_subdomain>.user.com/api/public/users/search/?custom_attr__gte=:10",
headers={
"Authorization": "Token <your_64_char_api_key>",
"Accept": "*/*; version=2",
},
)
print(response.json())
Response examples
- 200 OK
{"count": 1,"next": null,"previous": null,"results": [{"id": 1924,"user_key": "g7lvoickax9e","name": "Alexandra Doe","email": "johndoe@example.com","gender": "unknown","status": "visitor","phone_number": null,"first_seen": null,"last_seen": null,"page_views": 0,"last_ip": null,"timezone": null,"city": null,"region": null,"country": null,"unsubscribed": true,"browser_language": null,"widget_language": null,"score": 0,"browser": null,"os_type": null,"resolution": null,"created_at": "2026-11-10T14:20:02.361287Z","updated_at": "2026-11-10T14:20:04.790980Z","companies": [],"gravatar_url": null,"lists": [],"tags": [],"notifications": true,"facebook_url": null,"linkedin_url": null,"twitter_url": null,"google_url": null,"last_contacted": null,"custom_id": "alex","web_push_subscription": false,"assigned_to": null,"most_active_time": null,"lt_opened_email": null,"lt_clicked_email": null,"email_mx_valid": true,"referrer": null,"last_heard_from": null,"spambounced": false,"softbounced": false,"hardbounced": false,"marked_email_as_spam": true,"email_opt_in": null,"email_tracking_optin": null}]}Response fields
Fields returned in the 200 OK response body.
| Field | Type | Description |
|---|---|---|
countinteger | integer | Number of results across all pages. It can lag behind recent changes; see Response pagination. |
nextstring (URL)nullable | string (URL)nullable | URL of the next page of results. null on the last page. |
previousstring (URL)nullable | string (URL)nullable | URL of the previous page of results. null on the first page. |
array of objects | array of objects | Results on this page. |
results[].integer | integer | A unique identifier for the user which is given by User automatically. |
results[].string | string | A unique identifier (12 random characters) for the user which is given by User automatically. |
results[].string | string | Read-only attribute, made from the combination of the first_name and last_name attributes. |
results[].string | string | A user email |
results[].string | string | unknown (default), male or female. Not detected automatically. |
results[].string | string | user if the contact's email address has been sent to User through the code on your website, otherwise visitor. |
results[].stringnullable | stringnullable | A user phone number |
results[].stringnullable | stringnullable | A date for user's first website visit. |
results[].datetimenullable | datetimenullable | A date of last user's website visit. |
results[].integer | integer | A total number of user's page visits occurrences. |
results[].stringnullable | stringnullable | An address IP (identifier assigned to each device, e.g., laptop, printer, mobile etc.) from the last user visit. |
results[].stringnullable | stringnullable | A timezone of the user's browser. |
results[].stringnullable | stringnullable | City of the contact's last visit, based on the IP address. |
results[].stringnullable | stringnullable | Region of the contact's last visit, based on the IP address. |
results[].stringnullable | stringnullable | Country of the contact's last visit, based on the IP address. |
results[].boolean | boolean | A flag true/false informing if user is unsubscribed from emails. |
results[].stringnullable | stringnullable | A user's browser language |
results[].stringnullable | stringnullable | Language of the chat widget for this contact, used when the widget is set to follow it; null if not set. |
results[].integer | integer | A number of points assinged to the user. |
results[].stringnullable | stringnullable | A name of user's browser last used to visit your website. |
results[].stringnullable | stringnullable | An operating system of the user’s device |
results[].stringnullable | stringnullable | A screen resolution of the device the user has visited your website. |
results[].string (date-time) | string (date-time) | A creation date of a user. |
results[].string (date-time) | string (date-time) | A date of last user update. |
results[].array | array | Companies the contact is a member of, each with id, name and member_since. |
results[].stringnullable | stringnullable | A user avatar url from gravatar. |
results[].array | array | A list of lists assigned to the user. |
results[].array | array | A list of tag names. |
results[].boolean | boolean | A flag true/false informing if your team is receiving notifications about new chat messages from this user. |
results[].stringnullable | stringnullable | A URL of user's Facebook profile. |
results[].stringnullable | stringnullable | A URL of user's LinkedIn profile. |
results[].stringnullable | stringnullable | A URL of user's Twitter profile. |
results[].stringnullable | stringnullable | A URL of user's Google+ profile. |
results[].datetimenullable | datetimenullable | A date of last contact with user - any communication (email or chat, automated or otherwise) sent from your team to the user. |
results[].string | string | The unique identifier for the user which is provided by the client. |
results[].boolean | boolean | true if the contact has at least one web push subscription. |
results[].integernullable | integernullable | ID of the agent group the contact is assigned to, or null. |
results[].stringnullable | stringnullable | Most Active Time is an attribute that is based on historical data determined by the hours of previous use and the most likely active use. Time in this attribute is positioned in the UTC timezone, and there's no possible way to change the timezone for the attribute. |
results[].string (date-time)nullable | string (date-time)nullable | When the contact last opened one of your emails. |
results[].string (date-time)nullable | string (date-time)nullable | When the contact last clicked a link in one of your emails. |
results[].boolean | boolean | Whether the email address passed User's validation; set to false after a hard bounce. |
results[].stringnullable | stringnullable | URL of the page the contact came to your website from. |
results[].string (date-time)nullable | string (date-time)nullable | When the contact last sent your team a message (chat or email). Emails count only once your inbox is connected over IMAP. |
results[].boolean | boolean | true once an email to the contact bounced as spam. |
results[].boolean | boolean | true once an email to the contact soft-bounced. |
results[].boolean | boolean | true once an email to the contact hard-bounced or was dropped. |
results[].boolean | boolean | Defaults to true and isn't changed when emails bounce; check spambounced for spam bounces. |
results[].booleannullable | booleannullable | Email marketing consent: true given, false refused, null not recorded. |
results[].booleannullable | booleannullable | Consent to email open and click tracking: true given, false refused, null not recorded. |
note
Errors that can come from any endpoint (401, 429, 500, 502, 504) are described in HTTP response codes.