curl --request POST \
--url https://api.studio.prisme.ai/v2/contacts \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"email": "<string>",
"text": "<string>",
"ids": [
"<string>"
],
"firstName": "<string>",
"lastName": "<string>",
"authProvider": "<string>",
"platformRole": "<string>",
"groups": [
"<string>"
],
"includeOrgMembership": "<string>"
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
email: '<string>',
text: '<string>',
ids: ['<string>'],
firstName: '<string>',
lastName: '<string>',
authProvider: '<string>',
platformRole: '<string>',
groups: ['<string>'],
includeOrgMembership: '<string>'
})
};
fetch('https://api.studio.prisme.ai/v2/contacts', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.studio.prisme.ai/v2/contacts"
payload = {
"email": "<string>",
"text": "<string>",
"ids": ["<string>"],
"firstName": "<string>",
"lastName": "<string>",
"authProvider": "<string>",
"platformRole": "<string>",
"groups": ["<string>"],
"includeOrgMembership": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"contacts": [
{
"firstName": "<string>",
"lastName": "<string>",
"emailMasked": "<string>",
"language": "<string>",
"photo": "<string>",
"status": "pending",
"meta": {},
"groups": [
"<string>"
],
"identities": [
"<string>"
],
"mfa": "totp",
"membership": {
"roleSlug": "<string>",
"status": "active",
"joinedAt": "<string>",
"joinedVia": "direct",
"invitedAt": "<string>",
"invitedBy": "<string>"
},
"id": "<string>"
}
],
"size": 123
}{
"error": "ForbiddenError",
"message": "Forbidden"
}{
"error": "ObjectNotFound",
"message": "<string>"
}Find Contacts
Retrieve some public contacts. Standard members can look up an exact email/id, or — when they belong to an organization — search users by name/email prefix (via text) strictly scoped to a single organization they belong to (their session-active org by default, or an orgSlug they are a member of); results are minimal and expose only a masked email (emailMasked). Elevated callers (super admin, or org admin with orgs:members:manage) get the full cross-field search and private fields. Rate limited per user.
curl --request POST \
--url https://api.studio.prisme.ai/v2/contacts \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"email": "<string>",
"text": "<string>",
"ids": [
"<string>"
],
"firstName": "<string>",
"lastName": "<string>",
"authProvider": "<string>",
"platformRole": "<string>",
"groups": [
"<string>"
],
"includeOrgMembership": "<string>"
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
email: '<string>',
text: '<string>',
ids: ['<string>'],
firstName: '<string>',
lastName: '<string>',
authProvider: '<string>',
platformRole: '<string>',
groups: ['<string>'],
includeOrgMembership: '<string>'
})
};
fetch('https://api.studio.prisme.ai/v2/contacts', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.studio.prisme.ai/v2/contacts"
payload = {
"email": "<string>",
"text": "<string>",
"ids": ["<string>"],
"firstName": "<string>",
"lastName": "<string>",
"authProvider": "<string>",
"platformRole": "<string>",
"groups": ["<string>"],
"includeOrgMembership": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"contacts": [
{
"firstName": "<string>",
"lastName": "<string>",
"emailMasked": "<string>",
"language": "<string>",
"photo": "<string>",
"status": "pending",
"meta": {},
"groups": [
"<string>"
],
"identities": [
"<string>"
],
"mfa": "totp",
"membership": {
"roleSlug": "<string>",
"status": "active",
"joinedAt": "<string>",
"joinedVia": "direct",
"invitedAt": "<string>",
"invitedBy": "<string>"
},
"id": "<string>"
}
],
"size": 123
}{
"error": "ForbiddenError",
"message": "Forbidden"
}{
"error": "ObjectNotFound",
"message": "<string>"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Query Parameters
Page number
Page size
User signed up before that date (ISO8601), reserved to super admins
User signed up before that date (ISO8601), reserved to super admins
Filter users by organization slug. Super admins / root may filter by any organization; org admins (with orgs:members:manage) and standard members may filter only by an organization they belong to — passing another org returns a 403. For standard members this overrides the default session-active org scope (e.g. to search a different org they are a member of).
Match users whose denormalized identities[] contains this exact string. Super admins only.
Body
Search in both email & id
^[0-9A-Za-zÀ-ÖØ-öø-ÿ ,.'- ]{1,60}$^[0-9A-Za-zÀ-ÖØ-öø-ÿ ,.'- ]{1,60}$pending, validated, deactivated Org slug — enrich contacts with membership data from this org (requires super admin or org admin permissions)
Response
Success Response
Hide child attributes
Hide child attributes
Name
Name
Partially masked email (e.g. "j***@acme.com"), returned to non-elevated callers in place of the clear-text email to disambiguate homonyms without exposing the full address.
Profile picture URL
pending, validated, deactivated Denormalized ":" tuples (super admin only).
Current MFA method (super admin only).
totp, none, * Organization membership info (only returned when includeOrgMembership is set)
Hide child attributes
Hide child attributes
active, invited, suspended direct, invite-code, invite-email, auto-join, join-rule Unique id
Total number of matching contacts
Was this page helpful?