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)
| Method | Endpoint | Description |
|---|---|---|
| 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}/avails | Update inventory (vacancy) |
| POST | .../rateplans/{vendor_rateplan_id}/rates | Update rates (sale price, net price, etc.) |
| POST | .../rateplans/{vendor_rateplan_id}/business-days | Update sales status (business days) |
Other Integrations
| Method | Endpoint | Description |
|---|---|---|
| GET | /properties | Map HotelPlus property list (Authorization header required) |
| GET | /properties/{vendor_property_id}/roomtypes | Map HotelPlus room type list |
| GET | /bookings | Look 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
errorfield ("") means success; any other value means failure — log the message. - Only two HTTP status codes are defined:
200(success) and400(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