using RestSharp;
var options = new RestClientOptions("http://localhost:53294/api/v1/Agents/User/ResolveUserFromInfo");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("Authorization", "Bearer <token>");
request.AddJsonBody("{\n \"ContactId\": 123,\n \"PersonName\": \"<string>\",\n \"PhoneNumbers\": [\n \"<string>\"\n ],\n \"Emails\": [\n \"<string>\"\n ],\n \"Credential\": {\n \"Type\": {\n \"DisplayType\": \"<string>\",\n \"Type\": \"<string>\",\n \"Description\": \"<string>\",\n \"CanCreatePerson\": true,\n \"IsUserNameSupported\": true,\n \"TableRight\": {\n \"Mask\": \"<string>\",\n \"Reason\": \"<string>\"\n },\n \"FieldProperties\": {}\n },\n \"Value\": \"<string>\",\n \"DisplayValue\": \"<string>\",\n \"TableRight\": {\n \"Mask\": \"<string>\",\n \"Reason\": \"<string>\"\n },\n \"FieldProperties\": {}\n }\n}", false);
var response = await client.PostAsync(request);
Console.WriteLine("{0}", response.Content);
const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
ContactId: 123,
PersonName: '<string>',
PhoneNumbers: ['<string>'],
Emails: ['<string>'],
Credential: {
Type: {
DisplayType: '<string>',
Type: '<string>',
Description: '<string>',
CanCreatePerson: true,
IsUserNameSupported: true,
TableRight: {Mask: '<string>', Reason: '<string>'},
FieldProperties: {}
},
Value: '<string>',
DisplayValue: '<string>',
TableRight: {Mask: '<string>', Reason: '<string>'},
FieldProperties: {}
}
})
};
fetch('http://localhost:53294/api/v1/Agents/User/ResolveUserFromInfo', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "53294",
CURLOPT_URL => "http://localhost:53294/api/v1/Agents/User/ResolveUserFromInfo",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'ContactId' => 123,
'PersonName' => '<string>',
'PhoneNumbers' => [
'<string>'
],
'Emails' => [
'<string>'
],
'Credential' => [
'Type' => [
'DisplayType' => '<string>',
'Type' => '<string>',
'Description' => '<string>',
'CanCreatePerson' => true,
'IsUserNameSupported' => true,
'TableRight' => [
'Mask' => '<string>',
'Reason' => '<string>'
],
'FieldProperties' => [
]
],
'Value' => '<string>',
'DisplayValue' => '<string>',
'TableRight' => [
'Mask' => '<string>',
'Reason' => '<string>'
],
'FieldProperties' => [
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}import requests
url = "http://localhost:53294/api/v1/Agents/User/ResolveUserFromInfo"
payload = {
"ContactId": 123,
"PersonName": "<string>",
"PhoneNumbers": ["<string>"],
"Emails": ["<string>"],
"Credential": {
"Type": {
"DisplayType": "<string>",
"Type": "<string>",
"Description": "<string>",
"CanCreatePerson": True,
"IsUserNameSupported": True,
"TableRight": {
"Mask": "<string>",
"Reason": "<string>"
},
"FieldProperties": {}
},
"Value": "<string>",
"DisplayValue": "<string>",
"TableRight": {
"Mask": "<string>",
"Reason": "<string>"
},
"FieldProperties": {}
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
ContactId: 123,
PersonName: '<string>',
PhoneNumbers: ['<string>'],
Emails: ['<string>'],
Credential: {
Type: {
DisplayType: '<string>',
Type: '<string>',
Description: '<string>',
CanCreatePerson: true,
IsUserNameSupported: true,
TableRight: {Mask: '<string>', Reason: '<string>'},
FieldProperties: {}
},
Value: '<string>',
DisplayValue: '<string>',
TableRight: {Mask: '<string>', Reason: '<string>'},
FieldProperties: {}
}
})
};
fetch('http://localhost:53294/api/v1/Agents/User/ResolveUserFromInfo', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"User": {
"AssociateId": 123,
"Name": "<string>",
"Rank": 123,
"Tooltip": "<string>",
"LicenseOwners": [
{
"Name": "<string>",
"Description": "<string>",
"RestrictedModuleLicenses": [
{
"Unrestricted": true,
"Total": 123,
"Tooltip": "<string>",
"CanAssign": true,
"Free": 123,
"InUse": 123,
"IsHidden": true,
"Assigned": true,
"ModuleLicenseId": 123,
"Name": "<string>",
"Description": "<string>",
"PrerequisiteModuleName": "<string>",
"SortOrder": 123,
"ExtraFlags": 123,
"TableRight": {
"Mask": "<string>",
"Reason": "<string>"
},
"FieldProperties": {}
}
],
"UnrestrictedModuleLicenses": [
{
"Unrestricted": true,
"Total": 123,
"Tooltip": "<string>",
"CanAssign": true,
"Free": 123,
"InUse": 123,
"IsHidden": true,
"Assigned": true,
"ModuleLicenseId": 123,
"Name": "<string>",
"Description": "<string>",
"PrerequisiteModuleName": "<string>",
"SortOrder": 123,
"ExtraFlags": 123,
"TableRight": {
"Mask": "<string>",
"Reason": "<string>"
},
"FieldProperties": {}
}
],
"TableRight": {
"Mask": "<string>",
"Reason": "<string>"
},
"FieldProperties": {}
}
],
"Role": {
"Id": 123,
"Value": "<string>",
"Tooltip": "<string>",
"TableRight": {
"Mask": "<string>",
"Reason": "<string>"
},
"FieldProperties": {}
},
"UserGroup": {
"Value": "<string>",
"Tooltip": "<string>",
"Id": 123,
"Rank": 123,
"Deleted": true,
"TableRight": {
"Mask": "<string>",
"Reason": "<string>"
},
"FieldProperties": {}
},
"OtherGroups": [
{
"Value": "<string>",
"Tooltip": "<string>",
"Id": 123,
"Rank": 123,
"Deleted": true,
"TableRight": {
"Mask": "<string>",
"Reason": "<string>"
},
"FieldProperties": {}
}
],
"Person": {
"Position": "<string>",
"PersonId": 123,
"Mrmrs": "<string>",
"Firstname": "<string>",
"Lastname": "<string>",
"MiddleName": "<string>",
"Title": "<string>",
"Description": "<string>",
"Email": "<string>",
"FullName": "<string>",
"DirectPhone": "<string>",
"FormalName": "<string>",
"CountryId": 123,
"ContactId": 123,
"ContactName": "<string>",
"Retired": 123,
"Rank": 123,
"ActiveInterests": 123,
"ContactDepartment": "<string>",
"ContactCountryId": 123,
"ContactOrgNr": "<string>",
"FaxPhone": "<string>",
"MobilePhone": "<string>",
"ContactPhone": "<string>",
"AssociateName": "<string>",
"AssociateId": 123,
"UsePersonAddress": true,
"ContactFax": "<string>",
"Kanafname": "<string>",
"Kanalname": "<string>",
"Post1": "<string>",
"Post2": "<string>",
"Post3": "<string>",
"EmailName": "<string>",
"ContactFullName": "<string>",
"ActiveErpLinks": 123,
"TicketPriorityId": 123,
"SupportLanguageId": 123,
"SupportAssociateId": 123,
"CategoryName": "<string>",
"PersonNumber": "<string>",
"TableRight": {
"Mask": "<string>",
"Reason": "<string>"
},
"FieldProperties": {}
},
"Deleted": true,
"Lastlogin": "2023-11-07T05:31:56Z",
"Lastlogout": "2023-11-07T05:31:56Z",
"EjUserId": 123,
"RequestSignature": "<string>",
"Type": "Unknown",
"IsPersonRetired": true,
"IsOnTravel": true,
"Credentials": [
{
"Type": {
"DisplayType": "<string>",
"Type": "<string>",
"Description": "<string>",
"ValueControl": "Static",
"CanCreatePerson": true,
"IsUserNameSupported": true,
"TableRight": {
"Mask": "<string>",
"Reason": "<string>"
},
"FieldProperties": {}
},
"Value": "<string>",
"DisplayValue": "<string>",
"TableRight": {
"Mask": "<string>",
"Reason": "<string>"
},
"FieldProperties": {}
}
],
"UserName": "<string>",
"TicketCategories": [
{
"Id": 123,
"Name": "<string>",
"ToolTip": "<string>",
"Deleted": true,
"Rank": 123,
"Type": "<string>",
"ChildItems": "<array>",
"IconHint": "<string>",
"ColorBlock": 123,
"ExtraInfo": "<string>",
"StyleHint": "<string>",
"FullName": "<string>",
"TableRight": {
"Mask": "<string>",
"Reason": "<string>"
},
"FieldProperties": {}
}
],
"NickName": "<string>",
"WaitingForApproval": true,
"ExtraFields": {},
"CustomFields": {},
"PostSaveCommands": [
{
"Name": "<string>",
"DisplayName": "<string>",
"Description": "<string>",
"ToolTip": "<string>",
"Actions": "Implicit",
"ActionData": "<string>",
"TableRight": {
"Mask": "<string>",
"Reason": "<string>"
},
"FieldProperties": {}
}
],
"TableRight": {
"Mask": "<string>",
"Reason": "<string>"
},
"FieldProperties": {}
},
"PersonCreated": true,
"TableRight": {
"Mask": "<string>",
"Reason": "<string>"
},
"FieldProperties": {}
}Resolve User From Info
Get a user from the provided information.
If the user or associated person does not exist, it will be created on demand.
NsApiSlow threshold: 2000 ms.
using RestSharp;
var options = new RestClientOptions("http://localhost:53294/api/v1/Agents/User/ResolveUserFromInfo");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("Authorization", "Bearer <token>");
request.AddJsonBody("{\n \"ContactId\": 123,\n \"PersonName\": \"<string>\",\n \"PhoneNumbers\": [\n \"<string>\"\n ],\n \"Emails\": [\n \"<string>\"\n ],\n \"Credential\": {\n \"Type\": {\n \"DisplayType\": \"<string>\",\n \"Type\": \"<string>\",\n \"Description\": \"<string>\",\n \"CanCreatePerson\": true,\n \"IsUserNameSupported\": true,\n \"TableRight\": {\n \"Mask\": \"<string>\",\n \"Reason\": \"<string>\"\n },\n \"FieldProperties\": {}\n },\n \"Value\": \"<string>\",\n \"DisplayValue\": \"<string>\",\n \"TableRight\": {\n \"Mask\": \"<string>\",\n \"Reason\": \"<string>\"\n },\n \"FieldProperties\": {}\n }\n}", false);
var response = await client.PostAsync(request);
Console.WriteLine("{0}", response.Content);
const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
ContactId: 123,
PersonName: '<string>',
PhoneNumbers: ['<string>'],
Emails: ['<string>'],
Credential: {
Type: {
DisplayType: '<string>',
Type: '<string>',
Description: '<string>',
CanCreatePerson: true,
IsUserNameSupported: true,
TableRight: {Mask: '<string>', Reason: '<string>'},
FieldProperties: {}
},
Value: '<string>',
DisplayValue: '<string>',
TableRight: {Mask: '<string>', Reason: '<string>'},
FieldProperties: {}
}
})
};
fetch('http://localhost:53294/api/v1/Agents/User/ResolveUserFromInfo', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "53294",
CURLOPT_URL => "http://localhost:53294/api/v1/Agents/User/ResolveUserFromInfo",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'ContactId' => 123,
'PersonName' => '<string>',
'PhoneNumbers' => [
'<string>'
],
'Emails' => [
'<string>'
],
'Credential' => [
'Type' => [
'DisplayType' => '<string>',
'Type' => '<string>',
'Description' => '<string>',
'CanCreatePerson' => true,
'IsUserNameSupported' => true,
'TableRight' => [
'Mask' => '<string>',
'Reason' => '<string>'
],
'FieldProperties' => [
]
],
'Value' => '<string>',
'DisplayValue' => '<string>',
'TableRight' => [
'Mask' => '<string>',
'Reason' => '<string>'
],
'FieldProperties' => [
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}import requests
url = "http://localhost:53294/api/v1/Agents/User/ResolveUserFromInfo"
payload = {
"ContactId": 123,
"PersonName": "<string>",
"PhoneNumbers": ["<string>"],
"Emails": ["<string>"],
"Credential": {
"Type": {
"DisplayType": "<string>",
"Type": "<string>",
"Description": "<string>",
"CanCreatePerson": True,
"IsUserNameSupported": True,
"TableRight": {
"Mask": "<string>",
"Reason": "<string>"
},
"FieldProperties": {}
},
"Value": "<string>",
"DisplayValue": "<string>",
"TableRight": {
"Mask": "<string>",
"Reason": "<string>"
},
"FieldProperties": {}
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
ContactId: 123,
PersonName: '<string>',
PhoneNumbers: ['<string>'],
Emails: ['<string>'],
Credential: {
Type: {
DisplayType: '<string>',
Type: '<string>',
Description: '<string>',
CanCreatePerson: true,
IsUserNameSupported: true,
TableRight: {Mask: '<string>', Reason: '<string>'},
FieldProperties: {}
},
Value: '<string>',
DisplayValue: '<string>',
TableRight: {Mask: '<string>', Reason: '<string>'},
FieldProperties: {}
}
})
};
fetch('http://localhost:53294/api/v1/Agents/User/ResolveUserFromInfo', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"User": {
"AssociateId": 123,
"Name": "<string>",
"Rank": 123,
"Tooltip": "<string>",
"LicenseOwners": [
{
"Name": "<string>",
"Description": "<string>",
"RestrictedModuleLicenses": [
{
"Unrestricted": true,
"Total": 123,
"Tooltip": "<string>",
"CanAssign": true,
"Free": 123,
"InUse": 123,
"IsHidden": true,
"Assigned": true,
"ModuleLicenseId": 123,
"Name": "<string>",
"Description": "<string>",
"PrerequisiteModuleName": "<string>",
"SortOrder": 123,
"ExtraFlags": 123,
"TableRight": {
"Mask": "<string>",
"Reason": "<string>"
},
"FieldProperties": {}
}
],
"UnrestrictedModuleLicenses": [
{
"Unrestricted": true,
"Total": 123,
"Tooltip": "<string>",
"CanAssign": true,
"Free": 123,
"InUse": 123,
"IsHidden": true,
"Assigned": true,
"ModuleLicenseId": 123,
"Name": "<string>",
"Description": "<string>",
"PrerequisiteModuleName": "<string>",
"SortOrder": 123,
"ExtraFlags": 123,
"TableRight": {
"Mask": "<string>",
"Reason": "<string>"
},
"FieldProperties": {}
}
],
"TableRight": {
"Mask": "<string>",
"Reason": "<string>"
},
"FieldProperties": {}
}
],
"Role": {
"Id": 123,
"Value": "<string>",
"Tooltip": "<string>",
"TableRight": {
"Mask": "<string>",
"Reason": "<string>"
},
"FieldProperties": {}
},
"UserGroup": {
"Value": "<string>",
"Tooltip": "<string>",
"Id": 123,
"Rank": 123,
"Deleted": true,
"TableRight": {
"Mask": "<string>",
"Reason": "<string>"
},
"FieldProperties": {}
},
"OtherGroups": [
{
"Value": "<string>",
"Tooltip": "<string>",
"Id": 123,
"Rank": 123,
"Deleted": true,
"TableRight": {
"Mask": "<string>",
"Reason": "<string>"
},
"FieldProperties": {}
}
],
"Person": {
"Position": "<string>",
"PersonId": 123,
"Mrmrs": "<string>",
"Firstname": "<string>",
"Lastname": "<string>",
"MiddleName": "<string>",
"Title": "<string>",
"Description": "<string>",
"Email": "<string>",
"FullName": "<string>",
"DirectPhone": "<string>",
"FormalName": "<string>",
"CountryId": 123,
"ContactId": 123,
"ContactName": "<string>",
"Retired": 123,
"Rank": 123,
"ActiveInterests": 123,
"ContactDepartment": "<string>",
"ContactCountryId": 123,
"ContactOrgNr": "<string>",
"FaxPhone": "<string>",
"MobilePhone": "<string>",
"ContactPhone": "<string>",
"AssociateName": "<string>",
"AssociateId": 123,
"UsePersonAddress": true,
"ContactFax": "<string>",
"Kanafname": "<string>",
"Kanalname": "<string>",
"Post1": "<string>",
"Post2": "<string>",
"Post3": "<string>",
"EmailName": "<string>",
"ContactFullName": "<string>",
"ActiveErpLinks": 123,
"TicketPriorityId": 123,
"SupportLanguageId": 123,
"SupportAssociateId": 123,
"CategoryName": "<string>",
"PersonNumber": "<string>",
"TableRight": {
"Mask": "<string>",
"Reason": "<string>"
},
"FieldProperties": {}
},
"Deleted": true,
"Lastlogin": "2023-11-07T05:31:56Z",
"Lastlogout": "2023-11-07T05:31:56Z",
"EjUserId": 123,
"RequestSignature": "<string>",
"Type": "Unknown",
"IsPersonRetired": true,
"IsOnTravel": true,
"Credentials": [
{
"Type": {
"DisplayType": "<string>",
"Type": "<string>",
"Description": "<string>",
"ValueControl": "Static",
"CanCreatePerson": true,
"IsUserNameSupported": true,
"TableRight": {
"Mask": "<string>",
"Reason": "<string>"
},
"FieldProperties": {}
},
"Value": "<string>",
"DisplayValue": "<string>",
"TableRight": {
"Mask": "<string>",
"Reason": "<string>"
},
"FieldProperties": {}
}
],
"UserName": "<string>",
"TicketCategories": [
{
"Id": 123,
"Name": "<string>",
"ToolTip": "<string>",
"Deleted": true,
"Rank": 123,
"Type": "<string>",
"ChildItems": "<array>",
"IconHint": "<string>",
"ColorBlock": 123,
"ExtraInfo": "<string>",
"StyleHint": "<string>",
"FullName": "<string>",
"TableRight": {
"Mask": "<string>",
"Reason": "<string>"
},
"FieldProperties": {}
}
],
"NickName": "<string>",
"WaitingForApproval": true,
"ExtraFields": {},
"CustomFields": {},
"PostSaveCommands": [
{
"Name": "<string>",
"DisplayName": "<string>",
"Description": "<string>",
"ToolTip": "<string>",
"Actions": "Implicit",
"ActionData": "<string>",
"TableRight": {
"Mask": "<string>",
"Reason": "<string>"
},
"FieldProperties": {}
}
],
"TableRight": {
"Mask": "<string>",
"Reason": "<string>"
},
"FieldProperties": {}
},
"PersonCreated": true,
"TableRight": {
"Mask": "<string>",
"Reason": "<string>"
},
"FieldProperties": {}
}Authorizations
SuperOffice username:password are passed in Base64-encoded.
You can also pass inn an unencoded ticket 7T:abc== with the HTTP Authenticate header.
SuperOffice SuperId OAuth implicit flow. You need to issue a request to the SuperId authorization URL https://online.superoffice.com/login/common/oauth/authorize?response_type=token &client_id=670734e0-4c5a-11e3-be9e-a171392e81db &redirect_uri=https://example.com/spa/
passing in the application id and redirect URL.
SuperId will log the user in, and redirect to the requested redirect URL with a #payload containing the access token and claims. (The redirect URL must be registered with SuperId in advance)
https://example.com/spa#access_token=8A%3aCust12227.AXRrCITpPBvQX3UbIohb &token_type=bearer &state= &expires_in=3600 &ctx=Cust12227 &netserver_url=https%3a%2f%2fsod.superoffice.com%2fCust12227%2fRemote%2fServices82%2f
You can take the #access_token value and pass it as the Authenticate HTTP header as a BEARER token.
- Authorization URL
- https://online.superoffice.com/login/common/oauth/authorize
Headers
Convert string references and multi-language values into a specified language (iso2) code.
Convert string references and multi-language values into a specified language (iso2) code. Overrides Accept-Language value.
Number, date formatting in a specified culture (iso2 language) code. Partially overrides SO-Language/Accept-Language value. Ignored if no Language set.
Specify the timezone code that you would like date/time responses converted to.
The application token that identifies the partner app. Used when calling Online WebAPI from a server.
Query Parameters
Optional comma separated list of properties to include in the result. Other fields are then nulled out to reduce payload size: "Name,department,category". Default = show all fields.
Body
ContactId, PersonName, PhoneNumbers, Emails, UserType, Credential
ResolveUserFromInfo: Get a user from the provided information. If the user or associated person does not exist, it will be created on demand.
Unknown, InternalAssociate, ResourceAssociate, ExternalAssociate, AnonymousAssociate, SystemAssociate Credentials supported for authentication Carrier object for Credential. Services for the Credential Carrier is available from the User Agent.
Show child attributes
Show child attributes
Response
OK
The User Service. The service implements all services working with the User object. Carrier object for ResolvedUser. Services for the ResolvedUser Carrier is available from the User Agent.
SuperOffice User, with login credentials and an associated person. Carrier object for User. Services for the User Carrier is available from the User Agent.
Show child attributes
Show child attributes
Indicates if the resolved person was created or not.
Wraps a table right together with an explanatory reason. Code can indicate why access is restricted.
Show child attributes
Show child attributes
Field property dictionary mapping field names to field access rights.
Show child attributes
Show child attributes