Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

The interface is part of our standard web service offering and can be found in our swagger.yml documentation. documentation.

View file
nameswagger.yaml
height250

Panel
titleTable of Contents

Table of Contents
exclude(Example response)|(Parameters)

...

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 NameValue
X-Rate-Limit-RemainingNumber 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

...

ScopeDescription
api.profilesondemand.readAccess to the Profiles API (read only)
api.profilesondemand.writeAccess to the Profiles API (write)
api.profilesondemand.ccaccessAccess 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.readAccess to (certain functions of) the Profile Center API (read only)
openidRequired 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.

email

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.

...

Faces supports multiple Oauth2 grant flows, depending on the individual requirements of the client application. The following table lists possible flows:

TypePurposeDescriptionRestrictions
Authorization CodeInteract 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.

 

Note

The implicit flow is considered deprecated / unsafe and should no longer be used https://datatracker.ietf.org/doc/html/draft-ietf-oauth-security-topics-09#section-2.1.2

Please consider using the Authorization Code Grant

Client CredentialsMachine-to-Machine communicationCurrently allows a specific OAuth2 Client to be linked to a specific travel agency in Faces. No end-user interaction is requiredID-Tokens cannot be requested since the access is not tied to a specific user.

...

Code Block
languagejs
{
    "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.
There might be supplemental information in additional attributes which can change frequently and without any advance notice

 

Step 5: Get new access token

...

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.
There might be supplemental information in additional attributes which can change frequently and without any advance notice


Anchor
IDToken
IDToken
ID token

...

Code Block
languagejs
titleAccess Token with additional id_token
{
  "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.
There might be supplemental information in additional attributes which can change frequently and without any advance notice

Decoded ID-Token

The following extract depicts a decoded ID-Token from the value of "id_token" in the response above

...

Anchor
ProfilesAPI
ProfilesAPI
Profiles API

 Search company profile

Scopeapi.profilesondemand.read
Endpointapi/v1/profiles/companies
Request methodGET

...

NameDescriptionValidation
qFreetext query for finding matching profilesRequired parameter
pageCurrent page within the result set, starts at 0Optional, number >= 0
pageSizeMaximum number of results per page. Default 10Optional, number > 0 and <= 100
includeDetailsSpecify whether the search response should include detailed profile data

Boolean value: true or false

 Optional, default: false

scopeSearch scope

Optional, may be one of:

  • DEFAULT (Applies default search options as is within the Faces UI)

  • SHORTNAME (To look for profiles with a specific shortname set; partial matches are returned)

  • EXTERNAL_NR (To look for profiles with a specific externalNr set; only exact matches are returned)
  • GENERIC_FIELD (To look in a specific field from the agencies generic setup)

  • RECORD_LOCATOR (To look for profiles with matching record locator only)

  • PHONE_NUMBER (To look for profiles based on a full phone number; must be provided in international format, e.g. +41449335390)
    Note: Please make sure to properly encode the "+" within the query string (as %2B) and do not include any formatting in the number.
    Faces will silently fail and return zero results if the phone number is supplied in an invalid format.
pSearch 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

matchTypeSearch string match type

Optional parameter. Controls for certain scopes how the search string from "q" is matched against the profile database value

  • EXACT_MATCH: Exact match (case sensitive)
  • CASE_INSENSITIVE_MATCH: Exact match (case insensitive)
  • PARTIAL_MATCH: Split the search string at each whitespace and search using "contains" for each substring (case insensitive).

The parameter may be given for the following scopes and will be ignored if provided for any other scope not listed here:

  • SHORTNAME (defaults to PARTIAL_MATCH if not provided, EXACT_MATCH is not supported)
  • GENERIC_FIELD (defaults to PARTIAL_MATCH if not provided)
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:

  • AGENCY_INFO

  • CONTACT_DATA

  • PARENT_COMPANY

  • COMMENT

  • HISTORY

  • TRAVELLER_SETTINGS

  • GENERAL_SETTINGS

Code Block
languagebash
titleExample Request
curl -v -H "Authorization: Bearer <token>" \
    "https://hurricane.umbrellanet.ch/uf-test/api/v1/profiles/companies?q=acme&page=0&pageSize=10"

...

NameDescriptionValidation
<uuid>The UUID of the profile to retrieveRequired parameter
sections

Areas of the profile to be returned.

May

Must be used to reduce the amount of data transferred

, if only specific information is requiredAll

 

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
languagebash
titleExample request
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
languagejs
titleExample response
collapsetrue
{
	"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

The following sections are currently available in accordance with our Swagger schema definition:

NameContents
AGNCYAGENCY_INFOAgency information:
  • uuid

  • name

CONTACT_DATA

Company contact data:

  • street

  • street2

  • zipCode

  • place

  • countryCode

  • phone

  • fax

  • E-Mail (email, email2, email3)

  • receiveDocs

PARENT_COMPANY

Parent company settings:

  • company (reference)
  • adminShareOption (only relevant if parent company is set)
MEMBERSHIPS

Corporate alliance Memberships

  • airline

    • alliance (2-Letter code)

    • memberNumber

    • type

  • hotel

    • alliance (2-Letter code)

    • memberNumber

    • customerRequest

  • rentalCar

    • alliance (2-Letter code)

    • memberNumber

    • customerRequest

    • billingNumber

    • preferredProvider (boolean, can only be set on one at a time)

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

  • field (name, uuid)
  • value

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:

  • creditCards
    • type (DC, AX, VI, CA, TP, JC, DS)
    • maskedNumber
    • expiratoin
    • remark
    • publishAsFop
  • webCard reference
  • hotelGuarantee reference
  • carGuarantee reference
  • railFormOfPayment reference - only available if rail feature is active in agency configuration
  • additionalFormOfPayment
  • travellerCardOptions
    • fopOption
    • hotelGuaranteeUsage
    • carGuaranteeUsage
    • webPaymentUsage
COMMENTComment on profile - only available to agency managers
HISTORY

History (Read Only):

  • lastModified (timestamp)
  • history (Only available to agency managers)
PUBLISH_STATES

Publish States (Read Only):

  • label
  • lastPublished (timestamp)
  • recordLocator
  • lastPublishState
  • faultIndicator

The Fault indicator will be one of

  • OK (Everything in order, no special state)
  • QUEUED (Everything in order, but profile is currently queued for publishing)
  • INTENTIONALLY_NOT_PUBLISHED (Profile is in a "desired" fault state (Publishing rejected / Profile processed by remote endpoint with warnings))
  • TIMESTAMP_ISSUE (Profile has an error which is based on timestamp mismatches)
  • GENERAL_ERROR (The publish state is in error.)
INTERFACE_SETUP
Note

This section is read only and must not be included in updates.
Sensitive properties (i.e. Concur Refresh Tokens) will not be returned by the API

  • travelGroups (only relevant for Cytric)
    • id
    • name
  • targetSystems
    • agencyInterface
    • attribute1 (interface-specific configuration; available depending on interface type)
    • attribute2 (interface-specific configuration; available depending on interface type)
    • attribute3 (interface-specific configuration; available depending on interface type)
    • attribute4 (interface-specific configuration; available depending on interface type)
  • reportingOfficeId
  • gwsAgencyLocation
TRAVELLER_SETTINGS
  • defaultArranger
  • defaultTraveller
  • selfApprovalAllowed
  • approverSelectableByTraveller
GENERAL_SETTINGS
  • emailDelivery
  • profileRemindersOption - only available if profile reminders feature is active on agency
  • enableSelfRegistration - only available if self registration feature is active on agency

Get subsidiaries of a company profile

Scopeapi.profilesondemand.write
Endpointapi/v1/profiles/company/<uuid>/subsidiaries
Request methodGET

Query subsidiaries for a given company

Parameters
NameDescriptionValidation
uuidThe company UUID for which subsidiaries should be queriedMandatory parameter
Code Block
languagebash
titleExample request
curl -v -H "Authorization: Bearer <token>" \
    "https://hurricane.umbrellanet.ch/uf-test/api/v1/profiles/company/b9321d7e-9d72-4e80-ac49-d3aa38169175/subsidiaries"
Code Block
languagejs
titleExample Response
collapsetrue
[
	{
		"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

...

Create a new company profile

Parameters
NameDescriptionValidation
returnAddSectionsList of additional profile sections which should be included in the response, even if not modified by the current operationOptional parameter (GET)
Code Block
languagebash
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

...

 

Scopeapi.profilesondemand.write
Endpointapi/v1/profiles/company/<uuid>
Request methodPATCH

Updates (part of) the details of a single company profile.

Parameters
NameDescriptionValidation
<uuid>The UUID of the profile to updateRequired parameter
returnAddSectionsList of additional profile sections which should be included in the response, even if not modified by the current operationOptional 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

Scopeapi.profilesondemand.write
Endpointapi/v1/profiles/company/<uuid>
Request methodDELETE

Delete a single company profile (along with all associated traveler profiles) from Faces as well as all downline systems.

Parameters
NameDescriptionValidation
<uuid>The UUID of the profile to deleteRequired 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

Scopeapi.profilesondemand.read
Endpointapi/v1/profiles/travellers
Request methodGET
Allows searching through a paged list of traveler profiles
Parameters
NameDescriptionValidation
qFreetext query for finding matching profilesRequired parameter
pageCurrent page within the result set, starts at 0Optional, number >= 0
pageSizeMaximum number of results per page. Default 10Optional, number > 0 and <= 100
cNarrow down the search for travelers attached to a specific company profileOptional, company UUID
scopeSearch scope

Optional, may be one of:

  • DEFAULT (Applies default search options as is within the Faces UI)

  • EMAIL (To look for profiles with matching E-Mail only - must be an exact match)

  • USERNAME (To look for profiles with matching Username only - must be an exact match)

  • GENERIC_FIELD (To look in a specific field from the agencies generic setup)

  • RECORD_LOCATOR (To look for profiles with matching record locator only)

  • PAPER (to look for profiles with a matching paper, e.g. a passport by number)

  • PHONE_NUMBER (To look for profiles based on a full phone number; must be provided in international format, e.g. +41449335390)
    Note: Please make sure to properly encode the "+" within the query string (as %2B) and do not include any formatting in the number.
    Faces will silently fail and return zero results if the phone number is supplied in an invalid format.

pSearch 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

matchTypeSeach string match type

Optional parameter. Controls for certain scopes how the search string from "q" is matched against the profile database value

  • EXACT_MATCH: Exact match (case sensitive)
  • CASE_INSENSITIVE_MATCH: Exact match (case insensitive)
  • PARTIAL_MATCH: Split the search string at each whitespace and search using "contains" for each substring (case insensitive).

The parameter may be given for the following scopes and will be ignored if provided for any other scope not listed here:

  • GENERIC_FIELD (defaults to PARTIAL_MATCH if not provided)
  • PAPER (defaults to PARTIAL_MATCH if not provided)
includeDetailsSpecify 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.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:

  • COMPANY_INFO

  • COMPANY_CONTACT_DATA

  • GENERAL_DATA

  • ROLES

  • PREFERENCES

  • COMMENT
  • HISTORY

Code Block
languagebash
titleExample request
curl -v -H "Authorization: Bearer <token>" \
    "https://hurricane.umbrellanet.ch/uf-test/api/v1/profiles/travellers?q=bob&page=0&pageSize=10"
Code Block
languagejs
titleExample response
{
	"moreResults": false,
	"results": [{
		"uuid": "065fe9e0-47b7-4d12-b3de-d3aa38169175",
		"fullName": "Herr Bob Builder"
	}]
}

Anchor
GetTravelerProfile
GetTravelerProfile
Get traveler profile

Scopeapi.profilesondemand.read
Endpointapi/v1/profiles/traveller/<uuid>
Request methodGET
Retrieves the details of a single traveler profile.
Parameters
NameDescriptionValidation
<uuid>The UUID of the profile to retrieveRequired parameter
sections

Areas of the profile to be returned.

May

Must be used to reduce the amount of data transferred

, if only specific information is requiredAll

 

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
languagebash
titleExample request
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&sections=COMPANY_INFO&sections=MEMBERSHIPS"
Code Block
languagejs
titleExample response
{
	"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": []
		}
	}
}

...

NameContents
COMPANY_INFOInformation on the associated company:
  • UUID

  • name (read only)

  • Customer number (externalNr, read only)

COMPANY_CONTACT_DATA

Contact information of the associated company (read only, provided for simplicity / reduce the need to talk to the company endpoint):

  • Address (street, street2, zipCode, place, countryCode)

  • phone

  • fax

  • E-Mail (email, email2, email3)

GENERAL_DATA

General profile information:

GENERIC_FIELD_VALUES

Values (where filled) from the generic setup

, output as key-value pairs where the key is the fieldname and the value, the value entered on the profile

  • field (name, uuid)
  • value

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

, each

with:

  • alliance-code
and
  • membernumber
  • pin (Flight memberships only)
PASSPORTPassport(s) as shown in Faces UI
VISAVisa information as shown in Faces UI
ID_CARDIdentification Cards  as shown in Faces UI
EMERGENCY_CONTACT

Emergency contact:

  • firstname, lastname

  • phone

  • email

ARRANGER_CONTACTS

Arranger contact(s):

  • displayText
  • contactUuid: (Referenced Traveller UUID) - may be empty in case Faces is still awaiting the profile to be delivered rom an external system
APPROVER_CONTACTS

Approver contact(s):

  • displayText
  • contactUuid: (Referenced Traveller UUID) - may be empty in case Faces is still awaiting the profile to be delivered from an external system
ROLES

Roles as show in Faces UI with the respective checkboxes (true/false):

  • traveller

  • arranger

  • approver

PREFERENCES

Preferences:

  • smoker

  • preferredSeat (A or W)

  • preferredFood (4-Letter code)

CREDIT_CARDS

Credit card related information:

  • creditCards
    • type (DC, AX, VI, CA, TP, JC, DS)
    • maskedNumber
    • expiratoin
    • remark
    • publishAsFop
    • nameOnCard
  • webCard reference
  • hotelGuarantee reference
  • carGuarantee reference
  • railFormOfPayment reference - only available if rail feature is active in agency configuration
RAIL_INFORMATION

Rail related information - only available if rail feature is active in agency configuration

  • preferredClass
  • preferredSeat (A or W)
  • railCards
    • type
    • number
    • expiration
    • class
    • collectBonusPoints
    • validFromStation
    • validToStation
RESIDENT_INFORMATION

(Spanish) Resident Information - only available if spanish resident feature is active in agency configuration

  • area

  • areaCode

  • cardType

  • cardNumber

  • firstname

  • firstSurname

  • secondSurname

TRAVEL_GROUP_ASSIGNMENTS

Travel group assignments - will only be populated if profile is synchronized to Cytric:

  • groupId (Note: Will be the same for all group assignments)
  • role
COMMENTComment on profile - only available to agency managers
HISTORY

History (Read Only):

  • lastModified (timestamp)
  • history (Only available to agency managers)
PUBLISH_STATES

Publish States (Read Only):

  • label
  • lastPublished (timestamp)
  • recordLocator
  • lastPublishState
  • faultIndicator

The Fault indicator will be one of

  • OK (Everything in order, no special state)
  • QUEUED (Everything in order, but profile is currently queued for publishing)
  • INTENTIONALLY_NOT_PUBLISHED (Profile is in a "desired" fault state (Publishing rejected / Profile processed by remote endpoint with warnings))
  • TIMESTAMP_ISSUE (Profile has an error which is based on timestamp mismatches)
  • GENERAL_ERROR (The publish state is in error.)
UNUSED_TICKETS

Unused ticket information - only available if Magnatech is active on agency (Read Only):

  • carrier
  • expiryDate
  • fare
  • pnr
  • ticketNumber

Anchor
TravelerGreetingStructure
TravelerGreetingStructure
Traveler "greeting" structure handling

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:

Expand
titleFormal Titles
Formal TitleTitle Structure "Default"Title Structure "Compound" *
Master(error) Not supported(tick) Supported
Mx(error) Not supported(tick) Supported
DR(tick) Supported(tick) Supported
PROF(tick) Supported(tick) Supported 
Rev(error) Not supported(tick) Supported
Sir(error) Not supported(tick) Supported
Lord(error) Not supported(tick) Supported
Lady(error) Not supported(tick) Supported

* Titles are supported, if no commonTitle is set. Since for "Compound" the UI is only using a single drop-down it is not possible to display a title such as MR DR.

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
titleAPI Request Examples
compoundTitle in API requestresulting commonTitleresulting formalTitleRemarks
MSMS  
MR DRMRDRIf the travel agency is using title structure "Compound", the stored value will not be visible in the UI since "MR DR" is unsupported
MISS LadyMISSLady

Not supported by the Faces UI - would show as follows:

  • Title Structure Default: "Lady" would not be visible in the UI
  • Title Structure Compound: Title in the UI would be shown as "-" since a combination of "MISS Lady is unsupported
PROF MRSUNDEFINEDPROF MRS

Invalid request results in incorrect parsing since the commonTitle is to be sent as the first part of the compoundTitle

PROFUNDEFINEDPROF 
RevUNDEFINEDRevIf the travel agency is using title structure "Default", the stored value will not be visible in the UI
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.

Create new traveler profile

...

Create a new traveler profile

 

Parameters
NameDescriptionValidation
returnAddSectionsList of additional profile sections which should be included in the response, even if not modified by the current operationOptional parameter (GET)
Code Block
languagebash
titleExample request
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

...

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

...

Updates (part of) the details of a single traveler profile.

Parameters
NameDescriptionValidation
<uuid>The UUID of the profile to updateRequired parameter
returnAddSectionsList of additional profile sections which should be included in the response, even if not modified by the current operationOptional parameter (GET)
Code Block
languagebash
titleExample request
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

...

  • 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

Scopeapi.profilesondemand.write
Endpointapi/v1/profiles/traveller/<uuid>
Request methodDELETE

Delete a single traveler profile from Faces as well as all downline systems.

Parameters
NameDescriptionValidation
<uuid>The UUID of the profile to deleteRequired parameter

...

This API is an extension to the Profiles API and allows to send and receive plaintext credit card information from / to Umbrella Faces.

Note

This API is currently under development and not yet generally available

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.

...

Fetch plaintext credit card data from a company or traveler profile.

Parameters
NameDescriptionValidation
uuidOwning (company / traveler) profile UUIDRequired 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
languagebash
titleExample request
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
languagebash
titleExample request
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
languagejs
titleExample Response
{
	"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 methodGET

Fetch the generic setup of a travelagency tailored to the access level of the calling user / application

Parameters
NameDescriptionValidation
<uuid>The UUID of the travelagencyRequired parameter
profileType

May be used to restrict the response to configuration for a specific profile type.

OptionalOne of TRAVELLER, CORPORATE

 

 

 

Code Block
languagebash
titleExample request
curl -v -H "Authorization: Bearer <token>" \
    "https://hurricane.umbrellanet.ch/uf-test/api/v1/configuration/setup/agency/f4cbed76-873c-4499-be0c-f8f60745d529"
Code Block
languagejs
titleExample Response
collapsetrue
{
	"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 methodGET

Fetch the generic setup of a company tailored to the access level of the calling user / application

Parameters
NameDescriptionValidation
<uuid>The UUID of the companyRequired parameter
mergedDefines 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
languagebash
titleExample request
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
languagejs
titleExample Response
collapsetrue
{
	"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

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 methodGET

Fetch a list of publishing errors

Parameters
NameDescriptionValidation
pageCurrent page within the result set, starts at 0Optional, number >= 0
pageSizeMaximum number of results per page. Default 25Optional, number > 0 and <= 100
sinceRestrict results to errors that have occurred on or after a specific timestampOptional
Format yyyy-MM-dd'T'HH:mm[:ss[.SSS]]X
Code Block
languagebash
titleExample request
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
languagejs
titleExample Response
{
	"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 methodGET

Fetch a list of available frequent flyer options

Parameters
NameDescriptionValidation
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:

  • TRAVELLER
  • CORPORATE

Will return all frequent flyer options (unfiltered) if omitted

Code Block
languagebash
titleExample request
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 methodGET

Fetch a list of available hotel chain code options

Code Block
languagebash
titleExample request
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 methodGET

Fetch a list of available rental car providers

Code Block
languagebash
titleExample request
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 methodGET

Fetch a list of known rail card types

Parameters
NameDescriptionValidation
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
languagebash
titleExample request
curl -v -H "Authorization: Bearer <token>" \
    "https://hurricane.umbrellanet.ch/uf-test/api/v1/reference-data/rail-card-types"