Skip to main content

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

PropertyTypeDescription
ContactIdEdm.GuidUnique identifier for the user contact.
FirstNameEdm.StringFirst name of the user.
LastNameEdm.StringLast name of the user.
DisplayNameEdm.StringFormatted display name (typically "FirstName LastName").
EmailEdm.StringPrimary email address of the user.
ImageIdEdm.Guid?Nullable reference to the user's profile image. Null if no image is set.
NotifyFrequencyEdm.Int32Notification frequency setting (controls how often email digests are sent).
TimeZoneInfoEdm.StringIANA time zone identifier (e.g., "Europe/Berlin").
EmailConfirmedEdm.BooleanWhether the user's email address has been confirmed.
IsReaderEdm.BooleanWhether the user has read-only access.
UILanguageEdm.StringPreferred UI language code (e.g., "en", "de").

Endpoints

GET/odata/UserInfo

List all users

Returns all registered users. Supports standard OData query options ($filter, $select, $orderby, $top, $skip).


GET/odata/UserInfo/$count

Get the total number of users

Returns the count of user records as a plain integer. Supports $filter for conditional counting.


GET/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.

tip

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.


GET/odata/UserInfo/SetNotificationFrequency(frequency={frequency})

Set notification frequency for the current user

Updates the notification digest frequency for the currently authenticated user.

ParameterTypeRequiredDescription
frequencyEdm.Int32The notification frequency value to set.

GET/odata/UserInfo/TelemetryEnabledForCurrentUser()

Check telemetry status

Returns whether telemetry data collection is enabled for the current user.


POST/odata/UserInfo({key})/SetTimeZoneInfo

Set time zone for a user

Sets the IANA time zone identifier for the specified user.

ParameterTypeRequiredDescription
keyEdm.GuidThe ContactId of the user.
{
"timeZoneInfo": "Europe/Berlin"
}

GET/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.

info

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

PropertyTypeDescription
ContactIdguidUnique identifier of the contact.
NamestringFull name.
EntryIdstringExternal entry ID (e.g., from Exchange).
AddressstringFull address.
SidstringSecurity Identifier.
TypestringContact type.
TitlestringSalutation or academic title.
FirstNamestringFirst name.
LastNamestringLast name.
CompanyNamestringCompany name.
StreetstringStreet.
ZipstringPostal code.
LocationstringCity.
CountrystringCountry.
DisplayNamestringDisplay name.
SupervisorstringSupervisor.
PositionstringJob title.
WebsitestringWebsite.
InitialsstringInitials.
DepartmentstringDepartment.
AssistenzstringAssistant.
PhonestringPrimary phone number.
Phone2stringSecondary phone number.
FaxstringFax number.
MobilestringMobile number.
PagerstringPager number.
EmailstringEmail address.
Birthdaydatetime?Date of birth.
AddressBookIdguid?ID of the associated address book.
CreatedByContactIdguid?ID of the creating contact.
ChangedByContactIdguid?ID of the last modifying contact.
CreatedDatedatetime?Creation date.
ChangedDatedatetime?Last modification date.
OriginalSidstringOriginal Security Identifier.
DescriptionIdguid?ID of the linked description.
NotifyFrequencyint32?Notification frequency.
StatestringState/Region.
UILanguagestringUI language.
IsRecycledbooleanWhether the contact has been deleted (recycled).
SkillsstringComma-separated list of skills.
DivisionsstringComma-separated list of divisions.
IsIdentitybooleanWhether a login account exists.
DescriptionTextstringDescription as plain text.
DescriptionHTMLstringDescription as HTML.
AzureAdObjectIdstringAzure AD Object ID.
LicenseTypeint32License type of the user.
TimeZoneInfostringTime zone information.
EmailConfirmedbooleanWhether the email address is confirmed.
InvitationAcceptedbooleanWhether the invitation was accepted.
CalendarIdguidID of the assigned calendar.
Capacityint32Capacity of the contact (in percent).
ProjectRequestCreatebooleanPermission to create project requests.
ProjectRequestReleasebooleanPermission to release project requests.
CustomPropertiesobjectCustom fields as a dynamic object.

Endpoints

GET/odata/DynamicContact

List contacts with custom field values

Returns all contacts with their custom field values flattened into the response. Supports $filter, $select, $orderby, $top, and $skip.


GET/odata/DynamicContact/$count

Get 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

PropertyTypeDescription
DivisionIdEdm.GuidUnique identifier of the division.
ParentDivisionIdEdm.Guid?Nullable reference to the parent division. Null for top-level divisions. Use this to build hierarchical org structures.
DisplayNameEdm.StringName of the division.
PositionNumberEdm.Int32Integer used for ordering divisions in lists and trees.
DescriptionEdm.StringFree-text description of the division.

Endpoints

CRUD Operations

GET/odata/Division

List all divisions

Returns all divisions. Supports standard OData query options.


GET/odata/Division/$count

Get total number of divisions

Returns the count of divisions as a plain integer.


GET/odata/Division({key})

Get a single division

ParameterTypeRequiredDescription
keyEdm.GuidThe DivisionId.

POST/odata/Division

Create a new division

Creates a new division. The DivisionId is generated server-side if omitted.

tip

Omit the DivisionId in the request body to let the server generate it automatically.

{
"DisplayName": "Engineering",
"Description": "Product engineering team",
"PositionNumber": 1
}

PATCH/odata/Division({key})

Update an existing division

ParameterTypeRequiredDescription
keyEdm.GuidThe DivisionId of the division to update.
{
"DisplayName": "Engineering & DevOps"
}

DELETE/odata/Division({key})

Delete a division

ParameterTypeRequiredDescription
keyEdm.GuidThe DivisionId of the division to delete.
warning

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

GET/odata/Division({key})/GetContacts()

Get contacts in a division

Returns all contacts assigned to the specified division.

ParameterTypeRequiredDescription
keyEdm.GuidThe DivisionId.

POST/odata/Division({key})/AddContact

Add a contact to a division

Assigns a contact to the specified division.

ParameterTypeRequiredDescription
keyEdm.GuidThe DivisionId.
{
"ContactId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}

POST/odata/Division({key})/RemoveContact

Remove a contact from a division

Removes a contact from the specified division.

ParameterTypeRequiredDescription
keyEdm.GuidThe DivisionId.
{
"ContactId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}

DivisionContactRelation

The DivisionContactRelation entity exposes the many-to-many relationship between divisions and contacts.

note

This entity is read-only. To manage division–contact assignments, use the AddContact and RemoveContact actions on the Division entity.

Properties

PropertyTypeDescription
DivisionContactRelationIdguidUnique identifier of the relation.
DivisionIdguidID of the division.
ContactIdguidID of the contact.

Endpoints

GET/odata/DivisionContactRelation

List all division-contact relations

Returns all division–contact associations.


GET/odata/DivisionContactRelation/$count

Get total number of relations

Returns the count of division–contact relations.


GET/odata/DivisionContactRelation({key})

Get a single relation

ParameterTypeRequiredDescription
keyEdm.GuidThe 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

PropertyTypeDescription
SkillIdEdm.GuidUnique identifier of the skill.
NameEdm.StringName of the skill.
DescriptionEdm.StringFree-text description of the skill.

Endpoints

CRUD Operations

GET/odata/Skill

List all skills

Returns all skills. Supports standard OData query options.


GET/odata/Skill/$count

Get total number of skills

Returns the count of skills as a plain integer.


GET/odata/Skill({key})

Get a single skill

ParameterTypeRequiredDescription
keyEdm.GuidThe SkillId.

POST/odata/Skill

Create a new skill

Creates a new skill. The SkillId is generated server-side if omitted.

{
"Name": "Project Management",
"Description": "Certified project management expertise"
}

PATCH/odata/Skill({key})

Update an existing skill

ParameterTypeRequiredDescription
keyEdm.GuidThe SkillId of the skill to update.
{
"Name": "Agile Project Management"
}

DELETE/odata/Skill({key})

Delete a skill

ParameterTypeRequiredDescription
keyEdm.GuidThe SkillId of the skill to delete.
warning

Deleting a skill removes all contact associations for that skill.


Contact Management

GET/odata/Skill({key})/GetContacts()

Get contacts with this skill

Returns all contacts that have the specified skill assigned.

ParameterTypeRequiredDescription
keyEdm.GuidThe SkillId.

GET/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.

ParameterTypeRequiredDescription
keyEdm.GuidThe SkillId.

POST/odata/Skill({key})/AddContact

Add a contact to a skill

Assigns the specified skill to a contact.

ParameterTypeRequiredDescription
keyEdm.GuidThe SkillId.
{
"ContactId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}

POST/odata/Skill({key})/RemoveContact

Remove a contact from a skill

Removes the specified skill from a contact.

ParameterTypeRequiredDescription
keyEdm.GuidThe 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"
}
]
}
tip

Use $select to reduce payload size — especially with DynamicContact, where custom fields can significantly increase the response size.