Skip to content

Get a person profile

Identity module

GET/person-profiles/{id}personProfiles.get

A person's profile page, owned by the person. New profiles start Private. Returns one person profile with its `ETag`. A person profile the caller may not see returns 404.

  • Requires the capability people.directory.read.
  • OAuth scopes: people.
  • Error statuses: 400, 401, 404, 429. Errors are RFC 9457 problem details.

Path and query parameters

personProfiles.get: Path and query parameters
FieldTypeRequiredDescription
idstring (uuid)YesIdentifier of the person profile.
fieldsFieldsNoSparse fieldset: a comma-separated list of top-level fields to return. `id` is always returned.Constraints: pattern ^[a-z_][a-z0-9_]*(,[a-z_][a-z0-9_]*)*$

Response 200: PersonProfile

personProfiles.get: PersonProfile
FieldTypeRequiredDescription
idstring (uuid)YesIdentifier of the person profile.
created_atstring (date-time)YesWhen the row was created.
updated_atstring (date-time)YesWhen the row was last updated.
person_idstring (uuid)YesIdentifier of the person.
headlinestring | nullYesHeadline.Constraints: length 1 to 300
biostring | nullYesBio.Constraints: length 1 to 20000
pronounsstring | nullYesPronouns, optional.Constraints: length 1 to 300
localitystring | nullYesCity.Constraints: length 1 to 300
countrystring | nullYesISO 3166-1 alpha-2 country code.Constraints: pattern ^[A-Z]{2}$
visibilityProfileVisibilityYesProfile visibility. Sections and fields may be set lower than the profile, never higher.Constraints: one of "Public", "Network", "Private"
search_indexingbooleanYesWhether search engines may index a public profile.
handlestringYesUnique handle for /u/{handle} or /c/{handle}: 3 to 40 lowercase letters, digits and single hyphens. Changeable once every 30 days; the old handle redirects for 90 days.Constraints: pattern ^[a-z0-9]([a-z0-9-]{1,38}[a-z0-9])$
handle_changed_atstring (date-time) | nullYesWhen the handle last changed; null until the first change. Set by the database.
preferred_namestring | nullYesName the person goes by.Constraints: length 1 to 100
{
  "id": "0192f1e2-7c3a-7b4d-9e8f-1a2b3c4d5e6f",
  "created_at": "2026-10-08T14:30:00Z",
  "updated_at": "2026-10-08T14:30:00Z",
  "person_id": "0192f1e2-7c3a-7b4d-9e8f-1a2b3c4d5e6f",
  "headline": "Head Rigger, Festivals and Arenas",
  "bio": "Fifteen years rigging touring shows.",
  "pronouns": "they/them",
  "locality": "Miami",
  "country": "US",
  "visibility": "Private",
  "search_indexing": false,
  "handle": "northwind-live",
  "handle_changed_at": "2026-10-08T14:30:00Z",
  "preferred_name": "Alex"
}

Code samples

curl -X GET "$XOS_BASE_URL/person-profiles/0192f1e2-7c3a-7b4d-9e8f-1a2b3c4d5e6f" \
  -H "Authorization: Bearer $XOS_API_KEY"
const { data, etag } = await xos.personProfiles.get("0192f1e2-7c3a-7b4d-9e8f-1a2b3c4d5e6f");
response = xos.person_profiles.get("0192f1e2-7c3a-7b4d-9e8f-1a2b3c4d5e6f")
xos person-profiles get 0192f1e2-7c3a-7b4d-9e8f-1a2b3c4d5e6f