...
The interface is part of our standard web service offering and can be found in our swagger.yml documentation. documentation.
View file name swagger.yaml height 250
Panel | ||||
---|---|---|---|---|
| ||||
|
Preamble / General Notes
The Profiles on Demand API relies fully on the OAuth2 protocol to perform authentication and authorization to profiles. It is strongly suggested to get a general grasp of the OAuth 2.0 flows, specifically the Authorization Code and Client Credentials flows, before running any API related inquiries.While the Profiles on Demand API does not currently support all data fields and entity types available in Umbrella Faces, the
Note |
---|
As the name suggests, the Profiles On Demand API is designed to provide profiles on demand. It is specifically prohibited to run bulk queries for profiles aimed at dumping / synchronizing the full profile data base to a third party system. |
The API is continuously being developed and extended. As a result, new data structures may be added to existing responses at any time without prior notice. It is therefore required to design a client application to only request information needed by the application as well as configure the application to not fail should there be additional (newly added) properties in the response.
Note |
---|
Upon examining the swagger documentation you may find more APIs not listed in this documentation. These are for internal use only and will not be made available to the general public |
Rate Limiting
As per our contract, we reserve the right to subject API calls to a rate limit. The following headers will be present in server responses in case an API is subject to rate limiting:
Info |
---|
Normally these headers are not present, they will dynamically appear if you application becomes subject to rate limiting (i.e. due to having made excessive API calls in the past) |
Header Name | Value |
---|---|
X-Rate-Limit-Remaining | Number of requests remaining |
X-Rate-Limit-Retry-After | Sent alongside a HTTP 429 error when hitting the rate limit Number of seconds remaining until another API request may be made |
Authentication
Application registration and certification
Third parties wishing to access data from Faces must provide the following details, which will be evaluated before any Oauth API can be accessed:
Field | Description |
---|---|
Application Name | Application name, which will be shown to the user |
Application Purpose | Short description of what the application wants to achieve using the Oauth2 enabled APIs |
Desired OAuth Scopes | OAuth Scopes requested by the application see Available OAuth Data-Scopes |
Desired OAuth Flow(s) | One or more OAuth flows, see Supported OAuth2 Flows By default you will be granted access to the Authorization Code flow, which requires user interaction to authorize your application, however depending on your applications purpose it may be possible to setup a different flow (For example to allow unlimited access to all profiles belonging to your own travel agency in case you’re implementing an in-house application) |
...
Certification will be achieved by demonstrating the product accessing Faces using Oauth
Anchor OAuthScopes OAuthScopes
Available OAuth Data-Scopes
OAuthScopes | |
OAuthScopes |
Your application will be granted some or all of the following OAuth scopes for data access:
Scope | Description |
---|---|
api.profilesondemand.read | Access to the Profiles API (read only) |
api.profilesondemand.write | Access to the Profiles API (write) |
api.profilesondemand.ccaccess | Access to plaintext credit card details. Requires attestation of PCI compliance as well as special handling for CC numbers to be exchanged via our parnter Midoco |
api.profilesondemand.profilecenter.read | Access to (certain functions of) the Profile Center API (read only) |
openid | Required scope when requesting an ID-Token for “Login using Faces” functionality |
agencyid | Optional scope to be included in and ID-Token. Please see the section Usage of an ID token within this document. |
Optional scope to be included in and ID-Token. Please see the section Usage of an ID token within this document. | |
profile | Optional scope to be included in and ID-Token. Please see the section Usage of an ID token within this document. |
Please let our friendly support-staff know which scopes you’ll be requiring in order to provide which desired functionality.
Anchor OAuthFlows OAuthFlows
Supported OAuth2 Flows
OAuthFlows | |
OAuthFlows |
Faces supports multiple Oauth2 grant flows, depending on the individual requirements of the client application. The following table lists possible flows:
Type | Purpose | Description | Restrictions | ||
---|---|---|---|---|---|
Authorization Code | Interact with the API on behalf of an end-user | Allows an application to act on behalf of a (or multiple) specific user within Faces. The Authorization Code Flow requires the client application to open a popup-window where an user signs into Faces and explicitly allows access. Once Access has been granted, a refresh-token is issued which allows further access without additional human interaction. | Not all API operations may be available, depending on the authorization level of the user. (e.g. company data can not be queried or updated by a traveller) | ||
Implicit | Similar to the Authorization Code flow, with the difference that no refresh-token will be issued and thus only temporary access of maximum one hour is possible before re-confirmation is needed. | Same as for Authorization Code.
| |||
Client Credentials | Machine-to-Machine communication | Currently allows a specific OAuth2 Client to be linked to a specific travel agency in Faces. No end-user interaction is required | ID-Tokens cannot be requested since the access is not tied to a specific user. |
Please let us know which OAuth flow you plan on supporting for your use case when requesting API credentials. If not otherwise specified, we’ll be supplying you with access to the Authorization Code flow.
Oauth2 Authorization Code Flow by example
Step 1: Request authorization code grant
The user is given a link to start the authorization process, including mandatory parameters
...
https://hurricane.umbrellanet.ch/uf-test/oauth/authorize?response_type=code&client_id=CLIENT_ID&redirect_uri=CALLBACK_URL
Step 2: User authorizes the application
Upon clicking the link, the user must first login to Faces (unless they are already logged in). Then they will be prompted by the service to authorize or deny the application access.
An example authorization prompt may look like this:
Step 3: Application receives authorization code
If the user clicks "Authorize", Faces redirects to the application redirect URI which was specified in the request, along with an authorization code.
The redirect would look something like this:
https://your.application.com/callback?code=THE_AUTH_CODE
Step 4: Application requests refresh and access token
The application requests an access token from the API, by passing the authorization code along with authentication details using HTTP POST:
Parameter | Description | ||
---|---|---|---|
CLIENT_ID:CLIENT_SECRET | The clientId and clientSecret which has been setup for the application, sent as HTTP Basic authentication
| ||
code=THE_AUTH_CODE | The authorization code received in step 3 | ||
redirect_uri=CALLBACK_URL | The same callback url as used in step 2 | ||
grant_type=authorization_code | Specifies that you are wanting to trade an authorization_code for a long-lived request token. |
...
Code Block | ||
---|---|---|
| ||
{ "access_token": "eb0afd63-7ad3-4b0f-a3cb-bacbbf4cac7c", "token_type": "bearer", "refresh_token": "0561038e-02d3-48e4-a859-399acacad59c", "expires_in": 3599 } |
Note |
---|
Please do only rely on the "access_token", "token_type", "refresh_token" and "expires_in" attributes within the token response payload. |
Step 5: Get new access token
After the access token expires, a new one may be obtained similar to step 4:
...
As a result, a new access token will be issued. Our application may also issue a new refresh token in case the currently used one is due for expiration, which shall be stored upon reception and used from this point in time onwards.
Oauth2 Client Credentials Flow by example
When using the Client Credentials Flow, no user interaction is required, instead the authorization level of your application is directly configured within Umbrella Faces. As a result the Client Credentials Flow comprises of only a single step:
Step 1 out of 1: Get new access token
Whenever a new access token is needed (either because none is available or the old one has expired), a new one may be obtained by issuing a HTTP POST request to our token endpoint, supplying client_id and client_secret as HTTP Basic authentication, along with a grant_type of client_credentials:
...
As a result, a new access token will be issued.
Note |
---|
Please do only rely on the "access_token", "token_type", "expires_in" attributes within the token response payload. |
Anchor IDToken IDToken
ID token
IDToken | |
IDToken |
In addition(or instead) of our OAuth API scopes, we do also support scopes resulting in generation of an ID-Token, which will be returned in Step 4 as well as Step 5 of the Authorization flow.
If only an ID-Token is desired, the OAuth process may be called with response_type=token which will trigger the OAuth 2.0 Implicit flow and only generate a short-lived access token without providing a refresh token.
...
Code Block | ||||
---|---|---|---|---|
| ||||
{ "access_token": "f88a7119-b585-4c9c-9867-88a40aae41f8", "token_type": "bearer", "refresh_token": "bab32afe-acf8-4a8e-ba7c-ed567daa0ee4", "expires_in": 3599, "scope": "email openid profile", "id_token": "eyJhbGciOiJSUzI1NiJ9.eyJvcGVuaWQiOiIzZDkyMDVjYS1mMjY0LTRhZDgtYjFhYy1lNjQ1NTU3ZWFhOTkiLCJwcm9maWxlIjp7ImZpcnN0bmFtZSI6IlJlbW8iLCJwaG9uZSI6Iis0MTQ0MTIzNDU2NyIsImRpc3BsYXluYW1lIjoiSGVyciBSZW1vIFLDpGJlciIsIm5hbWUiOiJSw6RiZXIifSwiZW1haWwiOiJyZW1vLnRlc3RAdW1icmVsbGEuY2gifQ.ni2_4eszvqV5JgWBzJNmQ8jq225_7i-TiMAFzSGDSkPt6J5CTPSQF5wsq_Og5tOzd39nybGfwRzDyAkAOWinU2_djUv58gMx095U77ccSlSVYca6sn8t8WL62v8AOPSO9h8ok52nQpjtZFWcni4KABlcCKd_feT_5KjAmsRQwf7NZ0gqkoP3Y4Ymo454N8ezu822slF-ub4UdA1VBHDZuCJtQWbdsT2Cfep1NWRf3by_uP2s6yxHcHmQ0R_kYwXKMW2SbxyGo821cN-sxXYmppb4ipDtPKC7ANUYc5wZQ2Gp0gAenMIfxooz0njkEWKKMq3pwZWNJnWHDwVsluqI_w" } |
Note |
---|
Please do only rely on the "access_token", "token_type", "refresh_token", "expires_in", "scope" and "id_token" attributes within the token response payload. |
Decoded ID-Token
The following extract depicts a decoded ID-Token from the value of "id_token" in the response above
Code Block | ||
---|---|---|
| ||
{ "openid": "3d9205ca-f264-4ad8-b1ac-e645557eaa99", "profile": { "firstname": "Remo", "phone": "+41441234567", "displayname": "Herr Remo Räber", "name": "Räber" }, "email": "remo.test@umbrella.ch" } |
Anchor ProfilesAPI ProfilesAPI
Profiles API
ProfilesAPI | |
ProfilesAPI |
...
Search company profile
Scope | api.profilesondemand.read |
---|---|
Endpoint | api/v1/profiles/companies |
Request method | GET |
Allows searching through a paged list of company profiles. This API can be used to narrow-down the traveler profile search by company.
Parameters
Name | Description | Validation |
---|---|---|
q | Freetext query for finding matching profiles | Required parameter |
page | Current page within the result set, starts at 0 | Optional, number >= 0 |
pageSize | Maximum number of results per page. Default 10 | Optional, number > 0 and <= 100 |
includeDetails | Specify whether the search response should include detailed profile data | Boolean value: true or false Optional, default: false |
scope | Search scope | Optional, may be one of:
|
p | Search scope parameter | Required if scope=GENERIC_FIELD: Name of the generic field to search in Optional for scope=RECORD_LOCATOR: System type or Label (e.g. “CSX”, “GALILEO_WS”, “My HR-System”) Prohibited otherwise |
matchType | Search string match type | Optional parameter. Controls for certain scopes how the search string from "q" is matched against the profile database value
The parameter may be given for the following scopes and will be ignored if provided for any other scope not listed here:
|
detailSections | Specify additional profile areas to be returned if includeDetails is set to true. Only explicitly specified sections will be included. | Only the Any section may be specified, with more data-heavy sections only being allowed if pageSize is <= 25 The following sections are currently supportedallowed regardless of page size:
|
Code Block | ||||
---|---|---|---|---|
| ||||
curl -v -H "Authorization: Bearer <token>" \ "https://hurricane.umbrellanet.ch/uf-test/api/v1/profiles/companies?q=acme&page=0&pageSize=10" |
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
{ "moreResults": false, "results": [{ "uuid": "b9321d7e-9d72-4e80-ac49-d3aa38169175", "name": "ACME Inc." }] } |
Anchor GetCompanyProfile GetCompanyProfile
Get company profile
GetCompanyProfile | |
GetCompanyProfile |
Scope | api.profilesondemand.read |
---|---|
Endpoint | api/v1/profiles/company/<uuid> |
Request method | GET |
Retrieves the details of a single company profile.
Parameters
Name | Description | Validation | |
---|---|---|---|
<uuid> | The UUID of the profile to retrieve | Required parameter | |
sections | Areas of the profile to be returned. Must be used to reduce the amount of data transferred
| Optional, no sections will be dumped if omitted. Please identify the relevant sections for your application during development and use a restricted information subset before moving to production. | Optional |
Code Block | ||||
---|---|---|---|---|
| ||||
curl -v -H "Authorization: Bearer <token>" \ "https://hurricane.umbrellanet.ch/uf-test/api/v1/profiles/company/b9321d7e-9d72-4e80-ac49-d3aa38169175?sections=CONTACT_DATA,MEMBERSHIPS" |
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
{ "uuid": "dba95fe6-873c-4499-be0c-d3aa38169175", "externalNr": "00001", "name": "Demo GmbH", "shortname": "DEMO-1", "data": { "contact": { "street": "Binzstrasse 33", "street2": null, "zipCode": "8620", "place": "Wetzikon", "countryCode": "CH" }, "memberships": { "airline": [{ "uuid": "6bd21d65-0671-4196-8fd1-4de9f4ce9071", "alliance": "LH", "memberNumber": "DEMODEMO123", "type": "SPECIAL_KEYWORD" }], "hotel": [], "rentalCar": [] }, "genericValuesgenericFieldValues": {}[] } } |
Anchor CompanyProfileSections CompanyProfileSections
Company profile sections overview
CompanyProfileSections | |
CompanyProfileSections |
The following sections are currently available in accordance with our Swagger schema definition:
Name | Contents | ||
---|---|---|---|
AGNCYAGENCY_INFO | Agency information:
| ||
CONTACT_DATA | Company contact data:
| ||
PARENT_COMPANY | Parent company settings:
| ||
MEMBERSHIPS | Corporate alliance Memberships
| ||
GENERIC_FIELD_VALUES | Values (where filled) from the generic setup , output as key-value pairs where the key is the fieldname and the value is the value entered on the profile.
Note: Updates to generic field values are possible using either the field name or field uuid. Using the uuid is preferred since it is guaranteed to be unique, whereas name may not be unique or simply not set in some edge cases. | ||
CREDIT_CARDS | Credit card related information:
| ||
COMMENT | Comment on profile - only available to agency managers | ||
HISTORY | History (Read Only):
| ||
PUBLISH_STATES | Publish States (Read Only):
The Fault indicator will be one of
| ||
INTERFACE_SETUP |
| ||
TRAVELLER_SETTINGS |
| ||
GENERAL_SETTINGS |
|
Get subsidiaries of a company profile
Scope | api.profilesondemand.read |
---|---|
Endpoint | api/v1/profiles/company/<uuid>/subsidiaries |
Request method | GET |
Query subsidiaries for a given company
Parameters
Name | Description | Validation |
---|---|---|
uuid | The company UUID for which subsidiaries should be queried | Mandatory parameter |
Code Block | ||||
---|---|---|---|---|
| ||||
curl -v -H "Authorization: Bearer <token>" \
"https://hurricane.umbrellanet.ch/uf-test/api/v1/profiles/company/b9321d7e-9d72-4e80-ac49-d3aa38169175/subsidiaries" |
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
[
{
"uuid": "da5a20c7-08db-42ae-a5e7-72737e9eb647",
"name": "Hierarchy Child Company 2"
},
{
"uuid": "2b8c21de-8e74-4d8d-b836-e904e4977c61",
"name": "Hierarchy Child Company 1"
}
] |
Create new company profile
Scope | api.profilesondemand.write |
---|---|
Endpoint | api/v1/profiles/company |
Request method | POST |
Create a new company profile
Parameters
Name | Description | Validation |
---|---|---|
returnAddSections | List of additional profile sections which should be included in the response, even if not modified by the current operation | Optional parameter (GET) |
Code Block | ||
---|---|---|
| ||
curl -v -X POST \ -H "Authorization: Bearer <token>" \ -H "Content-Type: application/json" \ --data '{ "externalNr": "1337", "name": "Umbrella Organisation U+O AG", "shortname": "UMBRELLA", "data": { "contact": { "street": "Binzstrasse 33", "zipCode": "8620", "place": "Wetzikon", "countryCode": "CH" }, "genericValuesgenericFieldValues": [ { "costCenterfield": { "uuid": "180d6569-28d8-43e1-9599-ba520e6d1fec" }, "value": "1230A" } ], "agency": { "uuid": "52b166c5-4990-49bb-b1f1-d3aa38169175" } } }' https://hurricane.umbrellanet.ch/uf-test/api/v1/profiles/company |
Example response
The profile, including any sections populated by the request, will be reported back, including the newly generated UUID - see Get company profile
Implementation notes
The data structure is the same as is output in Get company profile with the following exceptions:
...
Faces will apply default validation logic as seen on our Web UI and CSV interfaces and will report validation errors to the caller without saving the profile.
Update existing company profile
Scope | api.profilesondemand.write |
---|---|
Endpoint | api/v1/profiles/company/<uuid> |
Request method | PATCH |
Updates (part of) the details of a single company profile.
Parameters
Name | Description | Validation |
---|---|---|
<uuid> | The UUID of the profile to update | Required parameter |
returnAddSections | List of additional profile sections which should be included in the response, even if not modified by the current operation | Optional parameter (GET) |
Code Block |
---|
curl -v -X PATCH \ -H "Authorization: Bearer <token>" \ -H "Content-Type: application/json" \ --data '{ "externalNr": "0815", "name": "ACME Incorporated", "shortname": "ACME-INC", "data": { "memberships": { "airline": [{ "alliance": "LH", "memberNumber": "DEMODEMO123", "type": "SPECIAL_KEYWORD" }] } } }' https://hurricane.umbrellanet.ch/uf-test/api/v1/profiles/company/b9321d7e-9d72-4e80-ac49-d3a |
Implementation notes
Depending on the authorization level of the caller, it may not be possible to edit certain properties. Changes to unmodifiable properties will be silently ignored if sent.
Callers should include only the properties they wish to edit in the PATCH request. Due to underlying synchronization logic to third party systems, it is required to perform all profile modifications within one single PATCH call (I.e. do not first edit the shortname, then add a membership code as two separate API calls).
The following logic is applied when editing collections, such as memberships to allow for modification of single elements within the collection without having separate API calls for that purpose:
If an “uuid” is supplied, the corresponding collection element is being modified
If there is no matching element with the given UUID, the update is ignored
In order to remove a collection item, it’s UUID is supplied, along with a property “_operation”, which is set to “remove”
In order to remove genericValues generic values from a profile, please include the fieldname field uuid or name but set the field content to empty or null.
Delete company profile
Scope | api.profilesondemand.write |
---|---|
Endpoint | api/v1/profiles/company/<uuid> |
Request method | DELETE |
Delete a single company profile (along with all associated traveler profiles) from Faces as well as all downline systems.
Parameters
Name | Description | Validation |
---|---|---|
<uuid> | The UUID of the profile to delete | Required parameter |
Code Block |
---|
curl -v -X DELETE \ -H "Authorization: Bearer <token>" \ https://hurricane.umbrellanet.ch/uf-test/api/v1/profiles/company/b9321d7e-9d72-4e80-ac49-d3aa38169175 |
Example response
HTTP 204 “No Content” with empty body
Search traveler profile
Scope | api.profilesondemand.read |
---|---|
Endpoint | api/v1/profiles/travellers |
Request method | GET |
Parameters
Name | Description | Validation |
---|---|---|
q | Freetext query for finding matching profiles | Required parameter |
page | Current page within the result set, starts at 0 | Optional, number >= 0 |
pageSize | Maximum number of results per page. Default 10 | Optional, number > 0 and <= 100 |
c | Narrow down the search for travelers attached to a specific company profile | Optional, company UUID |
scope | Search scope | Optional, may be one of:
|
p | Search scope parameter | Required if scope=GENERIC_FIELD: Name of the generic field to search in Optional for scope=RECORD_LOCATOR: System type or Label (e.g. “CSX”, “GALILEO_WS”, “My HR-System”) Optional for scope=PAPER: Type of paper to search for, PASSPORT, ID_CARD or VISA Prohibited otherwise |
matchType | Seach string match type | Optional parameter. Controls for certain scopes how the search string from "q" is matched against the profile database value
The parameter may be given for the following scopes and will be ignored if provided for any other scope not listed here:
|
includeDetails | Specify whether the search response should include detailed profile data | Boolean value: true or false Optional, default: false |
detailSections | Specify additional profile areas to be returned if includeDetails is set to true. Only explicitly specified sections will be included. |
Any section may be specified, with more data-heavy sections only being allowed if pageSize is <= 25 The following sections are |
allowed regardless of page size:
|
Code Block | ||||
---|---|---|---|---|
| ||||
curl -v -H "Authorization: Bearer <token>" \ "https://hurricane.umbrellanet.ch/uf-test/api/v1/profiles/travellers?q=bob&page=0&pageSize=10" |
Code Block | ||||
---|---|---|---|---|
| ||||
{ "moreResults": false, "results": [{ "uuid": "065fe9e0-47b7-4d12-b3de-d3aa38169175", "fullName": "Herr Bob Builder" }] } |
Anchor | ||||
---|---|---|---|---|
|
Scope | api.profilesondemand.read |
---|---|
Endpoint | api/v1/profiles/traveller/<uuid> |
Request method | GET |
Parameters
Name | Description | Validation |
---|---|---|
<uuid> | The UUID of the profile to retrieve | Required parameter |
sections | Areas of the profile to be returned. |
Must be used to reduce the amount of data transferred |
| Optional, no sections will be dumped if omitted |
Code Block | ||||
---|---|---|---|---|
| ||||
curl -v -H "Authorization: Bearer <token>" \
"https://hurricane.umbrellanet.ch/uf-test/api/v1/profiles/traveller/065fe9e0-47b7-4d12-b3de-d3aa38169175?sections=GENERIC_FIELD_VALUES§ions=COMPANY_INFO§ions=MEMBERSHIPS" |
Code Block | ||||
---|---|---|---|---|
| ||||
{ "uuid": "065fe9e0-47b7-4d12-b3de-d3aa38169175", "firstname": "Bob", "middlename": "", "name": "Builder", "email": "bob.builder@umbrella.ch", "data": { "company": { "externalNr": "12345", "name": "Fix-It Inc", "uuid": "52f2b2c0-4990-49bb-b1f1-d3aa38169175" }, "genericValuesgenericFieldValues": [ { "field": { "uuid": "30713acf-71dc-42c8-825f-7e5be9e98fbe", "namme": "HairColor" , "value": "Red" }, { "field": { "uuid": "5aba8e80-4ae5-4efc-a5df-60303aede01e", "name": "FirstClassTraveler" }, "value": "Y" } ], "memberships": { "flight": [{ "alliance": "LH", "memberNumber": "9992123412341234", "pin": "", "uuid": "dbb387a9-b5e7-44d0-87bf-64432ee3e582" }], "rentalCar": [], "hotel": [] } } } |
Anchor TravellerProfileSections TravellerProfileSections
Traveler profile sections overview
TravellerProfileSections | |
TravellerProfileSections |
The following sections are currently available in accordance with our Swagger schema definition:
Name | Contents |
---|---|
COMPANY_INFO | Information on the associated company:
|
COMPANY_CONTACT_DATA | Contact information of the associated company (read only, provided for simplicity / reduce the need to talk to the company endpoint):
|
GENERAL_DATA | General profile information:
|
GENERIC_FIELD_VALUES | Values (where filled) from the generic setup |
Note: Updates to generic field values are possible using either the field name or field uuid. Using the uuid is preferred since it is guaranteed to be unique, whereas name may not be unique or simply not set in some edge cases. | |
MEMBERSHIPS | Flight, Hotel and Rentalcar-Memberships |
with:
|
| |
PASSPORT | Passport(s) as shown in Faces UI |
VISA | Visa information as shown in Faces UI |
ID_CARD | Identification Cards as shown in Faces UI |
EMERGENCY_CONTACT | Emergency contact:
|
ARRANGER_CONTACTS | Arranger contact(s):
|
APPROVER_CONTACTS | Approver contact(s):
|
ROLES | Roles as show in Faces UI with the respective checkboxes (true/false):
|
PREFERENCES | Preferences:
|
CREDIT_CARDS | Credit card related information:
|
RAIL_INFORMATION | Rail related information - only available if rail feature is active in agency configuration
|
RESIDENT_INFORMATION | (Spanish) Resident Information - only available if spanish resident feature is active in agency configuration
|
TRAVEL_GROUP_ASSIGNMENTS | Travel group assignments - will only be populated if profile is synchronized to Cytric:
|
COMMENT | Comment on profile - only available to agency managers |
HISTORY | History (Read Only):
|
PUBLISH_STATES | Publish States (Read Only):
The Fault indicator will be one of
|
UNUSED_TICKETS | Unused ticket information - only available if Magnatech is active on agency (Read Only):
|
Anchor TravelerGreetingStructure TravelerGreetingStructure
Traveler "greeting" structure handling
TravelerGreetingStructure | |
TravelerGreetingStructure |
Umbrella Faces logically divides a greeting into common title and formal title. The common title is restricted to a predefined list (please see the swagger document for the most up to date list), whereas the formal title allows storage of freetext title information with the limitation of only showing certain formal titles in the UI.
Note | ||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Depending on the travel agency setup, not all combinations of common / formal title are supported by the Faces UI. It's best to consult with the travel agency on their setup to ensure a consistent user experience. The common titles referenced in the swagger definition are generally valid for every agency. Please refer to the following table:
|
Using compoundTitle vs commonTitle & formalTitle
Umbrella Faces in it's backend always stores the compoundTitle, but transparently derives common and formal title in API requests using the following general format: compoundTitle = trim(commonTitle + " " + formalTitle).
When updating a profile in Umbrella Faces, it is important to only send either the compoundTitle or commonTitle / formalTitle but never both structures.
Expand | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||
|
Greeting validation
It is important to note that the commonTitle is mandatory whenever sex is set to MALE or FEMALE if the agency is using Title Structure "Default".
Should you create / update a profile using compoundTitle, you might still get an errorMessage for greeting.commonTitle in case the supplied compoundTitle can not be derived into a valid commonTitle.
Get linked traveler profiles
Anchor TravelerGreetingStructure TravelerGreetingStructure
Arranger
TravelerGreetingStructure | |
TravelerGreetingStructure |
Scope | api.profilesondemand.read |
---|---|
Endpoint | api/v1/traveller/<uuid>/arranger-contacts |
Request method | GET |
Query returns an array of travelers where the specified uuid is linked as an arranger.
Parameters
Name | Description | Validation |
---|---|---|
uuid | The profile UUID for which you want to get a list of travellers where profile is selected as arranger | Mandatory parameter |
Code Block | ||||
---|---|---|---|---|
| ||||
curl -v -H "Authorization: Bearer <token>" \
"https://hurricane.umbrellanet.ch/uf-test/api/v1/traveller/065fe9e0-47b7-4d12-b3de-d3aa38169175/arranger-contacts" |
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
[
{
"displayText": "Mr. Bob Example",
"contactUuid": "4cc19e19-11f4-46c3-b4f6-1ee2360a5752"
},
{
"displayText": "Mrs. Jane Never",
"contactUuid": "9a57f51b-1b7b-43cd-8582-d909670682aa"
}
] |
Anchor | ||||
---|---|---|---|---|
|
Scope | api.profilesondemand.read |
---|---|
Endpoint | api/v1/traveller/<uuid>/approver-contacts |
Request method | GET |
Query returns an array of travelers where the specified uuid is linked as an approver.
Parameters
Name | Description | Validation |
---|---|---|
uuid | The profile UUID for which you want to get a list of travellers where profile is selected as approver | Mandatory parameter |
Code Block | ||||
---|---|---|---|---|
| ||||
curl -v -H "Authorization: Bearer <token>" \
"https://hurricane.umbrellanet.ch/uf-test/api/v1/traveller/065fe9e0-47b7-4d12-b3de-d3aa38169175/approver-contacts" |
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
[
{
"displayText": "Mr. Bob Example",
"contactUuid": "4cc19e19-11f4-46c3-b4f6-1ee2360a5752"
},
{
"displayText": "Mrs. Jane Never",
"contactUuid": "9a57f51b-1b7b-43cd-8582-d909670682aa"
}
] |
Create new traveler profile
Scope | api.profilesondemand.write |
---|---|
Endpoint | api/v1/profiles/traveller |
Request method | POST |
Create a new traveler profile
Parameters
Name | Description | Validation |
---|---|---|
returnAddSections | List of additional profile sections which should be included in the response, even if not modified by the current operation | Optional parameter (GET) |
Code Block | ||||
---|---|---|---|---|
| ||||
curl -v -X POST \ -H "Authorization: Bearer <token>" \ -H "Content-Type: application/json" \ --data '{ "username": "bob.builder", "firstname": "Bob", "middlename": "", "name": "Builder", "data": { "contacts": { "emergencyContact": { "firstname": "Dizzy", "phone": "+414412355889", "email": "dizzy@umbrella.ch", "lastname": "Mixer" } }, "generalData": { "birthdate": "03.05.1973", "gender": "MR", "mobilePhone": "", "nationality": "CH", "language": "de_CH", "privatePhone": "", "businessPhone": "", "title": "", "email": "bob.builder@umbrella.ch" }, "company": { "uuid": "52f2b2c0-4990-49bb-b1f1-d3aa38169175" }, "papers": { "visas": [{ "country": "US", "number": "8123789", "entryType": "MULTIPLE", "expiration": "01.03.2020", "issueDate": "01.09.2019" }, { "country": "AE", "number": "XXEE1123", "entryType": "", "expiration": "31.10.2020", "issueDate": "09.03.2020" } ], "idCards": [{ "country": "CH", "number": "123456", "expiration": "31.12.2030", "issueDate": "01.01.2020" }], "passports": [{ "country": "CH", "number": "X12345", "issueCountry": "CH", "expiration": "31.12.2029", "issueDate": "01.01.2019", "issuePlace": "Zurich", "primary": true }, { "country": "CH", "number": "X999999", "issueCountry": "CH", "expiration": "31.12.2029", "issueDate": "01.01.2019", "issuePlace": "Zurich", "primary": false } ] }, "genericValuesgenericFieldValues": [ { "field": { "uuid": "afee4339-3c12-412a-9504-fb475bed71ab", "name": "EmailPersonal" }, "value": "bob@hasnoemail.com" }, { "field": { "uuid": "5e4f3887-5a46-4625-9658-99e579f6c41b", "name": "AARPRate" }, "value": "false" }, { "field": { "uuid": "5294be6b-b4d6-4890-8b1f-40e16ab37e25", "name": "PreferWheelchairAccess" }, "value": "false" }, { "field": { "uuid": "da0de48e-70c8-4ddb-b334-f2de7bdb2109", "name": "MilitaryRate" }, "value": "false" }, { "field": { "uuid": "4577bf5f-d3b3-4f2b-9b4e-5eff858dff77", "name": "SectionPositionCode" }, "value": "Bulkhead" }, { "field": { "uuid": "173704e3-7d5c-492e-b206-3d4e2d50e45a", "name": "RuleClass" }, "value": "Default Travel Class" } ], "memberships": { "flight": [{ "alliance": "EI", "memberNumber": "1199223123" }, { "alliance": "LH", "memberNumber": "999999912317" } ], "rentalCar": [{ "alliance": "EP", "memberNumber": "E111221" }], "hotel": [{ "alliance": "AL", "memberNumber": "LL18675" }, { "alliance": "RT", "memberNumber": "A123F" } ] } } }' https://hurricane.umbrellanet.ch/uf-test/api/v1/profiles/traveller |
Example
...
response
The profile, including any sections populated by the request, will be reported back, including the newly generated UUID - see Get traveler profile
Implementation Notes
The data structure is the same as is output in Get traveler profile with the following exceptions:
...
Faces will apply default validation logic as seen on our Web UI and CSV interfaces and will report validation errors to the caller without saving the profile.
When adding a passport which should at the same time be added on a visa as linkedPassport, the following format has to be used to reference the passport (as no UUID is yet available): newpp-<2-letter-country code>-<passport number>
Example: newpp-CH-X12345678
Update existing traveler profile
Scope | api.profilesondemand.write |
---|---|
Endpoint | api/v1/profiles/traveller/<uuid> |
Request method | PATCH |
Updates (part of) the details of a single traveler profile.
Parameters
Name | Description | Validation |
---|---|---|
<uuid> | The UUID of the profile to update | Required parameter |
returnAddSections | List of additional profile sections which should be included in the response, even if not modified by the current operation | Optional parameter (GET) |
Code Block | ||||
---|---|---|---|---|
| ||||
curl -v -X PATCH \ -H "Authorization: Bearer <token>" \ -H "Content-Type: application/json" \ --data '{ "username": "bobby.builder", "firstname": "Bobby", "data": { "contacts": { "emergencyContact": { "firstname": "", "phone": "", "email": "", "lastname": "" } }, "generalData": { "birthdate": "04.05.1973", "email": "bobby.builder@umbrella.ch" }, "papers": { "visas": [{ "country": "US", "number": "8123789", "entryType": "MULTIPLE", "expiration": "01.03.2020", "issueDate": "01.09.2019", "uuid": "44f2ee67-eba5-4b29-9dfa-76e7eb97de39" }, { "_operation": "remove", "uuid": "1eed6a49-f8e8-4441-b3ce-312f4dd1cd73" } ] }, "genericValuesgenericFieldValues": [ { "field": { "uuid": "afee4339-3c12-412a-9504-fb475bed71ab", "name": "EmailPersonal" }, "value": "bobby@hasnoemail.com" } ] } }' https://hurricane.umbrellanet.ch/uf-test/api/v1/profiles/traveller/ceb545fd-5000-4f44-93dd-47a272f6f25a |
Example response
Example Response: The profile will be reported back, including information on all modified profile sections, see Get traveler profile
Implementation notes
Depending on the authorization level of the caller, it may not be possible to edit certain properties (e.g. a traveller may not edit the username, but an agency administrator may do so) - changes to unmodifiable properties will be silently ignored if sent.
...
If an “uuid” is supplied, the corresponding collection element is being modified
If there is no matching element with the given UUID, the update is ignored
In order to remove a collection item, it’s UUID is supplied, along with a property “_operation”, which is set to “remove”
In order to remove genericValues generic values from a profile, please include the fieldname field name or uuid but set the field content to empty or null..
When adding a passport which should at the same time be added on a visa as linkedPassport, the following format has to be used to reference the passport (as no UUID is yet available): newpp-<2-letter-country code>-<passport number>
Example: newpp-CH-X12345678
Delete traveler profile
Scope | api.profilesondemand.write |
---|---|
Endpoint | api/v1/profiles/traveller/<uuid> |
Request method | DELETE |
Delete a single traveler profile from Faces as well as all downline systems.
Parameters
Name | Description | Validation |
---|---|---|
<uuid> | The UUID of the profile to delete | Required parameter |
Code Block |
---|
curl -v -X DELETE \ -H "Authorization: Bearer <token>" \ https://hurricane.umbrellanet.ch/uf-test/api/v1/profiles/traveller/ceb545fd-5000-4f44-93dd-47a272f6f25a |
Example response
HTTP 204 “No Content” with empty body
Plaintext Credit Card API
This API is an extension to the Profiles API and allows to send and receive plaintext credit card information from / to Umbrella Faces.
Info |
---|
Partners wishing to use these APIs will be required proof their adherance to the PCI DSS security standards and will receive a custom endpoint from our credit card tokenization partner Midoco, which will ensure PCI compliace and forward card data from / to Umbrella Faces. |
PCI Compliance Concept
Umbrella Faces itself is not holding any plaintext credit card numbers. Only credit card tokens are stored and need to be forwarded via our partner Midoco, which handles the tokenization and detokenization from / to plaintext data.
As a direct result of this, any partners wanting to exchange credit card numbers with Umbrella Faces will need to direct any API-Calls containing plaintext card numbers in either the request or response via Midoco.
In order to facilitate this design, the Plaintext Credit Card API exposes credit card information within separate API-Calls, with our regular Profiles on Demand API only exposing masked card numbers at most
Retrieve plaintext credit card data
Scopes | api.profilesondemand.read api.profilesondemand.ccaccess |
---|---|
Endpoints | {midoco_proxy_url}/traveller/<uuid>/creditcard/{ccUuid} {midoco_proxy_url}/company/<uuid>/creditcard/{ccUuid} |
Request method | GET |
Fetch plaintext credit card data from a company or traveler profile.
Parameters
Name | Description | Validation |
---|---|---|
uuid | Owning (company / traveler) profile UUID | Required parameter |
ccUuid | Specific credit card UUID as obtained from the CREDIT_CARDS section of the profile. See: Company profile sections overview, Traveler profile sections overview | Required parameter |
Code Block | ||||
---|---|---|---|---|
| ||||
curl -v -H "Authorization: Bearer <token>" \
{midoco_proxy_url}/traveller/ceb545fd-5000-4f44-93dd-47a272f6f25a/creditcard/eff37a66-4217-4762-a3be-2a9177fba9fc |
Code Block | ||||
---|---|---|---|---|
| ||||
{
"uuid": "bd380903-2e49-4920-9823-45626357c367",
"type": "VI",
"maskedNumber": "4444XXXXXXXX1111",
"number": "4444333322221111",
"expiration": "12/25",
"remark": ""
"publishAsFop": false
} |
Store credit card number
Scopes | api.profilesondemand.write api.profilesondemand.ccaccess |
---|---|
Endpoints | {midoco_proxy_url}/creditcard/store |
Request method | POST |
Send a new or updated credit card number and retrieve a transaction number to be used for company or traveller profile update via separate API call.
Code Block | ||||
---|---|---|---|---|
| ||||
curl -v -X POST \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
--data '{
"type": "VI",
"number": "4444333322221111"
}' {midoco_proxy_url}/creditcard/store |
Code Block | ||||
---|---|---|---|---|
| ||||
{
"transactionId": "ccTok-75cb0e1c-6640-4622-82bd-fed07fd1ca59",
"validUntil": "10.09.2021T13:37:69Z"
} |
Example: Add previously stored credit card number to traveler profile
After sending a credit card number to Faces and receiving a transactionId in return, the transactionId may be used exactly once (up until the time indicated by the "validUntil" field) in a request to add or update a credit card on a company or traveler profile.
Code Block | ||||
---|---|---|---|---|
| ||||
curl -v -X PATCH \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
--data '{
"data": {
"creditCardInfo": {
"creditCards": [{
"updatedNumberReference": "ccTok-75cb0e1c-6640-4622-82bd-fed07fd1ca59",
"expiration": "12/25",
"publishAsFop": true
}],
"webCard": {
"@type": "own-card",
"uuid": "6e6259b9-4fa9-41c7-8a7b-f5d68df8f38b"
},
"hotelGuarantee": {
"@type": "own-card",
"uuid": "ccTok-75cb0e1c-6640-4622-82bd-fed07fd1ca59"
},
"carGuarantee": {
"@type": "company-card"
}
}
}
}' https://hurricane.umbrellanet.ch/uf-test/api/v1/profiles/traveller/ceb545fd-5000-4f44-93dd-47a272f6f25a |
Code Block | ||||
---|---|---|---|---|
| ||||
{
"uuid": "ceb545fd-5000-4f44-93dd-47a272f6f25a",
"username": "demo.user",
"firstname": "Demo",
"name": "Traveller",
"email": "demo@umbrella.ch",
"data": {
"creditCardInfo": {
"creditCards": [{
"uuid": "bcf0cfc2-5262-4996-98fb-f9a2ca8dc7a4",
"type": "VI",
"maskedNumber": "4444XXXXXXXX1111",
"expiration": "12/25",
"remark": "",
"publishAsFop": true
}, {
"uuid": "6e6259b9-4fa9-41c7-8a7b-f5d68df8f38b",
"type": "VI",
"maskedNumber": "4242XXXXXXXX4242",
"expiration": "12/25",
"remark": "",
"publishAsFop": true
}],
"webCard": {
"@type": "own-card",
"uuid": "6e6259b9-4fa9-41c7-8a7b-f5d68df8f38b",
"maskedNumber": "4242XXXXXXXX4242"
},
"hotelGuarantee": {
"@type": "own-card",
"uuid": "bcf0cfc2-5262-4996-98fb-f9a2ca8dc7a4",
"maskedNumber": "4444XXXXXXXX1111"
},
"carGuarantee": {
"@type": "company-card",
"uuid": "0d67e63f-a8a6-4a73-b826-d815a04aaedd",
"maskedNumber": "5200XXXXXXXX0007"
}
}
}
} |
Configuration management API
This API is complimentary to the Profiles API and allows to query Umbrella Faces for defined settings on company / agency level
Info |
---|
Within the Swagger documentation you'll see additional parameters and/or methods for some of these APIs which are only to be used internally. All APIs and parameters not documented on this page are for internal use only and will not be made publicly available |
Get generic setup for travel agency
Scopes | api.profilesondemand.read |
---|---|
Endpoints | api/v1/configuration/setup/agency/{uuid} |
Request method | GET |
Fetch the generic setup of a travelagency tailored to the access level of the calling user / application
Parameters
Name | Description | Validation |
---|---|---|
<uuid> | The UUID of the travelagency | Required parameter |
profileType | May be used to restrict the response to configuration for a specific profile type. | OptionalOne of TRAVELLER, CORPORATE
|
Code Block | ||||
---|---|---|---|---|
| ||||
curl -v -H "Authorization: Bearer <token>" \
"https://hurricane.umbrellanet.ch/uf-test/api/v1/configuration/setup/agency/f4cbed76-873c-4499-be0c-f8f60745d529" |
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
{
"groups": [
{
"uuid": "cf34a9d2-b004-4d1e-9d8f-7533d4d1c769",
"groupType": {
"@type": "custom"
},
"sequence": 0,
"defaultLabel": "- custom -",
"labels": {},
"fields": [
{
"uuid": "2a9b7a89-da2b-428f-b193-334ab32c6004",
"name": "ACECRMU2",
"sequence": 1,
"internalCode": "",
"profileType": "UNDEFINED",
"editable": true,
"defaultLabel": "ACECRM-U2:",
"labels": {},
"fieldType": "INPUT",
"elective": "COMPANY_SPECIFIC",
"validation": {
"@type": "none"
}
},
{
"uuid": "3b1c0373-ae07-4eeb-ba64-2fd360be5e18",
"name": "ACECRMU7",
"sequence": 2,
"internalCode": "",
"profileType": "UNDEFINED",
"editable": true,
"defaultLabel": "Kostenstelle",
"labels": {},
"fieldType": "INPUT",
"elective": "COMPANY_SPECIFIC",
"validation": {
"@type": "none"
}
}
]
},
{
"uuid": "1962421b-7acd-4d49-953c-3d2f6186532c",
"groupType": {
"@type": "custom"
},
"sequence": 5,
"defaultLabel": "- custom -",
"labels": {},
"fields": [
{
"uuid": "c31e2354-b88a-4cab-aba0-9e58106ef572",
"name": "businesszip",
"sequence": 2,
"internalCode": "",
"profileType": "TRAVELLER",
"editable": true,
"defaultLabel": "business_zip",
"labels": {},
"fieldType": "INPUT",
"elective": "OPTIONAL",
"validation": {
"@type": "none"
}
},
{
"uuid": "308c79c9-e9d4-4334-8a08-6727b5a1e6ef",
"name": "businessstreet",
"sequence": 1,
"internalCode": "",
"profileType": "TRAVELLER",
"editable": true,
"defaultLabel": "business_street",
"labels": {},
"fieldType": "INPUT",
"elective": "OPTIONAL",
"validation": {
"@type": "none"
}
},
{
"uuid": "9beaa003-32cd-4cd6-a2f7-8ab509ae649f",
"name": "businessfax",
"sequence": 5,
"internalCode": "",
"profileType": "TRAVELLER",
"editable": true,
"defaultLabel": "business_fax",
"labels": {},
"fieldType": "INPUT",
"elective": "OPTIONAL",
"validation": {
"@type": "none"
}
},
{
"uuid": "fd71e67f-8dad-4b90-a7b3-9fdbb33377f0",
"name": "businesscompany",
"sequence": 0,
"internalCode": "",
"profileType": "TRAVELLER",
"editable": true,
"defaultLabel": "business_company",
"labels": {},
"fieldType": "INPUT",
"elective": "OPTIONAL",
"validation": {
"@type": "none"
}
},
{
"uuid": "d55f5e03-b7f5-4340-925a-4bdff9e559ba",
"name": "businesscity",
"sequence": 4,
"internalCode": "",
"profileType": "TRAVELLER",
"editable": true,
"defaultLabel": "business_city",
"labels": {},
"fieldType": "INPUT",
"elective": "OPTIONAL",
"validation": {
"@type": "none"
}
},
{
"uuid": "d919c496-8e69-4446-a5d6-c789d39e6ce1",
"name": "businesscountry",
"sequence": 3,
"internalCode": "",
"profileType": "TRAVELLER",
"editable": true,
"defaultLabel": "business_country",
"labels": {},
"fieldType": "INPUT",
"elective": "OPTIONAL",
"validation": {
"@type": "none"
}
}
]
},
{
"uuid": "5ebf2ff7-60bd-4dd4-b20c-1ba6a96ddf12",
"groupType": {
"@type": "integrated",
"key": "traveller.adminheader"
},
"sequence": 6,
"defaultLabel": "Administration",
"labels": {
"sv_SE": "Administration",
"es_ES": "Administración",
"fr_BE": "Administration",
"nl_NL": "Administration",
"hu_HU": "Adminisztráció",
"de_CH": "Administration",
"it_CH": "Amministrazione",
"de_DE": "Administration",
"kl_GL": "Aqutsisoqarfik",
"cs_CZ": "Správa",
"da_DK": "Administration",
"pl_PL": "Administracja",
"sk_SK": "Administrácia",
"it_IT": "Amministrazione",
"pt_PT": "Administration",
"fr_FR": "Administration",
"en_US": "Administration",
"de_AT": "Administration",
"fr_CH": "Administration",
"en_GB": "Administration",
"nl_BE": "Administration"
},
"fields": [
{
"uuid": "c8933052-5368-498e-920e-079d183fdab4",
"name": "emergencycountry",
"sequence": 1,
"internalCode": "",
"profileType": "TRAVELLER",
"editable": true,
"defaultLabel": "emergency_country",
"labels": {},
"fieldType": "INPUT",
"elective": "OPTIONAL",
"validation": {
"@type": "none"
}
},
{
"uuid": "99880000-4c5c-4624-b5a3-5078e9523da1",
"name": "emergencyrelationship",
"sequence": 0,
"internalCode": "",
"profileType": "TRAVELLER",
"editable": true,
"defaultLabel": "emergency_relationship",
"labels": {},
"fieldType": "INPUT",
"elective": "OPTIONAL",
"validation": {
"@type": "none"
}
}
]
},
{
"uuid": "a11220d3-747a-49be-aa65-027759306372",
"groupType": {
"@type": "integrated",
"key": "general.header_general"
},
"sequence": 2,
"defaultLabel": "General",
"labels": {
"sv_SE": "Generell",
"es_ES": "General",
"fr_BE": "Général",
"nl_NL": "Allgemein",
"hu_HU": "Általános",
"de_CH": "Allgemein",
"it_CH": "Generale",
"de_DE": "Allgemein",
"kl_GL": "Tamanut atuuttoq",
"cs_CZ": "Obecné",
"da_DK": "Generelt",
"pl_PL": "Ogólne",
"sk_SK": "Všeobecne",
"it_IT": "Generale",
"pt_PT": "Allgemein",
"fr_FR": "Général",
"en_US": "General",
"de_AT": "Allgemein",
"fr_CH": "Général",
"en_GB": "General",
"nl_BE": "Allgemein"
},
"fields": [
{
"uuid": "1477c9bf-67cd-441b-9cbc-25f9921a1363",
"name": "ShareContactEmail",
"sequence": 10,
"internalCode": "",
"profileType": "TRAVELLER",
"editable": true,
"defaultLabel": "ShareContactEmail",
"labels": {},
"fieldType": "INPUT",
"elective": "OPTIONAL",
"validation": {
"@type": "none"
}
},
{
"uuid": "59b40426-3ea1-4f19-b778-1b3aca65c650",
"name": "EMailPreferences",
"sequence": 4,
"internalCode": "",
"profileType": "TRAVELLER",
"editable": true,
"defaultLabel": "EMailPreferences",
"labels": {},
"fieldType": "INPUT",
"elective": "OPTIONAL",
"validation": {
"@type": "none"
}
},
{
"uuid": "4a1ff93e-95ae-40eb-95e9-f199cde96f18",
"name": "firstAdditionalEMail",
"sequence": 2,
"internalCode": "",
"profileType": "TRAVELLER",
"editable": true,
"defaultLabel": "firstAdditionalEMail",
"labels": {},
"fieldType": "INPUT",
"elective": "OPTIONAL",
"validation": {
"@type": "none"
}
},
{
"uuid": "c264f074-a28b-4c10-8665-662a407c6f45",
"name": "CustomerType",
"sequence": 7,
"internalCode": "CUSTOMER_TYPE",
"profileType": "CORPORATE",
"editable": true,
"defaultLabel": "Customer Type",
"labels": {},
"fieldType": "INPUT",
"elective": "MANDATORY",
"validation": {
"@type": "none"
}
},
{
"uuid": "f3a21ea3-9f41-456a-a9f2-63929569e734",
"name": "personalDataGender",
"sequence": 11,
"internalCode": "",
"profileType": "TRAVELLER",
"editable": true,
"defaultLabel": "personalDataGender",
"labels": {},
"fieldType": "INPUT",
"elective": "OPTIONAL",
"validation": {
"@type": "none"
}
},
{
"uuid": "010cd7d5-e551-4105-9ac9-32bc3c65cb36",
"name": "secondAdditionalEMail",
"sequence": 3,
"internalCode": "",
"profileType": "TRAVELLER",
"editable": true,
"defaultLabel": "secondAdditionalEMail",
"labels": {},
"fieldType": "INPUT",
"elective": "OPTIONAL",
"validation": {
"@type": "none"
}
},
{
"uuid": "a91124f3-af85-407c-bbef-e6021ba28928",
"name": "ReviewPublish",
"sequence": 6,
"internalCode": "",
"profileType": "CORPORATE",
"editable": true,
"defaultLabel": "Reviewed for publishing",
"labels": {},
"fieldType": "INPUT",
"elective": "OPTIONAL",
"validation": {
"@type": "none"
}
},
{
"uuid": "ea1650bf-abdf-420f-ba7b-f156a1b7fea7",
"name": "externalReference",
"sequence": 1,
"internalCode": "",
"profileType": "TRAVELLER",
"editable": true,
"defaultLabel": "externalReference",
"labels": {},
"fieldType": "INPUT",
"elective": "OPTIONAL",
"validation": {
"@type": "none"
}
},
{
"uuid": "0c4c4f73-18dd-490b-8ee5-42896e41b819",
"name": "corpcard",
"sequence": 7,
"internalCode": "",
"profileType": "CORPORATE",
"editable": true,
"defaultLabel": "corpcard",
"labels": {},
"fieldType": "INPUT",
"elective": "OPTIONAL",
"validation": {
"@type": "none"
}
},
{
"uuid": "8d8b05a7-f1b5-4933-8e4f-713f2e76ea64",
"name": "ShareContactMobilePhone",
"sequence": 9,
"internalCode": "",
"profileType": "TRAVELLER",
"editable": true,
"defaultLabel": "ShareContactMobilePhone",
"labels": {},
"fieldType": "INPUT",
"elective": "OPTIONAL",
"validation": {
"@type": "none"
}
},
{
"uuid": "df628948-5fbe-4c0c-8ee4-c632ae3f46da",
"name": "MigrationCompanyCSXLocator",
"sequence": 5,
"internalCode": "",
"profileType": "TRAVELLER",
"editable": true,
"defaultLabel": "Migration Company CSX Locator",
"labels": {},
"fieldType": "INPUT",
"elective": "OPTIONAL",
"validation": {
"@type": "none"
}
},
{
"uuid": "c2bf0704-af6a-4528-afbd-64888c5a226b",
"name": "ShareContactMobile",
"sequence": 8,
"internalCode": "",
"profileType": "TRAVELLER",
"editable": true,
"defaultLabel": "ShareContactMobile",
"labels": {},
"fieldType": "INPUT",
"elective": "OPTIONAL",
"validation": {
"@type": "none"
}
}
]
},
{
"uuid": "ac7fe1f2-6f9b-486a-bd3e-9afe5f2df612",
"groupType": {
"@type": "custom"
},
"sequence": 1,
"defaultLabel": "- custom -",
"labels": {},
"fields": [
{
"uuid": "db59b7f8-a5bc-4bac-8c02-3821887a6de7",
"name": "AZBusinessConnect",
"sequence": 6,
"internalCode": "",
"profileType": "CORPORATE",
"editable": true,
"defaultLabel": "AZ Business Connect",
"labels": {},
"fieldType": "INPUT",
"elective": "OPTIONAL",
"validation": {
"@type": "none"
}
},
{
"uuid": "3d3f24b5-6ea1-45cf-9299-b292410c044d",
"name": "SKDiscountNumber",
"sequence": 4,
"internalCode": "",
"profileType": "TRAVELLER",
"editable": true,
"defaultLabel": "SK Discount Number",
"labels": {},
"fieldType": "INPUT",
"elective": "OPTIONAL",
"validation": {
"@type": "none"
}
},
{
"uuid": "e6270152-f76b-43b0-9f65-9a971ddbc8de",
"name": "AFDiscountType",
"sequence": 1,
"internalCode": "",
"profileType": "TRAVELLER",
"editable": true,
"defaultLabel": "AF discount type",
"labels": {},
"fieldType": "INPUT",
"elective": "OPTIONAL",
"validation": {
"@type": "none"
}
},
{
"uuid": "4bf56d9f-cc23-4301-834e-14d76bc2b883",
"name": "SKdiscounttype",
"sequence": 3,
"internalCode": "",
"profileType": "TRAVELLER",
"editable": true,
"defaultLabel": "SK discount type",
"labels": {},
"fieldType": "INPUT",
"elective": "OPTIONAL",
"validation": {
"@type": "none"
}
},
{
"uuid": "09118f74-da47-473b-b0f7-4fa35dd2f4c4",
"name": "CLID",
"sequence": 7,
"internalCode": "",
"profileType": "CORPORATE",
"editable": true,
"defaultLabel": "BA ON Business Programm",
"labels": {},
"fieldType": "INPUT",
"elective": "OPTIONAL",
"validation": {
"@type": "none"
}
},
{
"uuid": "99790f31-cf66-4087-92e9-9ab78bf92ffc",
"name": "SKDiscountExpiry",
"sequence": 5,
"internalCode": "",
"profileType": "TRAVELLER",
"editable": true,
"defaultLabel": "SK Discount Expiry",
"labels": {},
"fieldType": "INPUT",
"elective": "OPTIONAL",
"validation": {
"@type": "none"
}
},
{
"uuid": "e77fc72d-a0b9-4071-8e82-c6b9a3b34a7e",
"name": "AFDiscountNumber",
"sequence": 2,
"internalCode": "",
"profileType": "TRAVELLER",
"editable": true,
"defaultLabel": "AF Discount Number",
"labels": {},
"fieldType": "INPUT",
"elective": "OPTIONAL",
"validation": {
"@type": "none"
}
},
{
"uuid": "8a483067-c9d3-472a-97fd-525913c1d2f7",
"name": "AFDiscountExpiry",
"sequence": 3,
"internalCode": "",
"profileType": "TRAVELLER",
"editable": true,
"defaultLabel": "AF Discount Expiry",
"labels": {},
"fieldType": "INPUT",
"elective": "OPTIONAL",
"validation": {
"@type": "none"
}
}
]
},
{
"uuid": "6ac22c42-0591-425f-9dcd-80def2ca5c3c",
"groupType": {
"@type": "custom"
},
"sequence": 3,
"defaultLabel": "- custom -",
"labels": {},
"fields": [
{
"uuid": "2bf4ca15-d63b-4321-8bf1-3908ce0c7dec",
"name": "homezip",
"sequence": 2,
"internalCode": "",
"profileType": "TRAVELLER",
"editable": true,
"defaultLabel": "home_zip",
"labels": {},
"fieldType": "INPUT",
"elective": "OPTIONAL",
"validation": {
"@type": "none"
}
},
{
"uuid": "21e62d40-4dc7-4bee-bd98-1ad4fe2c6e08",
"name": "homestreet",
"sequence": 1,
"internalCode": "",
"profileType": "TRAVELLER",
"editable": true,
"defaultLabel": "home_street",
"labels": {},
"fieldType": "INPUT",
"elective": "OPTIONAL",
"validation": {
"@type": "none"
}
},
{
"uuid": "40f98eb6-11e1-4673-9127-b4708f6a4a95",
"name": "homecity",
"sequence": 3,
"internalCode": "",
"profileType": "TRAVELLER",
"editable": true,
"defaultLabel": "home_city",
"labels": {},
"fieldType": "INPUT",
"elective": "OPTIONAL",
"validation": {
"@type": "none"
}
},
{
"uuid": "38c43aac-0969-4e11-ba48-a4c04934b059",
"name": "homemobile",
"sequence": 7,
"internalCode": "",
"profileType": "TRAVELLER",
"editable": true,
"defaultLabel": "home_mobile",
"labels": {},
"fieldType": "INPUT",
"elective": "OPTIONAL",
"validation": {
"@type": "none"
}
},
{
"uuid": "d9673c6b-01df-4e03-ba04-144758cc1431",
"name": "homeemail",
"sequence": 5,
"internalCode": "",
"profileType": "TRAVELLER",
"editable": true,
"defaultLabel": "home_email",
"labels": {},
"fieldType": "INPUT",
"elective": "OPTIONAL",
"validation": {
"@type": "none"
}
},
{
"uuid": "d978a9cd-6909-4ae1-94ea-4dfbf0c03c08",
"name": "homecountry",
"sequence": 4,
"internalCode": "",
"profileType": "TRAVELLER",
"editable": true,
"defaultLabel": "home_country",
"labels": {},
"fieldType": "INPUT",
"elective": "OPTIONAL",
"validation": {
"@type": "none"
}
}
]
},
{
"uuid": "8744e74c-29c9-4009-8629-036d01d5f2cd",
"groupType": {
"@type": "integrated",
"key": "general.header_prefs"
},
"sequence": 7,
"defaultLabel": "Preferences",
"labels": {
"sv_SE": "Önskemål",
"es_ES": "Preferencias",
"fr_BE": "Préférences",
"nl_NL": "Präferenzen",
"hu_HU": "Felhasználói beállítások",
"de_CH": "Präferenzen",
"it_CH": "Preferenze",
"de_DE": "Präferenzen",
"kl_GL": "Sallinngortitat",
"cs_CZ": "Preference",
"da_DK": "Præferencer",
"pl_PL": "Preferencje",
"sk_SK": "Preferencie",
"it_IT": "Preferenze",
"pt_PT": "Präferenzen",
"fr_FR": "Préférences",
"en_US": "Preferences",
"de_AT": "Präferenzen",
"fr_CH": "Préférences",
"en_GB": "Preferences",
"nl_BE": "Präferenzen"
},
"fields": [
{
"uuid": "04fd37a1-5ba3-4f4f-b913-3faca9126b25",
"name": "SpecialMeal",
"sequence": 1,
"internalCode": "",
"profileType": "TRAVELLER",
"editable": true,
"defaultLabel": "Special Meal",
"labels": {},
"fieldType": "INPUT",
"elective": "OPTIONAL",
"validation": {
"@type": "none"
}
},
{
"uuid": "bb413949-4a27-4d02-ba3b-f7d28e291516",
"name": "ProfileNotesLine5",
"sequence": 2,
"internalCode": "",
"profileType": "TRAVELLER",
"editable": true,
"defaultLabel": "Profile Notes Line 5",
"labels": {},
"fieldType": "INPUT",
"elective": "OPTIONAL",
"validation": {
"@type": "none"
}
},
{
"uuid": "5053d9fa-94bb-4ab0-8566-29913ac0c997",
"name": "AirPreferencesDepartureCode",
"sequence": 0,
"internalCode": "",
"profileType": "TRAVELLER",
"editable": true,
"defaultLabel": "AirPreferences_DepartureCode",
"labels": {},
"fieldType": "INPUT",
"elective": "OPTIONAL",
"validation": {
"@type": "none"
}
},
{
"uuid": "e265e6ee-7411-475c-83fd-343a64142d2b",
"name": "defaultDepartureRailStation",
"sequence": 3,
"internalCode": "",
"profileType": "TRAVELLER",
"editable": true,
"defaultLabel": "defaultDepartureRailStation",
"labels": {},
"fieldType": "INPUT",
"elective": "OPTIONAL",
"validation": {
"@type": "none"
}
}
]
},
{
"uuid": "2fd4d092-2ac4-4ea2-b8b2-5e58794b2de5",
"groupType": {
"@type": "integrated",
"key": "traveller.papersheader"
},
"sequence": 4,
"defaultLabel": "Travel documents",
"labels": {
"sv_SE": "Resedokument",
"es_ES": "Documentos de viaje",
"fr_BE": "Documents de voyage",
"nl_NL": "Reisedokumente",
"hu_HU": "Úti okmányok",
"de_CH": "Reisedokumente",
"it_CH": "Documenti di viaggio",
"de_DE": "Reisedokumente",
"kl_GL": "Angalanermi uppernarsaatit",
"cs_CZ": "Cestovní dokumenty",
"da_DK": "Rejsedokumenter",
"pl_PL": "Dokumenty podróży",
"sk_SK": "Cestovné doklady",
"it_IT": "Documenti di viaggio",
"pt_PT": "Reisedokumente",
"fr_FR": "Documents de voyage",
"en_US": "Travel documents",
"de_AT": "Reisedokumente",
"fr_CH": "Documents de voyage",
"en_GB": "Travel documents",
"nl_BE": "Reisedokumente"
},
"fields": [
{
"uuid": "daa42851-7c30-495f-b261-513a1edd1c44",
"name": "passportgender",
"sequence": 2,
"internalCode": "",
"profileType": "TRAVELLER",
"editable": true,
"defaultLabel": "passport_gender",
"labels": {},
"fieldType": "INPUT",
"elective": "OPTIONAL",
"validation": {
"@type": "none"
}
},
{
"uuid": "34ba6782-4203-4920-9a86-1dcd9813a559",
"name": "redressNumber",
"sequence": 1,
"internalCode": "",
"profileType": "TRAVELLER",
"editable": true,
"defaultLabel": "redressNumber",
"labels": {},
"fieldType": "INPUT",
"elective": "OPTIONAL",
"validation": {
"@type": "none"
}
},
{
"uuid": "244ed9bc-4f9f-4d18-b236-d809860e63e4",
"name": "knownTravNumber",
"sequence": 0,
"internalCode": "",
"profileType": "TRAVELLER",
"editable": true,
"defaultLabel": "knownTravNumber",
"labels": {},
"fieldType": "INPUT",
"elective": "OPTIONAL",
"validation": {
"@type": "none"
}
}
]
}
],
"standardFieldDefinitions": [
{
"uuid": "d247cc20-b681-11ec-9e5f-482ae368e12c",
"collectionName": "hotelmemberships",
"fieldName": "alliance",
"profileType": "TRAVELLER",
"affectedUserGroup": "ENTIRE_AGENCY",
"fieldDisplayType": "MANDATORY"
},
{
"uuid": "d2481a36-b681-11ec-9e60-482ae368e12c",
"collectionName": null,
"fieldName": "phoneMobile",
"profileType": "TRAVELLER",
"affectedUserGroup": "COMPANY_ADMIN_AND_TRAVELLER",
"fieldDisplayType": "MANDATORY"
},
{
"uuid": "d2486860-b681-11ec-9e62-482ae368e12c",
"collectionName": "flightmemberships",
"fieldName": "additionalinfo",
"profileType": "TRAVELLER",
"affectedUserGroup": "ENTIRE_AGENCY",
"fieldDisplayType": "HIDDEN"
},
{
"uuid": "d2484146-b681-11ec-9e61-482ae368e12c",
"collectionName": null,
"fieldName": "email",
"profileType": "CORPORATE",
"affectedUserGroup": "ENTIRE_AGENCY",
"fieldDisplayType": "MANDATORY"
}
]
} |
Get generic setup for company
Scopes | api.profilesondemand.read |
---|---|
Endpoints | api/v1/configuration/setup/company/{uuid} |
Request method | GET |
Fetch the generic setup of a company tailored to the access level of the calling user / application
Parameters
Name | Description | Validation |
---|---|---|
<uuid> | The UUID of the company | Required parameter |
merged | Defines wheter to include only the company setup (false) or merge it with the underlying agency setup (true) | Boolean value: true or false Optional, default: false |
profileType | May be used to restrict the response to configuration for a specific profile type. | Optional One of TRAVELLER, CORPORATE |
Code Block | ||||
---|---|---|---|---|
| ||||
curl -v -H "Authorization: Bearer <token>" \
"https://hurricane.umbrellanet.ch/uf-test/api/v1/configuration/setup/company/76445ed3-cbd4-45f5-96fc-f8f60745d529?merged=false" |
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
{
"groups": [
{
"uuid": "8744e74c-29c9-4009-8629-036d01d5f2cd",
"groupType": {
"@type": "integrated",
"key": "general.header_prefs"
},
"sequence": 7,
"defaultLabel": "Preferences",
"labels": {
"sv_SE": "Önskemål",
"es_ES": "Preferencias",
"fr_BE": "Préférences",
"nl_NL": "Präferenzen",
"hu_HU": "Felhasználói beállítások",
"de_CH": "Präferenzen",
"it_CH": "Preferenze",
"de_DE": "Präferenzen",
"kl_GL": "Sallinngortitat",
"cs_CZ": "Preference",
"da_DK": "Præferencer",
"pl_PL": "Preferencje",
"sk_SK": "Preferencie",
"it_IT": "Preferenze",
"pt_PT": "Präferenzen",
"fr_FR": "Préférences",
"en_US": "Preferences",
"de_AT": "Präferenzen",
"fr_CH": "Préférences",
"en_GB": "Preferences",
"nl_BE": "Präferenzen"
},
"fields": [
{
"uuid": "390c82f6-22fb-48c5-a82e-337b62a2afd8",
"name": "OptInNewsletter",
"sequence": 0,
"internalCode": "",
"profileType": "TRAVELLER",
"editable": true,
"defaultLabel": "Für Newsletter anmelden",
"labels": {
"en_US": "Opt-In to Newsletter",
"en_GB": "Opt-In to Newsletter"
},
"fieldType": "INPUT",
"elective": "OPTIONAL",
"validation": {
"@type": "none"
}
}
]
}
],
"standardFieldDefinitions": [
{
"uuid": "d2484146-b681-11ec-9e61-482ae368e12c",
"collectionName": null,
"fieldName": "email",
"profileType": "CORPORATE",
"affectedUserGroup": "ENTIRE_AGENCY",
"fieldDisplayType": "MANDATORY"
},
{
"uuid": "d2481a36-b681-11ec-9e60-482ae368e12c",
"collectionName": null,
"fieldName": "phoneMobile",
"profileType": "TRAVELLER",
"affectedUserGroup": "COMPANY_ADMIN_AND_TRAVELLER",
"fieldDisplayType": "MANDATORY"
},
{
"uuid": "d2486860-b681-11ec-9e62-482ae368e12c",
"collectionName": "flightmemberships",
"fieldName": "additionalinfo",
"profileType": "TRAVELLER",
"affectedUserGroup": "ENTIRE_AGENCY",
"fieldDisplayType": "HIDDEN"
},
{
"uuid": "d247cc20-b681-11ec-9e5f-482ae368e12c",
"collectionName": "hotelmemberships",
"fieldName": "alliance",
"profileType": "TRAVELLER",
"affectedUserGroup": "ENTIRE_AGENCY",
"fieldDisplayType": "MANDATORY"
}
]
} |
Anchor ProfileCenterAPI ProfileCenterAPI
Profile Center API
ProfileCenterAPI | |
ProfileCenterAPI |
This API allows access to "Profile Center" functions of Umbrella Faces
Get publish errors
Scopes | api.profilesondemand.profilecenter.read |
---|---|
Endpoints | api/v1/profile-center/corporate-publish-errors api/v1/profile-center/traveller-publish-errors |
Request method | GET |
Fetch a list of publishing errors
Parameters
Name | Description | Validation |
---|---|---|
page | Current page within the result set, starts at 0 | Optional, number >= 0 |
pageSize | Maximum number of results per page. Default 25 | Optional, number > 0 and <= 100 |
since | Restrict results to errors that have occurred on or after a specific timestamp | Optional Format yyyy-MM-dd'T'HH:mm[:ss[.SSS]]X |
Code Block | ||||
---|---|---|---|---|
| ||||
curl -v -H "Authorization: Bearer <token>" \
"https://hurricane.umbrellanet.ch/uf-test/api/v1/profilecenter/traveller-publish-errors?since=2023-01-23T13:00:25.000Z" |
Code Block | ||||
---|---|---|---|---|
| ||||
{
"moreResults": false,
"results": [
{
"agencyInterface": {
"uuid": "14d74036-2a97-47ab-939c-2acc2c658865",
"name": "GAL-GWS",
"targetSystem": "GALILEO_WS",
"sequence": 0
},
"company": {
"uuid": "52f2b2c0-4990-49bb-b1f1-d3aa38169175",
"name": "Fixham Inc"
},
"traveller": {
"uuid": "065fe9e0-47b7-4d12-b3de-d3aa38169175",
"name": "Bob Builder"
},
"publishState": "UNABLE TO PROCESS"
}
]
} |
System reference data API
This API is complimentary to the Profiles API and allows to query Umbrella Faces for reference data, such as lists of known rentalcar providers.
Get frequent flyer options
Scopes | (none needed) |
---|---|
Endpoints | api/v1/reference-data/air-providers |
Request method | GET |
Fetch a list of available frequent flyer options
Parameters
Name | Description | Validation |
---|---|---|
profileType | Some options are only available on COPORATE level but no on TRAVELLER profiles. This parameter allows to query the valid options per profile type | Optional parameter:
Will return all frequent flyer options (unfiltered) if omitted |
Code Block | ||||
---|---|---|---|---|
| ||||
curl -v -H "Authorization: Bearer <token>" \
"https://hurricane.umbrellanet.ch/uf-test/api/v1/reference-data/air-providers?profileType=TRAVELLER" |
Get hotel chain codes
Scopes | (none needed) |
---|---|
Endpoints | api/v1/reference-data/hotel-chains |
Request method | GET |
Fetch a list of available hotel chain code options
Code Block | ||||
---|---|---|---|---|
| ||||
curl -v -H "Authorization: Bearer <token>" \
"https://hurricane.umbrellanet.ch/uf-test/api/v1/reference-data/hotel-chains" |
Get rental car providers
Scopes | (none needed) |
---|---|
Endpoints | api/v1/reference-data/car-providers |
Request method | GET |
Fetch a list of available rental car providers
Code Block | ||||
---|---|---|---|---|
| ||||
curl -v -H "Authorization: Bearer <token>" \
"https://hurricane.umbrellanet.ch/uf-test/api/v1/reference-data/car-providers" |
Get rail card types
Scopes | (none needed) |
---|---|
Endpoints | api/v1/reference-data/rail-card-types |
Request method | GET |
Fetch a list of known rail card types
Parameters
Name | Description | Validation |
---|---|---|
agency | Allows specifying an agency UUID for which the supported rail card types should be listed. Depending on the agency setup the available types may differ | Optional Parameter Will return all card types if omitted |
Code Block | ||||
---|---|---|---|---|
| ||||
curl -v -H "Authorization: Bearer <token>" \
"https://hurricane.umbrellanet.ch/uf-test/api/v1/reference-data/rail-card-types" |