Avinode Group Devportal

API connections

Accessing the APIs require an active API connection.

Permissions

Each API connection have a set of permissions that restricts which operations that can be called.

Company access

Each API connection is connected to one Avinode or SchedAero member’s company account. This is used to determine which company accounts’s data the API connection can access and potentially update. If the application needs to handle data for multiple companies, it needs to handle multiple API connections.

Setup

API connections are currently created and maintained by the Avinode and SchedAero support staff.

Application specific

If different kinds of applications are implemented, each application should be able to use separate API connections.

Automatic expiration

API connections that are not used for 60 days are automatically deactivated.

HTTP request headers

Several HTTP headers are required in every request to authenticate and provide other details about the call.

X-Avinode-Api Token

This required field is a unique token identifying the calling application.

The value for the API token should not be editable by the users of the application. It is preferably hard coded into the application.

IMPORTANT: The API token is used to identify the calling application. To prevent malicious callers from impersonating other software, the API token may not be shared with any external parties that is not directly involved in the project. Posting code examples, curl commands or similar to online forums or discussion groups where the API token is included is strictly forbidden.

X-Avinode-ApiToken example

X-Avinode-ApiToken: 229B8C9E-B3F2-4FA6-8BAE-71DF00943C0E

Authorization

This required field must contain the unique token that identifies the API connection that should be used for this call. When sending this is the HTTP header the token must be prefixed by the word ‘Bearer’ in the style of OAUTH tokens.

When using the Sandbox Swagger page, the ‘Bearer’ prefix is added automatically and should not be entered.

IMPORTANT: Since the authorization token is used to identify and authorize the caller, it must be treated with the same care as any username and password. It may not be shared with any external parties that is not directly involved in the project. Posting code examples, curl commands, or similar to online forums or discussion groups where the authorization token is included is strictly forbidden.

Authorization example

Authorization: Bearer mF_9.B5f-4.1JqMklj3498dfoFWrw-89qnavn.8234Klnj843jw09ksU

X-Avinode-SentTimestamp

This required field must contain a timestamp formatted as per ISO-8601. This is the time of creation for the message. The call will be rejected if this time is off by more than 5 minutes when the message is received. So it is important that the clock used by the application is up to date at all times.

X-Avinode-SentTimestamp example

X-Avinode-SentTimestamp: 2016-01-19T08:10:06.135Z

X-Avinode-ActAsAccount

This is an optional field. Some operations support sending a personal Avinode Marketplace account username. This means that this person will be registered as the user doing the action of the operation. For example when uploading an RFQ, the system will show the provided user as the user requesting the quote.

The documentation page for each operation handling this HTTP header will have information about this.

X-Avinode-ActAsAccount example

X-Avinode-ActAsAccount: johnsmith64

X-Avinode-Product

This should always be populated with the name and version of the calling application.

X-Avinode-Product example

X-Avinode-Product: Smart Flight Finder v2.3

HTTP status codes

The APIs use conventional HTTP response codes to indicate success or failure of each API call. In general, codes in the 2xx range indicate success, codes in the 4xx range indicate an error that resulted from the provided information (e.g. a required parameter was missing, an authorization failed, etc.), and codes in the 5xx range indicate an API server error.

Response codes

200
200

OK

201
201

Created. The server created one or more entities as a result of the call.

400
400

Bad Request. The request was somehow invalid (e.g. bad timestamp, etc.).

401
401

Unauthorized. No authentication or authentication invalid.

403
403

Authorization failure (e.g. no permissions, rate limit exceeded, etc.).

404
404

Not found. The application requested a resource that does not exist.

422
422

Entity invalid. Validation failure, relationship failure, or state failure.

500
500

Internal failure.

501
501

Not Implemented. The called operation is disabled, or not yet implemented.

503
503

Service too busy.

504
504

Service temporary unavailable.

HTTP response headers

Service Rate limits

The number of calls that one API connection can make per hour is limited. Every API response will include the following HTTP headers.

After the number of calls has reached the rate limit, all calls to that service will be denied with the HTTP 403 response code until the next hour starts.

X-Rate-Limit-Limit
X-Rate-Limit-Limit

The rate limit for the service that was invoked. This is the allowed number of calls per hour.

X-Rate-Limit-Remaining
X-Rate-Limit-Remaining

The remaining number of  calls allowed within the current hour.

X-Rate-Limit-Reset
X-Rate-Limit-Reset

The number of seconds until the call counter is reset (i.e. the next hour starts).

Internationalization

Dates and times are formatted according to ISO 8601.

Currency

Currency codes use the three letter code defined in ISO 4217. Price conversions are based Forex data updated daily from Xignite.

Country codes

Country codes use the two letter code defined in ISO 3166-1 alpha-2.

Province codes

Province codes use the format defined in ISO 3166-2. Each code consists of two parts, separated by a hyphen. The first part is the two letter country code and the second part is a up to three letter code specifying the region in that country. For example “US-FL” for Florida.

Sparse fields

For some operations, there is information available that will only be included in the operation output if it is requested when making the API call. This extra information is requested by specifying one or more values in the operation’s field[operation] URL parameter. The documentation page for each operation have information about the available sparse fields.

Ids

Unless specifically stated in this documentation, the format of any object’s identifier is unspecified and can change at any time. So an operation that currently returns an id that looks like “abc-12345678” may change to, for example, “1234-ABCD-5678-EF90”. So the application should not try to extract parts of the these ids for any reason. If the format of an id changes, the API operations using this id as input will continue to support previous formats.

The application should not display any API generated ids to the user, unless this documentation specifically states that the particular id can be displayed.

String handling

Data entered in string properties must conform to the following rules.

  • If a string contains multiple lines then new lines must either be sent as line feed (\n) or carriage return and line feed (\r\n).
  • If a string contains a backslash character (\) then it must be escaped with an additional backslash character (\\).
  • If a string contains a double quotation mark (") then this must be escaped with a backslash character (\").

Data returned in string properties should be display correctly to the users of the application, according to the rules above.

API additions and updates

Most additions and updates to the APIs will be backwards compatible. Any major changes impacting live applications will be communicated some time before the change is made, giving you ample time to make the necessary changes. This time is regulated in the API contracts. Information about additions and updates are listed on the Change log page.

New properties can, at any time, be added to an operations output. The application must be able to handle this without breaking.

Retry policys

If a call to the API fails for some reason, any retry policy should be sensibly implemented. This would most likely include concepts like exponential back-off, maximum number of retries etc. For some operations, retries are not allowed. The documentation page for each operation may have information about the recommended retry policy.

Automatic testing

No automatic tests are allowed to make calls to the API. This applies to all types of automatic testing like load tests, integration test suites etc. All logic generating calls to the API must be replaced by mockups when running automatic tests. This is true for both the live system and the sandbox environment.

API contracts

The contracts in place for each member or partner using the APIs regulates how the APIs can be used, and how the data returned by the APIs can be handeld. Paragraphs regulating the following can be included.

  • Which API related use cases the application can implement
  • How and for how long certain data returned by the APIs can be stored
  • How, and to whom, data returned by the APIs can be shared

Abuse

Calling any API operations in any repetitive or automated fashion for the purpose of harvesting information is strictly forbidden.

Implementation check list

All items on this check list must be true in order for an application to be allowed to call the live Avinode Marketplace environment.

  • The application only implements API call related use cases that are approved by Avinode or SchedAero.
  • The application does not store any data, returned by the APIs, that is not allowed to store.
  • The application does not share any data, returned by the APIs, that is not allowed to share.
  • The application’s API token (the token sent in the X-Avinode-ApiToken HTTP header) is hard coded into the application and not configurable by the users of the application.
  • The application always sends its name and version in the X-Avinode-Product HTTP header.
  • The application does not display API generated ids to the user, unless this documentation specifically states that the particular id can be displayed.
  • The application does not, for any reason, extract any parts of an API generated id.
  • The application handles Authentication Tokens with the appropriate level of security to avoid it from falling into the wrong hands.
  • The application escapes and handles string data according to the specified rules.
  • The application can handle that an operation suddenly returns properties that wasn’t returned at the time of implementation.
  • The application has sensible retry policies for failed calls to operations that allow retries.
  • Instances of the application built or deployed for development or testing purposes cannot call the live API servers or consume live webhook notifications.

Date

Date are formatted YYYY-MM-DD

2015-05-19

Time

Times are formatted HH:MM.

23:57

Timestamp

Timestamps are formatted YYYY-MM-DDThh:mm:ss.sssZ and are always UTC times.

2015-12-17T19:56:03.148Z

Empty legs

Notifications of this type are sent for empty legs matching any of the empty leg watches set up for the company. These events will trigger a notification.

  • A new empty leg is published in the Avinode Marketplace.
  • An empty leg, previously published in the Avinode Marketplace, is updated.
  • An empty leg is unpublished from the Avinode Marketplace.

After this notification has been consumed, the GET /emptylegs/{id} operation can be called to get the empty leg details. The GET /emptylegs/{id} page has more information on how to get empty leg details. The operation will return a HTTP 404 if the empty leg has been unpublished by the seller.

The application should always use the URL provided in the notification payload when getting the empty leg details.

Example of the payload of the notification

{
  "id":"el-123456789",
  "href":"https://services.avinode.com/api/emptylegs/el-123456789",
  "type":"emptylegs"
}

Trip messages

If the buyer subscribes to this notification category, the buyer will receive a notification each time a seller has sent some kind of communication to the buyer. Currently only one type of seller message notification exist, but in the future additional types may exist.

Notifications of this type are sent when:

  • A seller has submitted a quote.
  • A seller has declined an RFQ.
  • A seller has added a message to an RFQ.

After this notification has been consumed, the application can download the trip message information by calling the GET /tripmsgs/{id} operation.

The application should always use the URL provided in the notification payload when downloading the information.

Example of the payload of the notification

{
  "id": "asellermsg-12345678",
  "href": "https://sandbox.avinode.com/api/tripmsgs/asellermsg-12345678",
  "type": "tripmsgs"
}

RFQs

Notifications of this type are sent when:

  • A new RFQ has been created for the seller.
  • An existing RFQ has been updated with additional information.
  • An existing RFQ has been canceled by the buyer.

After this notification has been consumed, the application can download the RFQ information as described in the Seller download RFQ use case.

The application should always use the URL provided in the notification payload when downloading the RFQ.

Example of the payload of the notification

{
  "id": "arfq-12345678",
  "href": "https://sandbox.avinode.com/api/rfqs/arfq-12345678",
  "type": "rfqs"
}

Input

filter
filter

The filter input parameter can be used to send a string of text to the operation. The string of text must be at least 3 characters long. The operation will return airports where the string of text can be found in the airport’s name, city, country or any of the keywords associated with the airport. The airport information is in English but some keywords have been added to certain airports to enable lookup using native names etc. For example the keyword “москва” is associated with the Moscow airports in Russia and “münchen” is associated with the Munich airports in Germany.

maxDistance
maxDistance

The maxDistance parameter is specified in nautical miles (NM) and the latitude and longitude parameters in degrees (°).

If this parameter is not specified, the default value of 500 NM will be used.

 

latitude
latitude

Decimal form (e.g. -74.0608).

longitude
longitude

Decimal form (e.g. -74.0608).

heli
optional
heli
optional

The heli parameter specifies if the output should contain heliports. If this parameter is not specified, the heliports will be omitted from the output.

military
optional
military
optional

The military parameter specifies if the output should contain airports that are classified as military airports. If this parameter is not specified, the military airports will be included in the output.

page[number] and page[size]
optional
page[number] and page[size]
optional

By default the service returns the first 30 results. This can be changed by specifying the page[number] and page[size] input parameters. The returned pagination object holds some useful information.

  • totalCount – The total number of airports matching the input criteria.
  • pageNumber – The requested page. Use the page[number] input parameter to request a certain page. If no page number is specified the operation returns page 0, which is the first page.
  • batchSize – The requested page[size]. The default value is 30 and the max value is 100.
position
optional
position
optional

Requesting this will add information about the airport’s longitude and latitude.

classification
optional
classification
optional

Requesting this will return information about the airport classification in the airportType output property, and what kind of landing facility it is in the landingFacility output property.

Output

The results are returned in order of popularity. The most popular airport is returned at the top of the response. The popularity is based on usage data from the Avinode Marketplace.

When searching on Geo-location, it’s worth noting that the size of the search area set by the maxDistance parameter, might affect the top results more than just changing the Geo-location parameters.

airportType
airportType

This holds information about the airport classification. Valid values for the code property in airportType are CIVIL, MILITARY, JOINT, NON_STANDARD and UNKNOWN.

landingFacility
landingFacility

This holds information about what kind of landing facility this is. Valid values for the code property in landingFacility are AIRPORT, HELIPAD, SEAPLANE_BASE and UNKNOWN.

Definition

GET /airports/search

Input

id
id

The id input parameter accepts both the NumericId format (e.g. “aport-5948”) and the plain number format (e.g. “5948”). The preferred way is to use the NumericId format.

position
optional
position
optional

Requesting this will add information about the airport’s longitude and latitude.

Definition

GET /airport/{id}

Input

id
id

This is the id of the empty leg that the operation will get information for.

liftaoc
optional
liftaoc
optional

When requesting this, the result will also include information about the operator’s AOC.

sellerstats
optional
sellerstats
optional

When requesting this, the result will, if available, also include information about the seller’s response statistics.

typedetails
optional
typedetails
optional

When requesting this, the result will also include detailed information about the aircraft type.

categorydetails
optional
categorydetails
optional

When requesting this, the result will also include detailed information about the aircraft category.

typephotos
optional
typephotos
optional

When requesting this, the result will, if available, also include links to generic photos of the aircraft type.

tailphotos
optional
tailphotos
optional

When requesting this, the result will, if available, also include links to photos of the actual aircraft.

perfdetails
optional
perfdetails
optional

When requesting this, the result will also include information about the aircraft’s performance details.

taildetails
optional
taildetails
optional

When requesting this, the result will also include additional information about the aircraft.

amenities
optional
amenities
optional

When requesting this, the result will, if available, also include information about the aircraft’s amenities.

insurance
optional
insurance
optional

When requesting this, the result will, if available, also include insurance information for the aircraft.

homebase
optional
homebase
optional

When requesting this, the result will also include information about the aircraft’s homebase airport.

flighttime
optional
flighttime
optional

When requesting this, the result will also include information related to the flight time and distance of this empty leg.

Definition

GET /emptylegs/{id}

Output

Here is an example of the response from a successful call to this operation.

lift.aircraftCategory
lift.aircraftCategory

This is the category of the aircraft that this empty leg was published for.

lift.aircraftType
lift.aircraftType

This is the type of the aircraft that this empty leg was published for.

lift.aircraftTail
lift.aircraftTail

This is the tail number of the specific aircraft that this empty leg was published for.

lift.maxPax
lift.maxPax

This is the maximum number of passengers for the aircraft that this empty leg was published for.

lift.ownAircraft
lift.ownAircraft

This is true if the empty leg was published for an aircraft that is marketed by the company calling this operation.

price.price, price.currency
price.price, price.currency

This is the price the seller of this empty leg has entered. It should be considered a preliminary price.

price.convertedPrice, price.conversionCurrency
price.convertedPrice, price.conversionCurrency

This is the price converted to the preferred currency of the API connection calling this operation.

startAirport, endAirport
startAirport, endAirport

This is the start airport and the end airport for this empty leg.

startDate, endDate
startDate, endDate

In some cases the seller of the empty leg provides Avinode with their actual scheduled departure and arrival times of the flight. In other cases they provide a wider period of time that they consider to be the marketing window where this empty leg can be used. The startDate and endDate fields contain the times that the operator has provided. If the time span between startDate and endDate is close to what it would take to fly from startAirport to endAirport, then it is most likely the actual scheduled departure and arrival times. If the time span is significantly longer (e.g. double the flight time or more), then the startDate and endDate are probably the start and end of the empty leg’s marketing window. If the startDate and endDate refers to a marketing window, it is less likely that the empty leg can be utilized for a flight outside these times. If the startDate and endDate refers to actual scheduled departure and arrival times, then it is more likely that the seller can adjust the departure time to accommodate a flight close in time to the provided times.

brokered
brokered

This is true if the empty leg isn’t published by the the company marketing the aircraft in the Avinode Marketplace. Only the company that has a valid AOC for the aircraft or a company with a signed marketing agreement with the AOC holder can market the aircraft in the Avinode Marketplace. Buyer’s of brokered empty legs are recommended to preform the necessary steps to verify the validity of the empty leg.

sellerCompany
sellerCompany

This is the company that has published the empty leg in the Avinode Marketplace.

sellerVerified
sellerVerified

This is true if the seller has verified that this empty leg is available for charter.

ownEmptyLeg
ownEmptyLeg

This is true if the empty leg was published by the company calling this operation.

Response

{
  "meta": {
    "errors": [],
    "warnings": [],
    "infos": []
  },
  "data": {
    "id": "el-123456",
    "href": "https://sandbox.avinode.com/api/emptylegs/el-123456",
    "type": "emptylegs",
    "lift": {
      "id": "91D2C1E0-E8FC-47AB-84C5-9778BDF44CBC",
      "links": {
        "emptylegs": [
          {
            "id": "el-123456",
            "href": "https://sandbox.avinode.com/api/emptylegs/el-123456",
            "type": "emptylegs"
          }
        ]
      },
      "aircraftCategory": "Ultra long range",
      "aircraftType": "Global Express",
      "aircraftTail": "SE-123A",
      "maxPax": 12,
      "ownAircraft": true
    },
    "price": {
      "currency": "EUR",
      "price": 40000,
      "conversionCurrency": "USD",
      "convertedPrice": 44128
    },
    "startAirport": {
      "id": "aport-6310",
      "name": "DUBAI INTL",
      "city": "DUBAI",
      "country": {
        "code": "AE",
        "name": "United Arab Emirates"
      },
      "icao": "OMDB",
      "iata": "DXB"
    },
    "endAirport": {
      "id": "aport-3915",
      "name": "INDIRA GANDHI INTL",
      "city": "DELHI (NEW DELHI)",
      "country": {
        "code": "IN",
        "name": "India"
      },
      "icao": "VIDP",
      "iata": "DEL"
    },
    "startDate": {
      "dateTimeUTC": "2016-10-24T06:00:00Z",
      "dateTimeLocal": "2016-10-24T10:00:00+04:00"
    },
    "endDate": {
      "dateTimeUTC": "2016-10-24T15:30:00Z",
      "dateTimeLocal": "2016-10-24T21:00:00+05:30"
    },
    "brokered": false,
    "sellerCompany": {
      "id": "16D90630-7344-4A73-9689-8A10CE5E6ABC",
      "displayName": "Globex Air Charter"
    },
    "sellerVerified": true,
    "ownEmptyLeg": true
  }
}

Input

uniqueName
uniqueName

A name for this watch. All watches set up for one member company must have unique names.

 

active
active

If this watch should trigger notifications, or not.

watchedSegments
watchedSegments

A list of segments for this watch. Se Watched segments section below for more information about possible values for this property.

watchedSegments.start, watchedSegments.end
watchedSegments.start, watchedSegments.end

The start and end airport or region for this segment.

 

priced
priced

If the watch should only consider empty legs with a price.

verified
verified

If the watch should only consider empty legs with that have been verified for charter.

lifts, lifts.aircraftCategory
lifts, lifts.aircraftCategory

A list of fixed wing aircraft categories. This criterion is considered met if any of the specified categories is a match to the lift of the empty leg. This property should be omitted if the watch should not filter on aircraft category.

daysOut
optional
daysOut
optional

If this is specified, then the watch will only consider empty legs that are within this number of days into the future. If an empty leg is created and the departure time is 10 days into the future, a watch with daysOut = 7 will not immediately trigger a notification. However, three days later, when the empty leg is within the daysOut span, the notification will be triggered.

Watched segments

This is the list of segments for this watch. At least one segment should be specified. Each segment has a start and an end. Both the start and end can be specified by defining either an airport or a region.

airport
airport

Specifying an airport should be done by sending one airport code. The recommended code to send is the ICAO code. If the application calling this operation does not have access to the ICAO code then the IATA or FAA code should be sent.

 

icaoPrefix
icaoPrefix

A region can be specified by a valid ICAO prefix. For example “M” for Central America or “EG” for United Kingdom.

countryCode
countryCode

A region can be specified by a country code.

 

provinceCode
provinceCode

A region can be specified by a province code. Currently only US states and Canadian provinces are supported.

Definition

POST /emptylegs/watches

Response

The calling application should make sure to store the returned data.id. This id must be used when updating or inactivating this watch.

{
  "uniqueName": "Heathrow to Italy or Spain",
  "active": true,
  "watchedSegments": [
    {
      "start": {
        "airport": {
          "icao": "EGLL"
        }
      },
      "end": {
        "countryCode": "IT"
      }
    },
    {
      "start": {
        "airport": {
          "icao": "EGLL"
        }
      },
      "end": {
        "countryCode": "ES"
      }
    }
  ],
  "priced": true,
  "verified": true,
  "lifts": [
    {
      "aircraftCategory": "Heavy Jet"
    },
    {
      "aircraftCategory": "Ultra long range"
    }
  ],
  "daysOut": 7
}

Input

startAirport
startAirport
endAirport
endAirport
date
date
numberOfDaysFlexibility
numberOfDaysFlexibility
requiredPartnerships
requiredPartnerships
passengers
passengers

Definition

POST /emptylegs/search

Input example

Here is an example of a JSON payload.

{
  "startAirport": {
    "icao": "UKBB",
    "iata": "",
    "faa": ""
  },
  "endAirport": {
    "icao": "LEBL",
    "iata": "",
    "faa": ""
  },
  "date": "2018-10-20",
  "numberOfDaysFlexibility": "0",
  "requiredPartnerships": [],
  "passengers": "1"
}

Output

results.id
results.id
results.href
results.href
results.type
results.type
results.startAirport
results.startAirport
results.endAirport
results.endAirport
results.startDate
results.startDate
results.endDate
results.endDate
results.brokered
results.brokered
results.sellerVerified
results.sellerVerified
results.ownEmptyLeg
results.ownEmptyLeg

Response

Here is an example of the response from a successful call to this operation.

{
  "meta": {
    "errors": [],
    "warnings": [],
    "infos": []
  },
  "data": {
    "id": "asearch-27390358",
    "href": "https://sandbox.avinode.com/api/searches/asearch-27390358",
    "type": "searches",
    "results": [
      {
        "id": "el-123456",
        "href": "https://sandbox.avinode.com/api/emptylegs/el-123456",
        "type": "emptylegs",
        "lift": {
          "id": "el-123456",
          "href": "https://sandbox.avinode.com/api/emptylegs/el-123456",
          "type": "emptylegs",
          "links": {
            "emptylegs": [
              {
                "id": "el-123456",
                "href": "https://sandbox.avinode.com/api/emptylegs/el-123456",
                "type": "emptylegs"
              }
            ]
          },
          "aircraftCategory": "Light jet",
          "aircraftType": "Citation CJ4",
          "aircraftSuperType": "Citation CJ4",
          "maxPax": 9,
          "ownAircraft": false
        },
        "startAirport": {
          "id": "aport-659",
          "href": "https://sandbox.avinode.com/api/airports/aport-659",
          "type": "airports",
          "name": "WEVELGEM",
          "city": "KORTRIJK WEVELGEM",
          "country": {
            "code": "BE",
            "name": "Belgium"
          },
          "icao": "EBKT",
          "iata": "KJK"
        },
        "endAirport": {
          "id": "aport-5872",
          "href": "https://sandbox.avinode.com/api/airports/aport-5872",
          "type": "airports",
          "name": "MALAGA",
          "city": "MALAGA",
          "country": {
            "code": "ES",
            "name": "Spain"
          },
          "icao": "LEMG",
          "iata": "AGP"
        },
        "startDate": {
          "dateTimeUTC": "2018-10-20T06:10:00Z",
          "dateTimeLocal": "2018-10-20T07:10:00+01:00"
        },
        "endDate": {
          "dateTimeUTC": "2018-10-20T09:00:00Z",
          "dateTimeLocal": "2018-10-20T10:00:00+01:00"
        },
        "brokered": false,
        "sellerVerified": true,
        "ownEmptyLeg": false
      }
    ]
  }
}

Input

searchId
searchId

This is the search id and should be populated with the value found in the result from the POST /searches operation (e.g. asearch-12345678).

sellerQuoteIds
sellerQuoteIds

This OR the inquiryLift property should be specified. This should be used if the end-client requests an aircraft. This is a set of one or more ids, specifying the options selected by the end-client. These ids can be found in the result from the POST /searches operation (e.g. asearchhit-912345678).

inquiryLift, inquiryLift.aircraftType, inquiryLift.aircraftCategory, priceExpectation, leadCurrency
inquiryLift, inquiryLift.aircraftType, inquiryLift.aircraftCategory, priceExpectation, leadCurrency

This OR the sellerQuoteIds property should be specified. This should be used if the end-client requests an aircraft type or aircraft category. The priceExpectation property should contain the price that was presented to the end-client for this option. This price should be in the currency specified in the leadCurrency property.

leadAddress
leadAddress

This is the address information for the end-client.

leadAddress.countrySelection.selectedValue
leadAddress.countrySelection.selectedValue

This is the country of the end-clients address and should be specified by sending the two letter country code (ISO 3166-1 alpha-2).

leadContactInfo
leadContactInfo

This is the contact information for the end-client.

leadMessage
leadMessage

This is a text message that the end-client has specified.

leadLocale
leadLocale

This is a preferred locale of the end-client.

campaignIdentifier
campaignIdentifier

This property can be used for tracking reasons if, for example, the lead was created in relation to a marketing campaign.

clientIdentifier
clientIdentifier

This value is created by the application calling the operation and should identify the specific lead. It must be unique for each created lead. If the operation is called multiple times with the same clientIdentifier, only the first call will create a lead. All other calls will simply return the same data that the first call returned.

Output

If the lead was created for one or more aircraft (i.e. not type or category), the details of the sellers marketing the aircraft is returned. Note that this information should not be displayed to the end-client. It is only intended to be stored in the applications back-end, and made available to the users of the company owning the application.

Abuse

Creating leads in any repetitive or automated fashion to collect information is not allowed.

Definition

POST /leads

Input example 1

In the first example, the end-client has selected two aircraft options from the search result returned by the POST /searches operation

{
  "searchId": "asearch-12345678",
  "sellerQuoteIds": [
    "asearchhit-912345678",
    "asearchhit-912345699"
  ],
  "leadAddress": {
    "countrySelection": {
      "searchValue": "US"
    },
    "description": "Work",
    "street": "123 Main Street",
    "street2": "Suite 1234",
    "postCode": "12345",
    "city": "Seattle"
  },
  "leadContactInfo": {
    "name": "John Smith Jr",
    "title": "Dr",
    "url": "http://www.smithandsons.test",
    "emailAddresses": [
      {
        "type": "Work",
        "emailAddress": "john@smithandsons.test"
      }
    ],
    "phoneNumbers": [
      {
        "type": "Work",
        "phoneNumber": "+123456789"
      }
    ]
  },
  "leadCurrency": "USD",
  "leadMessage": "I want to bring my dog.",
  "leadLocale": "en",
  "campaignIdentifier": "Super Bowl",
  "clientIdentifier": "lead83248"
}

Input example 2

In the second example, the end-client was presented with options on a aircraft category level and wants to create a booking request for a light jet.

{
  "searchId": "asearch-12345678",
  "inquiryLift": [
    {
      "aircraftCategory": "Light jet",
      "priceExpectation": 8450
    }
  ],
  "leadAddress": {
    "countrySelection": {
      "searchValue": "US"
    },
    "description": "Work",
    "street": "123 Main Street",
    "street2": "Suite 1234",
    "postCode": "12345",
    "city": "Seattle"
  },
  "leadContactInfo": {
    "name": "John Smith Jr",
    "title": "Dr",
    "url": "http://www.smithandsons.test",
    "emailAddresses": [
      {
        "type": "Work",
        "emailAddress": "john@smithandsons.test"
      }
    ],
    "phoneNumbers": [
      {
        "type": "Work",
        "phoneNumber": "+123456789"
      }
    ]
  },
  "leadCurrency": "USD",
  "leadMessage": "I want to bring my dog.",
  "leadLocale": "en",
  "campaignIdentifier": "Super Bowl",
  "clientIdentifier": "lead83248"
}

Input

id
id

This is the id of the quote that the operation will get information for.

liftaoc
optional
liftaoc
optional

When requesting this, the result will also include information about the operator’s AOC.

sellerstats
optional
sellerstats
optional

When requesting this, the result will, if available, also include information about the seller’s response statistics.

typedetails
optional
typedetails
optional

When requesting this, the result will also include detailed information about the aircraft type.

categorydetails
optional
categorydetails
optional

When requesting this, the result will also include detailed information about the aircraft category.

typephotos
optional
typephotos
optional

When requesting this, the result will, if available, also include links to generic photos of the aircraft type.

tailphotos
optional
tailphotos
optional

When requesting this, the result will, if available, also include links to photos of the actual aircraft.

perfdetails
optional
perfdetails
optional

When requesting this, the result will also include information about the aircraft’s performance details.

taildetails
optional
taildetails
optional

When requesting this, the result will also include additional information about the aircraft.

amenities
optional
amenities
optional

When requesting this, the result will, if available, also include information about the aircraft’s amenities.

insurance
optional
insurance
optional

When requesting this, the result will, if available, also include insurance information for the aircraft.

Definition

GET /quotes/{id}

Output

Here is an example of the response from the operation from a successful call. This is an example of a quote created by Avinode, on behalf of Globex Air Charter, for their Gulfstream N12345. The quote was originally presented to a buyer, as a part of a search result, when the buyer was looking for a suitable aircraft for a trip from London to Paris.

Output

createdOn
createdOn

The time when this quote was created.

sellerCompany
sellerCompany

Information about the company marketing the aircraft this quote was created for.

sellerPrice.price, sellerPrice.currency
sellerPrice.price, sellerPrice.currency

The total price for the offer in this quote.

sellerPrice.convertedPrice, sellerPrice.conversionCurrency
sellerPrice.convertedPrice, sellerPrice.conversionCurrency

This is the price converted to the preferred currency of the API connection calling this operation.

sellerMessage
sellerMessage

Any message the seller has entered for this quote.

avinodeGenerated
avinodeGenerated

This is true if this quote was generated by Avinode on behalf of the seller.

reservable
reservable

This is true if the seller guarantees that the offer in this quote is available at this price.

lift.aircraftCategory, lift.aircraftType, lift.aircraftTail
lift.aircraftCategory, lift.aircraftType, lift.aircraftTail

This is the lift that is offered in this quote. At least one of these properties will be populated.

  • If all three are populated, the offered lift is the aircraft specified in the aircraftTail property. The aircraftType and aircraftCategory properties then contains information about that aircraft’s type and category.
  • If only the aircraftTail property is specified, then this aircraft is the offered lift.
  • If only the aircraftType or aircraftCategory property is specified, then the seller is not offering any specific aircraft. The seller is then offering a not yet specified aircraft of that type or category.
lift.maxPax
lift.maxPax

This is the maximum number of passengers for the offered lift.

lift.ownAircraft
lift.ownAircraft

This is true if the offered lift is marketed by the company calling this operation.

segments
segments

This is the itinerary for the trip offered in this quote. It contains a list of segments (aka legs). It may or may not include information about positioning flights.

segment.startAirport, segment.endAirport
segment.startAirport, segment.endAirport

This is the start airport and the end airport for the segment. The available airport codes for the airport is returned. If no airport codes are returned, the searchValue property contains free text information about the segment’s start or end point. This can happen if the offer in the quote is for a helicopter trip.

segment.departureDateTime, segment.arrivalDateTime
segment.departureDateTime, segment.arrivalDateTime

This is the departure time from the start airport and the arrival time at the end airport. At least one of these will always be populated.

  • At least one of dateTimeUTC or dateTimeLocal will be populated. If dateTimeLocal is populated, then this it is the local time for the airport in question.
  • If the calculated property is true, this means that this time was calculated based on some other time in the itinerary combined with information about the lift’s performance details (i.e. taxi times, cruise speed etc.).
segment.blockMinutes
segment.blockMinutes

This is the number of minutes for this segment, including taxi time.

segment.flightMinutes
segment.flightMinutes

This is the number actual in air flight minutes for this segment.

segment.fuelMinutes
segment.fuelMinutes

This is the number of minutes the aircraft is not moving during a fuel stop.

segment.paxCount
segment.paxCount

The number of passengers for this segment. This can be zero if the quote is for a cargo trip or if it is not yet specified how many passengers there will be on this segment.

segment.paxSegment
segment.paxSegment

This is true if the segment is one of the business segments of this trip.

segment.distanceNM
segment.distanceNM

The distance between the start airport and the end airport in nautical miles.

segment.fuelStopCount
segment.fuelStopCount

This is the number of fuel stops estimated for this segment.

Output example

{
  "meta": {
    "errors": [],
    "warnings": [],
    "infos": []
  },
  "data": {
    "id": "aquote-78978978",
    "href": "https://sandbox.avinode.com/api/quotes/aquote-78978978",
    "type": "quotes",
    "createdOn": "2016-08-09T11:17:21Z",
    "sellerCompany": {
      "id": "456B0E06-BCDF-4CC0-AFD7-1F3F8ECAABCD",
      "displayName": "Globex Air Charter"
    },
    "sellerPrice": {
      "currency": "EUR",
      "price": 14400,
      "conversionCurrency": "EUR",
      "convertedPrice": 14400
    },
    "sellerMessage": "",
    "avinodeGenerated": true,
    "reservable": false,
    "lift": {
      "id": "FFACED64-ABCD-4292-BCAB-32B102EDD9AB",
      "aircraftCategory": "Ultra long range",
      "aircraftType": "Gulfstream G-V",
      "aircraftTail": "N12345",
      "maxPax": 9,
      "ownAircraft": true
    },
    "segments": [
      {
        "startAirport": {
          "id": "aport-5955",
          "name": "LANDVETTER",
          "city": "GOTEBORG",
          "country": {
            "code": "SE",
            "name": "Sweden"
          },
          "icao": "ESGG",
          "iata": "GOT"
        },
        "endAirport": {
          "id": "aport-6401",
          "name": "LUTON",
          "city": "LONDON (LUTON)",
          "country": {
            "code": "GB",
            "name": "United Kingdom"
          },
          "icao": "EGGW",
          "iata": "LTN"
        },
        "departureDateTime": {
          "dateTimeUTC": "2016-08-17T05:55:00Z",
          "dateTimeLocal": "2016-08-17T07:55:00+02:00",
          "calculated": true
        },
        "arrivalDateTime": {
          "dateTimeUTC": "2016-08-17T07:30:00Z",
          "dateTimeLocal": "2016-08-17T08:30:00+01:00",
          "calculated": true
        },
        "blockMinutes": 95,
        "flightMinutes": 85,
        "fuelMinutes": 0,
        "paxCount": 0,
        "paxSegment": false,
        "distanceNM": 602,
        "fuelStopCount": 0
      },
      {
        "startAirport": {
          "id": "aport-6401",
          "name": "LUTON",
          "city": "LONDON (LUTON)",
          "country": {
            "code": "GB",
            "name": "United Kingdom"
          },
          "icao": "EGGW",
          "iata": "LTN"
        },
        "endAirport": {
          "id": "aport-3378",
          "name": "LE BOURGET",
          "city": "PARIS",
          "country": {
            "code": "FR",
            "name": "France"
          },
          "icao": "LFPB",
          "iata": "LBG"
        },
        "departureDateTime": {
          "dateTimeUTC": "2016-08-17T08:00:00Z",
          "dateTimeLocal": "2016-08-17T09:00:00+01:00",
          "calculated": false
        },
        "arrivalDateTime": {
          "dateTimeUTC": "2016-08-17T08:40:00Z",
          "dateTimeLocal": "2016-08-17T10:40:00+02:00",
          "calculated": true
        },
        "blockMinutes": 40,
        "flightMinutes": 30,
        "fuelMinutes": 0,
        "paxCount": 2,
        "paxSegment": true,
        "distanceNM": 207,
        "fuelStopCount": 0
      },
      {
        "startAirport": {
          "id": "aport-3378",
          "name": "LE BOURGET",
          "city": "PARIS",
          "country": {
            "code": "FR",
            "name": "France"
          },
          "icao": "LFPB",
          "iata": "LBG"
        },
        "endAirport": {
          "id": "aport-5955",
          "name": "LANDVETTER",
          "city": "GOTEBORG",
          "country": {
            "code": "SE",
            "name": "Sweden"
          },
          "icao": "ESGG",
          "iata": "GOT"
        },
        "departureDateTime": {
          "dateTimeUTC": "2016-08-17T09:10:00Z",
          "dateTimeLocal": "2016-08-17T11:10:00+02:00",
          "calculated": true
        },
        "arrivalDateTime": {
          "dateTimeUTC": "2016-08-17T10:55:00Z",
          "dateTimeLocal": "2016-08-17T12:55:00+02:00",
          "calculated": true
        },
        "blockMinutes": 105,
        "flightMinutes": 95,
        "fuelMinutes": 0,
        "paxCount": 0,
        "paxSegment": false,
        "distanceNM": 679,
        "fuelStopCount": 0
      }
    ]
  }
}

Input

id
id

This is the id of the RFQ that the operation will get information for.

liftaoc
optional
liftaoc
optional

When requesting this, the result will also include information about the operator’s AOC.

sellerstats
optional
sellerstats
optional

When requesting this, the result will, if available, also include information about the seller’s response statistics.

typedetails
optional
typedetails
optional

When requesting this, the result will also include detailed information about the aircraft type.

categorydetails
optional
categorydetails
optional

When requesting this, the result will also include detailed information about the aircraft category.

typephotos
optional
typephotos
optional

When requesting this, the result will, if available, also include links to generic photos of the aircraft type.

tailphotos
optional
tailphotos
optional

When requesting this, the result will, if available, also include links to photos of the actual aircraft.

perfdetails
optional
perfdetails
optional

When requesting this, the result will also include information about the aircraft’s performance details.

taildetails
taildetails

When requesting this, the result will also include additional information about the aircraft.

amenities
optional
amenities
optional

When requesting this, the result will, if available, also include information about the aircraft’s amenities.

insurance
optional
insurance
optional

When requesting this, the result will, if available, also include insurance information for the aircraft.

homebase
optional
homebase
optional

When requesting this, the result will also include information about the aircraft’s homebase airport.

office
optional
office
optional

Requesting this will add information about the buyer’s primary office to the operation output.

safety
optional
safety
optional

Requesting this will add information about the operator’s safety ratings.

aviquote
optional
aviquote
optional

Requesting this will add information about the quote that Avinode generated on behalf of the seller for this RFQ.

buyermessages
optional
buyermessages
optional

Requesting this will add information on all buyer messages. (see second output example below)

Definition

GET /rfqs/{id}

Output

Here is an example of the response from a successful call to this operation. In this example the broker John Smith at Acme Charter Broker has requested quotes from Globex Air Charter, for a round trip from ESSD to ESGG and back. The buyer has requested a quote for Globex Air Charter’s Gulfstream N12345 and also for an empty leg that Globex Air Charter has posted for their Challenger N54321.

links
links

This is a list of links to other resources related to this RFQ.

 

links.tripmsgs
links.tripmsgs

These are messages added by the buyer or seller. The application can download them by calling the GET /tripmsgs/{id} operation.

actions
actions

This is a list of actions that can be performed on this RFQ by making API calls to the specified actions.

actions.submitQuote
actions.submitQuote

This is the action that should be used to upload quotes that aren’t direct replies to any of the lift requested by the buyer.

actions.decline
actions.decline

This is the action that should be used to decline the entire RFQ.

createdOn
createdOn

The time when this RFQ was created.

buyerCompany
buyerCompany

Information about the company requesting quotes for this trip.

buyerAccount
buyerAccount

Information about the person requesting quotes for this trip.

sellerCompany
sellerCompany

Information about the company that this RFQ was sent to.

sellerLift
sellerLift

The response can contain one or more sellerLift. Each sellerLift represents what lift the buyer has asked to get quotes for.

sellerLift.links
sellerLift.links

This is a list of links to other resources related to this sellerLift.

sellerLift.links.quotes
sellerLift.links.quotes

Any quotes associated with this sellerLift. The application can download these quotes by calling the GET /quotes/{id} operation.

sellerLift.links.emptylegs
sellerLift.links.emptylegs

This is a list of empty legs associated with the sellerLift. This exists if the buyer has requested an empty leg. The application can download these empty legs by calling the GET /emptylegs/{id} operation.

sellerLift.actions
sellerLift.actions

This is a list of actions that can be performed for this specific sellerLift.

sellerLift.actions.submitQuote
sellerLift.actions.submitQuote

This is the action that should be used to upload quotes that are direct replies to one of the sellerLift requested by the buyer.

sellerLift.actions.decline
sellerLift.actions.decline

This is the action that should be used to decline a specific sellerLift requested by the buyer.

sellerLift.aircraftCategory, sellerLift.aircraftType, sellerLift.aircraftTail
sellerLift.aircraftCategory, sellerLift.aircraftType, sellerLift.aircraftTail

This is the lift that the buyer has specifically requested a quote for. At least one of these properties will be populated.

  • If all three are populated, the buyer has requested a quote for the aircraft specified in the aircraftTail property. The aircraftType and aircraftCategory properties then contains information about that aircraft’s type and category.
  • If only the aircraftTail property is specified, then the buyer has requested a quote for that aircraft.
  • If only the aircraftType or aircraftCategory property is specified, then the buyer has not requested any specific aircraft. The buyer is then asking for quotes for any of the seller’s aircraft of that type or category.
sellerLift.avinodeQuote
sellerLift.avinodeQuote

If the query parameter aviquote was requested, this property will contain additional information about the quote that Avinode generated on behalf of the seller for this RFQ. For exampel the cost for positioning legs required to do this flight.

sellerLift.avinodeQuote.segments
sellerLift.avinodeQuote.segments

This segments section is a more detailed itinerary for the trip the buyer is requesting quotes for. It contains a list of segments (aka legs), including any positioning legs required to do the requested flight.

sellerLift.sourcingDisplayStatus, sellerLift.sourcingStatus
sellerLift.sourcingDisplayStatus, sellerLift.sourcingStatus

This will tell the status of the quote request.

  • Declined = 0
  • Unanswered = 1
  • Accepted = 2
  • Canceled = 3
segments
segments

This is the itinerary for the trip the buyer is requesting quotes for. It contains a list of segments (aka legs).

segments.startAirport, segments.endAirport
segments.startAirport, segments.endAirport

This is the start airport and the end airport for the segment. The available airport codes for the airport is returned. If no airport codes are returned, the searchValue property contains free text information about the segment’s start or end point. This can happen if the RFQ is a request for a helicopter trip.

segments.dateTime
segments.dateTime

This is either the departure time from the start airport or the arrival time at the end airport. If the segments.dateTime.local property is false, then the specified time is an UTC time. Otherwise, it is the local time of the airport that the time is specified for.

segments.paxCount
segments.paxCount

The number of passengers the buyer has indicated for this segment. This can be zero if the RFQ is for a cargo trip or if the buyer not yet knows how many passengers there will be on this segment.

segments.paxSegment
segments.paxSegment

This is true if the segment is one of the business segments of this trip.

buyerMessages
optional
buyerMessages
optional

All messages from the buyer for this trip.

buyerMessages.messageType
optional
buyerMessages.messageType
optional

Message types can be:

  • REQUEST
  • CHAT
  • CANCELED
buyerMessages.cancelReason
optional
buyerMessages.cancelReason
optional

When a buyer cancels a trip they can provide a reason by selecting from the following options:

  • “Canceled by client”
  • “Change in trip details”
  • “Booked with other operator”
  • Other (Free text option)
tripId
tripId

This is the id of the requested trip. One trip can contain many lifts. This is the same as Marketplace TripID, visible to users in Avinode Trips Selling/Buying pages.

canceled
canceled

If the trip has been canceled by the requester, this property will be set to true.

Output example

{
  "meta": {
    "errors": [],
    "warnings": [],
    "infos": []
  },
  "data": [
    {
      "id": "arfq-1000000009",
      "href": "https://sandbox.avinode.com/api/rfqs/arfq-1000000009",
      "type": "rfqs",
      "links": {
        "tripmsgs": [
          {
            "id": "abuyermsg-1000000010",
            "href": "https://sandbox.avinode.com/api/tripmsgs/abuyermsg-1000000010",
            "type": "tripmsgs"
          }
        ]
      },
      "actions": {
        "searchInAvinode": {
          "type": "searchInAvinode",
          "description": "Start a search in Avinode",
          "httpMethod": "GET",
          "href": "https://sandbox.avinode.com/marketplace/mvc/search/load/arfq-1000000009?source=api"
        },
        "submitQuote": {
          "type": "submitQuote",
          "description": "Submit a quote",
          "httpMethod": "POST",
          "href": "https://sandbox.avinode.com/api/tripmsgs/arfq-1000000009/submitQuote"
        },
        "decline": {
          "type": "decline",
          "description": "Decline",
          "httpMethod": "POST",
          "href": "https://sandbox.avinode.com/api/tripmsgs/arfq-1000000009/decline"
        },
        "viewInAvinode": {
          "type": "viewInAvinode",
          "description": "View in Avinode",
          "httpMethod": "GET",
          "href": "https://sandbox.avinode.com/marketplace/mvc/trips/selling/rfq?source=api&rfq=arfq-1000000009"
        }
      },
      "createdOn": "2018-10-02T09:54:18Z",
      "buyerCompany": {
        "id": "F2341E00-D226-403C-8805-0A43F18E95F0",
        "displayName": "Acme Charter Broker",
        "contactInfo": {
          "emails": [
            "hq@acb.test"
          ],
          "phone": "+44123456789",
          "mobilePhone": "+44987654321",
          "url": "www.acb.test",
          "office": "Acme Charter Broker",
          "address": "221B Baker Street\n12345 London\nUnited Kingdom",
          "detailedAddress": {
            "street": "221B Baker Street",
            "postBox": "",
            "postCode": "12345",
            "city": "London",
            "country": {
              "code": "UK",
              "name": "United Kingdom"
            }
          }
        }
      },
      "buyerAccount": {
        "id": "3F530A28-355F-48E9-854C-F9455C1760DF",
        "displayName": "John Smith",
        "contactInfo": {
          "emails": [
            "john.smith@acb.test"
          ],
          "phone": "+44123456789",
          "mobilePhone": "+44987654321",
        },
        "preferredCurrency": "EUR"
      },
      "sellerCompany": {
        "id": "EBCEE19F-6A31-46FE-9847-4972F57460CE",
        "displayName": "Globex Air Charter",
        "contactInfo": {
          "emails": [
            "info@globex.test"
          ],
          "phone": "+1123123123",
          "mobilePhone": "+1123123123",
          "url": "www.globex.test",
          "office": "Globex Air Charter",
          "address": "Box#1234\n12345 TestCity\nMalta",
          "detailedAddress": {
            "street": "TestStreet 123",
            "postBox": "Box#1234",
            "postCode": "12345",
            "city": "TestCity",
            "country": {
              "code": "MT",
              "name": "Malta"
            }
          }
        }
      },
      "sellerLift": [
        {
          "id": "asellerlift-42134678",
          "links": {
            "quotes": [
              {
                "id": "aquote-1000000014",
                "href": "https://sandbox.avinode.com/api/quotes/aquote-1000000014",
                "type": "quotes"
              }
            ]
          },
          "actions": {
            "submitQuote": {
              "type": "submitQuote",
              "description": "Submit a quote",
              "httpMethod": "POST",
              "href": "https://sandbox.avinode.com/api/tripmsgs/asellerlift-42134678/submitQuote"
            },
            "decline": {
              "type": "decline",
              "description": "Decline",
              "httpMethod": "POST",
              "href": "https://sandbox.avinode.com/api/tripmsgs/asellerlift-42134678/decline"
            }
          },
          "aircraftCategory": "Ultra long range",
          "aircraftType": "Global Express",
          "aircraftSuperType": "Global Express/XRS",
          "aircraftTail": "SBY-658ZK",
          "maxPax": 12,
          "ownAircraft": true,
          "suggestedByAvinode": false,
          "sourcingDisplayStatus": "Unanswered",
          "sourcingStatus": 1
        }
      ],
      "segments": [
        {
          "startAirport": {
            "selectedValue": 5948,
            "searchValue": "ESSD",
            "icao": "ESSD",
            "iata": "BLE"
          },
          "endAirport": {
            "selectedValue": 5955,
            "searchValue": "ESGG",
            "icao": "ESGG",
            "iata": "GOT"
          },
          "dateTime": {
            "date": "2018-10-03",
            "time": "09:00",
            "departure": true,
            "local": true
          },
          "paxCount": "2",
          "paxSegment": true,
          "startAirportDetails": {
            "id": "aport-5948",
            "href": "https://sandbox.avinode.com/api/airports/aport-5948",
            "type": "airports",
            "name": "BORLANGE",
            "city": "BORLANGE",
            "country": {
              "code": "SE",
              "name": "Sweden"
            },
            "icao": "ESSD",
            "iata": "BLE"
          },
          "endAirportDetails": {
            "id": "aport-5955",
            "href": "https://sandbox.avinode.com/api/airports/aport-5955",
            "type": "airports",
            "name": "LANDVETTER",
            "city": "GOTEBORG",
            "country": {
              "code": "SE",
              "name": "Sweden"
            },
            "icao": "ESGG",
            "iata": "GOT"
          },
          "departureDateTime": {
            "dateTimeUTC": "2018-10-03T07:00:00Z",
            "dateTimeLocal": "2018-10-03T09:00:00+02:00"
          }
        },
        {
          "startAirport": {
            "selectedValue": 5955,
            "searchValue": "ESGG",
            "icao": "ESGG",
            "iata": "GOT"
          },
          "endAirport": {
            "selectedValue": 5948,
            "searchValue": "ESSD",
            "icao": "ESSD",
            "iata": "BLE"
          },
          "dateTime": {
            "date": "2018-10-03",
            "time": "17:00",
            "departure": true,
            "local": true
          },
          "paxCount": "2",
          "paxSegment": true,
          "startAirportDetails": {
            "id": "aport-5955",
            "href": "https://sandbox.avinode.com/api/airports/aport-5955",
            "type": "airports",
            "name": "LANDVETTER",
            "city": "GOTEBORG",
            "country": {
              "code": "SE",
              "name": "Sweden"
            },
            "icao": "ESGG",
            "iata": "GOT"
          },
          "endAirportDetails": {
            "id": "aport-5948",
            "href": "https://sandbox.avinode.com/api/airports/aport-5948",
            "type": "airports",
            "name": "BORLANGE",
            "city": "BORLANGE",
            "country": {
              "code": "SE",
              "name": "Sweden"
            },
            "icao": "ESSD",
            "iata": "BLE"
          },
          "departureDateTime": {
            "dateTimeUTC": "2018-10-03T15:00:00Z",
            "dateTimeLocal": "2018-10-03T17:00:00+02:00"
          }
        }
      ],
      "tripId": "Y2AW5H"
    }
  ]
}

Output example

This output example shows the response when requesting buyermessages of a trip that was eventually canceled by the buyer.

...
],
    "buyerMessages": [
      {
        "id": "abuyermsg-1000000004",
        "href": "https://sandbox.avinode.com/api/tripmsgs/abuyermsg-1000000004",
        "type": "tripmsgs",
        "liftIds": [
          "asellerlift-43277696",
          "asellerlift-43277697",
          "asellerlift-43277698"
        ],
        "createdOn": "2018-11-26T14:50:16Z",
        "message": "Can you give a quote, please",
        "buyerAccount": {
          "id": "3F530A28-355F-48E9-854C-F9455C1760DF",
          "displayName": "Fervent Almeida",
          "contactInfo": {
            "emails": [
              "Fervent.Almeida@AvinodeGroup.com"
            ],
            "phone": "",
            "mobilePhone": ""
          },
          "preferredCurrency": "EUR"
        },
        "messageType": "REQUEST"
      },
      {
        "id": "abuyermsg-1000000005",
        "href": "https://sandbox.avinode.com/api/tripmsgs/abuyermsg-1000000005",
        "type": "tripmsgs",
        "liftIds": [],
        "createdOn": "2018-11-26T14:50:52Z",
        "message": "Hi, can they bring five dogs onboard?",
        "buyerAccount": {
          "id": "3F530A28-355F-48E9-854C-F9455C1760DF",
          "displayName": "Fervent Almeida",
          "contactInfo": {
            "emails": [
              "Fervent.Almeida@AvinodeGroup.com"
            ],
            "phone": "",
            "mobilePhone": ""
          },
          "preferredCurrency": "EUR"
        },
        "messageType": "CHAT"
      },
      {
        "id": "abuyermsg-1000000006",
        "href": "https://sandbox.avinode.com/api/tripmsgs/abuyermsg-1000000006",
        "type": "tripmsgs",
        "liftIds": [],
        "createdOn": "2018-11-26T14:51:56Z",
        "message": "Sorry, my client changed their mind!",
        "buyerAccount": {
          "id": "3F530A28-355F-48E9-854C-F9455C1760DF",
          "displayName": "Fervent Almeida",
          "contactInfo": {
            "emails": [
              "Fervent.Almeida@AvinodeGroup.com"
            ],
            "phone": "",
            "mobilePhone": ""
          },
          "preferredCurrency": "EUR"
        },
        "messageType": "CANCELED",
        "cancelReason": "Canceled by client"
      }
    ],
    "tripId": "BATDYC",
    "canceled": true
  }
}

Input

searchResultIds
searchResultIds
searchId
searchId
aircraftTails
aircraftTails
buyerMessage
optional
buyerMessage
optional
buyerNotificationSettings
buyerNotificationSettings
tripName
optional
tripName
optional
emptyLegMatchIds
optional
emptyLegMatchIds
optional
postToTripBoard
optional
postToTripBoard
optional

Definition

POST /rfqs

Here is an example of a JSON payload.

{
  "searchResultIds": [
    "asearchhit-3558316920"
  ],
  "searchId": "asearch-27164021",
  "aircraftTails": [ ],
  "buyerMessage": "Hello",
  "tripName": "From London to Paris",
  "postToTripBoard": true
}

Output

Here is an example of the response from a successful call to this operation.

links
links
links.tripmsgs
links.tripmsgs
createdOn
createdOn

The time when this RFQ was created.

buyerCompany
buyerCompany

Information about the company requesting quotes for this trip.

buyerAccount
buyerAccount

Information about the person requesting quotes for this trip.

sellerCompany
sellerCompany

Information about the company that this RFQ was sent to.

sellerLift
sellerLift

The response can contain one or more sellerLift. Each sellerLift represents what lift the buyer has asked to get quotes for.

segments
segments

This is the itinerary for the trip the buyer is requesting quotes for. It contains a list of segments (aka legs).

Output example

{
  "meta" : {
    "errors" : [ ],
    "warnings" : [ ],
    "infos" : [ ]
  },
  "data" : {
    "id" : "atrip-1000000014",
    "href" : "https://sandbox.avinode.com/api/trips/atrip-1000000014",
    "type" : "trips",
    "rfqs" : [ {
      "id" : "arfq-1000000032",
      "href" : "https://sandbox.avinode.com/api/rfqs/arfq-1000000032",
      "type" : "rfqs",
      "links" : {
        "tripmsgs" : [ {
          "id" : "abuyermsg-1000000033",
          "href" : "https://sandbox.avinode.com/api/tripmsgs/abuyermsg-1000000033",
          "type" : "tripmsgs"
        } ]
      },
      "createdOn" : "2018-09-11T12:26:32Z",
      "buyerCompany" : {
        "id" : "32B741C3-E985-4ACE-90CE-25DE7F9CEBC3",
        "displayName" : "Fly Victor Ltd",
        "contactInfo" : {
          "emails" : [ "hq@FlyVictorLtd.com" ],
          "phone" : "+1123123123",
          "mobilePhone" : "",
          "url" : "www.flyvictor.com",
          "office" : "",
          "address" : "522 Fulham Road\nCX5 8KO Huinqe\nUnited Kingdom",
          "detailedAddress" : {
            "street" : "522 Fulham Road",
            "postBox" : "",
            "postCode" : "CX5 8KO",
            "city" : "Huinqe",
            "country" : {
              "code" : "GB",
              "name" : "United Kingdom"
            }
          }
        }
      },
      "buyerAccount" : {
        "id" : "038902E2-89AB-4D6A-AFDC-C0FCCE2EA0A0",
        "displayName" : "sandbox-exchange",
        "contactInfo" : {
          "emails" : [ "flyvictorltd0@flyvictor.com" ],
          "phone" : "",
          "mobilePhone" : ""
        },
        "preferredCurrency" : "EUR"
      },
      "sellerCompany" : {
        "id" : "DD3BBBA8-3910-4C3A-8B7A-4C5835AE86D3",
        "displayName" : "GlobeAir AG",
        "contactInfo" : {
          "emails" : [ "hq@GlobeAirAG.com" ],
          "phone" : "+1123123123",
          "mobilePhone" : "+1123123123",
          "url" : "www.globeair.com",
          "office" : "",
          "address" : "Polytec-Strasse 1\n8453 Lmphhwcbf\nAustria",
          "detailedAddress" : {
            "street" : "Polytec-Strasse 1",
            "postBox" : "",
            "postCode" : "8453",
            "city" : "Lmphhwcbf",
            "country" : {
              "code" : "AT",
              "name" : "Austria"
            }
          }
        }
      },
      "sellerLift" : [ {
        "id" : "asellerlift-41698802",
        "links" : {
          "quotes" : [ {
            "id" : "aquote-1000000046",
            "href" : "https://sandbox.avinode.com/api/quotes/aquote-1000000046",
            "type" : "quotes"
          } ]
        },
        "aircraftCategory" : "Entry level jet (VLJ)",
        "aircraftType" : "Citation Mustang",
        "aircraftSuperType" : "Citation Mustang",
        "aircraftTail" : "OE-FCB",
        "maxPax" : 4,
        "ownAircraft" : false,
        "suggestedByAvinode" : false,
        "sourcingDisplayStatus" : "Unanswered",
        "sourcingStatus" : 1
      } ],
      "segments" : [ {
        "startAirport" : {
          "selectedValue" : 6401,
          "searchValue" : "EGGW",
          "icao" : "EGGW",
          "iata" : "LTN"
        },
        "endAirport" : {
          "selectedValue" : 5423,
          "searchValue" : "EPGD",
          "icao" : "EPGD",
          "iata" : "GDN"
        },
        "dateTime" : {
          "date" : "2018-09-15",
          "time" : "00:00",
          "departure" : true,
          "local" : true
        },
        "paxCount" : "1",
        "paxSegment" : true,
        "startAirportDetails" : {
          "id" : "aport-6401",
          "href" : "https://sandbox.avinode.com/api/airports/aport-6401",
          "type" : "airports",
          "name" : "LUTON",
          "city" : "LONDON (LUTON)",
          "country" : {
            "code" : "GB",
            "name" : "United Kingdom"
          },
          "icao" : "EGGW",
          "iata" : "LTN"
        },
        "endAirportDetails" : {
          "id" : "aport-5423",
          "href" : "https://sandbox.avinode.com/api/airports/aport-5423",
          "type" : "airports",
          "name" : "REBIECHOWO",
          "city" : "GDANSK",
          "country" : {
            "code" : "PL",
            "name" : "Poland"
          },
          "icao" : "EPGD",
          "iata" : "GDN"
        },
        "departureDateTime" : {
          "dateTimeUTC" : "2018-09-14T23:00:00Z",
          "dateTimeLocal" : "2018-09-15T00:00:00+01:00"
        }
      } ],
      "tripId" : "C3P7JK"
    } ],
    "tripId" : "C3P7JK"
  }
}

Input

criteria.requiredLift
criteria.requiredLift

This is a list of the lift that the search algorithm should consider. It can be a combination of values of one or more of the following properties.

  • aircraftCategory
  • aircraftType
  • aircraftTail
criteria.maxFuelStopsPerSegment
criteria.maxFuelStopsPerSegment

The max number of fuel stops the search algorithm should allow for any lift.

segments
segments

This is the itinerary. It should only include passenger or cargo segments.

segment.startAirport, segment.endAirport
segment.startAirport, segment.endAirport

This is the start airport and the end airport for the segment.

segment.dateTime
segment.dateTime

This is either the departure time from the start airport or the arrival time at the end airport. If the segment.dateTime.local property is set to false, then the specified time will be treated as an UTC time. Otherwise, it will be treated as the local time of the airport that the time is specified for.

segment.paxCount
segment.paxCount

The number of passengers for this segment. This should be set to zero for a cargo segments.

outputCurrencies
outputCurrencies

This is the list of additional currencies that the prices will be converted to. Quotes for specific aircraft are always returned in the currency the seller has defined for the aircraft. Prices are also always converted to the default currency set for the API connection.

liftaoc
optional
liftaoc
optional

When requesting this, the result will also include information about the operator’s AOC.

sellerstats
optional
sellerstats
optional

When requesting this, the result will, if available, also include information about the seller’s response statistics.

typedetails
optional
typedetails
optional

When requesting this, the result will also include detailed information about the aircraft type.

categorydetails
optional
categorydetails
optional

When requesting this, the result will also include detailed information about the aircraft category.

typephotos
optional
typephotos
optional

When requesting this, the result will, if available, also include links to generic photos of the aircraft type.

tailphotos
optional
tailphotos
optional

When requesting this, the result will, if available, also include links to photos of the actual aircraft.

perfdetails
optional
perfdetails
optional

When requesting this, the result will also include information about the aircraft’s performance details.

taildetails
optional
taildetails
optional

When requesting this, the result will also include additional information about the aircraft.

amenities
optional
amenities
optional

When requesting this, the result will, if available, also include information about the aircraft’s amenities.

insurance
optional
insurance
optional

When requesting this, the result will, if available, also include insurance information for the aircraft.

homebase
homebase

When requesting this, the result will also include information about the aircraft’s homebase airport.

startposition
startposition

When requesting this, the result will also include information about where the aircraft is positioned from to perform the first passenger segment.

safety
safety

When requesting this, the result will, if available, also include information about any safety ratings held by the operator of this aircraft.

schedule
schedule

When requesting this, the result will, if available, also include information about when the seller last updated the availability information for this aircraft.

Definition

POST /searches

Example 1

In the first example the caller is looking for any available aircraft for a one way from ESSA to ESGG, for one passenger, departing from ESSA at 09:00 local time on Nov 30.

{
  "segments": [
    {
      "startAirport": {
        "icao": "ESSA"
      },
      "endAirport": {
        "icao": "ESGG"
      },
      "dateTime": {
        "date": "2017-11-30",
        "time": "09:00",
        "departure": true,
        "local": true
      },
      "paxCount": "1"
    }
  ]
}

Example 2

In the second example the caller is looking for mid-size or heavy jets for a round trip from EGGW to KTEB and back, for 7 passengers, arriving at KTEB at 11:00 UTC on Dec 13 and departing from KTEB the next day at 22:00 UTC. The caller is only looking for aircraft that can make the trip without fuel stops. The caller is requesting that prices are also converted to British Pounds.

{
  "criteria": {
    "requiredLift": [
      {
        "aircraftCategory": "Midsize jet"
      },
      {
        "aircraftCategory": "Heavy jet"
      }
    ],
    "maxFuelStopsPerSegment": 0
  },
  "segments": [
    {
      "startAirport": {
        "icao": "EGGW"
      },
      "endAirport": {
        "icao": "KTEB"
      },
      "dateTime": {
        "date": "2017-12-13",
        "time": "11:00",
        "departure": false,
        "local": false
      },
      "paxCount": "7"
    },
    {
      "startAirport": {
        "icao": "KTEB"
      },
      "endAirport": {
        "icao": "EGGW"
      },
      "dateTime": {
        "date": "2017-12-14",
        "time": "22:00",
        "departure": true,
        "local": false
      },
      "paxCount": "7"
    }
  ],
  "outputCurrencies": [
    "GBP"
  ]
}

Output

Here is an example of the response from a successful call to this operation. It is based on the first input example above. This example only includes a small subset of the actual result since it would include hundreds of quotes.

quote.sellerCompany
quote.sellerCompany

This is the company marketing the aircraft.

quote.sellerPrice
quote.sellerPrice

This is the price including the commission the company calling this operation has configured in their company profile in Avinode.

quote.sellerPriceWithoutCommission
quote.sellerPriceWithoutCommission

This is the price offered by the seller.

quote.convertedPrices
quote.convertedPrices

This is the quote.sellerPrice converted to the currencies specified in the outputCurrencies input property.

quote.avinodeGenerated
quote.avinodeGenerated

This indicates if the quote was generated by Avinode based on the performance and pricing details supplied by the seller. If false, the quote was generated by an external quoting module.

quote.reservable
quote.reservable

When this is false, the quote should be considered a preliminary quote.

quote.lift.aircraftCategory
quote.lift.aircraftCategory

This is the category the aircraft belongs to.

quote.lift.aircraftType
quote.lift.aircraftType

This is the aircraft type.

quote.lift.aircraftTail
quote.lift.aircraftTail

This is the tail number of the aircraft. This property will only be included if the API connection calling the operation is configured to include detailed operator information.

quote.lift.aircraftTailDetails
quote.lift.aircraftTailDetails

This is detailed aircraft information like year of make, amenities, insurance information, and dates when the aircraft was refurbished.

quote.lift.liftPerformance
quote.lift.liftPerformance

This is the performance details for the aircraft.

quote.lift.aircraftCertificate
quote.lift.aircraftCertificate

This is information about the Air operator’s certificate (AOC) for this aircraft. This property will only be included if the API connection calling the operation is configured to include detailed operator information.

quote.lift.maxPax
quote.lift.maxPax

This is the maximum number of passengers this aircraft can carry.

quote.lift.sellerStatistics
quote.lift.sellerStatistics

This is the response statistics for the seller.

quote.lift.tailPhotos
quote.lift.tailPhotos

This is a set of photos that the seller has provided for this aircraft.

quote.lift.typePhotos
quote.lift.typePhotos

This is a set of photos that the aircraft manufacturer has provided for this aircraft type.

quote.lift.homebase
quote.lift.homebase

This is the airport where this aircraft has its homebase.

quote.lift.ownerApprovalRequired
quote.lift.ownerApprovalRequired

This indicates if case by case owner approval is required for this aircraft.

quote.lift.safetyRatings
quote.lift.safetyRatings

This is information about any safety ratings held by the operator of this aircraft.

quote.segments
quote.segments

This is the set of flight segments that this quote is for.

startPosition, startPositionAvailableFrom, startPositionAvailableTo
startPosition, startPositionAvailableFrom, startPositionAvailableTo

This is information about where the aircraft is positioned from to perform the first passenger segment, and the times the aircraft is scheduled to be at this airport.

scheduledUpdatedOn
scheduledUpdatedOn

This is the time the seller of the aircraft last updated the aircraft’s availability in the Avinode Marketplace.

initialPositioningMinutes
initialPositioningMinutes

This is the time it will take for the aircraft to position to the departure airport for the first passenger segment.

Output example

{
  "meta": {
    "errors": [],
    "warnings": [],
    "infos": []
  },
  "data": {
    "id": "asearch-23456789",
    "href": "https://sandbox.avinode.com/api/searches/asearch-23456789",
    "type": "searches",
    "results": [
      {
        "id": "asearchhit-922300011",
        "quote": {
          "sellerCompany": {
            "id": "ABDC0889-13D6-490E-A830-A93FABCD8433",
            "displayName": "Acme Air",
            "icaoDesignator": "ACA"
          },
          "sellerPrice": {
            "currency": "EUR",
            "price": 7300,
            "conversionCurrency": "EUR",
            "convertedPrice": 7300,
            "priceAsString": "7300"
          },
          "sellerPriceWithoutCommission": {
            "currency": "EUR",
            "price": 7300,
            "conversionCurrency": "EUR",
            "convertedPrice": 7300,
            "priceAsString": "7300"
          },
          "convertedPrices": [
            {
              "currency": "EUR",
              "price": 7300,
              "conversionCurrency": "SEK",
              "convertedPrice": 69307.66,
            }
          ],
          "avinodeGenerated": true,
          "reservable": false,
          "lift": {
            "id": "7947FDC6-3118-4377-A6A1-6BBABCD0B41F",
            "aircraftCategory": "Light jet",
            "aircraftType": "Citation CJ2",
            "aircraftTypeDetails": {
              "id": "F662640A-69DF-41AC-BC22-969ADCD24F96",
              "type": "aircrafttypes"
            },
            "aircraftCategoryDetails": {
              "id": "acat-220"
            },
            "aircraftTail": "SP-KCK",
            "aircraftTailDetails": {
              "yearOfMake": 2003,
              "interiorRefurbished": "2013-04-01",
              "exteriorRefurbished": "2014-02-22",
              "amenities": [
                "110V Outlet",
                "Certified lav seat",
                "Coffee pot",
                "Dishware",
                "Freon air conditioning",
                "Glassware",
                "Ice bin",
                "Lavatory",
                "Leather seats",
                "Partial galley"
              ],
              "insurance": {
                "monetaryAmount": {
                  "currency": "EUR",
                  "price": 50000000,
                  "conversionCurrency": "EUR",
                  "convertedPrice": 50000000,
                  "priceAsString": "50000000"
                }
              }
            },
            "liftPerformance": {
              "maxRangeNM": "1200",
              "cruiseSpeedKnots": "400"
            },
            "aircraftCertificate": {
              "certificateNumber": "A-1234",
              "issuingCountry": {
                "code": "PL",
                "name": "Poland"
              }
            },
            "maxPax": 6,
            "sellerStatistics": {
              "averagePriceDiscrepancyPercent": 5,
              "quoteCount": 3025,
              "underPricedQuoteCount": 1069,
              "underPricedQuoteAveragePercent": 5.29,
              "overPricedQuoteCount": 1593,
              "overPricedQuoteAveragePercent": 8.85
            },
            "tailPhotos": [
              {
                "type": "EXTERIOR",
                "copies": [
                  {
                    "size": "SMALL",
                    "url": "https://sandbox.avinode.com/mediafiles/store/abcd/557076_30.jpg",
                    "anonymized": true
                  },
                  {
                    "size": "LARGE",
                    "url": "https://sandbox.avinode.com/mediafiles/store/abcd/557076.jpg",
                    "anonymized": true
                  },
                  {
                    "size": "MEDIUM",
                    "url": "https://sandbox.avinode.com/mediafiles/store/abcd/557076_28.jpg",
                    "anonymized": true
                  },
                  {
                    "size": "THUMBNAIL",
                    "url": "https://sandbox.avinode.com/mediafiles/store/abcd/557076_31.jpg",
                    "anonymized": true
                  }
                ]
              },
              {
                "type": "INTERIOR",
                "copies": [
                  {
                    "size": "SMALL",
                    "url": "https://sandbox.avinode.com/mediafiles/store/abcd/744622_30.jpg",
                    "anonymized": false
                  },
                  {
                    "size": "MEDIUM",
                    "url": "https://sandbox.avinode.com/mediafiles/store/abcd/744622_28.jpg",
                    "anonymized": false
                  },
                  {
                    "size": "THUMBNAIL",
                    "url": "https://sandbox.avinode.com/mediafiles/store/abcd/744622_31.jpg",
                    "anonymized": false
                  },
                  {
                    "size": "LARGE",
                    "url": "https://sandbox.avinode.com/mediafiles/store/abcd/744622_26.jpg",
                    "anonymized": false
                  }
                ]
              },
              {
                "type": "FLOORPLAN",
                "copies": [
                  {
                    "size": "SMALL",
                    "url": "https://sandbox.avinode.com/mediafiles/store/abcd/351193_30.jpg",
                    "anonymized": false
                  },
                  {
                    "size": "LARGE",
                    "url": "https://sandbox.avinode.com/mediafiles/store/abcd/351193.jpg",
                    "anonymized": false
                  },
                  {
                    "size": "MEDIUM",
                    "url": "https://sandbox.avinode.com/mediafiles/store/abcd/351193_28.jpg",
                    "anonymized": false
                  },
                  {
                    "size": "THUMBNAIL",
                    "url": "https://sandbox.avinode.com/mediafiles/store/abcd/351193_31.jpg",
                    "anonymized": false
                  }
                ]
              },
              {
                "type": "EXTERIOR",
                "copies": [
                  {
                    "size": "LARGE",
                    "url": "https://sandbox.avinode.com/mediafiles/store/abcd/175495.jpg",
                    "anonymized": true
                  }
                ]
              },
              {
                "type": "INTERIOR",
                "copies": [
                  {
                    "size": "MEDIUM",
                    "url": "https://sandbox.avinode.com/mediafiles/store/abcd/5gagw.exc_28.jpg",
                    "anonymized": false
                  },
                  {
                    "size": "SMALL",
                    "url": "https://sandbox.avinode.com/mediafiles/store/abcd/5gagw.exc_30.jpg",
                    "anonymized": false
                  },
                  {
                    "size": "THUMBNAIL",
                    "url": "https://sandbox.avinode.com/mediafiles/store/abcd/5gagw.exc_31.jpg",
                    "anonymized": false
                  },
                  {
                    "size": "LARGE",
                    "url": "https://sandbox.avinode.com/mediafiles/store/abcd/5gagw.exc.jpg",
                    "anonymized": false
                  }
                ]
              }
            ],
            "typePhotos": [
              {
                "type": "EXTERIOR",
                "copies": [
                  {
                    "size": "LARGE",
                    "url": "https://sandbox.avinode.com/mediafiles/store/2582/fdrruh.zjo.jpg",
                    "anonymized": null
                  },
                  {
                    "size": "MEDIUM",
                    "url": "https://sandbox.avinode.com/mediafiles/store/2582/fdrruh.zjo.jpg",
                    "anonymized": null
                  },
                  {
                    "size": "SMALL",
                    "url": "https://sandbox.avinode.com/mediafiles/store/2582/fdrruh.zjo_30.jpg",
                    "anonymized": null
                  },
                  {
                    "size": "THUMBNAIL",
                    "url": "https://sandbox.avinode.com/mediafiles/store/2582/fdrruh.zjo_31.jpg",
                    "anonymized": null
                  }
                ]
              },
              {
                "type": "INTERIOR",
                "copies": [
                  {
                    "size": "LARGE",
                    "url": "https://sandbox.avinode.com/mediafiles/store/2582/ac5fvv.ulg.jpg",
                    "anonymized": null
                  },
                  {
                    "size": "MEDIUM",
                    "url": "https://sandbox.avinode.com/mediafiles/store/2582/ac5fvv.ulg.jpg",
                    "anonymized": null
                  },
                  {
                    "size": "SMALL",
                    "url": "https://sandbox.avinode.com/mediafiles/store/2582/ac5fvv.ulg_30.jpg",
                    "anonymized": null
                  },
                  {
                    "size": "THUMBNAIL",
                    "url": "https://sandbox.avinode.com/mediafiles/store/2582/ac5fvv.ulg_31.jpg",
                    "anonymized": null
                  }
                ]
              }
            ],
            "homebase": {
              "id": "aport-5449",
              "name": "WARSAW FREDERIC CHOPIN",
              "city": "WARSAW",
              "country": {
                "code": "PL",
                "name": "Poland"
              },
              "icao": "EPWA",
              "iata": "WAW"
            },
            "ownerApprovalRequired": false,
            "safetyRatings": [
              {
                "standard": "ARGUS",
                "levelCode": "GOLD",
                "levelDisplayName": "Gold"
              }
            ]
          },
          "segments": [
            {
              "startAirport": {
                "id": "aport-6002",
                "name": "ARLANDA",
                "city": "STOCKHOLM",
                "country": {
                  "code": "SE",
                  "name": "Sweden"
                },
                "icao": "ESSA",
                "iata": "ARN"
              },
              "endAirport": {
                "id": "aport-5955",
                "name": "LANDVETTER",
                "city": "GOTEBORG",
                "country": {
                  "code": "SE",
                  "name": "Sweden"
                },
                "icao": "ESGG",
                "iata": "GOT"
              },
              "departureDateTime": {
                "dateTimeUTC": "2017-11-30T08:00:00Z",
                "dateTimeLocal": "2017-11-30T09:00:00+01:00",
                "calculated": false
              },
              "arrivalDateTime": {
                "dateTimeUTC": "2017-11-30T08:58:00Z",
                "dateTimeLocal": "2017-11-30T09:58:00+01:00",
                "calculated": true
              },
              "timeTBD": false,
              "blockMinutes": 58,
              "flightMinutes": 46,
              "fuelMinutes": 0,
              "paxCount": 1,
              "paxSegment": true,
              "distanceNM": 212,
              "fuelStopCount": 0
            }
          ]
        },
        "startPosition": {
          "id": "aport-5449",
          "name": "WARSAW FREDERIC CHOPIN",
          "city": "WARSAW",
          "country": {
            "code": "PL",
            "name": "Poland"
          },
          "icao": "EPWA",
          "iata": "WAW"
        },
        "startPositionAvailableFrom": {
          "dateTimeUTC": "2017-11-23T05:20:00Z",
          "dateTimeLocal": "2017-11-23T06:20:00+01:00"
        },
        "startPositionAvailableTo": {
          "dateTimeUTC": "2017-12-07T05:20:00Z",
          "dateTimeLocal": "2017-12-07T06:20:00+01:00"
        },
        "scheduledUpdatedOn": "2017-03-23T03:03:08Z",
        "initialPositioningMinutes": 100
      },
 
... more results ...
 
    ]
  }
}

Input

lift.aircraftTail
lift.aircraftTail

The tail number of the aircraft. This must exactly match the tail number specified in the Avinode Marketplace.

activities
activities

This is an list of all activities for this aircraft. An activity is a representation of something an aircraft does that affects its availability. It can for example be a passenger flight, ferry flight, scheduled maintenance, hold lines, options etc. Every activity has a start and an end airport, begin and end time and an activity type that indicates what kind of activity it is. Passenger flight activities should also include the number of passengers. For non flight activities, both start and end airport should be set to the same airport.

activity.activityId
activity.activityId

This is the id that the application calling this operation has for this activity. It is important that the id for one specific activity is the same in each consecutive call. The id must be unique (i.e. no two activities for one aircraft can have the same id). Sending an activityId is required.

activity.tripId
activity.tripId

This is the Marketplace TripID that can be found on the Trips Selling/Buying pages in Marketplace. It is recommended to save this id from incoming quote requests that become booked trips, and send it in the corresponding activity here.

This is done to get valuable statistics on which requests end up as a booked trip.

activity.externalTripId
optional
activity.externalTripId
optional

If this activity is part of a trip (e.g. one of the activities in a round-trip or a positioning flight for a passenger flight), then this is the id that the application calling this operation has for this trip. If this activity is not part of a trip then this id should be omitted.

activity.activityType
activity.activityType

Each activity must have an activity type that specifies what kind of activity it is. This will be used to determine how this activity should affect the aircraft’s availability. What values to send is up to the application calling this operation. The value cannot be longer than 20 characters. The sent value will also be shown when the Avinode Member views the schedule data in the Marketplace’s online web interface. Each Avinode member company maintains a mapping table for their activity types where each activity type is mapped to one of the items in the list below. New non-mapped activity types will be automatically created in the mapping table when sent for the first time. They will then by default be mapped to Occupied.

The member can at any time log in to the Avinode Marketplace and change their mappings. Here is a list of the available interpretations an activity type can be mapped to.

  • Empty Leg – During an activity of this type the aircraft will be considered available. The activity will also be marketed as an empty leg in the Avinode Marketplace.
  • Ferry – During an activity of this type the aircraft will be considered available. The activity will not be marketed as an empty leg. The search algorithm will look at any following passenger leg to ensure that the aircraft has enough time to position for that.
  • Flight Occupied – During an activity of this type the aircraft will be considered occupied. This option should be used for all flight related occupancy (e.g. 135 trips, 91 trips etc.).
  • Occupied – During an activity of this type the aircraft will be considered occupied. This option should be used for all non-flight occupancy (e.g maintenance).
  • Onground – During an activity of this type the aircraft will be considered available. This option can be used to indicate transient (away from home base) availability. The search algorithm will price the aircraft from the indicated airport, rather than home base. Note that sending activities of this type is not required (see “Time gaps”).
  • Option – This is an “information only” type. Activities mapped to this type will be shown in the Schedule for the aircraft, but does in no way effect the position of the aircraft, nor does it affect the availability of the aircraft. This can be used for non-confirmed trips etc.
activity.startAirport, activity.endAirport
activity.startAirport, activity.endAirport

These are the airports where the aircraft is positioned at the start and end of this activity. Specifying airport should be done by sending one airport code. The recommended code to send is the ICAO code. If the application calling this operation does not have access to the ICAO code then the IATA or FAA code should be sent.

activity.startDateTime, activity.endDateTime
activity.startDateTime, activity.endDateTime

These are the dates and times when the activity starts and ends. The times should be sent as UTC times.

activity.paxCount
activity.paxCount

The number of passengers for this activity. If there are no passengers then 0 should be sent.

activity.note
activity.note

A plain text message that is displayed when the Avinode Member views the schedule data in the Marketplace’s online web interface.

activity.price
activity.price

If this activity is an empty leg then this should be a target price that uploading company can imagine accepting for this empty leg.

activity.currency
activity.currency

The three letter code (ISO 4217) for the currency that the price is specified in.

activity.flightRegulations
activity.flightRegulations

For each Avinode member company a regulation code mapping table exist similar to the one used for activity types. What values to send is up to the application calling this operation. The code sent in flightRegulations will be mapped to one of the following.

  • PART 91
  • PART 135
  • PART 121
  • PART 91K
  • OTHER
activity.flightRegulationsDescription
activity.flightRegulationsDescription

A plain text description of the regulation code sent in flightRegulations. Max 255 characters.

activity.marketingStartDateTime, activity.marketingEndDateTime
activity.marketingStartDateTime, activity.marketingEndDateTime

These are the marketing start and end times for an empty leg activity. These define when the aircraft is available to fly this empty leg. The maximum allowed time span is five days. A longer span than five days will result in the empty leg not being available to the market. If two empty legs with overlapping marketing time spans are uploaded for the same aircraft then only one of the empty legs will available to the market. Uploading consecutive empty legs from and to the same airports to circumvent the five day span limit is not allowed. The times should be sent as UTC times.

activity.marketingVerified
activity.marketingVerified

This should be set to true for all empty leg activities that the Avinode member company has actively verified as marketable. Actively verified means that someone has manually marked this activity as a sell-able empty leg. Verified empty legs will be treated with a higher priority in the Avinode Marketplace and are more likely to attract business than non verified empty legs. Operators that markets empty legs where it turns out the empty leg is not really available to the market will get a bad reputation and buyers will eventually be less likely to show interest in that operator’s real empty legs. Automatically marking all empty legs as verified is not allowed.

activity.marketingMessage
activity.marketingMessage

A plain text message that will be displayed to buyers interested in this empty leg. Some characters must to be escaped or sent as their HTML character entity name or number (same rules as for the note field above).

activity.Services
activity.Services

This is a list of services that is connected to this activity. It could be FBOs, catering, handling, fuel etc.

activity.service.serviceProviderId
activity.service.serviceProviderId

This is the id that the application calling this operation has for this service provider.

activity.service.serviceProviderName
activity.service.serviceProviderName

This is the name that the application calling this operation has for this service provider.

activity.service.airport
activity.service.airport

This is the airport where this service will be consumed.

activity.service.serviceType
activity.service.serviceType

This is the type of service. One of these must be sent.

  • FBO
  • FUEL
  • CATERING
  • LIMO
  • HOTEL
  • HANDLING
  • CUSTOM
activity.service.serviceFor
activity.service.serviceFor

This is for who this service is offered. One of these must be sent.

  • ALL
  • CREW
  • PASSENGERS
  • OTHER
activity.service.note
activity.service.note

A plain text message with additional information about this service. Some characters must to be escaped or sent as their HTML character entity name or number (same rules as for the note field above).

activity.service.dataSource
activity.service.dataSource

This is the data source from which the application calling this operation gets this information. One of these must be sent.

  • UNIVERSAL
  • ACUKWIK
  • PROPRIETARY
  • OTHER

Definition

PUT /schedules

Input example

Here is an example of a JSON payload. Normally a schedule will contain a lot more activities but in this example a schedule containing four activities for aircraft N12345 is uploaded. The first three belongs to the same trip. The trip starts with an empty leg from KMIA to KLAX followed by a passenger flight to KSFO. The trip is then ends after the aircraft returns to KMIA the day after. The last activity in the input data is a multi day maintenance at KMIA.

{
  "lift": {
    "aircraftTail": "N12345"
  },
  "activities": [
    {
      "activityId": "a-10001",
      "externalTripId": "t-1001",
      "tripId": "ABC123",
      "activityType": "EmptyLeg",
      "startAirport": {
        "icao": "KMIA"
      },
      "endAirport": {
        "icao": "KLAX"
      },
      "startDateTime": "2016-03-05T15:00Z",
      "endDateTime": "2016-03-05T20:12Z",
      "paxCount": 0,
      "note": "Positioning to pick up customer",
      "price": 10000,
      "currency": "USD",
      "flightRegulations": "135",
      "flightRegulationsDescription": "Charter flight",
      "marketingStartDateTime": "2016-03-04T18:00Z",
      "marketingEndDateTime": "2016-03-05T20:12Z",
      "marketingVerified": true,
      "marketingMessage": "Good deal!",
      "services": [
        {
          "serviceProviderId": "81766",
          "serviceProviderName": "GROUND ACE",
          "airport": {
            "icao": "KLAX"
          },
          "serviceType": "FBO",
          "serviceFor": "ALL",
          "note": "Our special rates apply",
          "dataSource": "UNIVERSAL"
        },
        {
          "serviceProviderId": "SP8345",
          "serviceProviderName": "Mega Fuel",
          "airport": {
            "icao": "KLAX"
          },
          "serviceType": "FUEL",
          "serviceFor": "OTHER",
          "dataSource": "PROPRIETARY"
        }
 
      ]
    },
    {
      "activityId": "a-10002",
      "externalTripId": "t-1001",
      "tripId": "ABC123",
      "activityType": "PassengerFlight",
      "startAirport": {
        "icao": "KLAX"
      },
      "endAirport": {
        "icao": "KSFO"
      },
      "startDateTime": "2016-03-05T21:00Z",
      "endDateTime": "2016-03-05T22:02Z",
      "paxCount": 1,
      "note": "Customer will bring two dogs.",
      "flightRegulations": "135",
      "flightRegulationsDescription": "Charter flight"
    },
    {
      "activityId": "a-10003",
      "externalTripId": "t-1001",
      "activityType": "Positioning",
      "startAirport": {
        "icao": "KSFO"
      },
      "endAirport": {
        "icao": "KMIA"
      },
      "startDateTime": "2016-03-06T17:00Z",
      "endDateTime": "2016-03-06T22:43Z",
      "paxCount": 0,
      "flightRegulations": "135",
      "flightRegulationsDescription": "Charter flight"
    },
    {
      "activityId": "a-10004",
      "activityType": "Maintenance",
      "startAirport": {
        "icao": "KMIA"
      },
      "endAirport": {
        "icao": "KMIA"
      },
      "startDateTime": "2016-03-07T16:00Z",
      "endDateTime": "2016-03-18T02:00Z",
      "paxCount": 0
    }
  ]
}

Output

The JSON returned by the operation can contain errors and warnings. If it contains errors then the entire call failed and the existing schedule data in the Avinode Marketplace was not updated. If it contains only warnings then the schedule data in the Avinode Marketplace was updated. Only the data for the activity generating the warning will be affected, so any activities not generating any warnings will always be successfully uploaded. Depending on the severity of the warning the activity might still be included but for some warnings the activity will be omitted.

The status and output from the last call for each aircraft should be made available to the users of the application calling this operation. This to facilitate that the necessary corrections can be made as quickly as possible.

Example of the response from a successful call to this operation

If a call to this operation fails, no retries should be done. The application should just wait until it is time for the the next periodic call.

{
  "meta": {
    "errors": [],
    "warnings": [],
    "infos": []
  },
  "data": {
    "type": "schedules"
  }
}

Retry policy

If a call to this operation fails, no retries should be done. The application should just wait until it is time for the the next periodic call.

Input

id
id

This is the id of the trip message that the operation will get information for.

Definition

GET /tripmsgs/{id}

Output

lift
lift

If this message is related to a requested lift in the RFQ, then this property will have information about which requested lift this message is for.

lift.id
lift.id

This is the id of the requested lift.

lift.aircraftCategory
lift.aircraftCategory

This is the category of the lift.

lift.aircraftType
lift.aircraftType

This is the type of the lift.

lift.maxPax
lift.maxPax

This is the maximum number of passengers for the lift.

lift.sourcingDisplayStatus, lift.sourcingStatus
lift.sourcingDisplayStatus, lift.sourcingStatus

This will tell the status of the quote request.

  • Declined = 0
  • Unanswered = 1
  • Accepted = 2
  • Canceled = 3
createdOn
createdOn

The time when this message was created.

message
message

This is the actual text message.

sellerCompany
sellerCompany

Information about the company that received the RFQ that this message is associated with.

buyerCompany
buyerCompany

Information about the company that sent the RFQ that this message is associated with.

buyerAccount, sellerAccount
buyerAccount, sellerAccount

Information about the person that wrote this message.

tripId
tripId

This is the id of the requested trip. One trip can contain many lifts. This is the same as Marketplace TripID, visible to users in Avinode Trips Selling/Buying pages.

messageType
optional
messageType
optional

Message types can be:

  • REQUEST
  • CHAT
  • CANCELED

Example of the response from a successful call to this operation

{
  "meta": {
    "errors": [],
    "warnings": [],
    "infos": []
  },
  "data": {
    "id": "abuyermsg-1000000010",
    "href": "https://sandbox.avinode.com/api/tripmsgs/abuyermsg-1000000010",
    "type": "tripmsgs",
    "links": {
      "rfqs": [
        {
          "id": "arfq-1000000009",
          "href": "https://sandbox.avinode.com/api/rfqs/arfq-1000000009",
          "type": "rfqs"
        }
      ]
    },
    "lift": [
      {
        "id": "asellerlift-42134678",
        "links": {
          "quotes": [
            {
              "id": "aquote-1000000014",
              "href": "https://sandbox.avinode.com/api/quotes/aquote-1000000014",
              "type": "quotes"
            }
          ]
        },
        "actions": {
          "submitQuote": {
            "type": "submitQuote",
            "description": "Submit a quote",
            "httpMethod": "POST",
            "href": "https://sandbox.avinode.com/api/tripmsgs/asellerlift-42134678/submitQuote"
          },
          "decline": {
            "type": "decline",
            "description": "Decline",
            "httpMethod": "POST",
            "href": "https://sandbox.avinode.com/api/tripmsgs/asellerlift-42134678/decline"
          }
        },
        "aircraftCategory": "Ultra long range",
        "aircraftType": "Global Express",
        "aircraftSuperType": "Global Express/XRS",
        "aircraftTail": "SBY-658ZK",
        "maxPax": 12,
        "ownAircraft": true,
        "suggestedByAvinode": false,
        "sourcingDisplayStatus": "Unanswered",
        "sourcingStatus": 1
      }
    ],
    "createdOn": "2018-10-02T09:54:18Z",
    "message": "Please give me a quote for your Global Express for this trip. /John",
    "sellerCompany": {
      "id": "EBCEE19F-6A31-46FE-9847-4972F57460CE",
      "displayName": "Globex Air Charter"
    },
    "buyerCompany": {
      "id": "F2341E00-D226-403C-8805-0A43F18E95F0",
      "displayName": "Acme Charter Broker"
    },
    "buyerAccount": {
      "id": "3F530A28-355F-48E9-854C-F9455C1760DF",
      "displayName": "John Smith"
    },
    "tripId": "Y2AW5H",
    "messageType": "REQUEST"
  }
}

Input

id
id

This is either:

  • A lift id. Using this will make the quote a reply to requested lift in the RFQ.
  • An RFQ id. Using this will add an additional quote to the RFQ.

HTTP headers

X-Avinode-ActAsAccount
X-Avinode-ActAsAccount

If the person initiating this action has a personal Avinode Marketplace user account, then the username for that user account should be sent in this HTTP header. The buyer will then see the name of the person that preformed this action.

Definition

POST /tripmsgs/{requestId}/submitQuote

Payload

message
message

A text message to accompany the quote.

suppressNotification
suppressNotification

If this is true the API servers will not send an email to the buyer informing about this quote.

quote.segments
quote.segments

This is the itinerary for the trip offered in this quote. It contains a list of segments (aka legs). It may or may not include information about positioning flights. It may be different from the itinerary requested in the RFQ.

quote.segment.startAirport, quote.segment.endAirport
quote.segment.startAirport, quote.segment.endAirport

This is the start airport and the end airport for the segment.

quote.segment.dateTime
quote.segment.dateTime

This is either the departure time from the start airport or the arrival time at the end airport. If the quote.segment.dateTime.local property is false, then the specified time is an UTC time. Otherwise, it is the local time of the airport that the time is specified for.

quote.segment.paxCount
quote.segment.paxCount

The number of passengers for this segment. This can be zero if the quote is for a cargo trip or if it is not yet specified how many passengers there will be on this segment.

quote.segment.paxSegment
quote.segment.paxSegment

This should be set to true for all passenger segments.

quote.segment.showToBuyer
quote.segment.showToBuyer

If this segment should be presented to the buyer or not. Passenger segments will always be presented to the buyer, regardless of this setting.

quote.segment.distanceNM
quote.segment.distanceNM

The distance between the start airport and the end airport in nautical miles.

quote.segment.blockTimeMinutes
quote.segment.blockTimeMinutes

This is the number of minutes for this segment, including taxi time.

quote.segment.flightMinutes
quote.segment.flightMinutes

This is the number actual in air flight minutes for this segment.

quote.lift.aircraftCategory, quote.lift.aircraftType, quote.lift.aircraftTail
quote.lift.aircraftCategory, quote.lift.aircraftType, quote.lift.aircraftTail

This is the lift that is offered in this quote. At least one of these properties should be populated.

  • If all three are populated, the offered lift will be the aircraft specified in the aircraftTail property. The aircraftType and aircraftCategory properties should then contain information about that aircraft’s type and category.
  • If only the aircraftTail property is specified, then this aircraft is the offered lift.
  • If only the aircraftType or aircraftCategory property is specified, then offer in this quote is not for a specific aircraft. The seller is then offering a not yet specified aircraft of that type or category.

Only aircraft marketed in the Avinode Marketplace by the company calling this operation can be specified in quote.lift.aircraftTail and this must exactly match the tail number specified for this aircraft in the Avinode Marketplace.

quote.messageForBuyer
quote.messageForBuyer

A text message with additional information about the price, availability conditions, etc.

quote.totalPrice, quote.currencyCode
quote.totalPrice, quote.currencyCode

This is the total price for the offer in this quote.

quote.sellerUniqueQuoteIdentifier
quote.sellerUniqueQuoteIdentifier

This is the quote identifier that the calling application has for this quote. It must be unique for the calling company.

Here is an example of a JSON payload

{
  "message": "We are pleased to give you the following offer. /Maria",
  "suppressNotification": false,
  "quote": {
    "segments": [
      {
        "startAirport": {
          "icao": "ESGG"
        },
        "endAirport": {
          "icao": "EGGW"
        },
        "dateTime": {
          "date": "2016-08-17",
          "time": "05:30",
          "departure": true,
          "local": false
        },
        "paxCount": "0",
        "paxSegment": false,
        "showToBuyer": false,
        "distanceNM": 602,
        "blockTimeMinutes": 100,
        "flightMinutes": 90
      },
      {
        "startAirport": {
          "icao": "EGGW"
        },
        "endAirport": {
          "icao": "LFPB"
        },
        "dateTime": {
          "date": "2016-08-17",
          "time": "08:00",
          "departure": true,
          "local": false
        },
        "paxCount": "2",
        "paxSegment": true,
        "showToBuyer": true,
        "distanceNM": 207,
        "blockTimeMinutes": 53,
        "flightMinutes": 43
      },
      {
        "startAirport": {
          "icao": "LFPB"
        },
        "endAirport": {
          "icao": "ESGG"
        },
        "dateTime": {
          "date": "2016-08-17",
          "time": "11:00",
          "departure": true,
          "local": false
        },
        "paxCount": "0",
        "paxSegment": false,
        "showToBuyer": false,
        "distanceNM": 679,
        "blockTimeMinutes": 118,
        "flightMinutes": 108
      }
    ],
    "lift": {
      "aircraftTail": "N12345"
    },
    "messageForBuyer" : "Price does not include de-icing.",
    "currencyCode": "EUR",
    "sellerUniqueQuoteIdentifier": "Q#18272",
    "totalPrice": 15100
  }
}

Output

The calling application should:

  • Make sure the returned tripmsgs.id is associated with the sent message stored in the application’s data model.
  • Make sure the returned sellerQuote.id is associated with the quote stored in the application’s data model.
  • Make sure the returned tripId (Marketplace TripID) is part of the booked activity in any availability upload.

Example of the response from a successful call to this operation

{
  "meta": {
    "errors": [],
    "warnings": [],
    "infos": []
  },
  "data": {
    "id": "asellermsg-20202020",
    "href": "https://sandbox.avinode.com/api/tripmsgs/asellermsg-20202020",
    "type": "tripmsgs",
    "links": {
      "trips": [
        {
          "id": "atrip-21212121",
          "href": "https://sandbox.avinode.com/api/trips/atrip-21212121",
          "type": "trips"
        }
      ]
    },
    "lift": [
      {
        "id": "3F05702B-9331-4FED-A18A-0BEB11067A8E",
        "aircraftCategory": "Ultra long range",
        "aircraftType": "Global Express",
        "aircraftTail": "SBQ-166BZ",
        "maxPax": 12,
        "ownAircraft": true
      }
    ],
    "createdOn": "2016-10-21T21:43:00Z",
    "message": "We are pleased to give you the following offer. /Maria",
    "rfqAccepted": true,
    "sellerQuote": {
      "id": "aquote-97979797",
      "href": "https://sandbox.avinode.com/api/quotes/aquote-97979797",
      "type": "quotes",
      "createdOn": "2016-10-21T21:43:00Z",
      "sellerCompany": {
        "id": "16D90630-7344-4A73-9689-8A10CE5EABCD",
        "displayName": "Globex Air Charter"
      },
      "sellerAccount": {
        "id": "A34AB9F4-316B-4702-A6AF-EEF0F5909876",
        "displayName": "Maria Martinez"
      },
      "sellerPrice": {
        "currency": "EUR",
        "price": 15100,
        "conversionCurrency": null,
        "convertedPrice": null
      },
      "sellerMessage": "We are pleased to give you the following offer. /Maria",
      "avinodeGenerated": false,
      "reservable": false,
      "lift": {
        "id": "3F05702B-9331-4FED-A18A-0BEB110AABB",
        "aircraftCategory": "Ultra long range",
        "aircraftType": "Global Express",
        "aircraftTail": "N98765",
        "maxPax": 12,
        "ownAircraft": true
      },
      "segments": [
        {
          "startAirport": {
            "id": "aport-5955",
            "name": "LANDVETTER",
            "city": "GOTEBORG",
            "country": {
              "code": "SE",
              "name": "Sweden"
            },
            "icao": "ESGG",
            "iata": "GOT"
          },
          "endAirport": {
            "id": "aport-6401",
            "name": "LUTON",
            "city": "LONDON (LUTON)",
            "country": {
              "code": "GB",
              "name": "United Kingdom"
            },
            "icao": "EGGW",
            "iata": "LTN"
          },
          "departureDateTime": {
            "dateTimeUTC": "2016-08-17T05:30:00Z",
            "dateTimeLocal": "2016-08-17T07:30:00+02:00",
            "calculated": true
          },
          "arrivalDateTime": {
            "dateTimeUTC": "2016-08-17T07:10:00Z",
            "dateTimeLocal": "2016-08-17T08:10:00+01:00",
            "calculated": true
          },
          "blockMinutes": 100,
          "flightMinutes": 90,
          "paxCount": 0,
          "paxSegment": false,
          "distanceNM": 602
        },
        {
          "startAirport": {
            "id": "aport-6401",
            "name": "LUTON",
            "city": "LONDON (LUTON)",
            "country": {
              "code": "GB",
              "name": "United Kingdom"
            },
            "icao": "EGGW",
            "iata": "LTN"
          },
          "endAirport": {
            "id": "aport-3378",
            "name": "LE BOURGET",
            "city": "PARIS",
            "country": {
              "code": "FR",
              "name": "France"
            },
            "icao": "LFPB",
            "iata": "LBG"
          },
          "departureDateTime": {
            "dateTimeUTC": "2016-08-17T08:00:00Z",
            "dateTimeLocal": "2016-08-17T09:00:00+01:00",
            "calculated": false
          },
          "arrivalDateTime": {
            "dateTimeUTC": "2016-08-17T08:53:00Z",
            "dateTimeLocal": "2016-08-17T10:53:00+02:00",
            "calculated": true
          },
          "blockMinutes": 53,
          "flightMinutes": 43,
          "paxCount": 2,
          "paxSegment": true,
          "distanceNM": 207
        },
        {
          "startAirport": {
            "id": "aport-3378",
            "name": "LE BOURGET",
            "city": "PARIS",
            "country": {
              "code": "FR",
              "name": "France"
            },
            "icao": "LFPB",
            "iata": "LBG"
          },
          "endAirport": {
            "id": "aport-5955",
            "name": "LANDVETTER",
            "city": "GOTEBORG",
            "country": {
              "code": "SE",
              "name": "Sweden"
            },
            "icao": "ESGG",
            "iata": "GOT"
          },
          "departureDateTime": {
            "dateTimeUTC": "2016-08-17T11:00:00Z",
            "dateTimeLocal": "2016-08-17T13:00:00+02:00",
            "calculated": true
          },
          "arrivalDateTime": {
            "dateTimeUTC": "2016-08-17T12:58:00Z",
            "dateTimeLocal": "2016-08-17T14:58:00+02:00",
            "calculated": true
          },
          "blockMinutes": 118,
          "flightMinutes": 108,
          "paxCount": 0,
          "paxSegment": false,
          "distanceNM": 679
        }
      ]
    },
    "sellerCompany": {
      "id": "16D90630-7344-4A73-9689-8A10CE5EABCD",
      "displayName": "Globex Air Charter"
    },
    "sellerAccount": {
      "id": "A34AB9F4-316B-4702-A6AF-EEF0F5909876",
      "displayName": "Maria Martinez"
    },
    "buyerCompany": {
      "id": "7145AD1A-9A56-49C2-8F27-E8546A551234",
      "displayName": "Acme Charter Broker"
    },
    "buyerAccount": {
      "id": "FDF25615-13A7-4A12-9465-4DCBCE5A5678",
      "displayName": "John Smith"
    },
    "tripId": "2MZH9W"
  }
}

Input

id
id

This is either:

  • A lift id. Using this will decline a specific requested lift in the RFQ. If the RFQ contains other requested lift, not yet declined or quoted, then these will still be considered unanswered.
  • An RFQ id. Using this will decline the entire RFQ, including any requested lift.

HTTP headers

X-Avinode-ActAsAccount
X-Avinode-ActAsAccount

If the person initiating this action has a personal Avinode Marketplace user account, then the username for that user account should be sent in this HTTP header. The buyer will then see the name of the person that preformed this action.

Definition

POST /tripmsgs/{requestId}/decline

Payload

message
message

A text message explaining the reason for declining.

suppressNotification
suppressNotification

If this is true the API servers will not send an email to the buyer informing about this update to the RFQ.

Here is an example of a JSON payload.

{
  "message": "Sorry, we have no available aircraft for this trip.",
  "suppressNotification": false
}

Output

The calling application should make sure the returned tripmsgs.id is associated with the sent message stored in the application’s data model.

Here is an example of the response from a successful call to this operation.

{
  "meta": {
    "errors": [],
    "warnings": [],
    "infos": []
  },
  "data": {
    "id": "asellermsg-19191919",
    "href": "https://sandbox.avinode.com/api/tripmsgs/asellermsg-19191919",
    "type": "tripmsgs",
    "links": {
      "trips": [
        {
          "id": "atrip-21212121",
          "href": "https://sandbox.avinode.com/api/trips/atrip-21212121",
          "type": "trips"
        }
      ]
    },
    "lift": [
      {
        "id": "asellerlift-36363636",
        "aircraftCategory": "Ultra long range",
        "aircraftType": "Global Express",
        "aircraftTail": "N98765",
        "maxPax": 12,
        "ownAircraft": true
      }
    ],
    "createdOn": "2016-10-21T21:11:08Z",
    "message": "Sorry, we have no available aircraft for this trip.",
    "rfqAccepted": false,
    "sellerCompany": {
      "id": "16D90630-7344-4A73-9689-8A10CE5EABCD",
      "displayName": "Globex Air Charter"
    },
    "sellerAccount": {
      "id": "A34AB9F4-316B-4702-A6AF-EEF0F5909876",
      "displayName": "Maria Martinez"
    },
    "buyerCompany": {
      "id": "7145AD1A-9A56-49C2-8F27-E8546A551234",
      "displayName": "Acme Charter Broker"
    },
    "buyerAccount": {
      "id": "FDF25615-13A7-4A12-9465-4DCBCE5A5678",
      "displayName": "John Smith"
    }
  }
}

Input

targetURI
targetURI

This is the address of the service that the application has set up to handle notifications. The service consuming the call must support SSL (https) and use a trusted (i.e. not self-signed) SSL certificate. One company cannot create multiple webhooks with the same targetURI.

displayName
displayName

This is a name for this webhook. The recommended naming convention is “[application name] – [notification category]”.

active
active

This is the status of the webhook. Active webhooks will generate notifications, inactive will not.

clientIdentifier
clientIdentifier

This is either:

  • The username if Basic HTTP Authentication is used
  • The OAuth key of OAuth Authentication is used
clientSecret
clientSecret

This is either:

  • The password if Basic HTTP Authentication is used
  • The OAuth secret of OAuth Authentication is used
clientAuthenticationType
clientAuthenticationType

This sets the type of authentication that will be used when notifications are delivered. These are the valid values.

  • NONE
  • BASIC
  • OAUTH
eventTypes
eventTypes

This specifies which categories of notifications that this webhook subscribes to. These are the valid values.

  • EmptyLegs
  • TripMessagesSeller
  • TripMessagesBuyer
  • TripMessagesMine
  • ScheduledTrips
  • ClientLeads

Definition

POST /webhooks/settings

Here is an example of a JSON payload.

In this example an application called GoldFMS creates a webhook to subscribe to all notifications in the Buyer Message category. All webhooks are created for the company associated with the API connection that is used to make this API call. This means that Buyer Message notifications for this company will be delivered by this webhook.

{
  "targetURI": "https://notifications.goldfms.com/notifications",
  "displayName": "GoldFMS - Buyer messages",
  "active": true,
  "clientIdentifier": "acmejet",
  "clientSecret": "ks7U5twP",
  "clientAuthenticationType": "BASIC",
  "eventTypes": [
    "TripMessagesBuyer"
  ]
}

Output

The application creating the webhook should always store and keep track of all ids of any created webhooks. The id will be used when the application updates a webhook. For example for inactivating or reactivating or changing any of the other settings. The PUT /webhooks/settings/{id} operation is used for updating a webhook.

Here is an example of the response from a successful call to this operation:

{
  "meta": {
    "errors": [],
    "warnings": [],
    "infos": []
  },
  "data": {
    "id": "whs-123456",
    "href": "https://sandbox.avinode.com/api/webhooks/settings/whs-123456",
    "type": "settings",
    "targetURI": "https://notifications.goldfms.com/notifications",
    "displayName": "GoldFMS - Buyer messages",
    "active": "true"
  }
}

Input

id
id

This is the id of the existing webhook that the operation will update.

Definition

PUT /webhooks/settings/{id}

Payload

This operation uses the same payload as the POST /webhooks/settings operation.

Web App Settings

Some settings affecting the web app are available to the Avinode member by selecting Company -> App settings in the menu while logged in to the online Avinode Marketplace.

Settings configurable by Avinode member

Send confirmation to end client
Send confirmation to end client

By default, a confirmation email is sent to the visitor after the visitor has requested a more detailed quote. With this setting, the Avinode member can decide if such a confirmation email should be sent or not.

Safety rating filter
Safety rating filter

With this setting a filter can be applied so only aircraft with a certain safety rating will be used when compiling the results.

Uploads
Uploads

Terms and conditions
A link to the uploaded PDF document will be visible to the visitor in the web app.

Email logotype
This logotype will be used in the confirmation email sent to the visitor.

Contact Info
Contact Info

This is the contact information to the Avinode member that will be displayed in the web app.

Commission
Commission

This is the commission, in percent, that will be added to the prices displayed to the visitor. This is by default set to 10 %. This setting is only available in the Broker Web App and the Operator Web App.

Language
Language

In this settings section the Avinode member can configure the names and descriptions of the different aircraft categories. This setting is only available in the Broker Web App.

Categories
Categories

In this settings section the Avinode member can configure the aircraft categories available in the web app. This setting is only available in the Broker Web App.

Aircraft information
Aircraft information

This information is configurable by the Avinode member by selecting Aircraft -> Fleet while logged in to the online Avinode Marketplace. When editing an aircraft, the desired information can be entered in the Marketing section on the Basics tab. This is only applicable for the Operator Web App.

Description
This text is displayed beneath the aircraft photos in the aircraft pop-up window in the Operator web app.

Aircraft Fact Sheet
A link to this PDF document will be visible to the visitor in the web app when viewing the aircraft details.

Settings configurable by Avinode staff

Fleet filter
Fleet filter

This setting decides which aircraft in the Avinode Marketplace that will be considered when compiling the results. For the Broker Web App and the Empty leg web app, the default fleet filter includes all aircraft in the Avinode Marketplace. For the Operator Web App, the default fleet filter includes all aircraft marketed by the operator in the Avinode Marketplace.

 

Require visitor contact information
Require visitor contact information

This setting can be used to require the visitor’s contact information to be submitted before any results are displayed. This contact information will be emailed to the Avinode Member owning the web app even if the visitor does not proceed to send a request. This setting is only available in the Broker Web App and the Operator Web App.

Exclude category results
Exclude category results

This setting can be used to omit the aircraft category result page. The visitor will then only see the aircraft model results. This setting is only available in the Broker Web App.

Settings configurable in the web app code

Information about these settings are available in the install instructions for each specific web app type.

Markup

Below the example the different elements are described in detail.

Example

This code example shows a web page with all the code required for a broker web app.

<html>
<head>
  <meta name="gwt:property" content="locale=en_US" />
  <link rel="stylesheet" href="broker-web-app-custom-style.css" type="text/css" />
  <script type="text/javascript" src="https://services.avinode.com/avinode/AvinodeLinkWeb/AvinodeLinkApp/AvinodeLinkApp.nocache.js"></script>
  <script type="text/javascript">
    function onAvinodeLinkLoaded() {
      AvinodeLink.initBroker(
        {
          login: 'replace-with-web-app-username',
          credentials: 'replace-with-web-app-password',
          containerId: 'avinode-broker-web-app',
          currency: 'EUR',
          layout: 'wide',
          googleApiKey: 'replace-with-google-api-key',
          campaignKey: 'replace-with-campaign-key',
        }
      );
    }
  </script>
</head>
<body>
  <h1>Find charter flights</h1>
  <p>Lorem ipsum dolor sit amet, exerci aliquando cum no, vim an epicuri intellegat disputando.</p>
  <div id="avinode-broker-web-app"></div>
</body>
</html>

Locale

This tag is used to specify the default locale. This will affect which language that will be displayed as default and also the default date and time formats. The value of the locale parameter can be replaced with any of the supported locale codes (en_US, en, de, fr, es, it, ru, nl, pt_BR). Please note that the upper and lower case of these codes must be exactly as stated.

With the en_US code, the web app will use the ‘mmddyy‘ date format and the AM/PM time format. All other codes uses the ‘ddmmyy’ date format and the 24 hour time format. Please note that the corresponding language must be set up in the App settings available to the member in the Avinode Marketplace. Also note that the default currency will not be affected by this setting.

Locale meta tag

<meta name="gwt:property" content="locale=en_US" />

Style

This link tag is used to include a file containing CSS styling information. Here is an sample file containing some CSS instructions that can be used to change the style of the web app.

This file should be uploaded and edited on the server hosting the page where the web app is installed. Linking directly to this file hosted here on the Developer Portal is not allowed. The file includes some instructions on how the different parts of the web app can be styled. Using this file is however not required, the web developer installing the web app can freely write any CSS instructions to alter the style and appearance of the web app.

Stylesheet link tag

<link rel="stylesheet" href="broker-web-app-custom-style.css" type="text/css" />

Web app script import

This <script> tag includes the web app script in the page.

Script import tag

<script type="text/javascript" src="https://services.avinode.com/avinode/AvinodeLinkWeb/AvinodeLinkApp/AvinodeLinkApp.nocache.js"></script>

Web app init function

This <script> tag contains the init function that will automatically be executed after the browser has loaded the HTML page. This will render the web app in the specified <div> tag. The input parameters to this function should be replaced with the appropriate values.

Attributes

login
login

This is the web app login name (i.e. username), issued by Avinode, for this web app.

 

credentials
credentials

This is the credentials (i.e. password), issued by Avinode, for this web app.

containerId
containerId

This is the id of the <div> tag where the web app should be displayed.

currency
currency

This is the default currency that the web app will use. The value must be the three letter currency code in uppercase. Information about different currency codes can be found on Wikipedia.

layout
layout

This parameter will affect the layout of the search form. Valid values are ‘thin’ or ‘wide’. A thin layout will stack the input fields for from airport, to airport and passengers vertically and the wide layout will stack them horizontally. A thin layout is suitable if the width of your <div> tag is around 170 to 300 pixels and a wide layout is suitable for widths larger than 300 pixels.

googleApiKey
googleApiKey

This is the Google API key, issued by Google, that should be used for this web app.

campaignKey
optional
campaignKey
optional

This is a user defined string. The value set in this parameter will be prepended to the lead message. So, for example, if the web app is available on different pages, and on each page a different campaign key is used, the Avinode member can then see from which page the lead originated. This parameter is optional.

Example

<script type="text/javascript">
  function onAvinodeLinkLoaded() {
    AvinodeLink.initBroker(
      {
        login: 'replace-with-web-app-username',
        credentials: 'replace-with-web-app-password',
        containerId: 'avinode-broker-web-app',
        currency: 'EUR',
        layout: 'wide',
        googleApiKey: 'replace-with-google-api-key'
      }
    );
  }
</script>

Web app container

This <div> tag is where, in the HTML page, the web app will be displayed.

Example

<div id="avinode-broker-web-app"></div>

Markup

Below the example the different elements are described in detail.

Example

This code example shows a web page with all the code required for an operator web app.

<html>
<head>
  <meta name="gwt:property" content="locale=en_US" />
  <link rel="stylesheet" href="operator-web-app-custom-style.css" type="text/css" />
  <script type="text/javascript" src="https://services.avinode.com/avinode/AvinodeLinkWeb/AvinodeLinkApp/AvinodeLinkApp.nocache.js"></script>
  <script type="text/javascript">
    function onAvinodeLinkLoaded() {
      AvinodeLink.initOperator(
        {
          login: 'replace-with-web-app-username',
          credentials: 'replace-with-web-app-password',
          containerId: 'avinode-operator-web-app',
          currency: 'EUR',
          layout: 'wide',
          googleApiKey: 'replace-with-google-api-key'
        }
      );
    }
  </script>
</head>
<body>
  <h1>Find charter flights</h1>
  <p>Lorem ipsum dolor sit amet, exerci aliquando cum no, vim an epicuri intellegat disputando.</p>
  <div id="avinode-operator-web-app"></div>
</body>
</html>

Locale

This <meta> tag is used to specify the default locale. This will affect which language that will be displayed as default and also the default date and time formats. The value of the locale parameter can be replaced with any of the supported locale codes (en_US, en, de, fr, es, it, ru, nl, pt_BR). Please note that the upper and lower case of these codes must be exactly as stated.

With the en_US code, the web app will use the 'mmddyy' date format and the AM/PM time format. All other codes uses the 'ddmmyy' date format and the 24 hour time format. Note that the default currency will not be affected by this setting.

Locale meta tag

<meta name="gwt:property" content="locale=en_US" />

Style

This <link> tag is used to include a file containing CSS styling information. Here is an sample file containing some CSS instructions that can be used to change the style of the web app.

This file should be uploaded and edited on the server hosting the page where the web app is installed. Linking directly to this file hosted here on the Developer Portal is not allowed. The file includes some instructions on how the different parts of the web app can be styled. Using this file is however not required, the web developer installing the web app can freely write any CSS instructions to alter the style and appearance of the web app.

Stylesheet link tag

<link rel="stylesheet" href="operator-web-app-custom-style.css" type="text/css" />

Web app script import

This <script> tag includes the web app script in the page.

Script import tag

<script type="text/javascript" src="https://services.avinode.com/avinode/AvinodeLinkWeb/AvinodeLinkApp/AvinodeLinkApp.nocache.js"></script>

Web app init function

This <script> tag contains the init function that will automatically be executed after the browser has loaded the HTML page. This will render the web app in the specified <div> tag. The input parameters to this function should be replaced with the appropriate values.

Attributes

login
login

This is the web app login name (i.e. username), issued by Avinode, for this web app.

credentials
credentials

This is the credentials (i.e. password), issued by Avinode, for this web app.

containerId
containerId

This is the id of the <div> tag where the web app should be displayed.

currency
currency

This is the default currency that the web app will use. The value must be the three letter currency code in uppercase. Information about different currency codes can be found on Wikipedia.

layout
layout

This parameter will affect the layout of the search form. Valid values are ‘thin’ or ‘wide’. A thin layout will stack the input fields for from airport, to airport and passengers vertically and the wide layout will stack them horizontally. A thin layout is suitable if the width of your <div> tag is around 170 to 300 pixels and a wide layout is suitable for widths larger than 300 pixels.

googleApiKey
googleApiKey

This is the Google API key, issued by Google, that should be used for this web app.

Example

<script type="text/javascript">
  function onAvinodeLinkLoaded() {
    AvinodeLink.initOperator(
      {
        login: 'replace-with-web-app-username',
        credentials: 'replace-with-web-app-password',
        containerId: 'avinode-operator-web-app',
        currency: 'EUR',
        layout: 'wide',
        googleApiKey: 'replace-with-google-api-key'
      }
    );
  }
</script>

Web app container

This <div> tag is where, in the HTML page, the web app will be displayed.

Example

<div id="avinode-operator-web-app"></div>

Markup

This code example shows a web page with all the code required for a empty leg web app. After the example the different elements are described in detail.

Example

<html>
<head>
  <meta name="gwt:property" content="locale=en_US" />
  <link rel="stylesheet" href="empty-leg-web-app-custom-style.css" type="text/css" />
  <script type="text/javascript" src="https://services.avinode.com/avinode/AvinodeLinkWeb/AvinodeLinkApp/AvinodeLinkApp.nocache.js"></script>
  <script type="text/javascript">
    function onAvinodeLinkLoaded() {
      AvinodeLink.initEmptyLeg(
        {
          login: 'replace-with-web-app-username',
          credentials: 'replace-with-web-app-password',
          elementId: 'avinode-empty-leg-web-app',
          currency: 'EUR',
          preferedAirport: 'LFPB',
          preferedRegion: 'EUROPE',
          googleApiKey: 'replace-with-google-api-key'
        }
      );
    }
  </script>
</head>
<body>
  <h1>Find Empty Legs</h1>
  <p>Lorem ipsum dolor sit amet, exerci aliquando cum no, vim an epicuri intellegat disputando.</p>
  <div id="avinode-empty-leg-web-app"></div>
</body>
</html>

Default locale

This <meta> tag is used to specify the default locale. This will affect which language that will be displayed as default and also the default date format. The value of the locale parameter can be replaced with any of the supported locale codes (en_US, en, de, fr, es, it, ru, nl, pt_BR). Please note that the upper and lower case of these codes must be exactly as stated.

Locale meta tag

<meta name="gwt:property" content="locale=en_US" />

Style

This tag is used to include a file containing CSS styling information. Here is an sample file containing some CSS instructions that can be used to change the style of the web app.

This file should be uploaded and edited on the server hosting the page where the web app is installed. Linking directly to this file hosted here on the Developer Portal is not allowed. The file includes some instructions on how the different parts of the web app can be styled. Using this file is however not required, the web developer installing the web app can freely write any CSS instructions to alter the style and appearance of the web app.

Stylesheet link tag

<link rel="stylesheet" href="empty-leg-web-app-custom-style.css" type="text/css" />

Web app script import

This <script> tag includes the web app script in the page.

Script import tag

<script type="text/javascript" src="https://services.avinode.com/avinode/AvinodeLinkWeb/AvinodeLinkApp/AvinodeLinkApp.nocache.js"></script>

Web app init function

This <script> tag contains the init function that will automatically be executed after the browser has loaded the HTML page. This will render the web app in the specified <div> tag. The input parameters to this function should be replaced with the appropriate values.

 

Attributes

login
login

This is the web app login name (i.e. username), issued by Avinode, for this web app.

credentials
credentials

This is the credentials (i.e. password), issued by Avinode, for this web app.

elementId
elementId

This is the id of the <div> tag where the web app should be displayed.

preferedAirport, preferedRegion
preferedAirport, preferedRegion

These parameters controls which empty legs that are displayed in the teaser list and on the Preferred tab on the result screen. The value of the preferedAirport parameter should be the ICAO code of the preferred airport. The value of the preferedRegion parameter must be one of EUROPE, AMERICA, MIDDLE EAST or INTERNATIONAL. Please note that the value must be specified in uppercase. Both of these parameters are optional so it is possible to specify just one of them.

googleApiKey
googleApiKey

This is the Google API key, issued by Google, that should be used for this web app.

Example

<script type="text/javascript">
  function onAvinodeLinkLoaded() {
    AvinodeLink.initEmptyLeg(
      {
        login: 'replace-with-web-app-username',
        credentials: 'replace-with-web-app-password',
        elementId: 'avinode-empty-leg-web-app',
        currency: 'EUR',
        preferedAirport: 'LFPB',
        preferedRegion: 'EUROPE',
        googleApiKey: 'replace-with-google-api-key'
      }
    );
  }
</script>

Web app container

This <div> tag is where, in the HTML page, the empty leg teaser will be displayed.

Example

<div id="avinode-empty-leg-web-app"></div>

Setup without teaser

It is possible use the Empty Leg Web App without displaying an empty leg teaser on the page. A link or an image that the visitor can click on can be used to open the Empty Leg Web App. This can be achieved by hiding the original <div> in an enclosing hidden <div> and adding a link that opens the web app with a javascript statement.

Example

<div style="display:none;">
  <div id="avinode-empty-leg-web-app"></div>
</div>
<a href="#" onclick="EmptyLegLinkWidget.open(); return false;">View Empty Legs</a>

Open web app automatically when page is loaded

If an URL parameter named loadEL is set to true when the browser loads the page containing the web app, then the web app will open automatically.

Example

http://www.domain.com/emptyleg/?loadEL=true

Setup on same HTML page as another Avinode Web App

If the Empty Leg Web App is set up on the same page as a Broker Web App or an Operator Web App, then the init functions must be put in the same instance of the onAvinodeLinkLoaded function. Also the web app script should only be imported once. The same Google API key can be used for both web apps. Below is an example of a page containing two web apps.

Example

<html>
<head>
  <meta name="gwt:property" content="locale=en_US" />
  <link rel="stylesheet" href="broker-web-app-custom-style.css" type="text/css" />
  <link rel="stylesheet" href="empty-leg-web-app-custom-style.css" type="text/css" />
  <script type="text/javascript" src="https://services.avinode.com/avinode/AvinodeLinkWeb/AvinodeLinkApp/AvinodeLinkApp.nocache.js"></script>
  <script type="text/javascript">
    function onAvinodeLinkLoaded() {
      AvinodeLink.initBroker(
        {
          login: 'replace-with-broker-web-app-username',
          credentials: 'replace-with-broker-web-app-password',
          containerId: 'avinode-broker-web-app',
          currency: 'EUR',
          layout: 'wide',
          googleApiKey: 'replace-with-google-api-key'
        }
      );
      AvinodeLink.initEmptyLeg(
        {
          login: 'replace-with-empty-leg-web-app-username',
          credentials: 'replace-with-empty-leg-web-app-password',
          elementId: 'avinode-empty-leg-web-app',
          currency: 'EUR',
          preferedAirport: 'LFPB',
          preferedRegion: 'EUROPE',
          googleApiKey: 'replace-with-google-api-key'
        }
      );
    }
  </script>
</head>
<body>
  <h2>Find charter flights</h2>
  <p>Lorem ipsum dolor sit amet, exerci aliquando cum no, vim an epicuri intellegat disputando.</p>
  <div id="avinode-broker-web-app"></div>
  <h2>Find Empty Legs</h2>
  <p>Lorem ipsum dolor sit amet, exerci aliquando cum no, vim an epicuri intellegat disputando.</p>
  <div id="avinode-empty-leg-web-app"></div>
</body>
</html>
Copyright 2018 Avinode - Policies