Skip to main content

Vendor → ONDA Request

This is an integration guide for the Push method where vendors (accommodation providers) send data to the ONDA system.

Overview

The Vendor → ONDA Request method is an integration approach where the vendor system calls the ONDA API to update data.

Features

  • Proactive Updates: Vendors immediately send changes to the ONDA system when they occur
  • Push Method: Vendors actively send data
  • Real-time Synchronization: Changes are reflected in ONDA in real-time
  • Efficiency: Can selectively send only changed data

Integration Flow

Main API Endpoints

ONDA APIs called by vendors. The server address is https://vendor.dapi.tport.dev/gds/vendor; see each linked API reference page for detailed parameters and schemas.

Property Information Management (Push)

MethodEndpointDescription
PATCH/properties/{vendor_property_id}Change property status (enabled/disabled)
PATCH/properties/{vendor_property_id}/roomtypes/{vendor_roomtype_id}Change room type status
PATCH/properties/{vendor_property_id}/roomtypes/{vendor_roomtype_id}/rateplans/{vendor_rateplan_id}Change rate plan status
POST.../rateplans/{vendor_rateplan_id}/availsUpdate inventory (vacancy)
POST.../rateplans/{vendor_rateplan_id}/ratesUpdate rates (sale price, net price, etc.)
POST.../rateplans/{vendor_rateplan_id}/business-daysUpdate sales status (business days)

Other Integrations

MethodEndpointDescription
GET/propertiesMap HotelPlus property list (Authorization header required)
GET/properties/{vendor_property_id}/roomtypesMap HotelPlus room type list
GET/bookingsLook up reservations for settlement comparison
GET/bookings/{vendor_booking_number}Check reservation information

Authentication and Security

API Authentication

  • Method: API Key authentication
  • Header: Authorization: {API_KEY}
  • Pass the API key issued by your ONDA contact directly as the header value. There is no separate token issuance (OAuth2, etc.) process.

Security Requirements

  • HTTPS Required: All API calls must use HTTPS

Request Format

The request body differs per endpoint — there is no common envelope. Send only the fields each endpoint requires.

Property Status Change Example (update-property-status)

{
"status": "enabled"
}

Inventory Update Example (setting-avails)

{
"from": "2024-09-26",
"to": "2024-09-30",
"min_los": 1,
"max_los": 0,
"number_of_rooms": 10,
"vacancy": 7
}

Response Processing

The 6 Property Information Management (Push) endpoints all use a single-field response in the form {"error": ""}. Success or failure is determined by this error field's value, not the HTTP status code.

Success (200)

{
"error": ""
}

An empty string in error means the request was processed successfully.

Processing Failure (200)

{
"error": "error message"
}

Even when the request is accepted but processing fails, the HTTP status remains 200 — the failure reason comes back in the error field.

Malformed Request (400)

Returned when the request itself is invalid (e.g. missing parameters). The spec does not define a response body for this case (example shown as {}).

The 4 Other Integrations endpoints each have a different response shape. get-roomtype-list-hotelplus and reservation-information include an error field as above, but get-property-list-hotelplus (returns a raw array) and settlement-comparison ({count, offset, limit, reservations}) return the data directly with no error field. See each linked reference page for the exact schema.

Development Guide

Direct API Calls

No separate SDK is provided — call the REST API directly.

# Python example
import requests
import json

def update_property_status(vendor_property_id, status):
headers = {
'Authorization': api_key,
'Content-Type': 'application/json'
}

response = requests.patch(
f'https://vendor.dapi.tport.dev/gds/vendor/properties/{vendor_property_id}',
headers=headers,
data=json.dumps({'status': status})
)

return response.json()

Error Handling

Retry Logic

Retry mechanism for network errors or temporary failures:

async function retryRequest(requestFn, maxRetries = 3) {
for (let i = 0; i < maxRetries; i++) {
try {
return await requestFn();
} catch (error) {
if (i === maxRetries - 1) throw error;
await sleep(Math.pow(2, i) * 1000); // Exponential backoff
}
}
}

Notes on Response Handling

  • An empty error field ("") means success; any other value means failure — log the message.
  • Only two HTTP status codes are defined: 200 (success) and 400 (request error).

Monitoring and Logging

Log Recording

// Log example
{
"timestamp": "2024-09-26T15:30:00Z",
"level": "INFO",
"message": "Property updated successfully",
"data": {
"property_id": "PROP001",
"response_time": 245,
"status_code": 200
}
}

Metrics Tracking

  • API call success rate
  • Average response time
  • Error rate and error types
  • Data update frequency

Previous: ONDA → Vendor Request method guide