StayingAPI · Arazzo Workflow

StayingAPI — cross-OTA price comparison

Version 1.0.0

Find a property, compare its price across OTAs, and read the cheapest offer.

1 workflow 1 source API 1 provider
View Spec View on GitHub travelhospitalityaccommodation-datahotel-apivacation-rentalshort-term-rentalairbnbbooking.comvrbogoogle-hotelscross-ota-price-comparisonavailabilityreviewsrestmcpagent-nativeopenapiArazzoWorkflows

Provider

stayingapi

Workflows

cross-ota-price-comparison
Search a location, then compare one property's price across booking platforms.
Step 1 discovers candidate properties. Step 2 asks StayingAPI to price the named property across every OTA Google reports and returns min / median plus the offer list.
2 steps inputs: adults, checkIn, checkOut, location, platforms outputs: cheapestTotal, medianTotal, offers, propertyName
1
searchStays
searchGet
Cross-platform discovery for the location and stay window.
2
comparePrices
priceCompare
Compare that property across OTAs. min and median are StayingAPI-computed and exclude offers quoted in another currency.

Source API Descriptions

Arazzo Workflow Specification

Raw ↑
arazzo: 1.0.1
info:
  title: StayingAPI — cross-OTA price comparison
  summary: Find a property, compare its price across OTAs, and read the cheapest offer.
  description: >-
    The flagship StayingAPI flow. Search for a property by location and dates, take the first
    match, then run a cross-OTA comparison for the same stay window and read the computed min
    and median. Every step is a read; nothing is booked. Run it with a stay_test_ sandbox key
    for synchronous 200s at zero credits — a stay_live_ key may answer 202 with a jobId, in
    which case poll GET /v1/jobs/{jobId} (see stayingapi-async-job-poll.yml).
  version: 1.0.0
sourceDescriptions:
  - name: stayingapi
    url: ../openapi/stayingapi-openapi-original.json
    type: openapi
workflows:
  - workflowId: cross-ota-price-comparison
    summary: Search a location, then compare one property's price across booking platforms.
    description: >-
      Step 1 discovers candidate properties. Step 2 asks StayingAPI to price the named
      property across every OTA Google reports and returns min / median plus the offer list.
    inputs:
      type: object
      required:
        - location
        - checkIn
        - checkOut
      properties:
        location:
          type: string
          description: 'City or lat,lng — e.g. "Split, HR"'
        checkIn:
          type: string
          description: YYYY-MM-DD
        checkOut:
          type: string
          description: YYYY-MM-DD
        platforms:
          type: string
          description: CSV of airbnb,booking,vrbo,google
          default: airbnb,booking
        adults:
          type: integer
          default: 2
    steps:
      - stepId: searchStays
        description: Cross-platform discovery for the location and stay window.
        operationId: searchGet
        parameters:
          - name: location
            in: query
            value: $inputs.location
          - name: checkIn
            in: query
            value: $inputs.checkIn
          - name: checkOut
            in: query
            value: $inputs.checkOut
          - name: platforms
            in: query
            value: $inputs.platforms
          - name: adults
            in: query
            value: $inputs.adults
          - name: limit
            in: query
            value: 5
        successCriteria:
          - condition: $statusCode == 200
        outputs:
          propertyName: $response.body#/data/0/name
          platform: $response.body#/data/0/platform
          listingId: $response.body#/data/0/platformListingId
          requestId: $response.body#/meta/requestId
      - stepId: comparePrices
        description: >-
          Compare that property across OTAs. min and median are StayingAPI-computed and
          exclude offers quoted in another currency.
        operationId: priceCompare
        parameters:
          - name: name
            in: query
            value: $steps.searchStays.outputs.propertyName
          - name: location
            in: query
            value: $inputs.location
          - name: checkIn
            in: query
            value: $inputs.checkIn
          - name: checkOut
            in: query
            value: $inputs.checkOut
        successCriteria:
          - condition: $statusCode == 200
        outputs:
          min: $response.body#/data/min
          median: $response.body#/data/median
          offers: $response.body#/data/offers
          creditsCharged: $response.body#/meta/creditsCharged
    outputs:
      propertyName: $steps.searchStays.outputs.propertyName
      cheapestTotal: $steps.comparePrices.outputs.min
      medianTotal: $steps.comparePrices.outputs.median
      offers: $steps.comparePrices.outputs.offers
x-apievangelist:
  generated: '2026-08-09'
  method: generated
  source: openapi/stayingapi-openapi-original.json
  note: >-
    operationIds searchGet and priceCompare verified verbatim in the harvested spec. A live
    key can return 202 on either step; handle it with the async-job workflow.