Deem Fource Alliance Open API (Beta)

Overview


Deem provides the capability to integrate its state-of-the art Travel product with any other solution. Under the Deem Fource Alliance Program, the integration is done via a set of RESTful API. Through Deem's Open API following a wide variety of industry open standards, a Deem partner can build an integration that would allow for seamless flow of data from Deem Work Fource (travel booking technology application) to their solution.

Since new Travel bookings are always made, and older Travel bookings are often modified or canceled, a constant flow of data is expected. Depending on how frequently the API is called to download data from Deem and imported, the user will be able to see all transactions corresponding to their booking in their downstream application, creating a seamless experience.

The Deem Fource Alliance Open API provides a set of operations and resources that allow:

  1. Fetch itinerary data for all users for a common customer
  2. Fetch itinerary data for a particular user for a common customer
  3. Filter any data by dates
  4. Get historical details for a booked itinerary
  5. Download a pdf version of the booking confirmation that could be used as a receipt

Endpoint

The Deem Open REST API under the Deem Fource Alliance Program will be provided by the following RESTful endpoint:


Back to Top

Authentication


Authentication to the API is performed via standard OAuth. Partner will have to establish an OAuth session with Deem for subsequent api calls. OAuth key exchange will be part of the initial client setup on Deem side, in addition to a tenant id unique to each partner using our APIs. 

Back to Top

API Versioning


Deem APIs are evolving over time, with the Deem Fource Alliance API adding new fields as requested by our API partners. That makes it difficult to keep it backwards compatible. However, all Deem APIs endpoints are versioned. A call to a specific version is idempotent in returning the schema of the response.

In other words, Deem guarantees that the calls made with a specific major-minor version combination will always return the same object structure at all times in the future.

Versions are part of the REST URI, and applies to all resources. The version is mandatory for all resources except the health check resource, and a call without a version will result in an HTTP 406 error code.

Clients must specify the minimum major and minor version of a resource they would like to receive. The server agrees to not send back a version earlier than this, but can send back a more recent patch version. The full version number will be exposed to the client as a version parameter in the response Content-Type header.

Version in the API

Version is the first path parameter, immediately following the Deem Fource Alliance endpoint:

https://api.deem.com/alliance/{version}/

Path Parameters

Parameter

Description

Required

version

The version of the API

Yes

Version number format


Client request format

vmajor.minor

example: https://api.deem.com/alliance/v1.3/

Server response format

vmajor.minor.patch

example: Content-Type: application/vnd.deem.openalliance.v1.3+json;charset=utf-8;version=v1.3.2

 


major

potentially backward incompatible updates

minor

backward compatible updates

patch

bug fixes

Sample Request

curl -H “x-deem-tenant-id: acmepartners” \
     “https://api.deem.com/alliance/v1.3/site/wayne/user/batman/trip/”

Client-Server Contract

Deem Alliance REST API adheres to the following principles and assumptions wrt versioning, and expects clients of the API to follow suit:

Deem API

  • The following changes can be made without bumping the major service version:

    • Additions to the resource schema if and only if the addition does not change the semantics of any of the existing fields

    • New URIs/resources can be added that expose additional functionality

    • Existing resources are mapped 1:1 to new resource locations (URIs) via a 301 Redirect

  • Any of the following must result in a new major version of the API:

    • Changes to semantics of existing resource attributes or actions

    • Deletion of existing attributes

    • Responses point to new URIs that existing client version might not have access to

  • If a service gets a request for a version it no longer supports, it will return a 406 Not Acceptable

API partners

  • Must gracefully handle additions to resource representations in responses, though these additions may be ignored

  • If a 301 redirect is encountered, the client must resubmit the same request at the new location

  • A 406 Not Acceptable response indicates that the client is using a version of a service that is no longer supported and the client must upgrade

Redirection and URI changes

As resources mature, resource URIs will naturally evolve. When new versions of a resources are introduced that change the URIs of existing resources (but not the resources themselves), the server will send a redirect response and the client must send an identical request to the new resource location.

Sample request-response

For example, in version 1.1 of the Open Alliance, the receipt URI might change from

(v1.0) /alliance/trip/{trip_uuid}/receipt --> (v1.1) /alliance/site/{site_id}/user/{user_id}/trip/{trip_uuid}/receipt

This would result in the following HTTP interaction:

-->
GET /alliance/v1.0/trip/asdd-123sdaf-asdf-12asdf/receipt HTTP/1.1
Host: api.deem.com

<--
HTTP/1.1 301 Moved Permanently
Location: https://api.deem.com/alliance/v1.1/site/wayne/user/batman/trip/asdd-123sdaf-asdf-12asdf/receipt

-->
GET https://api.deem.com/alliance/v1.1/site/wayne/user/batman/trip/asdd-123sdaf-asdf-12asdf/receipt HTTP/1.1
Host: api.deem.com

<--
HTTP/1.1 200 OK

<response body/>

Back to Top

Requests


Methods

All of the requests under the Deem Alliance Open API are HTTP GET requests without a request body.

Headers

All requests require authentication headers, and an Accept header.

Header

Header type

Description

Format/Validation

Required

x-deem-tenant-id
AuthenticationID of the Open Alliance partner/tenantValid tenant id received from DeemYes
Accept 
Response TypeMedia type(s) acceptable for the response.

application/vnd.deem.openalliance +json

Yes

Request Parameters: Time Interval

Requests that return a data collection can be filtered by a time interval. The time interval is specified by the following request parameters:

Parameter

Description

Required

Default

start_time

Starting time from which trips booked or modified will be returned

Yes

N/A

end_time

End time till which trips booked or modified will be returned

Optional

Current time

The format of the query parameters is driven by the ISO 8601 with three major components as described below. Any date params not adhering to the specs below will result in an HTTP error code 412. More details in the Error Handling section.

Date

YYYY-MM-DD or YYYYMMDD

The Date part represents a calendar date, with the following three subcomponents that may or may not be separated by a hyphen.

  • [YYYY] indicates a four-digit year, 2000 through 9999.
  • [MM] indicates a two-digit month of the year, 01 through 12.
  • [DD] indicates a two-digit day of that month, 01 through 31.

For example, the 5th of March, 2018 may be represented as either "2018-03-05"  in the extended format or "20180305" in the basic format.

Time

hh:mm:ss or hhmmss

The Time part uses a 24-hour clock system, and is separated from the Date time by the letter T. The following three components make up the time:

  • [hh] refers to a zero-padded hour between 00 and 24 (where 24 is only used to denote midnight at the end of a calendar day).
  • [mm] refers to a zero-padded minute between 00 and 59.
  • [ss] refers to a zero-padded second between 00 and 60 (where 60 is only used to denote an added leap second). This may be ommitted to mean the 0th second of a minute.

Time Zone

Z or ±hh:mm or ±hh

Time Zone is represented as UTC or with an offset from UTC, with the location unspecified. 

Since the tenants and Deem can be in different timezones, time zone is a mandatory part to avoid any ambiguity. In order to make things explicit, the letter Z can designate when the Time Zone is UTC. UTC may also be represented with a +00:00 or +00, but not with a -00:00 or -00.

Examples

  • Time Zone UTC: "10:10 UTC" is represented as 10:10Z or 1010Z or 10:10+00:00 or 1010+00.

  • Time Zone non-UTC: "3:10 PDT" is represented as 03:10-07:00 or 0310-07.

  • Full Time: The following two repsesent the same time:

    • 2018-03-15T03:48:44-07:00 
    • 20180315T034844-07

Maximum Time Interval

The amount of Travel booking data within a time interval depends on the number of users and the prolificity of the travelers.

For continuous flow of Travel booking data from Deem to the Consumer, tenants will have to call the Deem API at regular intervals, ranging from a few minutes to a few hours. There is a limit on the maximum time interval a request can support, which is equal to 7 days. A time interval greater than that will produce an HTTP error code 412. More details in the Error Handling section.

Pagination

For all API requests that return a collection resource, the results can be paginated. The optional page_size parameter sets the maximum number of elements to return in a reponse. The default is 20 and the maximum is 100. 

The  start_index parameter becomes mandatory after the first page.

Parameter

Description

Required

Default

start_index

Starting time from which trips booked or modified will be returned

No

0

page_size

End time till which trips booked or modified will be returned

No

20

The response returns the page_size, start_index, as well as a next_page element, which will contain the URI for requesting the next page.

Rate Limiting

Deem enforces a time-based limit on the number of requests per tenant on the REST API. This policy prevents tenants from overloading the system and monopolizing Deem system resources. 

There is also a separate limit on concurrent requests per tenant. Once either the time-based or concurrent quota is reached, any REST calls for that tenant will return in an error with an HTTP error code of 429. More details in the Error Handling section. There will be a blocking time during which no further requests can be made for that tenant id.

Back to Top

Response


HTTP Status

The success or failure of each HTTP request is shown in the status field of the HTTP response header, which contains standard HTTP status codes:

  • 2xx code for success
  • 4xx or 5xx code for failure

The header of the response looks something like this:

HTTP/1.1 200 OK
Date: Thu, 03 Mar 2018 03:39:16 PDT
Content-Length: 24768
Content-Type: application/vnd.deem.openalliance.v1.3+json;charset=utf-8;version=v1.3.2
Cache-Control: no-cache, no-store, must-revalidate
Pragma: no-cache
Expires: 0
Connection: close
Server: Deem/1.1 

HTTP Headers (Response)

The following list of HTTP request and response headers represents a subset of the headers a Deem API client can expect to receive. The set of headers listed here comprises all headers that influence RESTful semantics.

Header

Description

Example

Content-Type

The content type of response, matches the request's path version & Accept-Encoding headers with added version information. application/vnd.deem.error+json if error response. See: API versioning

application/vnd.deem.openalliance.v1.3.2+json; charset=utf-8; version=v1.3.2

Location

Absolute URL of new resource location, used in 201 and 3xx responses


Retry-After

Optional, can be included only after a 503 to throttle request traffic. See Concurrent Request Limits



HTTP Response Codes

The following HTTP response codes can be expected.

Success

HTTP Status Code

Deem Error Code

Reason

Response Body

200

OK

The RESTful action (any method) completed without errorResponse object (depends on domain, resource, action, and version)

Redirect

HTTP Status Code

Deem Error Code

Reason

Response Body

301

Moved Permanently

The resource has moved to a new home; the URI has changed. See Redirection and URI changes

-

Error Codes

HTTP Status Code

Deem Error Code

Reason

Response Body

400

BadRequest.PageSize.Invalid

The page size parameter could not be understood (potential causes could be a non-numeric, non-integer or, negative value, page size higher than the maximum pages)

Code and Message with more information

400

BadRequest.StartIndex.Invalid

The start index parameter could not be understood (potential causes could be a non-numeric, non-integer or, negative value, page size higher than the maximum pages)

Code and Message with more information
400BadRequest.StartTime.InvalidThe start time parameter was either missing or could not be understood, potentially because it was not formatted correctlyCode and Message with more information
400BadRequest.EndTime.InvalidThe end time parameter was either missing or could not be understood, potentially because it was not formatted correctly, or if it was before the start time.Code and Message with more information
401Unauthenticated.Credentials.Invalid*Invalid credentials suppliedNo body, not too much detail here
403Forbidden.Tenant.Site*The credentials are correct but the tenant does not have access to the site.No body, not too much detail here
404Not.Found.{ResourceType}*No resouce found with the requested URI. May optionally provide the resource type.No body, not too much detail here
405Method.Not.AllowedThe resource does not support the given methodAllow header should be used to indicate supported methods

406

Not.Acceptable.Version

The server received request with an empty or invalid Accept header, indicating the version

Response detailing oldest and latest supported versions or supported representation formats

429

Too.Many.Requests

The maximum number of allowed requests is reached in a given amount of time ("rate limiiting").

Response detailing the maximum number of requests allowed in a given time
500Internal.Server.ErrorAn error occured on the server-
503Service.UnavailableThe service is overloaded, server can specify Retry-After response header to throttle traffic-


* 403 vs 404: An interesting situation arises when exposing resources to when clients aren't allowed to access them. Instead of returning a 403, indicating that the resource does exist and that the client can't access it, Deem returns a 404, essentially hiding the resource from unauthorized clients.
* 401 vs 403: 401 Indicates that authentication failed/is required while 403 usually means authentication was successful but the user is not authorized to access resource.

Deem Response Body

The response body, in JSON format (unless specified otherwise for a particular resource), immediately follows the header. 

The root of the JSON object in the response for all Booking Retrieve endpoints is either a single trip or  a collection trips. Detailed structure and format in the Response Schema section.

Response Objects

For most API resources, the response objects are either a single itinerary or a list of itineraries. Itineraries are called Trips; more details in the Deem Object Model section.

For some API resources, as in the receipts API, the response body is a pdf file.

Back to Top

Deem Object Model


Expense-centric Object Model

Deem Alliance's responses are structured with an Expense Management Company (EMC) in mind. At the core of a response is a Trip or a list of Trips. A trip comprises of Transactions, where each Transaction would correspond to a real financial transaction (e.g., a credit card transaction). Transactions can always be grouped together in a Trip.

Transactions can be of several types, corresponding to a travel segment or a fee. Typically, each traveler in a booking has their own transaction. However, there is a single user booking a trip. The following sections describe fields in each object

Trip

Trip is the root of all objects in the response data, and corresponds to a booking made on the Deem Travel site.

Field

Description

Type

Optional

tripUuid

The unique identifier for each tripStringNo

revision

The revision number of the tripNumericNo

tripName

Name of the trip as entered by the userStringYes

user

The USER object who made the bookingUserNo

bookingStatus

Booking Status of the trip

String, one from the enumeration

CONFIRMED
TICKETED
COMPLETED
CANCELED
EXCHANGED

No

agencyName

The Travel Agency used for the tripStringYes

tripCreationTime

Time the trip was first createdDatetimeNo

tripLastModificationTime

Time the trip was last modifiedDatetimeNo
transactionsAn array of transactions in the tripArray of TransactionNo

Transaction

A trip comprises of Transactions, where each Transaction would correspond to a real financial transaction (e.g., a credit card transaction). Transactions can always be grouped together in a Trip.

A Transaction can be of one or more different types

Field

Description

Type

Optional

transactionUuid

The unique identifier of the transactionStringNo

tripUuid

The unique identifier of the trip this transaction belongs toStringNo

revision

Revision number for this transactionIntegerNo

transactionDate

The date the transaction occuredDatetimeNo

traveler

The traveler traveling on this bookingTravelerNo

prepaidAmount

Amount of the booking, if prepaidNumeric (2 decimals)No

payableLaterAmount

Amount of the booking, if payable laterNumeric (2 decimals)No

taxes

Total taxes (already included in the amounts above)Numeric (2 decimals)No

currencyCode

The 3-letter code for currency in which the amount was chargedStringNo

bookingStatus

Status of the booking of this segment.

String, one from the enumeration

CONFIRMED
TICKETED
COMPLETED
CANCELED
EXCHANGED

No

inPolicy

Whether this transaction was booked in-policyBooleanNo

policyViolationReason

Reason what caused the policy violationStringYes

policyViolationJustification

Justification provided by end user for violating the policyStringYes

type

Type of transaction

String, one from the enumeration

HOTEL,
FLIGHT,
CAR_RENTAL,
CAR_SERVICE,
TRAIN,
FEES

No

confirmationNumber

Reservation number, etcStringYes

ticketNumber

Ticket number if a ticket is issuedStringYes

ticketIssueDate

Date of issue of ticketsDatetimeYes

vendorCode

The code of the vendor that billed for this transactionStringYes

vendorName

The vendor that blled for this transactionStringYes

vendorPhone

The phone number of the vendorStringYes

paymentType

The type of the card used for the booking

String, one from the enumeration: 

CREDIT_CARD,
SITE_CARD,
VOUCHER,
CASH,
OTHER,
UNKNOWN

Yes

paymentLabel

The label of the card used for booking, may include last four digitsStringYes
transactionDetailsDetails about a transaction, can be one type of transaction. The object will depend on the type of transaction

One of:

Flight

Hotel

CarRental

CarService

Train

Fees

No

Flight

A transaction detail object representing a flight segment.

Field

Description

Type

Optional

originAirportCode

The origin airport codeStringNo

originAirportLocation

The full location of the origin airportLocation  Yes

destinationAirportCode

The destination airport codeStringNo

destinationAirportLocation

The full location of the destination airportLocation  Yes

departureTime

The date and time of departure from the origin airportDatetimeNo

arrivalTime

The date and time of arrival at the destination airportDatetimeNo

serviceClass

The class of service

String, one from the enumeration: 

COACH,
PREMIUM_COACH,
BUSINESS,
FIRST

No

bookingCode

The booking codeStringYes

carrierCode

Carrier CodeStringNo

carrierName

Carrier NameStringNo

flightNumber

Flight NumberStringNo

legSequence

Sequence of the flight legIntegerNo

segmentSequence

Sequence of the flight segmentIntegerNo

Hotel

A transaction detail object representing a hotel reservation.

Field

Description

Type

Optional

checkinDate

The check in at the hotelDatetimeNo

checkoutDate

The check out date at the hotelDatetimeNo

hotelName

The name of the hotel. This can be different than the chain.StringNo

hotelChainCode

The chain code for the chain the hotel belongs toStringYes

starRating

Number of stars the hotel has, if anyIntegerYes

location

The location details, address and phone number, of the hotelLocationYes

numberOfGuests

The number of guests booked for the rooomIntegerNo

breakfastIncluded

Whether breakfast is included as part of the tariffBooleanYes

averageRate

The average rate for the stayNumeric (2 decimal places)No

currency

The 3-letter currency code for the rateStringNo

roomType

Type of the room bookedStringYes

roomDescription

Specific details about the roomStringYes

CarRental

A transaction detail object representing a Car Rental reservation.

Field

Description

Type

Optional

pickupLocation

The location where the traveler needs to be picked upLocationYes

dropoffLocation

The location where the traveler needs to be dropped atLocationYes

pickupAirportCode

If the pickup location is an airport, the airport codeStringYes

dropoffAirportCode

If the dropoff location is an airport, the airport codeStringYes

pickupTime

The date and time of pickupDatetimeNo

dropoffTime

The date and time of dropoffDatetimeNo

carType

The type of the car

String, some examples include:

CONVERTIBLE,
COUPE,
CROSSOVER,
SEDAN,
SPORT,
SUV,
VAN,
WAGON

Yes

carClass

The car class

String, one from the enumeration: 

MINI,
ECONOMY,
COMPACT,
INTERMEDIATE,
STANDARD,
FULLSIZE,
PREMIUM,
LUXURY,
OVERSIZE,
SPECIAL

Yes

unlimitedMileage

Whether the renal allows for unlimited mileageBooleanNo

carTransmission

Automatic or Manual

String, one from the enumeration:

MANUAL,
AUTOMATIC

Yes

averageRate

The average rate for the rentalNumeric (2 decimal places)Yes

currency

The 3-letter currency code for the rate

String

Yes

rateType

The rate type, e.g., Daily,Weekly, Monthly

String, one from the enumeration

DAILY,
WEEKEND,
WEEKLY,
MONTHLY,
TOTAL

Yes

CarService

A transaction detail object representing a Car Service booking.

Field

Description

Type

Optional

pickupLocation

The location where the traveler needs to be picked upLocationNo

dropoffLocation

The location where the traveler needs to be dropped atLocationNo

pickupTime

The date and time of pickupDatetimeNo

dropoffTime

The date and time of dropoffDatetimeYes

carType

The type of the car

StringString, some examples include:

CONVERTIBLE,
COUPE,
CROSSOVER,
SEDAN,
SPORT,
SUV,
VAN,
WAGON

Yes

carClass

The car class

String, one from the enumeration: 

MINI,
ECONOMY,
COMPACT,
INTERMEDIATE,
STANDARD,
FULLSIZE,
PREMIUM,
LUXURY,
OVERSIZE,
SPECIAL

Yes

Train

A transaction detail object representing a Train booking.

Field

Description

Type

Optional

originStationCode

The origin station codeStringNo

originStationLocation

The full location of the origin stationLocationYes

destinationStationCode

The destination station codeDatetimeNo

destinationStationLocation

The full location of the destination stationLocationYes

departureTime

The time of departure from the origin stationDatetimeNo

arrivalTime

The time of arrival at the destination stationDatetimeNo

serviceClass

The class of serviceStringNo

carrierCode

Carrier CodeStringYes

carrierName

Carrier NameStringNo

trainNumber

Train NumberStringNo

legSequence

Sequence of the flight legIntegerNo

segmentSequence

Sequence of the flight segmentIntegerNo

Fees

A transaction detail object representing a Fees transaction.

Field

Description

Type

Optional

type

The type of the feesStringNo

User

Representation of the User object as used in the Trip object. The user books the trip on their Deem Travel account

Field

Description

Type

Optional

userId

Unique user identifierStringNo

siteId

Unique site identifierStringNo

siteName

Name of the siteStringNo

Traveler

Representation of the Traveler object as used in the Transaction object.

Field

Description

Type

Optional

title

TitleStringYes

firstName

First name or Given name of the TravelerStringNo

middleInitial

Middle name initialStringYes

lastName

Last name or surname of the TravelerStringNo

email

Email id used to receive emails about the bookingStringNo

primary

Whether the traveler is the primary traveler on the bookingBooleanYes

phoneNumbers

Comma-separated list of phone numbers for the travelerStringYes

Location

Representation of the Location object.

Field

Description

Type

Optional

locationCode

Location code, if anyStringYes

locationName

A name of the location, if anyStringYes

street1

Street Address Line 1StringNo

street2

Street Address Line 1StringYes

cityCode

City code, if anyStringYes

cityName

City NameStringNo

stateCode

State CodeStringYes

stateName

State full nameStringYes

countryCode

Country code, if anyStringYes

countryName

Country NameStringYes

postalCode

ZIP or PIN code or postal codeStringYes

Back to Top

Sample Objects

Here are a few examples of different types of objects based on how bookings are made:

Example 1. Flight

Here is a sample flight booking, which also comes with an agency fees:

Flight Sample
{
    'tripUuid': 'cb5438ad-c573-4d86-99ff-7f5a5d9bdd02',
    'revision': 1,
    'tripName': 'Oregon - FH',
    'user': {
        'externalUserId': 'batman',
        'externalSiteId': 'wayne',
        'siteName': 'Wayne Enterprises'
    },
    'tripCreationTime': '2017-11-14T11:14:59',
    'agencyName': 'The Enigma',
    'transactions': [{
        'transactionUuid': '3b63190c-20ae-489e-ba1f-dc2c78ecc190',
        'tripUuid': 'cb5438ad-c573-4d86-99ff-7f5a5d9bdd02',
        'version': 1,
        'transactionDate': '2017-11-14T00:00',
        'traveler': {
            'title': 'Mr',
            'firstName': 'Bruce',
            'middleInitial': 'Batman',
            'lastName': 'Wayne',
            'email': 'batman@deem.com',
            'primary': true,
            'phoneNumbers': '235-6723-567'
        },
        'prepaidAmount': 496.39,
        'payableLaterAmount': 0,
        'taxes': 67.45,
        'fees': 0,
        'taxesAndFees': 0,
        'currency': 'USD',
        'bookingStatus': 'CONFIRMED',
        'inPolicy': false,
        'policyViolationReason': '',
        'policyViolationJustification': 'No parking for Batmobile',
        'confirmationNumber': 'RFRMJO',
        'ticketNumber': '0277015599008',
        'ticketIssueTime': '2017-11-14T00:00',
        'vendorCode': 'AS',
        'vendorName': 'Alaska Airlines',
        'paymentType': 'UNKNOWN',
        'paymentLabel': '',
        'type': 'FLIGHT',
        'segments': [{
            'originAirportCode': 'PDX',
            'originAirportLocation': {
                'locationCode': 'PDX',
                'locationName': 'Portland International Airport',
                'street1': null,
                'street2': null,
                'cityCode': 'PDX',
                'cityName': 'Portland',
                'stateCode': 'OR',
                'stateName': 'Oregon',
                'countryCode': 'US',
                'countryName': 'United States',
                'postalCode': null
            },
            'destinationAirportCode': 'RDM',
            'destinationAirportLocation': {
                'locationCode': 'RDM',
                'locationName': 'Roberts Field',
                'street1': null,
                'street2': null,
                'cityCode': 'RDM',
                'cityName': 'Redmond',
                'stateCode': 'OR',
                'stateName': 'Oregon',
                'countryCode': 'US',
                'countryName': 'United States',
                'postalCode': null
            },
            'departureTime': '2017-12-25T11:50',
            'arrivalTime': '2017-12-25T12:29',
            'serviceClass': 'COACH',
            'bookingCode': 'Y',
            'carrierCode': 'AS',
            'carrierName': 'Alaska Airlines',
            'flightNumber': '2325',
            'legSequence': 1,
            'segmentSequence': 1
        }, {
            'originAirportCode': 'RDM',
            'originAirportLocation': {
                'locationCode': 'RDM',
                'locationName': 'Roberts Field',
                'street1': null,
                'street2': null,
                'cityCode': 'RDM',
                'cityName': 'Redmond',
                'stateCode': 'OR',
                'stateName': 'Oregon',
                'countryCode': 'US',
                'countryName': 'United States',
                'postalCode': null
            },
            'destinationAirportCode': 'PDX',
            'destinationAirportLocation': {
                'locationCode': 'PDX',
                'locationName': 'Portland International Airport',
                'street1': null,
                'street2': null,
                'cityCode': 'PDX',
                'cityName': 'Portland',
                'stateCode': 'OR',
                'stateName': 'Oregon',
                'countryCode': 'US',
                'countryName': 'United States',
                'postalCode': null
            },
            'departureTime': '2017-12-29T05:09',
            'arrivalTime': '2017-12-29T05:51',
            'serviceClass': 'COACH',
            'bookingCode': 'Y',
            'carrierCode': 'AS',
            'carrierName': 'Alaska Airlines',
            'flightNumber': '2058',
            'legSequence': 2,
            'segmentSequence': 2
        }]
    }, {
        'transacionUuid': 'e53f1ace-98f5-49bd-90d5-2a57f4a17a42',
        'version': 1,
        'transactionDate': '2017-11-14T00:00',
        'traveler': {
            'title': 'Mr',
            'firstName': 'Bruce',
            'middleInitial': 'Batman',
            'lastName': 'Wayne',
            'email': 'batman@deem.com',
            'primary': true,
            'phoneNumbers': '235-6723-567'
        },
        'prepaidAmount': 10.0,
        'payableLaterAmount': 0,
        'taxes': 0,
        'fees': 0,
        'taxesAndFees': 0,
        'currency': 'USD',
        'bookingStatus': 'CONFIRMED',
        'inPolicy': false,
        'policyViolationReason': null,
        'policyViolationJustification': null,
        'confirmationNumber': null,
        'ticketNumber': null,
        'ticketIssueTime': null,
        'vendorCode': null,
        'vendorName': 'The Enigma',
        'paymentType': 'UNKNOWN',
        'paymentLabel': '',
        'type': 'FEES',
        'segments': [{
            'type': 'AGENCY_FEES',
            'vendorName': 'Globe',
            'vendorPhone': '650-2112-8440',
            'location': {
                'locationCode': null,
                'locationName': '',
                'street1': '666 ',
                'street2': null,
                'cityCode': null,
                'cityName': 'Gotham City',
                'stateCode': 'WI',
                'stateName': 'Wisconsin',
                'countryCode': 'US',
                'countryName': 'United States',
                'postalCode': '53540'
            }
        }]    
    }]
}

Back to Top

Example 2: Hotel

This is a Hotel booking, paid upon checkout:

Hotel
{
    'tripUuid': 'cb5438ad-c573-4d86-99ff-7f5a5d9bdd02',
    'revision': 1,
    'tripName': 'Oregon - FH',
    'user': {
        'externalUserId': 'batman',
        'externalSiteId': 'wayne',
        'siteName': 'Wayne Enterprises'
    },
    'tripCreationTime': '2017-11-14T11:14:59',
    'agencyName': 'The Enigma',
    'transactions': [{
        'transactionUuid': '0812b1ef-aed8-4eef-a29d-c7e864c9b4d7',
        'revision': 1,
        'transactionDate': '2018-01-20T00:00',
        'traveler': {
            'title': 'Mr',
            'firstName': 'Bruce',
            'middleInitial': 'Batman',
            'lastName': 'Wayne',
            'email': 'batman@deem.com',
            'primary': true,
            'phoneNumbers': '235-6723-567'
        },
        'prepaidAmount': 0,
        'payableLaterAmount': 185.13,
        'taxes': 20.13,
        'fees': 0,
        'taxesAndFees': 20.13,
        'currency': 'USD',
        'bookingStatus': 'CANCELLED',
        'inPolicy': true,
        'policyViolationReason': null,
        'policyViolationJustification': null,
        'confirmationNumber': 0,
        'ticketNumber': null,
        'ticketIssueTime': null,
        'vendorCode': '11100',
        'vendorName': 'Booking.com',
        'paymentType': 'CREDIT_CARD',
        'paymentLabel': '"Visa3" ************0003',
        'type': 'HOTEL',
        'segments': [{
            'checkinDate': '2018-01-17T14:00',
            'checkoutDate': '2018-01-20T10:00',
            'hotelName': 'Rainbow Motel',
            'hotelChainCode': null,
            'starRating': '2',
            'vendorPhone': '15413821821',
            'location': {
                'locationCode': 'RDM',
                'locationName': 'Bend',
                'street1': '154 NE Franklin St',
                'street2': null,
                'cityCode': 'RDM',
                'cityName': 'Bend',
                'stateCode': 'OR',
                'stateName': 'Oregon',
                'countryCode': 'US',
                'countryName': 'United States',
                'postalCode': null
            },
            'numberOfGuests': 1,
            'breakfastIncluded': false,
            'averageRate': 55.0,
            'currency': 'USD',
            'roomType': 'Queen',
            'roomDescription': 'Queen Room  Free cancellation - Free WiFi'
        }]        
   }]
}

Back to Top

Example 3: Flight, Hotel, and Car Rental

A typical full itinerary, comprising of a flight, hotel, and car rental

Flight, Hotel, Car Rental
{
    'tripUuid': 'cb5438ad-c573-4d86-99ff-7f5a5d9bdd02',
    'revision': 1,
    'tripName': 'Oregon - FH',
    'user': {
        'externalUserId': 'batman',
        'externalSiteId': 'wayne',
        'siteName': 'Wayne Enterprises'
    },
    'tripCreationTime': '2017-11-14T11:14:59',
    'agencyName': 'The Enigma',
    'transactions': [{
        'transactionUuid': '3b63190c-20ae-489e-ba1f-dc2c78ecc190',
        'tripUuid': 'cb5438ad-c573-4d86-99ff-7f5a5d9bdd02',
        'version': 1,
        'transactionDate': '2017-11-14T00:00',
        'traveler': {
            'title': 'Mr',
            'firstName': 'Bruce',
            'middleInitial': 'Batman',
            'lastName': 'Wayne',
            'email': 'batman@deem.com',
            'primary': true,
            'phoneNumbers': '235-6723-567'
        },
        'prepaidAmount': 496.39,
        'payableLaterAmount': 0,
        'taxes': 67.45,
        'fees': 0,
        'taxesAndFees': 0,
        'currency': 'USD',
        'bookingStatus': 'CONFIRMED',
        'inPolicy': false,
        'policyViolationReason': '',
        'policyViolationJustification': 'No parking for Batmobile',,
        'confirmationNumber': 'RFRMJO',
        'ticketNumber': '0277015599008',
        'ticketIssueTime': '2017-11-14T00:00',
        'vendorCode': 'AS',
        'vendorName': 'Alaska Airlines',
        'paymentType': 'UNKNOWN',
        'paymentLabel': '',
        'type': 'FLIGHT',
        'segments': [{
            'originAirportCode': 'PDX',
            'originAirportLocation': {
                'locationCode': 'PDX',
                'locationName': 'Portland International Airport',
                'street1': null,
                'street2': null,
                'cityCode': 'PDX',
                'cityName': 'Portland',
                'stateCode': 'OR',
                'stateName': 'Oregon',
                'countryCode': 'US',
                'countryName': 'United States',
                'postalCode': null
            },
            'destinationAirportCode': 'RDM',
            'destinationAirportLocation': {
                'locationCode': 'RDM',
                'locationName': 'Roberts Field',
                'street1': null,
                'street2': null,
                'cityCode': 'RDM',
                'cityName': 'Redmond',
                'stateCode': 'OR',
                'stateName': 'Oregon',
                'countryCode': 'US',
                'countryName': 'United States',
                'postalCode': null
            },
            'departureTime': '2017-12-25T11:50',
            'arrivalTime': '2017-12-25T12:29',
            'serviceClass': 'COACH',
            'bookingCode': 'Y',
            'carrierCode': 'AS',
            'carrierName': 'Alaska Airlines',
            'flightNumber': '2325',
            'legSequence': 1,
            'segmentSequence': 1
        }, {
            'originAirportCode': 'RDM',
            'originAirportLocation': {
                'locationCode': 'RDM',
                'locationName': 'Roberts Field',
                'street1': null,
                'street2': null,
                'cityCode': 'RDM',
                'cityName': 'Redmond',
                'stateCode': 'OR',
                'stateName': 'Oregon',
                'countryCode': 'US',
                'countryName': 'United States',
                'postalCode': null
            },
            'destinationAirportCode': 'PDX',
            'destinationAirportLocation': {
                'locationCode': 'PDX',
                'locationName': 'Portland International Airport',
                'street1': null,
                'street2': null,
                'cityCode': 'PDX',
                'cityName': 'Portland',
                'stateCode': 'OR',
                'stateName': 'Oregon',
                'countryCode': 'US',
                'countryName': 'United States',
                'postalCode': null
            },
            'departureTime': '2017-12-29T05:09',
            'arrivalTime': '2017-12-29T05:51',
            'serviceClass': 'COACH',
            'bookingCode': 'Y',
            'carrierCode': 'AS',
            'carrierName': 'Alaska Airlines',
            'flightNumber': '2058',
            'legSequence': 2,
            'segmentSequence': 2
        }]
    }, {
        'transacionUuid': 'e53f1ace-98f5-49bd-90d5-2a57f4a17a42',
        'version': 1,
        'transactionDate': '2017-11-14T00:00',
        'traveler': {
            'title': 'Mr',
            'firstName': 'Bruce',
            'middleInitial': 'Batman',
            'lastName': 'Wayne',
            'email': 'batman@deem.com',
            'primary': true,
            'phoneNumbers': '235-6723-567'
        },
        'prepaidAmount': 10.0,
        'payableLaterAmount': 0,
        'taxes': 0,
        'fees': 0,
        'taxesAndFees': 0,
        'currency': 'USD',
        'bookingStatus': 'CONFIRMED',
        'inPolicy': false,
        'policyViolationReason': null,
        'policyViolationJustification': null,
        'confirmationNumber': null,
        'ticketNumber': null,
        'ticketIssueTime': null,
        'vendorCode': null,
        'vendorName': 'The Enigma',
        'paymentType': 'UNKNOWN',
        'paymentLabel': '',
        'type': 'FEES',
        'segments': [{
            'type': 'AGENCY_FEES',
            'vendorName': 'The Enigma',
            'vendorPhone': '650-2112-8440',
            'location': {
                'locationCode': null,
                'locationName': '',
                'street1': '666 ',
                'street2': null,
                'cityCode': null,
                'cityName': 'Gotham City',
                'stateCode': 'WI',
                'stateName': 'Wisconsin',
                'countryCode': 'US',
                'countryName': 'United States',
                'postalCode': '53540'
            }
        }]
    }, {
        'transactionUuid': '0812b1ef-aed8-4eef-a29d-c7e864c9b4d7',
        'revision': 1,
        'transactionDate': '2018-01-20T00:00',
        'traveler': {
            'title': 'Mr',
            'firstName': 'Bruce',
            'middleInitial': 'Batman',
            'lastName': 'Wayne',
            'email': 'batman@deem.com',
            'primary': true,
            'phoneNumbers': '235-6723-567'
        },
        'prepaidAmount': 0,
        'payableLaterAmount': 185.13,
        'taxes': 20.13,
        'fees': 0,
        'taxesAndFees': 20.13,
        'currency': 'USD',
        'bookingStatus': 'CANCELLED',
        'inPolicy': true,
        'policyViolationReason': null,
        'policyViolationJustification': null,
        'confirmationNumber': 0,
        'ticketNumber': null,
        'ticketIssueTime': null,
        'vendorCode': '11100',
        'vendorName': 'Booking.com',
        'paymentType': 'CREDIT_CARD',
        'paymentLabel': '"Visa3" ************0003',
        'type': 'HOTEL',
        'segments': [{
            'checkinDate': '2018-01-17T14:00',
            'checkoutDate': '2018-01-20T10:00',
            'hotelName': 'Rainbow Motel',
            'hotelChainCode': null,
            'starRating': 2,
            'vendorPhone': '15413821821',
            'location': {
                'locationCode': 'RDM',
                'locationName': 'Bend',
                'street1': '154 NE Franklin St',
                'street2': null,
                'cityCode': 'RDM',
                'cityName': 'Bend',
                'stateCode': 'OR',
                'stateName': 'Oregon',
                'countryCode': 'US',
                'countryName': 'United States',
                'postalCode': null
            },
            'numberOfGuests': 1,
            'breakfastIncluded': false,
            'averageRate': 55.0,
            'currency': 'USD',
            'roomType': 'Queen',
            'roomDescription': 'Queen Room  Free cancellation - Free WiFi'
        }]        
   }]
}

Back to Top

Example 4: Train and Car Service

A booking where the traveler takes a train, and then arranges a Limo Service to pick them up at the train station.

{
    'tripUuid': 'cb5438ad-c573-4d86-99ff-7f5a5d9bdd02',
    'revision': '1',
    'tripName': 'Oregon - FH',
    'user': {
        'externalUserId': 'batman',
        'externalSiteId': 'wayne',
        'siteName': 'Wayne Enterprises'
    },
    'tripCreationTime': '2017-11-14T11:14:59',
    'agencyName': 'The Enigma',
    'transactions': [{
        'transactionUuid': '7f5a5d9bdd02-c573-4d86-99ff-cb5438ad',
        'revision': '1',
        'transactionDate': '2017-12-15T14:56:09',
        'traveler': {
            'title': 'Mr',
            'firstName': 'Bruce',
            'middleInitial': 'Batman',
            'lastName': 'Wayne',
            'email': 'batman@deem.com',
            'primary': true,
            'phoneNumbers': '235-6723-567'
        },
        'prepaidAmount': '176.0',
        'payableLaterAmount': '0',
        'taxes': '0.0',
        'fees': '0.0',
        'taxesAndFees': '0.0',
        'currency': 'USD',
        'bookingStatus': 'COMPLETED',
        'inPolicy': false,
        'policyViolationReason': null,
        'policyViolationJustification': null,
        'confirmationNumber': '9713C1',
        'ticketNumber': null,
        'ticketIssueTime': null,
        'vendorCode': null,
        'vendorName': null,
        'paymentType': 'CREDIT_CARD',
        'paymentLabel': '"Visa3" ************0003',
        'parentTransaction': null,
        'type': 'TRAIN',
        'segments': [{
            'departureTime': '2018-02-07T21:39',
            'arrivalTime': '2018-02-08T19:51',
            'originStationCode': 'USOKJ',
            'originStationLocation': {
                'locationCode': 'USOKJ',
                'locationName': 'Jack London Square',
                'street1': null,
                'street2': null,
                'cityCode': null,
                'cityName': 'Oakland'
                'stateCode': 'CA',
                'stateName': 'California',
                'countryCode': 'US',
                'countryName': 'United States',
                'postalCode': '94607'
            },
            'destinationStationCode': 'USSEA',
            'destinationStationLocation': {
                'locationCode': 'USSEA',
                'locationName': 'King Street Station',
                'street1': null,
                'street2': null,
                'cityCode': 'USSEA',
                'cityName': 'San Francisco'
                'stateCode': 'CA',
                'stateName': 'California',
                'countryCode': 'US',
                'countryName': 'United States',
                'postalCode': '94107'
            },
            'legSequence': '1',
            'segmentSequence': '1',
            'serviceClass': 'COACH',
            'carrierCode': '2V',
            'carrierName': 'Amtrak',
            'trainNumber': '14'
        }, {
            'departureTime': '2018-02-13T09:50',
            'arrivalTime': '2018-02-14T08:35',
            'originStationCode': 'USSEA',
            'originStationLocation': {
                'locationCode': 'USSEA',
                'locationName': 'King Street Station',
                'street1': null,
                'street2': null,
                'cityCode': 'USSEA',
                'cityName': 'San Francisco'
                'stateCode': 'CA',
                'stateName': 'California',
                'countryCode': 'US',
                'countryName': 'United States',
                'postalCode': '94107'
            },
            'destinationStationCode': 'USOKJ',
            'destinationStationLocation': {
                'locationCode': 'USOKJ',
                'locationName': 'Jack London Square',
                'street1': null,
                'street2': null,
                'cityCode': null,
                'cityName': 'Oakland'
                'stateCode': 'CA',
                'stateName': 'California',
                'countryCode': 'US',
                'countryName': 'United States',
                'postalCode': '94607'
            },
            'legSequence': '2',
            'segmentSequence': '2',
            'serviceClass': 'COACH',
            'carrierCode': '2V',
            'carrierName': 'Amtrak',
            'trainNumber': '11'
        }]
    }, {
        'transactionUuid': '7f5a5d9b302-c573-4d86-99ff-cb5gf8ad',
        'revision': '1',
        'transactionDate': '2018-01-25T14:16',
        'traveler': {
            'title': 'Mr',
            'firstName': 'Bruce',
            'middleInitial': 'Batman',
            'lastName': 'Wayne',
            'email': 'batman@deem.com',
            'primary': true,
            'phoneNumbers': '235-6723-567'
        },
        'prepaidAmount': '0',
        'payableLaterAmount': '59.95',
        'taxes': '2.7',
        'fees': '0',
        'taxesAndFees': '2.7',
        'currency': 'USD',
        'bookingStatus': 'CONFIRMED',
        'inPolicy': true,
        'policyViolationReason': null,
        'policyViolationJustification': null,
        'confirmationNumber': '5269379A',
        'ticketNumber': null,
        'ticketIssueTime': null,
        'vendorCode': 'KLV',
        'vendorName': 'Kings Livery',
        'paymentType': 'UNKNOWN',
        'paymentLabel': '',
        'parentTransaction': null,
        'type': 'CAR_SERVICE',
        'segments': [{
            'pickupLocation': {
                'locationCode': 'USOKJ',
                'locationName': 'Jack London Square',
                'street1': null,
                'street2': null,
                'cityCode': null,
                'cityName': 'Oakland'
                'stateCode': 'CA',
                'stateName': 'California',
                'countryCode': 'US',
                'countryName': 'United States',
                'postalCode': '94607'
            },
            'dropoffLocation': {
                'locationCode': '',
                'locationName': '301 Howard Street',
                'street1': '301 Howard Street',
                'street2': null,
                'cityCode': '',
                'cityName': 'San Francisco',
                'stateCode': 'CA',
                'stateName': 'California',
                'countryCode': 'US',
                'countryName': 'United States',
                'postalCode': '94107'
            },
            'pickupTime': '2018-01-25T14:00',
            'dropoffTime': '2018-01-25T14:16',
            'vendorCode': 'KLV',
            'vendorName': 'Kings Livery',
            'vendorPhone': '800-555-1212',
            'carServiceType': 'CAR_SERVICE',
            'carType': 'SEDAN',
            'carClass': 'LUXURY'
        }]
   }]
}

Back to Top

REST Resources


This section lists all the resources that be accessed, all using the Http GET method, returning a single Trip or a collection of Trips. All the Resource URIs below are relative to https://api.deem.com/alliance, which points to the latest version of the API. More on API versioning below.

All REST resources are site-scoped. A site is a company set up in Deem that represents a customer or a subsidiary. If you are an Open Alliance Partner with multiple customers using the alliance, data from different customers cannot be retrieved in a single API call.

Get Trips for Site


The API resource that returns all Travel booking data across all users under a given site. Depending on the number of users making Travel bookings, this can get potentially large, even with pagination. Therefore, this always needs to be augmented with a time interval for which the data is requested.

Request

Method

Resource

Action

GET

/{version_number}/site/{site_id}/trip

Get all trips for all users for a specific site

Path Parameters

Parameter

Description

Required

version

The version of the API

Yes

site_id

External identifier of the user's site

Yes

Query Parameters

Parameter

Description

Format

Required?

Default

start_time

Starting time from which trips booked or modified will be returned

ISO 8601

Yes

N/A

end_time

End time till which trips booked or modified will be returned

ISO 8601 

No

Current time

start_index

Starting time from which trips booked or modified will be returned

Integer

No

0

page_size

End time till which trips booked or modified will be returned

Integer

No20

Headers

Header

Header type

Description

Format/Validation

Required

x-deem-tenant-id
AuthenticationID of the Open Alliance partner/tenantValid tenant id received from DeemYes
Accept
Response typeMedia type(s) acceptable for the response.

application/vnd.deem.openalliance +json

Yes

Sample request

curl -H "x-deem-tenant-id: acmepartner" \
     -H "Accept: application/vnd.deem.openalliance+json" \
     "https://api.deem.com/alliance/v1.3/site/wayne/trip/"

Back to Top

Get Trips for User


The API resource that returns all bookings owned by a given user under a given site. Even though this is a single user in a site, the response can get potentially large over a large period of time. Therefore, this always needs to be augmented with a time interval for which the data is requested. 

Request

Method

Resource

Action

GET

/{version_number}/site/{site_id}/user/{user_id}/trip

Get transactions for a specific user within a site

Path Parameters

Parameter

Description

Required

version

The version of the API

Yes

site_id

External identifier of the user's site/company

Yes

user_id

External identifier of the user

Yes

Query Parameters

Parameter

Description

Format

Required?

Default

start_time

Starting time from which trips booked or modified will be returned

ISO 8601

Yes

N/A

end_time

End time till which trips booked or modified will be returned

ISO 8601 

No

Current time

start_index

Starting time from which trips booked or modified will be returned

Integer

No

0

page_size

End time till which trips booked or modified will be returned

Integer

No20

Headers

Header

Header type

Description

Format/Validation

Required

x-deem-tenant-id
AuthenticationID of the Open Alliance partner/tenantValid tenant id received from DeemYes
Accept 
Response typeMedia type(s) acceptable for the response.

application/vnd.deem.openalliance +json

Yes

Sample request

curl -H "x-deem-tenant-id: acmepartners" \
     -H "Accept: application/vnd.deem.openalliance+json" \
     “https://api.deem.com/alliance/v1.3/site/wayne/user/batman/trip/

Back to Top

Get Trip by ID


The Get Trip API returns an exact trip owned by a user within a site. The user-site combination should be the correct one owning the trip. A requested trip id not owned by the passed in user or site will return a 400.

This can be also used to get all the revisions of a booking, unlike the othe collection APIs above that only result in the latest version of the booking. This can be achieved by sending true into the all_revisions query parameter, which is optional and defaulted to false if not present.

Request

Method

Resource

Action

GET

/version/{version_number}/site/{site_id}/user/{user_id}/trip/{trip_uuid}

Get the full itinerary for the give trip UUID

Path Parameters

Parameter

Description

Required

version

The version of the API

Yes

site_id

External identifier of the user's site/company

Yes

user_id

External identifier of the user

Yes

trip_uuid

The identifier for the trip. Passed in previously with the list of trips for a user.

Yes

Query Parameters

Parameter

Description

Format

Required?

Default

all_revisions

Flag indiicating if all revisions of a trip are desired or just the latest one

boolean

No

false

Headers

Header

Header type

Description

Format/Validation

Required

x-deem-tenant-id
AuthenticationID of the Open Alliance partner/tenantValid tenant id received from DeemYes
Accept 
Response typeMedia type(s) acceptable for the response.

application/vnd.deem.openalliance +json

Yes

Sample request

curl -H "x-deem-tenant-id: acmepartners" \
     -H "Accept: application/vnd.deem.openalliance+json" \
     “https://api.deem.com/alliance/v1.3/site/wayne/user/batman/trip/d45efe38-a719-40ad-bd54-67e67c1b3e21/"

Back to Top

Get Receipt for Trip


The Get Travel Receipt API returns a receipt (a PDF version of the Trip Confirmation page) for a given trip. The trip id is a UUID, and directly corresponds to a process id.

Request

Method

Resource

Action

GET

/{version_number}/site/{site_id}/user/{user_id}/trip/{trip_UUID}/receipt

Get a Deem receipt for the given trip

Path Parameters

Parameter

Description

Required

version

The version of the API

Yes

site_id

External identifier of the user's site/company

Yes

user_id

External identifier of the user

Yes

trip_uuid

The identifier for the trip. Passed in previously with the list of trips for a user.

Yes

Headers

Header

Header type

Description

Format/Validation

Required

x-deem-tenant-id
AuthenticationID of the Open Alliance partner/tenantValid tenant id received from DeemYes
Accept 
Response typeMedia type(s) acceptable for the response.

application/vnd.deem.openalliance +json

Yes

Sample request

curl -H "x-deem-tenant-id: acmepartners" \
     -H "Accept: application/vnd.deem.openalliance+json" \
     “https://api.deem.com/alliance/v1.3/site/wayne/user/robin/trip/d45efe38-a719-40ad-bd54-67e67c1b3e21/receipt/"

Response

Sample Response

HTTP/1.1 200, OK
Content-Type: application/pdf
The pdf binary file.

Back to Top

Get Version


The Get Version API returns the latest version of the API. Alternatively, it can also be used to find details about a specific version, including changelogs.

Request

Method

Resource

Action

GET

/{version_number}/version

Get details about a specific version

Path Parameters

Parameter

Description

Required

Headers

Header

Header type

Description

Format/Validation

Required

x-deem-tenant-id
AuthenticationID of the Open Alliance partner/tenantValid tenant id received from DeemYes
Accept 
Response typeMedia type(s) acceptable for the response.

application/vnd.deem.openalliance +json

Yes

Sample request

curl -H "x-deem-tenant-id: acmepartners" \
     -H "Accept: application/vnd.deem.openalliance+json" \
     “https://api.deem.com/alliance/v1.3/version/"

Response

Sample Response

HTTP/1.1 200, OK

{
	version: 1.3.2
	fieldsAdded: {
             hotelPhoneNumber,
             carRentalProvider
    }
}


Back to Top

Healthcheck


The health check endpoint can be used to check if the API is up and running. This returns a 200 OK without a response body. This does not mandatorily need a version. The version is actually ignored if passed.

Request

Method

Resource

Action

GET

/health

Check the health of the Deem Open API

Headers

Header

Header type

Description

Format/Validation

Required

x-deem-tenant-id
AuthenticationID of the Open Alliance partner/tenantValid tenant id received from DeemYes
Accept 
Response typeMedia type(s) acceptable for the response.

application/vnd.deem.openalliance+json

No

Sample request

curl -H "x-deem-tenant-id: acmepartners" \
     -H "Accept: application/vnd.deem.openalliance+json" \
     “https://api.deem.com/alliance/health/"

Response

Sample Response

HTTP/1.1 200, OK