Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 42 Next »

Using the Profiles on Demand API allows third-party applications to query profile information from Umbrella Faces after being authorized with OAuth2 authentication.

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

Table of Contents

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

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:

FieldDescription
Application NameApplication name, which will be shown to the user
Application PurposeShort description of what the application wants to achieve using the Oauth2 enabled APIs
Desired OAuth ScopesOAuth 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)

Umbrella will provide the application with a clientId and clientSecret to be used for development on our integration environment at https://hurricane.umbrellanet.ch/uf-test

Certification will be achieved by demonstrating the product accessing Faces using Oauth

Available OAuth Data-Scopes

Your application will be granted some or all of the following OAuth scopes for data access:

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

Please let our friendly support-staff know which scopes you’ll be requiring in order to provide which desired functionality. 

Supported OAuth2 Flows

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

TypeDescriptionRestrictions
Authorization Code

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)
ImplicitSimilar 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 CredentialsCurrently 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.

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

ParameterDescription
response_type=codeSpecifies the application is requesting an authorization code grant (value = always “code”)
client_id=CLIENT_IDThe clientId which has been setup for the application
redirect_uri=CALLBACK_URLWhere Faces redirects the user after an authorization code is granted (full URI, including http:// https:// or other prefix)

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:

ParameterDescription
CLIENT_ID:CLIENT_SECRETThe clientId and clientSecret which has been setup for the application, sent as HTTP Basic authentication
code=THE_AUTH_CODEThe authorization code received in step 3
redirect_uri=CALLBACK_URLThe same callback url as used in step 2
grant_type=authorization_codeSpecifies that you are wanting to trade an authorization_code for a long-lived request token.
Example Request using cURL
# https://CLIENT_ID:CLIENT_SECRET@hurricane.umbrellanet.ch/uf-test/oauth/token?grant_type=authorization_code&code=THE_AUTH_CODE&redirect_uri=CALLBACK_URL
curl -v -X POST \
    -H "Content-type: application/x-www-form-urlencoded" \
    -u client-id:client-secret \
    -d "grant_type=authorization_code" \
    -d "code=THE_AUTH_CODE" \
    -d "redirect_uri=CALLBACK_URL" \
    https://hurricane.umbrellanet.ch/uf-test/oauth/token

As a result, the application is granted short-lived access token used during API calls, as well as a long-lived refresh token which can be used for obtaining further access tokens:

{
    "access_token": "eb0afd63-7ad3-4b0f-a3cb-bacbbf4cac7c",
    "token_type": "bearer",
    "refresh_token": "0561038e-02d3-48e4-a859-399acacad59c",
    "expires_in": 3599
} 

Step 5: Get new access token

After the access token expires, a new one may be obtained similar to step 4:

Example Request using cURL
# https://CLIENT_ID:CLIENT_SECRET@hurricane.umbrellanet.ch/uf-test/oauth/token?grant_type=refresh_token&refresh_token=REFRESH_TOKEN
curl -v -X POST \
    -H "Content-type: application/x-www-form-urlencoded" \
    -u client-id:client-secret \
    -d "grant_type=refresh_token" \
    -d "refresh_token=REFRESH_TOKEN" \
    https://hurricane.umbrellanet.ch/uf-test/oauth/token

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:

Example Request using cURL
# https://CLIENT_ID:CLIENT_SECRET@hurricane.umbrellanet.ch/uf-test/oauth/token?grant_type=client_credentials
curl -v -X POST \
    -H "Content-type: application/x-www-form-urlencoded" \
    -u client-id:client-secret \
    -d "grant_type=client_credentials" \
    https://hurricane.umbrellanet.ch/uf-test/oauth/token

As a result, a new access token will be issued.

ID token

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.

ScopeDescription
openidRequired scope, triggers generation of an ID token containing the Faces-UUID of the profile in an “openid” attribute
profileOutputs the user profile in a “profile” attribute containing a displayname and (depending on availability) firstname / name / phone
emailOutputs the users e-mail address as “email” attribute
agencyidOutputs the UUID of the associated users travel agency (the main agency if access to multiple agencies is granted in case of an administrator)  in the “agencyid” attribute of the token

The ID-Token will be presented in form of a JSON Web Token and will  be cryptographically signed using our Service Provider Certificate available at <faces_url>/saml/metadata,
i.e. https://hurricane.umbrellanet.ch/uf-test/saml/metadata

Access 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"
} 

Decoded ID-Token

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

{
  "openid": "3d9205ca-f264-4ad8-b1ac-e645557eaa99",
  "profile": {
    "firstname": "Remo",
    "phone": "+41441234567",
    "displayname": "Herr Remo Räber",
    "name": "Räber"
  },
  "email": "remo.test@umbrella.ch"
} 

Profiles API

 Search company profile

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

Allows searching through a paged list of company profiles. This API can be used to narrow-down the traveler profile search by company.

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
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)

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

detailSections

Specify additional profile areas to be returned if includeDetails is set to true.

Only explicitly specified sections will be included.

Only the following sections are currently supported:

  • AGENCY_INFO

  • CONTACT_DATA

  • HISTORY

Example Request
curl -v -H "Authorization: Bearer <token>" \
    "https://hurricane.umbrellanet.ch/uf-test/api/v1/profiles/companies?q=acme&page=0&pageSize=10"
Example Response
{
	"moreResults": false,
	"results": [{
		"uuid": "b9321d7e-9d72-4e80-ac49-d3aa38169175",
		"name": "ACME Inc."
	}]
}

Get company profile

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

Retrieves the details of a single company profile.

Parameters

 

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

Areas of the profile to be returned.

Must be used to reduce the amount of data transferred

Currently all profile sections are dumped if this parameter is omitted.

However, we'll be removing this behaviour and you'll be required to demonstrate usage of the "sections" paraemeter along with how and why each section is processed during certification.

Optional

Example 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"
Example response
{
	"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": []
		},
		"genericFieldValues": []
	}
} 

Company profile sections overview

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

NameContents
AGNCY_INFOAgency information:
  • uuid

  • name

CONTACT_DATA

Company contact data:

  • street

  • street2

  • zipCode

  • place

  • countryCode

  • phone

  • fax

  • E-Mail (email, email2, email3)

MEMBERSHIPS

Corporate alliance Memberships

  • airline

    • alliance (2-Letter code)

    • memberNumber

    • type

  • hotel

    • alliance (2-Letter code)

    • memberNumber

  • rentalCar

    • alliance (2-Letter code)

    • memberNumber

GENERIC_VALUES

DEPRECATED - use GENERIC_FIELD_VALUES instead

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.

GENERIC_FIELD_VALUES

Values (where filled) from the generic setup

  • field (name, uuid)
  • value
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
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

  • UNDEFINED - Default; check lastPublishState for text indication of status
  • SOFT_FAULT - Profile is in a (known) "desired" fault state (Publishing rejected / Profile processed by remote endpoint with warnings) and hence not listed in the profile center
  • HARD_FAULT - Profile is in a (known) fault state which cannot be resolved simply be re-publishing it (without any change to agency setup or manual profile safe)

Create new company profile

Scopeapi.profilesondemand.write
Endpointapi/v1/profiles/company
Request methodPOST

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)
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"
        },
        "genericFieldValues": [
            {
                "field": {
                    "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:

  • Company profile UUID cannot be provided in the JSON

For creating of a new profile, the following required properties must always be populated:

  • name

  • shortname

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

 

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)
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 generic values from a profile, please include the field uuid or name but set the field content to empty.

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
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

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 following sections are currently supported:

  • COMPANY_INFO

  • GENERAL_DATA

  • PREFERENCES

  • ROLES

  • HISTORY

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

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.

Must be used to reduce the amount of data transferred

Currently all profile sections are dumped if this parameter is omitted.

However, we'll be removing this behaviour and you'll be required to demonstrate usage of the "sections" paraemeter along with how and why each section is processed during certification.

Optional
Example 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"
Example 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"
		},
		"genericFieldValues": [
			{
				"field": {
					"uuid": "",
					"namme": "HairColor"
				,
				"value": "Red"
			},
			{
				"field": {
					"uuid": "",
					"name": "FirstClassTraveler"
				},
				"value": "Y"
			}
		],
		"memberships": {
			"flight": [{
				"alliance": "LH",
				"memberNumber": "9992123412341234",
				"pin": "",
				"uuid": "dbb387a9-b5e7-44d0-87bf-64432ee3e582"
			}],
			"rentalCar": [],
			"hotel": []
		}
	}
}

Traveler profile sections overview

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

NameContents
COMPANY_INFOInformation on the associated company:
  • UUID

  • name

  • Customer number (externalNr)

COMPANY_CONTACT_DATA

Contact information of the associated company:

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

  • phone

  • fax

  • E-Mail (email, email2, email3)

GENERAL_DATA

General profile information:

  • gender

  • title

  • language

  • Phones (businessPhone, privatePhone, mobilePhone)

  • email

  • birhtdate

  • nationality

GENERIC_VALUES

DEPRECATED - use GENERIC_FIELD_VALUES instead

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.

GENERIC_FIELD_VALUES

Values (where filled) from the generic setup

  • field (name, uuid)
  • value
MEMBERSHIPS

Flight, Hotel and Rentalcar-Memberships with:

  • alliance-code
  • 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

 

The informaton in this section will be duplicated in JSON Path "data.emergencyContact" as well as "data.contacts.emergencyContact"

Please update your implementation to only use "data.contacts.emergencyContact" - the old location "data.emgerencyContact" is deprecated and will be removed in the near future!

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
  • 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

  • UNDEFINED - Default; check lastPublishState for text indication of status
  • SOFT_FAULT - Profile is in a (known) "desired" fault state (Publishing rejected / Profile processed by remote endpoint with warnings) and hence not listed in the profile center
  • HARD_FAULT - Profile is in a (known) fault state which cannot be resolved simply be re-publishing it (without any change to agency setup or manual profile safe)
UNUSED_TICKETS

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

  • carrier
  • expiryDate
  • fare
  • pnr
  • ticketNumber

Create new traveler profile

Scopeapi.profilesondemand.write
Endpointapi/v1/profiles/traveller
Request methodPOST

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)
Example 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
                }
            ]
        },
        "genericFieldValues": [
            {
                "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:

  • Traveler profile UUID cannot be provided in the JSON

  • “email” has to be sent in generalData, values in the root-level propertiy “email” will be ignored

For creating of a new profile, the following required properties must always be populated:

  • company.uuid

  • username

  • firstname

  • name

  • generalData.gender

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

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

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)
Example 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"
                }
            ]
        },
        "genericFieldValues": [
            {
                "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.

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 username, then add a passport as two separate API calls).

The following logic is applied when editing collections, such as visas or passports 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 generic values from a profile, please include the field name or uuid but set the field content to empty.

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

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 methodGET

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
Example request
curl -v -H "Authorization: Bearer <token>" \
    {midoco_proxy_url}/traveller/ceb545fd-5000-4f44-93dd-47a272f6f25a/creditcard/eff37a66-4217-4762-a3be-2a9177fba9fc
Example response
{
    "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 methodPOST

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.

Example request
curl -v -X POST \
    -H "Authorization: Bearer <token>" \
    -H "Content-Type: application/json" \
    --data '{
    "type": "VI",
    "number": "4444333322221111"
}' {midoco_proxy_url}/creditcard/store
Example response
{
	"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.

Example 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
Example 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

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

 

 

 

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

Example 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"
Example Response
{
	"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"
		}
	]
}

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

Example request
curl -v -H "Authorization: Bearer <token>" \
    "https://hurricane.umbrellanet.ch/uf-test/api/v1/reference-data/air-providers?profileType=TRAVELLER"

Get rental car providers

Scopes

(none needed)

Endpoints

api/v1/reference-data/car-providers

Request methodGET

Fetch a list of available rental car providers

Example 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

Example request
curl -v -H "Authorization: Bearer <token>" \
    "https://hurricane.umbrellanet.ch/uf-test/api/v1/reference-data/rail-card-types"
  • No labels