Engine Content Service API

The ContentService API from Engine — 2 operation(s) for contentservice.

OpenAPI Specification

hotel-engine-contentservice-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Omni, Powered by Engine Content Service API
  description: Definitions for the Omni travel API.
  version: 2.4.0
  contact:
    name: Omni API Support
    url: https://omni.engine.com/
  license:
    name: Apache License Version 2.0
    url: https://github.com/engine-public/engine-partner-api/blob/main/LICENSE
servers:
- url: https://partner-api.engine.com
tags:
- name: ContentService
paths:
  /content/v1/properties:
    post:
      summary: Retrieves details for specific properties.
      description: Retrieves details for the set of properties specified in the request
      operationId: ContentService_GetProperties
      responses:
        '200':
          description: A successful response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/v1GetPropertiesResponse'
        '400':
          description: Invalid request parameters.
          content:
            application/json:
              schema: {}
        default:
          description: An unexpected error response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/rpcStatus'
      tags:
      - ContentService
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/v1GetPropertiesRequest'
        description: A request to retrieve specific Properties by their IDs.
        required: true
  /content/v1/property:
    get:
      summary: List properties near a point of interest.
      operationId: ContentService_ListProperties
      responses:
        '200':
          description: A successful response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/v1ListPropertiesResponse'
              example:
                properties:
                - property:
                    id: L00000000000000140124
                    name: Holiday Inn Express & Suites Austin Downtown - University
                    physicalAddress:
                      addressLine:
                      - 805 Neches St
                      administrativeArea: TX
                      locality: Austin
                      postalCode: '78701'
                      countryCode: US
                    coordinates:
                      latitude: 30.2693
                      longitude: -97.737122
                    heroImageUri: https://i.travelapi.com/lodging/13000000/12310000/12303000/12302973/8299c3c9_z.jpg
                    description: Attractively located in the center of Austin, Holiday Inn Express Hotel & Suites Austin Downtown - University, an IHG Hotel has air-conditioned rooms, an outdoor swimming pool, free WiFi and a fitness center. This 3-star hotel offers a 24-hour front desk and an ATM. Private parking is available on site. The rooms at the hotel come with a seating area and a flat-screen TV with satellite channels. At Holiday Inn Express Hotel & Suites Austin Downtown - University, an IHG Hotel rooms contain a private bathroom with free toiletries and a hairdryer. Breakfast is available each morning, and includes buffet, continental and American options. The accommodation has a sun terrace. Guests can use the business center or relax in the snack bar. Popular points of interest near Holiday Inn Express Hotel & Suites Austin Downtown - University, an IHG Hotel include Shoal Beach, Capitol Building and Austin Convention Center. Austin-Bergstrom International Airport is 5.6 miles from the property.
                  distance:
                    value: 5.2
                    unit: DISTANCE_UNIT_MILE
                - property:
                    id: L00000000000000092817
                    name: Sonesta Select Austin North
                    physicalAddress:
                      addressLine:
                      - 7522 N Interstate Hwy 35
                      administrativeArea: TX
                      locality: Austin
                      postalCode: '78752'
                      countryCode: US
                    coordinates:
                      latitude: 30.33843
                      longitude: -97.703827
                    heroImageUri: https://i.travelapi.com/lodging/1000000/50000/41300/41290/232ce1b7_z.jpg
                    description: Featuring an outdoor pool, Sonesta Select Austin North Central is 5 mi from Austin city center. This hotel offers free WiFi access. Rooms at Sonesta Select Austin North Central will provide you with a flat-screen TV with cable and an air-conditioned seating area. Complete with a refrigerator, the dining area also has a coffee machine. At Sonesta Select Austin North Central you will find a fitness center. Other facilities offered include meeting facilities, a shared lounge and dry cleaning. The hotel is 4.2 mi from University of Texas and 5.6 mi from Austin Convention Center. Bergstrom Airport is 8.7 mi away. The property offers free parking. When traveling with pets, please note that an extra charge of $75 per pet, per stay applies. A maximum of 2 pets per room is allowed
                  distance:
                    value: 6.7
                    unit: DISTANCE_UNIT_MILE
        default:
          description: An unexpected error response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/rpcStatus'
      parameters:
      - name: request.criteria.radius.coordinates.latitude
        description: The center-point latitude.
        in: query
        required: false
        schema:
          type: number
          format: double
      - name: request.criteria.radius.coordinates.longitude
        description: The center-point longitude.
        in: query
        required: false
        schema:
          type: number
          format: double
      - name: request.criteria.radius.physicalAddress.recipients
        description: 'Optionally, any individual recipients.

          For example, "Alexander Hamilton", "Aaron Burr"

          May be empty.'
        in: query
        required: false
        style: form
        explode: true
        schema:
          type: array
          items:
            type: string
      - name: request.criteria.radius.physicalAddress.organization
        description: 'Optionally, any organization or company as a recipient.

          For example, "Engine".'
        in: query
        required: false
        schema:
          type: string
      - name: request.criteria.radius.physicalAddress.addressLine
        description: 'Optionally, any address lines, in order as they''d appear on an envelope.

          For example, "233 S Wacker Dr", "108th Floor".

          May be empty.'
        in: query
        required: false
        style: form
        explode: true
        schema:
          type: array
          items:
            type: string
      - name: request.criteria.radius.physicalAddress.administrativeArea
        description: 'Optionally, the State, province, prefecture, oblast, or area.

          For example, "Texas"'
        in: query
        required: false
        schema:
          type: string
      - name: request.criteria.radius.physicalAddress.locality
        description: 'Optionally, the City, or Post Town

          For example, "Austin"'
        in: query
        required: false
        schema:
          type: string
      - name: request.criteria.radius.physicalAddress.postalCode
        description: 'Optionally, the postal code, if one exists, for the address.

          For example, "78757".'
        in: query
        required: false
        schema:
          type: string
      - name: request.criteria.radius.physicalAddress.countryCode
        description: 'Optionally, the ISO 3166-1 alpha-2 country code.

          For example, "US".

          See https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2

          See https://www.iso.org/iso-3166-country-codes.html'
        in: query
        required: false
        schema:
          type: string
      - name: request.criteria.radius.freeformSearchText
        description: 'A description of a point of interest, an unstructured address, etc.

          Freeform input will make a "best effort" match to a point of interest and its corresponding geo coordinates.

          If available, using `coordinates` or `physical_address` will yield better results.'
        in: query
        required: false
        schema:
          type: string
      - name: request.criteria.radius.radius.value
        description: The distance quantity.
        in: query
        required: false
        schema:
          type: number
          format: double
      - name: request.criteria.radius.radius.unit
        description: "The unit of distance measurement.\n\n - DISTANCE_UNIT_MILE: A mile in the imperial system of units.\n - DISTANCE_UNIT_KILOMETER: A kilometer in the international system of units (metric)."
        in: query
        required: false
        schema:
          type: string
          enum:
          - DISTANCE_UNIT_MILE
          - DISTANCE_UNIT_KILOMETER
          default: DISTANCE_UNIT_MILE
      - name: request.criteria.excludePropertiesWithoutHeroImage
        description: 'Optionally, if true, properties that do not have a `Property#hero_image_uri` will not be returned.

          Excluded properties will not count against the page size or limit.'
        in: query
        required: false
        schema:
          type: boolean
          default: 'false'
      - name: request.criteria.excludePropertiesWithoutDescription
        description: 'Optionally, if true, properties that do not have a `Property#description` will not be returned.

          Excluded properties will not count against the page size or limit.'
        in: query
        required: false
        schema:
          type: boolean
          default: 'false'
      - name: request.criteria.sortMode
        description: "The order in which the properties will be returned.\n\n - PROPERTY_SORT_MODE_DISTANCE: Results are returned in ascending order from the center point of the `ListProperties.inclusion_type`."
        in: query
        required: false
        schema:
          type: string
          enum:
          - PROPERTY_SORT_MODE_DISTANCE
          default: PROPERTY_SORT_MODE_DISTANCE
      - name: request.pageSize
        description: 'The maximum number of search results to be returned in a page.

          Default: 100

          Minimum: 1

          Maximum: 500'
        in: query
        required: false
        schema:
          type: integer
          format: int32
          default: '100'
      - name: nextPageToken
        description: Optionally, a `next_page_token` retrieved from a `ListPropertiesResponse`.
        in: query
        required: false
        schema:
          type: string
      tags:
      - ContentService
components:
  schemas:
    v1GetPropertiesRequest:
      type: object
      properties:
        propertyIds:
          type: array
          items:
            type: string
          description: 'The list of Engine [Property] IDs.

            Maximum of 50 property IDs per request.'
          maxItems: 50.0
          minItems: 1.0
      description: A request to retrieve specific Properties by their IDs.
      title: GetPropertiesRequest_v1
    lodgingExternalCatalogIdentifierList:
      type: object
      properties:
        identifiers:
          type: array
          items:
            type: string
          description: 'Supplier property identifiers for the associated catalog key.

            May contain multiple identifiers when more than one external record is mapped to the Engine record.'
      description: A list of external catalog identifiers for a single catalog key.
      title: Content_ExternalCatalogIdentifierList_v1
    enginecontentservicev1ResponsiveProperty:
      type: object
      properties:
        property:
          $ref: '#/components/schemas/lodgingProperty'
          description: The property details.
        distance:
          $ref: '#/components/schemas/v1Distance'
          description: The distance between the center point of the `ListProperties.inclusion_type` and the property.
      description: A `Property` that meets the criteria of a `ContentServiceV1.ListProperties` request.
      title: ResponsiveProperty_v1
    lodgingLodgingAmenityCode:
      type: string
      enum:
      - LODGING_AMENITY_CODE_UNKNOWN
      - LODGING_AMENITY_CODE_AIR_CONDITIONING
      - LODGING_AMENITY_CODE_DINING
      - LODGING_AMENITY_CODE_DRY_CLEANING
      - LODGING_AMENITY_CODE_ELECTRIC_VEHICLE_CHARGING
      - LODGING_AMENITY_CODE_FITNESS_CENTER
      - LODGING_AMENITY_CODE_FREE_AIRPORT_SHUTTLE
      - LODGING_AMENITY_CODE_FREE_BREAKFAST
      - LODGING_AMENITY_CODE_FREE_PARKING
      - LODGING_AMENITY_CODE_FULL_KITCHEN
      - LODGING_AMENITY_CODE_HIGH_SPEED_INTERNET
      - LODGING_AMENITY_CODE_KITCHENETTE
      - LODGING_AMENITY_CODE_MEETING_SPACE
      - LODGING_AMENITY_CODE_PET_FRIENDLY
      - LODGING_AMENITY_CODE_SPA
      - LODGING_AMENITY_CODE_SWIMMING_POOL
      - LODGING_AMENITY_CODE_TRUCK_PARKING
      default: LODGING_AMENITY_CODE_UNKNOWN
      title: Content_LodgingAmenityCode_v1
    v1ListPropertiesResponse:
      type: object
      properties:
        properties:
          type: array
          items:
            type: object
            $ref: '#/components/schemas/enginecontentservicev1ResponsiveProperty'
          title: Up to `ListPropertiesRequest.page_size` responsive to
        nextPageToken:
          type: string
          description: Optionally, an opaque token to be passed into the next `ListPropertiesRequest` in order to retrieve the next page of results.
      description: A response to a `ContentServiceV1.ListProperties` request.
      title: ListPropertiesResponse_v1
    v1Image:
      type: object
      properties:
        uri:
          type: string
          title: 'The URI of the [Image].

            For example, "https://example.com/image.jpg"'
      description: Represents an [Image] with optional metadata.
      title: Common_Image_v1
    v1EmailType:
      type: string
      enum:
      - EMAIL_TYPE_UNSPECIFIED
      - EMAIL_TYPE_GENERAL
      - EMAIL_TYPE_BILLING
      - EMAIL_TYPE_RESERVATIONS
      - EMAIL_TYPE_SUPPORT
      default: EMAIL_TYPE_UNSPECIFIED
      description: "Describes the type of an email contact.\n\n - EMAIL_TYPE_UNSPECIFIED: Unspecified email type.\n - EMAIL_TYPE_GENERAL: General contact email.\n - EMAIL_TYPE_BILLING: Billing-related email.\n - EMAIL_TYPE_RESERVATIONS: Reservations and booking email.\n - EMAIL_TYPE_SUPPORT: Customer support email."
      title: Common_EmailType_v1
    v1ContactEmail:
      type: object
      properties:
        emailAddress:
          type: string
          description: The email address.
        emailType:
          $ref: '#/components/schemas/v1EmailType'
          description: Optional type of email contact.
      description: Contact email information.
      title: Common_ContactEmail_v1
    lodgingPropertyAmenity:
      type: object
      properties:
        amenityName:
          type: string
          title: 'Amenity name describing a [Property] feature or service.

            Examples: "Free WiFi", "Free Breakfast"'
        amenityCode:
          $ref: '#/components/schemas/lodgingLodgingAmenityCode'
          description: 'Amenity code, providing an easily machine readable representation of a [Property] feature or

            service, if mapped.'
      description: '[Property] amenity containing name for property features and services.'
      title: Content_PropertyAmenity_v1
    v1MediaItem:
      type: object
      properties:
        image:
          $ref: '#/components/schemas/v1Image'
          title: An [Image] this media item represents
        description:
          type: string
          title: 'A description of this media item

            Example: "A large restaurant"'
        tags:
          type: array
          items:
            type: string
          title: 'Tags categorizing the content of this media item

            Example: ["outdoor", "pool"]'
      description: A media item for visual or marketing context.
      title: Common_MediaItem_v1
    lodgingExternalCatalogIdentifiers:
      type: object
      properties:
        giataIdentifier:
          type: string
          description: GIATA identifier for this property.
        catalogIdentifiers:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/lodgingExternalCatalogIdentifierList'
          description: Catalog identifiers keyed by source keys.
      description: External catalog identifiers for property mapping.
      title: Content_ExternalCatalogIdentifiers_v1
    lodgingProperty:
      type: object
      properties:
        id:
          type: string
          description: The [Engine] identifier for this [Property].
        name:
          type: string
          description: The full name of this [Property].
        physicalAddress:
          $ref: '#/components/schemas/v1PostalAddress'
          description: 'The physical address of this [Property].

            This may differ from the mailing, billing, or other administrative addresses.'
        coordinates:
          $ref: '#/components/schemas/v1GeoPoint'
          description: The geographic location of this [Property].
        heroImageUri:
          type: string
          description: If available, A URI to the image to use as the primary image to identify this [Property].
        description:
          type: string
          description: If available, a brief textual description of this [Property].
        phoneNumber:
          type: string
          title: 'If available, an E.164-compliant primary phone number for this [Property].

            See https://en.wikipedia.org/wiki/E.164'
        emails:
          type: array
          items:
            type: object
            $ref: '#/components/schemas/v1ContactEmail'
          description: 'Contact email addresses for this property.

            May include general contact, billing, or reservation emails.'
        starRating:
          type: string
          title: 'Star rating for this property.

            Represents the official star rating classification system.

            See https://en.wikipedia.org/wiki/Hotel_rating

            Examples: "4", "5", "3.5"'
        amenities:
          type: array
          items:
            type: object
            $ref: '#/components/schemas/lodgingPropertyAmenity'
          title: 'Property amenities for this [Property].

            List of amenity names describing features and services available to guests.

            Examples: "Free WiFi", "Pool", "Fitness Center", "Free Breakfast"'
        mediaItems:
          type: array
          items:
            type: object
            $ref: '#/components/schemas/v1MediaItem'
          description: 'Media items for property gallery.

            Collection of media URIs for detailed property viewing and marketing.'
        catalog:
          $ref: '#/components/schemas/lodgingExternalCatalogIdentifiers'
          description: 'External catalog identifiers for this property.

            Used for integration with external booking systems.'
        checkInTime:
          type: string
          description: Check-in time in local time HH:MM 24-hour format (e.g., "15:00") for the [Property].
        checkOutTime:
          type: string
          description: Check-out time in local time HH:MM 24-hour format (e.g., "11:00") for the [Property].
        loyaltyRewardsProgram:
          $ref: '#/components/schemas/v1LoyaltyRewardsProgram'
          description: The loyalty rewards program associated with the [Property].
        timeZone:
          type: string
          title: 'The time zone for the [Property] in the IANA format.

            See https://www.iana.org/time-zones

            Examples: "America/Denver", "Atlantic/Madeira"'
      description: An individual Lodging location identified by [Engine].
      title: Content_Property_v1
    v1LoyaltyRewardsProgram:
      type: object
      properties:
        name:
          type: string
          description: Name of the loyalty reward program.
      description: Represents a single loyalty rewards program.
      title: Common_LoyaltyRewardsProgram_v1
    rpcStatus:
      type: object
      properties:
        code:
          type: integer
          format: int32
          description: 'The status code, which should be an enum value of

            [google.rpc.Code][google.rpc.Code].'
        message:
          type: string
          description: 'A developer-facing error message, which should be in English. Any

            user-facing error message should be localized and sent in the

            [google.rpc.Status.details][google.rpc.Status.details] field, or localized

            by the client.'
        details:
          type: array
          items:
            type: object
            $ref: '#/components/schemas/protobufAny'
          description: 'A list of messages that carry the error details.  There is a common set of

            message types for APIs to use.'
      description: 'The `Status` type defines a logical error model that is suitable for

        different programming environments, including REST APIs and RPC APIs. It is

        used by [gRPC](https://github.com/grpc). Each `Status` message contains

        three pieces of data: error code, error message, and error details.


        You can find out more about this error model and how to work with it in the

        [API Design Guide](https://cloud.google.com/apis/design/errors).'
    v1Distance:
      type: object
      properties:
        value:
          type: number
          format: double
          description: The distance quantity.
        unit:
          $ref: '#/components/schemas/v1DistanceUnit'
          description: The unit of distance measurement.
      description: The distance between two geographic points.
      title: Common_Distance_v1
    v1GetPropertiesResponse:
      type: object
      properties:
        properties:
          type: array
          items:
            type: object
            $ref: '#/components/schemas/lodgingProperty'
          description: The list of available [Property] objects including phone numbers.
        inaccessiblePropertyIds:
          type: array
          items:
            type: string
          description: The list of [Property] IDs that were requested but not found.
      description: A response containing [Property] information.
      title: GetPropertiesResponse_v1
    v1GeoPoint:
      type: object
      properties:
        latitude:
          type: number
          format: double
          description: The center-point latitude.
        longitude:
          type: number
          format: double
          description: The center-point longitude.
      description: A single geographic point, defined by latitude and longitude.
      title: Common_GeoPoint_v1
    v1DistanceUnit:
      type: string
      enum:
      - DISTANCE_UNIT_MILE
      - DISTANCE_UNIT_KILOMETER
      default: DISTANCE_UNIT_MILE
      description: "The unit type for a distance measurement.\n\n - DISTANCE_UNIT_MILE: A mile in the imperial system of units.\n - DISTANCE_UNIT_KILOMETER: A kilometer in the international system of units (metric)."
      title: Common_DistanceUnit_v1
    v1PostalAddress:
      type: object
      properties:
        recipients:
          type: array
          items:
            type: string
          description: 'Optionally, any individual recipients.

            For example, "Alexander Hamilton", "Aaron Burr"

            May be empty.'
        organization:
          type: string
          description: 'Optionally, any organization or company as a recipient.

            For example, "Engine".'
        addressLine:
          type: array
          items:
            type: string
          description: 'Optionally, any address lines, in order as they''d appear on an envelope.

            For example, "233 S Wacker Dr", "108th Floor".

            May be empty.'
        administrativeArea:
          type: string
          title: 'Optionally, the State, province, prefecture, oblast, or area.

            For example, "Texas"'
        locality:
          type: string
          title: 'Optionally, the City, or Post Town

            For example, "Austin"'
        postalCode:
          type: string
          description: 'Optionally, the postal code, if one exists, for the address.

            For example, "78757".'
        countryCode:
          type: string
          title: 'Optionally, the ISO 3166-1 alpha-2 country code.

            For example, "US".

            See https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2

            See https://www.iso.org/iso-3166-country-codes.html'
      description: Represents a Postal Address.
      title: Common_PostalAddress_v1
    protobufAny:
      type: object
      properties:
        '@type':
          type: string
          description: "A URL/resource name that uniquely identifies the type of the serialized\nprotocol buffer message. This string must contain at least\none \"/\" character. The last segment of the URL's path must represent\nthe fully qualified name of the type (as in\n`path/google.protobuf.Duration`). The name should be in a canonical form\n(e.g., leading \".\" is not accepted).\n\nIn practice, teams usually precompile into the binary all types that they\nexpect it to use in the context of Any. However, for URLs which use the\nscheme `http`, `https`, or no scheme, one can optionally set up a type\nserver that maps type URLs to message definitions as follows:\n\n* If no scheme is provided, `https` is assumed.\n* An HTTP GET on the URL must yield a [google.protobuf.Type][]\n  value in binary format, or produce an error.\n* Applications are allowed to cache lookup results based on the\n  URL, or have them precompiled into a binary to avoid any\n  lookup. Therefore, binary compatibility needs to be preserved\n  on changes to types. (Use versioned type names to manage\n  breaking changes.)\n\nNote: this functionality is not currently available in the official\nprotobuf release, and it is not used for type URLs beginning with\ntype.googleapis.com. As of May 2023, there are no widely used type server\nimplementations and no plans to implement one.\n\nSchemes other than `http`, `https` (or the empty scheme) might be\nused with implementation specific semantics."
      additionalProperties: {}
      description: "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nProtobuf library provides support to pack/unpack Any values in the form\nof utility functions or additional generated methods of the Any type.\n\nExample 1: Pack and unpack a message in C++.\n\n    Foo foo = ...;\n    Any any;\n    any.PackFrom(foo);\n    ...\n    if (any.UnpackTo(&foo)) {\n      ...\n    }\n\nExample 2: Pack and unpack a message in Java.\n\n    Foo foo = ...;\n    Any any = Any.pack(foo);\n    ...\n    if (any.is(Foo.class)) {\n      foo = any.unpack(Foo.class);\n    }\n    // or ...\n    if (any.isSameTypeAs(Foo.getDefaultInstance())) {\n      foo = any.unpack(Foo.getDefaultInstance());\n    }\n\n Example 3: Pack and unpack a message in Python.\n\n    foo = Foo(...)\n    any = Any()\n    any.Pack(foo)\n    ...\n    if any.Is(Foo.DESCRIPTOR):\n      any.Unpack(foo)\n      ...\n\n Example 4: Pack and unpack a message in Go\n\n     foo := &pb.Foo{...}\n     any, err := anypb.New(foo)\n     if err != nil {\n       ...\n     }\n     ...\n     foo := &pb.Foo{}\n     if err := any.UnmarshalTo(foo); err != nil {\n       ...\n     }\n\nThe pack methods provided by protobuf library will by default use\n'type.googleapis.com/full.type.name' as the type URL and the unpack\nmethods only use the fully qualified type name after the last '/'\nin the type URL, for example \"foo.bar.com/x/y.z\" will yield type\nname \"y.z\".\n\nJSON\n====\nThe JSON representation of an `Any` value uses the regular\nrepresentation of the deserialized, embedded message, with an\nadditional field `@type` which contains the type URL. Example:\n\n    package google.profile;\n    message Person {\n      string first_name = 1;\n      string last_name = 2;\n    }\n\n    {\n      \"@type\": \"type.googleapis.com/google.profile.Person\",\n      \"firstName\": <string>,\n      \"lastName\": <string>\n    }\n\nIf the embedded message type is well-known and has a custom JSON\nrepresentation, that representation will be embedded adding a field\n`value` which holds the custom JSON in addition to the `@type`\nfield. Example (for message [google.protobuf.Duration][]):\n\n    {\n      \"@type\": \"type.googleapis.com/google.protobuf.Duration\",\n      \"value\": \"1.212s\"\n    }"
externalDocs: https://engine-public.github.io/engine-partner-api