Expedia Fraud Protection API

API for fraud prevention and protection services within the Expedia Group platform.

OpenAPI Specification

expedia-fraud-protection-openapi-original.yml Raw ↑
openapi: 3.0.0
info:
  title: Expedia Group Fraud Prevention Service
  version: 'v2'
  description: "Fraud & Risk APIs to detect fraud"
  contact:
    name: "Risk Tech Verge"
    email: "[email protected]"
  x-eg-lifecycle: "PLANNED"
servers:
  - url: 'https://api.sandbox.expediagroup.com/fraud-prevention/v2'
tags:
  - name: OrderPurchaseScreen
  - name: OrderPurchaseUpdate
paths:
  '/order/purchase/screen':
    post:
      tags:
        - OrderPurchaseScreen
      description: 'The Order Purchase API gives a Fraud recommendation for a transaction. A recommendation can be Accept, Reject, or Review. A transaction is marked as Review whenever there are insufficient signals to recommend Accept or Reject. These incidents are manually reviewed, and a corrected recommendation is made asynchronously. '
      summary: 'Expedia Group Run fraud screening for one transaction'
      operationId: 'screen'
      security:
        - orderPurchaseScreenAuth:
            - fraudandrisk.fraud.order-purchase-screen
      requestBody:
        required: true
        content:
          'application/json':
            schema:
              $ref: '#/components/schemas/OrderPurchaseScreenRequest'
      responses:
        '200':
          description: 'The OrderPurchaseScreenRequest was successfully received and the order screening is complete.'
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/OrderPurchaseScreenResponse'
        '401':
          description: Unauthorized
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/UnauthorizedError'
        '403':
          description: Forbidden
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ForbiddenError'
        '404':
          description: Not Found
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/NotFoundError'
        '429':
          description: Too many requests
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/TooManyRequestsError'
        '500':
          description: Internal server error
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/InternalServerError'
        '502':
          description: Bad gateway
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/BadGatewayError'
        '503':
          description: Retryable Order Purchase Screen Failure
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/RetryableOrderPurchaseScreenFailure'
        '504':
          description: Gateway timeout
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/GatewayTimeoutError'
        '400':
          description: Bad request
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/BadRequestError'
  '/order/purchase/update':
    post:
      tags:
        - OrderPurchaseUpdate
      description: |
        The Order Purchase Update API is called when the status of the order has changed.

        For example, if the customer cancels the reservation, changes reservation in any way, or adds additional products or travelers to the reservation, the Order Purchase Update API is called to notify Expedia Group about the change.

        The Order Purchase Update API is also called when the merchant cancels or changes an order based on a Fraud recommendation.
      summary: 'Expedia Group Send an update for a transaction'
      operationId: 'update'
      security:
        - orderPurchaseUpdateAuth:
            - fraudandrisk.fraud.order-purchase-update
      requestBody:
        required: true
        description: |
          An OrderPurchaseUpdate request may be of one of the following types `ORDER_UPDATE`, `CHARGEBACK_FEEDBACK`, `INSULT_FEEDBACK`, `REFUND_UPDATE`, `PAYMENT_UPDATE`.
        content:
          'application/json':
            schema:
              $ref: "#/components/schemas/OrderPurchaseUpdateRequest"
            examples:
              OrderUpdate:
                summary: Sample OrderUpdate Request
                value:
                  type: ORDER_UPDATE
                  risk_id: '1234324324'
                  acquirer_reference_number: '12345'
                  order_status: COMPLETED
                  cancellation_reason:
                    primary_reason_description: string
              ChargebackFeedback:
                summary: Sample ChargebackFeedback Request
                value:
                  type: CHARGEBACK_FEEDBACK
                  risk_id: '1234324324'
                  chargeback_detail:
                    chargeback_status: RECEIVED
                    chargeback_reason: FRAUD
                    chargeback_amount:
                      value: 123.45
                      currency_code: "USD"
              InsultFeedback:
                summary: Sample InsultFeedback Request
                value:
                  type: INSULT_FEEDBACK
                  risk_id: '1234324324'
              RefundUpdate:
                summary: Sample RefundUpdate Request
                value:
                  type: REFUND_UPDATE
                  risk_id: "1234324324"
                  refund_status: "SETTLED"
                  refund_details:
                    acquirer_reference_number: "12345"
                    refund_deposit_date_time: "2022-07-24T01:01:01.111Z"
                    refund_settlement_date_time: "2022-07-24T01:01:01.111Z"
                    settlement_id: "12345"
                    refund_settled_amount:
                      value: 123.32
                      currency_code: "USD"
              PaymentUpdate:
                summary: Sample PaymentUpdate Request
                value:
                  type: PAYMENT_UPDATE
                  risk_id: "1234324324"
                  merchant_order_code: "12345"

      responses:
        '200':
          description: 'The OrderUpdateRequest was successful.'
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/OrderPurchaseUpdateResponse'
        '401':
          description: Unauthorized
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/UnauthorizedError'
        '403':
          description: Forbidden
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/ForbiddenError'
        '404':
          description: Order Purchase Update Not Found
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/OrderPurchaseUpdateNotFoundError'
        '429':
          description: Too many requests
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/TooManyRequestsError'
        '500':
          description: Internal server error
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/InternalServerError'
        '502':
          description: Bad gateway
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/BadGatewayError'
        '503':
          description: Retryable Order Purchase Update Failure
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/RetryableOrderPurchaseUpdateFailure'
        '504':
          description: Gateway timeout
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/GatewayTimeoutError'
        '400':
          description: Bad request
          content:
            'application/json':
              schema:
                $ref: '#/components/schemas/BadRequestError'
components:
  schemas:
    Error:
      description: The object used to describe an error, containing both human-readable and machine-readable information.
      type: object
      properties:
        code:
          description: Snake cased all caps error code interpreted from the HTTP status code that can programmatically be acted upon.
          type: string
          example: "BAD_REQUEST"
          enum:
            - UNAUTHORIZED
            - FORBIDDEN
            - NOT_FOUND
            - ORDER_PURCHASE_UPDATE_NOT_FOUND
            - TOO_MANY_REQUESTS
            - INTERNAL_SERVER_ERROR
            - BAD_GATEWAY
            - RETRYABLE_ORDER_PURCHASE_SCREEN_FAILURE
            - RETRYABLE_ORDER_PURCHASE_UPDATE_FAILURE
            - GATEWAY_TIMEOUT
            - BAD_REQUEST
        message:
          description: A human-readable explanation of the error, specific to this error occurrence.
          type: string
          example: "An input validation error was encountered. Please see causes for more details."
      required:
        - code
        - message
    UnauthorizedError:
      description: "Indicates that the token sent in the 'Authorization' header is either invalid or missing. Please check the value in the token field along with the token expiration time before retrying."
      example:
        code: "UNAUTHORIZED"
        message: "Invalid EG token provided. Please provide a valid token in the Authorization header."
      allOf:
        - $ref: "#/components/schemas/Error"
    ForbiddenError:
      description: "Indicates that the API cannot fulfill the request because while the client is correctly authenticated, the client doesn't have the permission to execute the specified operation. This error type does not imply that the request is valid, or that the resource against which the operation being performed exists or satisfies other pre-conditions."
      example:
        code: "FORBIDDEN"
        message: "Insufficient permissions to perform the request."
      allOf:
        - $ref: "#/components/schemas/Error"
    NotFoundError:
      description: "Indicates that the API cannot find the resource that is either being requested or against which the operation is being performed. Please check the request again to make sure that the request is valid."
      example:
        code: "NOT_FOUND"
        message: "The requested resource does not exist."
      allOf:
        - $ref: "#/components/schemas/Error"
    OrderPurchaseUpdateNotFoundError:
      description: "Indicates that the API cannot find the resource that is either being requested or against which the operation is being performed."
      example:
        code: "ORDER_PURCHASE_UPDATE_NOT_FOUND"
        message: "The request failed because the Order Screen event for this booking is missing. Please send a new Order Screen event again."
      allOf:
        - $ref: "#/components/schemas/Error"
    TooManyRequestsError:
      description: "Indicates that the API cannot fulfill the request because server resources have been exhausted. Perhaps the client has sent too many requests in a given amount of time or has reached some specific quota. Please check the rate limits for the product and adjust as necessary before retries. If you believe the rate limit was incorrect or if you need a different rate limit, please reach out to the <support team> regarding the next steps."
      example:
        code: "TOO_MANY_REQUESTS"
        message: "The request failed because the server resources for this client have been exhausted."
      allOf:
        - $ref: "#/components/schemas/Error"
    InternalServerError:
      description: "Indicates that the API encountered an unexpected condition that prevented it from fulfilling the request. Sometimes used as a generic catch-allerror type when no other error types can be used. Retrying the same request will usually result in the same error. Please reach out to support team as next step for this error resolution."
      example:
        code: "INTERNAL_SERVER_ERROR"
        message: "The server encountered an internal error."
      allOf:
        - $ref: "#/components/schemas/Error"
    BadGatewayError:
      description: "Indicates that the server received an invalid response from the upstream server. Causes could be incorrectly configured target server at gateway, EOF exception, incorrectly configured keep-alive timeouts. Please reach out to support team as next step for this error resolution."
      example:
        code: "BAD_GATEWAY"
        message: "The server received an invalid response from an upstream server."
      allOf:
        - $ref: "#/components/schemas/Error"
    RetryableOrderPurchaseScreenFailure:
      description: |
        Indicates that the API is either down for maintenance or overloaded and cannot fulfill the request at the current time. This is a temporary error and retrying the same request after a certain delay could eventually result in success.
        There will be a Retry-After HTTP header in API response specifying how long to wait to retry the request. If there is no Retry-After HTTP header then retry can happen immediately. If the error persists after retrying with delay, please reach out to <support team>."
      example:
        code: "RETRYABLE_ORDER_PURCHASE_SCREEN_FAILURE"
        message: "A temporary internal error occurred. You can safely retry your call using the same order details."
      allOf:
        - $ref: "#/components/schemas/Error"
    RetryableOrderPurchaseUpdateFailure:
      description: |
        Indicates that the API is either down for maintenance or overloaded and cannot fulfill the request at the current time. This is a temporary error and retrying the same request after a certain delay could eventually result in success.
        There will be a Retry-After HTTP header in API response specifying how long to wait to retry the request. If there is no Retry-After HTTP header then retry can happen immediately. If the error persists after retrying with delay, please reach out to <support team>."
      example:
        code: "RETRYABLE_ORDER_PURCHASE_UPDATE_FAILURE"
        message: "A temporary internal error occurred. You can safely retry your call using the same order details."
      allOf:
        - $ref: "#/components/schemas/Error"
    GatewayTimeoutError:
      description: "Indicates that the API gateway has issues completing the request on time. Request can be retried if it is idempotent, If the issue persists, please reach out to support. For non-idempotent requests, please reach out to <support team> to know the status of your request before attempting retries."
      example:
        code: "GATEWAY_TIMEOUT"
        message: "The server timed out while trying to complete the request."
      allOf:
        - $ref: "#/components/schemas/Error"
    BadRequestError:
      description: "Indicates that a bad request occurred. Typically it is an invalid parameter."
      example:
        code: "BAD_REQUEST"
        message: "An input validation error was encountered. Please see causes for more details."
        causes:
          code: "MISSING_MANDATORY_PARAM"
          field: "$.transaction.customer_account.account_type"
          message: "The value of a field should not be null."
      allOf:
        - $ref: "#/components/schemas/Error"
        - type: object
          properties:
            causes:
              type: array
              items:
                type: object
                properties:
                  code:
                    type: string
                    example: MISSING_MANDATORY_PARAM
                    enum:
                      - MISSING_MANDATORY_PARAM
                      - INVALID_PARAM
                      - INVALID_FORMAT
                  field:
                    type: string
                    description: "A JSON Path expression indicating which field, in the request body, caused the error."
                    example: "$.transaction.customer_account.account_type"
                  message:
                    type: string
                    example: "The value of a field should not be null."
    OrderPurchaseUpdateRequest:
      title: OrderPurchaseUpdateRequest
      description: |
        The `type` field value is used as a discriminator, with the following mapping:
        * `ORDER_UPDATE`: `OrderUpdate`
        * `CHARGEBACK_FEEDBACK`: `ChargebackFeedback`
        * `INSULT_FEEDBACK`: `InsultFeedback`
        * `REFUND_UPDATE`: `RefundUpdate`
        * `PAYMENT_UPDATE`: `PaymentUpdate`
      type: object
      required:
        - risk_id
        - type
      properties:
        type:
          $ref: '#/components/schemas/UpdateType'
        risk_id:
          description: 'The `risk_id` provided by Expedia''s Fraud Prevention Service in the `OrderPurchaseScreenResponse`.'
          type: string
          maxLength: 200
          example: '123456789'
      discriminator:
        propertyName: type
        mapping:
          ORDER_UPDATE: OrderUpdate
          CHARGEBACK_FEEDBACK: ChargebackFeedback
          INSULT_FEEDBACK: InsultFeedback
          REFUND_UPDATE: RefundUpdate
          PAYMENT_UPDATE: PaymentUpdate
    UpdateType:
      title: UpdateType
      description: 'Transaction type associated with the update event.'
      type: string
      enum:
        - ORDER_UPDATE
        - CHARGEBACK_FEEDBACK
        - INSULT_FEEDBACK
        - REFUND_UPDATE
        - PAYMENT_UPDATE
    OrderUpdate:
      title: OrderUpdate
      description: 'Order related data that should be updated.'
      allOf:
        - $ref: '#/components/schemas/OrderPurchaseUpdateRequest'
        - type: object
          required:
            - order_status
          properties:
            order_status:
              $ref: '#/components/schemas/Status'
            acquirer_reference_number:
              description: |
                A unique number that tags a credit or debit card transaction when it goes from the merchant's bank through to the cardholder's bank.
                `acquirer_reference_number` is a required field only if `order_status` = `COMPLETED`
                Typically, merchants can get this number from their payment processors.
                This number is used when dealing with disputes/chargebacks on original transactions.
              type: string
              maxLength: 200
            cancellation_reason:
              $ref: '#/components/schemas/CancellationReason'
    CancellationReason:
      title: CancellationReason
      description: 'Reason of order update cancellation.'
      type: object
      properties:
        primary_reason_code:
          description: 'Primary cancellation reason code.'
          type: string
          maxLength: 200
        sub_reason_code:
          description: 'Substitute cancellation reason code.'
          type: string
          maxLength: 200
        primary_reason_description:
          description: 'Primary cancellation reason code. Required if `order_status = CANCELLED`.'
          type: string
          maxLength: 200
        sub_reason_description:
          description: 'Substitute cancellation reason description.'
          type: string
          maxLength: 200
    ChargebackFeedback:
      title: ChargebackFeedback
      description: 'Feedback from EG external partners if they receive a chargeback for a false negative recommendation from Fraud Prevention system.'
      allOf:
        - $ref: '#/components/schemas/OrderPurchaseUpdateRequest'
        - type: object
          properties:
            chargeback_detail:
              $ref: '#/components/schemas/ChargebackDetail'
    InsultFeedback:
      title: InsultFeedback
      description: 'Feedback from EG external partners regarding a false positive recommendation that from Fraud Prevention system gave for their customer.'
      allOf:
        - $ref: '#/components/schemas/OrderPurchaseUpdateRequest'
        - type: object
          properties:
            insult_detail:
              $ref: '#/components/schemas/InsultDetail'
    RefundUpdate:
      title: RefundUpdate
      description: 'Refund related data. Update should be sent when refund is issued or settled. Amounts should include all fees and taxes.'
      discriminator:
        propertyName: refund_status
        mapping:
          ISSUED: IssuedRefundUpdate
          SETTLED: SettledRefundUpdate
      allOf:
        - $ref: "#/components/schemas/OrderPurchaseUpdateRequest"
        - type: object
          required:
            - refund_status
          properties:
            refund_status:
              description: |
                Identifies the refund status. Possible values are:
                -`ISSUED` - The refund was issued.
                -`SETTLED` - The refund was settled.
              type: string
              enum:
                - ISSUED
                - SETTLED
    IssuedRefundUpdate:
      title: IssuedRefundUpdate
      description: 'Data related to the issued refund that should be updated.'
      allOf:
        - $ref: "#/components/schemas/RefundUpdate"
        - type: object
          required:
            - refund_status
          properties:
            refund_details:
              $ref: "#/components/schemas/IssuedRefundUpdateDetails"
    SettledRefundUpdate:
      title: SettledRefundUpdate
      description: 'Data related to the settled refund that should be updated.'
      allOf:
        - $ref: "#/components/schemas/RefundUpdate"
        - type: object
          required:
            - refund_status
          properties:
            refund_details:
              $ref: "#/components/schemas/SettledRefundUpdateDetails"
    IssuedRefundUpdateDetails:
      title: IssuedRefundUpdateDetails
      description: 'Data that describes issued refund that should be updated.'
      type: object
      required:
        - refund_issued_date_time
        - refund_issued_amount
      properties:
        refund_issued_date_time:
          description: "Date and time when the 3rd party payment processor confirmed that a previously submitted payment refund has issued at the participating financial institutions."
          type: string
          format: date-time
        refund_issued_amount:
          $ref: "#/components/schemas/Amount"
    SettledRefundUpdateDetails:
      title: SettledRefundUpdateDetails
      description: 'Data that describes settled refund that should be updated.'
      type: object
      required:
        - refund_settlement_date_time
        - refund_deposit_date_time
        - acquirer_reference_number
        - settlement_id
        - refund_settled_amount
      properties:
        refund_settlement_date_time:
          description: "Date and time when the 3rd party payment processor confirmed that a previously submitted payment refund has settled at the participating financial institutions."
          type: string
          format: date-time
        refund_deposit_date_time:
          description: "Date and time when the refund was deposited to the original form of payment."
          type: string
          format: date-time
        acquirer_reference_number:
          description: |
            A unique number that tags a credit or debit card transaction when it goes from the merchant's bank through to the cardholder's bank.
            Typically, merchants can get this number from their payment processors.
            This number is used when dealing with disputes/chargebacks on original transactions.
          type: string
          maxLength: 200
        settlement_id:
          description: "Unique settlement identifier specific to the payment processor for the settlement transaction generated for a previously submitted payment refund."
          type: string
          maxLength: 200
        refund_settled_amount:
          $ref: "#/components/schemas/Amount"
    PaymentUpdate:
      title: PaymentUpdate
      description: 'Payment related data that should be updated.'
      allOf:
        - $ref: "#/components/schemas/OrderPurchaseUpdateRequest"
        - type: object
          required:
            - merchant_order_code
          properties:
            merchant_order_code:
              description: "Reference code passed to acquiring bank at the time of payment. This code is the key ID that ties back to payments data at the payment level."
              type: string
              maxLength: 200
    ChargebackDetail:
      title: ChargebackDetail
      type: object
      description: 'Details related to the chargeback.'
      required:
        - chargeback_status
        - chargeback_reason
        - chargeback_amount
      properties:
        chargeback_status:
          type: string
          enum:
            - RECEIVED
            - REVERSAL
          description: |
            Identifies the chargeback status. Possible values are:
            -`RECEIVED` - The chargeback was received.
            -`REVERSAL` - The chargeback reversal was received.
        chargeback_reason:
          type: string
          enum:
            - FRAUD
            - NON_FRAUD
          description: 'Reason for chargeback which can be `Fraud` or `Non Fraud`.'
        chargeback_amount:
          $ref: '#/components/schemas/Amount'
        bank_reason_code:
          type: string
          description: 'Unique code provided by the acquiring bank for the category of fraud.'
          maxLength: 200
        chargeback_reported_date_time:
          type: string
          format: date-time
          description: 'Date and time when the chargeback was reported to the partner, in ISO-8601 date and time format `yyyy-MM-ddTHH:mm:ss.SSSZ`.'
    InsultDetail:
      title: InsultDetail
      type: object
      description: 'Details related to the insult.'
      properties:
        insult_reported_date_time:
          type: string
          format: date-time
          description: 'Date and time when the insult was reported to the partner, in ISO-8601 date and time format `yyyy-MM-ddTHH:mm:ss.SSSZ`.'
    Status:
      title: Status
      description: |
        Defines the current state of the Order.
        Generally, OrderPurchaseScreenRequest is followed by an OrderUpdate reflecting the change in current order status. From `IN_PROGRESS` to any of below possible values:
        * `COMPLETED` is used when the order has been processed fully. For example, inventory has been reserved, and the payment has been settled.
        * `CHANGE_COMPLETED` is like `COMPLETED` but on a changed order.
        * `CANCELLED` is used when the order is cancelled. This could be acustomer initiated cancel or based on Fraud recommendation.
        * `FAILED` is used when order failed due to any errors on Partner system. This could be followed by another OrderUpdate call with any `order_status` once the order is recovered, abandoned, or cancelled.
        * `CHANGE_FAILED` is like `FAILED` but on a changed order.
        *
        * `CHANGE_COMPLETED` or `CHANGE_FAILED` are applicable if OrderPurchaseScreen Fraud API was called via a change in order which is through `transaction.transaction_details.order_type` = `CHANGE`
        * `COMPLETED` or `CANCELLED` order status indicates the completion of lifecycle on an order.
      type: string
      enum:
        - COMPLETED
        - CHANGE_COMPLETED
        - CANCELLED
        - FAILED
        - CHANGE_FAILED
      maxLength: 200
    OrderPurchaseUpdateResponse:
      title: OrderPurchaseUpdateResponse
      type: object
      properties:
        risk_id:
          type: string
          description: 'Unique identifier of transaction that was updated.'
          maxLength: 200
          example: '1234567'
    OrderPurchaseScreenRequest:
      title: OrderPurchaseScreenRequest
      type: object
      properties:
        transaction:
          $ref: '#/components/schemas/OrderPurchaseTransaction'
      required:
        - transaction
    OrderPurchaseTransaction:
      title: OrderPurchaseTransaction
      type: object
      required:
        - site_info
        - device_details
        - customer_account
        - transaction_details
      properties:
        site_info:
          $ref: '#/components/schemas/SiteInfo'
        device_details:
          $ref: '#/components/schemas/DeviceDetails'
        customer_account:
          $ref: '#/components/schemas/CustomerAccount'
        transaction_details:
          $ref: '#/components/schemas/TransactionDetails'
    OrderPurchaseScreenResponse:
      title: OrderPurchaseScreenResponse
      type: object
      properties:
        risk_id:
          type: string
          description: 'Unique identifier assigned to the transaction by Expedia''s Fraud Prevention Service.'
          maxLength: 200
          example: '1234567'
        decision:
          $ref: '#/components/schemas/FraudDecision'
    FraudDecision:
      title: FraudDecision
      type: string
      enum:
        - ACCEPT
        - REVIEW
        - REJECT
    SiteInfo:
      title: SiteInfo
      type: object
      required:
        - country_code
        - agent_assisted
      properties:
        country_code:
          description: 'The alpha-3 ISO code that represents a country name.'
          pattern: ^[A-Z]{3}$
          type: string
          example: 'USA'
        agent_assisted:
          description: 'Identifies if an agent assisted in booking travel for the customer. `False` if the order was directly booked by customer.'
          type: boolean
    DeviceDetails:
      title: DeviceDetails
      required:
        - ip_address
      type: object
      properties:
        source:
          type: string
          maxLength: 50
          description: 'Source of the device_box. Default value is `TrustWidget`.'
        device_box:
          type: string
          description: 'Device related information retrieved from TrustWidget.'
        ip_address:
          type: string
          description: "IP address of the device used for booking."
          pattern: ^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$|^(?:[A-F0-9]{1,4}:){7}[A-F0-9]{1,4}$
          example: "192.168.32.48"
    TransactionDetails:
      title: TransactionDetails
      required:
        - order_id
        - current_order_status
        - order_type
        - travel_products
        - travelers
      type: object
      properties:
        order_id:
          description: 'Unique identifier assigned to the order by the partner. `order_id` is specific to the partner namespace.'
          type: string
          maxLength: 50
          example: '1000000234'
        current_order_status:
          description: |
            Status of the order:
            * `IN_PROGRESS` is used when order has not processed fully. For example, inventory has not yet been reserved, or payment has not yet been settled.
            * `COMPLETED` is used when an order has been processed fully. For example, inventory has been reserved, and the payment has been settled.
          type: string
          enum:
            - IN_PROGRESS
            - COMPLETED
        order_type:
          description: |
            Type of order. Possible `order_types`.

            `CREATE` - Initial type of a brand new order.

            `CHANGE` - If a `OrderPurchaseScreenRequest` has already been submitted for the initial booking with `order_type = CREATE`, but has now been modified and partner wishes to resubmit for Fraud screening then the `order_type = CHANGE`. Examples of changes that are supported are changes made to `check-in/checkout dates` or `price of a TravelProduct`.
          type: string
          enum:
            - CREATE
            - CHANGE
          example: 'CREATE'
        travel_products:
          type: array
          minItems: 1
          maxItems: 20
          items:
            $ref: '#/components/schemas/TravelProduct'
        travelers:
          description: 'Individuals who are part of the travel party for the order. At minimum there must be at least `1` traveler.'
          type: array
          items:
            $ref: '#/components/schemas/Traveler'
          minItems: 1
          maxItems: 30
        payments:
          description: 'List of the form(s) of payment being used to purchase the order.  One or more forms of payment can be used within an order. Information gathered will be specific to the form of payment.'
          type: array
          items:
            $ref: '#/components/schem

# --- truncated at 32 KB (87 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/expedia-group/refs/heads/main/openapi/expedia-fraud-protection-openapi-original.yml