Contacts & Users
This section covers the entities related to people in InLoox: user accounts, contacts, organizational divisions, and skills. These entities allow you to manage user profiles, query contact data (including custom fields), organize contacts into hierarchical divisions, and tag contacts with skills for resource planning.
UserInfo
The UserInfo entity represents a registered InLoox user. It exposes profile data, notification preferences, and time zone settings.
Properties
| Property | Type | Description |
|---|---|---|
ContactId | Edm.Guid | Unique identifier for the user contact. |
FirstName | Edm.String | First name of the user. |
LastName | Edm.String | Last name of the user. |
DisplayName | Edm.String | Formatted display name (typically "FirstName LastName"). |
Email | Edm.String | Primary email address of the user. |
ImageId | Edm.Guid? | Nullable reference to the user's profile image. Null if no image is set. |
NotifyFrequency | Edm.Int32 | Notification frequency setting (controls how often email digests are sent). |
TimeZoneInfo | Edm.String | IANA time zone identifier (e.g., "Europe/Berlin"). |
EmailConfirmed | Edm.Boolean | Whether the user's email address has been confirmed. |
IsReader | Edm.Boolean | Whether the user has read-only access. |
UILanguage | Edm.String | Preferred UI language code (e.g., "en", "de"). |
Endpoints
/odata/UserInfoList all users
Returns all registered users. Supports standard OData query options ($filter, $select, $orderby, $top, $skip).
/odata/UserInfo/$countGet the total number of users
Returns the count of user records as a plain integer. Supports $filter for conditional counting.
/odata/UserInfo/Me()Get current user info
Returns the UserInfo entity of the currently authenticated user. This is the recommended way to retrieve the caller's own profile.
Use Me() instead of filtering by email to get the current user's profile — it is faster and does not require you to know the user's ContactId.
/odata/UserInfo/SetNotificationFrequency(frequency={frequency})Set notification frequency for the current user
Updates the notification digest frequency for the currently authenticated user.
| Parameter | Type | Required | Description |
|---|---|---|---|
frequency | Edm.Int32 | ✅ | The notification frequency value to set. |
/odata/UserInfo/TelemetryEnabledForCurrentUser()Check telemetry status
Returns whether telemetry data collection is enabled for the current user.
/odata/UserInfo({key})/SetTimeZoneInfoSet time zone for a user
Sets the IANA time zone identifier for the specified user.
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Edm.Guid | ✅ | The ContactId of the user. |
{
"timeZoneInfo": "Europe/Berlin"
}
/odata/UserInfo/MatchTimeZoneInfo()Match time zone info
Attempts to match the current user's time zone information based on their system or browser settings.
DynamicContact
The DynamicContact entity exposes contacts with their custom field values flattened directly into the entity. Unlike the standard contact entity, DynamicContact makes custom field values available as top-level properties, enabling you to filter, sort, and select by custom fields using standard OData query options.
Custom fields appear as additional properties on the DynamicContact entity. The property names correspond to the internal names of your configured custom fields. Use $select to retrieve only the fields you need.
Properties
| Property | Type | Description |
|---|---|---|
ContactId | guid | Unique identifier of the contact. |
Name | string | Full name. |
EntryId | string | External entry ID (e.g., from Exchange). |
Address | string | Full address. |
Sid | string | Security Identifier. |
Type | string | Contact type. |
Title | string | Salutation or academic title. |
FirstName | string | First name. |
LastName | string | Last name. |
CompanyName | string | Company name. |
Street | string | Street. |
Zip | string | Postal code. |
Location | string | City. |
Country | string | Country. |
DisplayName | string | Display name. |
Supervisor | string | Supervisor. |
Position | string | Job title. |
Website | string | Website. |
Initials | string | Initials. |
Department | string | Department. |
Assistenz | string | Assistant. |
Phone | string | Primary phone number. |
Phone2 | string | Secondary phone number. |
Fax | string | Fax number. |
Mobile | string | Mobile number. |
Pager | string | Pager number. |
Email | string | Email address. |
Birthday | datetime? | Date of birth. |
AddressBookId | guid? | ID of the associated address book. |
CreatedByContactId | guid? | ID of the creating contact. |
ChangedByContactId | guid? | ID of the last modifying contact. |
CreatedDate | datetime? | Creation date. |
ChangedDate | datetime? | Last modification date. |
OriginalSid | string | Original Security Identifier. |
DescriptionId | guid? | ID of the linked description. |
NotifyFrequency | int32? | Notification frequency. |
State | string | State/Region. |
UILanguage | string | UI language. |
IsRecycled | boolean | Whether the contact has been deleted (recycled). |
Skills | string | Comma-separated list of skills. |
Divisions | string | Comma-separated list of divisions. |
IsIdentity | boolean | Whether a login account exists. |
DescriptionText | string | Description as plain text. |
DescriptionHTML | string | Description as HTML. |
AzureAdObjectId | string | Azure AD Object ID. |
LicenseType | int32 | License type of the user. |
TimeZoneInfo | string | Time zone information. |
EmailConfirmed | boolean | Whether the email address is confirmed. |
InvitationAccepted | boolean | Whether the invitation was accepted. |
CalendarId | guid | ID of the assigned calendar. |
Capacity | int32 | Capacity of the contact (in percent). |
ProjectRequestCreate | boolean | Permission to create project requests. |
ProjectRequestRelease | boolean | Permission to release project requests. |
CustomProperties | object | Custom fields as a dynamic object. |
Endpoints
/odata/DynamicContactList contacts with custom field values
Returns all contacts with their custom field values flattened into the response. Supports $filter, $select, $orderby, $top, and $skip.
/odata/DynamicContact/$countGet total number of contacts
Returns the count of contacts as a plain integer. Supports $filter.
Division
Divisions represent organizational units (departments, teams, business units). They support hierarchical nesting via ParentDivisionId and can have contacts assigned to them.
Properties
| Property | Type | Description |
|---|---|---|
DivisionId | Edm.Guid | Unique identifier of the division. |
ParentDivisionId | Edm.Guid? | Nullable reference to the parent division. Null for top-level divisions. Use this to build hierarchical org structures. |
DisplayName | Edm.String | Name of the division. |
PositionNumber | Edm.Int32 | Integer used for ordering divisions in lists and trees. |
Description | Edm.String | Free-text description of the division. |
Endpoints
CRUD Operations
/odata/DivisionList all divisions
Returns all divisions. Supports standard OData query options.
/odata/Division/$countGet total number of divisions
Returns the count of divisions as a plain integer.
/odata/Division({key})Get a single division
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Edm.Guid | ✅ | The DivisionId. |
/odata/DivisionCreate a new division
Creates a new division. The DivisionId is generated server-side if omitted.
Omit the DivisionId in the request body to let the server generate it automatically.
{
"DisplayName": "Engineering",
"Description": "Product engineering team",
"PositionNumber": 1
}
/odata/Division({key})Update an existing division
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Edm.Guid | ✅ | The DivisionId of the division to update. |
{
"DisplayName": "Engineering & DevOps"
}
/odata/Division({key})Delete a division
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Edm.Guid | ✅ | The DivisionId of the division to delete. |
Deleting a division removes all contact associations for that division. Child divisions are not automatically deleted — reassign or remove them first to avoid orphaned records.
Contact Management
/odata/Division({key})/GetContacts()Get contacts in a division
Returns all contacts assigned to the specified division.
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Edm.Guid | ✅ | The DivisionId. |
/odata/Division({key})/AddContactAdd a contact to a division
Assigns a contact to the specified division.
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Edm.Guid | ✅ | The DivisionId. |
{
"ContactId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}
/odata/Division({key})/RemoveContactRemove a contact from a division
Removes a contact from the specified division.
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Edm.Guid | ✅ | The DivisionId. |
{
"ContactId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}
DivisionContactRelation
The DivisionContactRelation entity exposes the many-to-many relationship between divisions and contacts.
This entity is read-only. To manage division–contact assignments, use the AddContact and RemoveContact actions on the Division entity.
Properties
| Property | Type | Description |
|---|---|---|
DivisionContactRelationId | guid | Unique identifier of the relation. |
DivisionId | guid | ID of the division. |
ContactId | guid | ID of the contact. |
Endpoints
/odata/DivisionContactRelationList all division-contact relations
Returns all division–contact associations.
/odata/DivisionContactRelation/$countGet total number of relations
Returns the count of division–contact relations.
/odata/DivisionContactRelation({key})Get a single relation
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Edm.Guid | ✅ | The key of the relation. |
Skill
Skills are tags that can be assigned to contacts for resource planning and capability tracking. Like divisions, skills support contact membership via dedicated actions.
Properties
| Property | Type | Description |
|---|---|---|
SkillId | Edm.Guid | Unique identifier of the skill. |
Name | Edm.String | Name of the skill. |
Description | Edm.String | Free-text description of the skill. |
Endpoints
CRUD Operations
/odata/SkillList all skills
Returns all skills. Supports standard OData query options.
/odata/Skill/$countGet total number of skills
Returns the count of skills as a plain integer.
/odata/Skill({key})Get a single skill
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Edm.Guid | ✅ | The SkillId. |
/odata/SkillCreate a new skill
Creates a new skill. The SkillId is generated server-side if omitted.
{
"Name": "Project Management",
"Description": "Certified project management expertise"
}
/odata/Skill({key})Update an existing skill
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Edm.Guid | ✅ | The SkillId of the skill to update. |
{
"Name": "Agile Project Management"
}
/odata/Skill({key})Delete a skill
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Edm.Guid | ✅ | The SkillId of the skill to delete. |
Deleting a skill removes all contact associations for that skill.
Contact Management
/odata/Skill({key})/GetContacts()Get contacts with this skill
Returns all contacts that have the specified skill assigned.
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Edm.Guid | ✅ | The SkillId. |
/odata/Skill({key})/GetSkillContacts()Get skill-contact relations
Returns the skill–contact relation objects for the specified skill, which may include additional metadata about the assignment.
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Edm.Guid | ✅ | The SkillId. |
/odata/Skill({key})/AddContactAdd a contact to a skill
Assigns the specified skill to a contact.
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Edm.Guid | ✅ | The SkillId. |
{
"ContactId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}
/odata/Skill({key})/RemoveContactRemove a contact from a skill
Removes the specified skill from a contact.
| Parameter | Type | Required | Description |
|---|---|---|---|
key | Edm.Guid | ✅ | The SkillId. |
{
"ContactId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}
OData Query Examples
Get Current User Info
Retrieve the authenticated user's profile using the Me() function:
curl -X GET "https://{tenant}.inloox.app/odata/UserInfo/Me()" \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json"
Response:
{
"@odata.context": "https://{tenant}.inloox.app/odata/$metadata#UserInfo/$entity",
"ContactId": "c3a1f2d4-5e6b-7c8d-9a0b-1c2d3e4f5a6b",
"FirstName": "Jane",
"LastName": "Doe",
"DisplayName": "Jane Doe",
"Email": "jane.doe@example.com",
"ImageId": null,
"NotifyFrequency": 1,
"TimeZoneInfo": "Europe/Berlin",
"EmailConfirmed": true,
"IsReader": false,
"UILanguage": "en"
}
List Contacts with Filtering
Query DynamicContact using $select and $filter to retrieve specific fields for contacts matching a condition:
curl -X GET "https://{tenant}.inloox.app/odata/DynamicContact?\$select=FirstName,LastName,Email&\$filter=LastName eq 'Doe'" \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json"
Response:
{
"@odata.context": "https://{tenant}.inloox.app/odata/$metadata#DynamicContact",
"value": [
{
"FirstName": "Jane",
"LastName": "Doe",
"Email": "jane.doe@example.com"
},
{
"FirstName": "John",
"LastName": "Doe",
"Email": "john.doe@example.com"
}
]
}
Use $select to reduce payload size — especially with DynamicContact, where custom fields can significantly increase the response size.