List people in your workspace with optional filtering, sorting, and cursor-based pagination. Default page size is 60.
Parameters
limitnumber
Records per page (default 60)
starting_afterUUID
Pagination cursor pass last record's ID
order_bystring
e.g. createdAt[DescNullsLast]
filterstring
Filter expression always URL-encode
depthnumber
0 = records only (default)
Requestcurl
# 20 most recently created people
curl -G "https://app.usedalil.ai/rest/people" \
-H "Authorization: Bearer YOUR_API_KEY" \
--data-urlencode "limit=20" \
--data-urlencode "order_by=createdAt[DescNullsLast]"
# People at a specific company
curl -G "https://app.usedalil.ai/rest/people" \
-H "Authorization: Bearer YOUR_API_KEY" \
--data-urlencode "filter=companyId[eq]:company-uuid" \
--data-urlencode "depth=1"
PATCH/rest/people/{id}
Update specific fields on a person. Send only the fields you want to change omitted fields are left unchanged.
filter=companyId[eq]:company-uuid # At a specific company
filter=jobTitle[ilike]:engineer # Job title contains "engineer"
filter=companyId[is]:NULL # No company assigned
filter=emails.primaryEmail[ilike]:john@example.com
filter=linkedinLink.primaryLinkUrl[ilike]:linkedin.com/in/johnsmith
filter=createdAt[gte]:2026-01-01T00:00:00.000Z
Common Gotchas
⚠
Name is nestedUse { "name": { "firstName": "John" } } a flat firstName field is ignored.
⚠
Link fields need full structure{ primaryLinkUrl, primaryLinkLabel, secondaryLinks: [] } a bare URL string won't work.
⚠
Phone search splits the numberFilter both phones.primaryPhoneCallingCode and phones.primaryPhoneNumber separately.
⚠
Email filter is nestedUse emails.primaryEmail[ilike]:value, not primaryEmail[ilike]:value.
⚠
id[in] needs bracketsUse id[in]:[uuid1,uuid2] brackets are required or you'll get a 500.
⚠
Always URL-encode filtersFilter strings contain [ ] : characters that break raw URLs.