trivago FastConnect Integration: Developer Guide
Implement trivago FastConnect from a developer perspective across hotel inventory, the hotel_availability endpoint, form-urlencoded requests, JSON responses, room/rate models, latency, deep links, conversion tracking and monitoring.
- 2026-09-26 — Provider companion standard applied; inbound ownership, conversion lifecycle, rate-limit and N/A pagination/polling boundaries clarified.
trivago FastConnect is not a normal search API that your application calls. trivago calls endpoints that you expose to retrieve live hotel rates and availability.
Hotel inventory feed
|
v
trivago property mapping
|
v
User search on trivago
|
v
POST /hotel_availability
|
v
Your pricing engine
|
v
JSON room/rate response
|
v
trivago result
|
v
deeplink -> booking engine
|
v
conversion trackingThe integration is therefore an inbound realtime pricing API + property mapping + handoff quality problem.
Provider companion snapshot
| Area | Status |
|---|---|
| Access | trivago advertiser/partner alignment + onboarding; trivago asks partners to align before implementation |
| Auth | Optional Basic Auth/HTTPS for FastConnect; X-Trv-Ana-Key for Conversion API |
| Primary contracts | Hotel inventory, hotel_availability, deeplink, Conversion API |
| Data direction | trivago → your FastConnect endpoint; conversion events flow back to trivago |
| Pagination | N/A for availability requests |
| Polling | N/A; trivago makes realtime inbound requests during user search |
| Public universal rate limit | No single public universal QPS value was verified for all advertisers |
| Booking lifecycle | Booking happens in the downstream advertiser booking engine; Conversion API receives booking/update/cancel feedback |
| Evidence level | Official public docs reviewed; no claim of a live advertiser integration test |
| Code examples | Illustrative |
Capability boundary
Inventory/mapping -> hotel data feed/API
Live user search -> trivago -> /hotel_availability
Offer handoff -> deeplink -> advertiser booking engine
Booking confirmation -> advertiser -> Conversion API POST
Booking modification -> advertiser -> Conversion API PUT
Booking cancellation -> advertiser -> Conversion API DELETEFastConnect does not create bookings. The booking lifecycle lives in the advertiser system and trivago receives attribution/conversion events.
Why pagination and polling are N/A
hotel_availability is a realtime request-response endpoint. There is no search-session pagination or client polling. Capacity planning should use:
inbound search traffic
x hotels/request
x cache miss ratio
x supplier fan-out
x retry amplificationRate limits and capacity
The public FastConnect documentation reviewed does not expose one universal QPS limit for every advertiser. Therefore:
- align expected traffic with the trivago Technical Account Manager,
- enforce an inbound concurrency budget,
- bound supplier fan-out,
- use timeouts/circuit breakers,
- define explicit overload fallback behavior.
Do not invent a global FastConnect QPS limit.
Conversion lifecycle and idempotency
Conversion API uses HTTP methods to represent booking lifecycle events:
POST -> booking confirmation
PUT -> booking update
DELETE -> booking cancellationThe trv_reference carried in the deeplink connects click attribution to the booking. Use booking identity plus lifecycle revision for idempotency so duplicate notifications cannot double-count revenue or conversions.
For platform responsibilities, commercial boundaries and operational decisions, see the trivago profile. This guide covers implementation contracts and request/response handling.
1. Endpoints you expose
trivago documents two core methods:
GET /hotel_data
POST /hotel_availabilityRequests use:
Content-Type: application/x-www-form-urlencodedResponses use JSON and should be compressed. The technical requirements explicitly expect HTTP 200 responses and no redirects.
2. Security boundary
FastConnect endpoints are internet-facing. trivago can optionally use HTTP Basic Authentication; use it only over HTTPS.
interface FastConnectSecurityConfig {
username?: string;
passwordRef?: string;
allowedNetworks?: string[];
requireTls: true;
}Add WAF, request throttling, correlation logging and secret rotation as appropriate.
3. Hotel inventory and mapping
Only hotels submitted in the inventory and mapped by trivago can participate in availability requests.
interface Hotel {
id: string;
name: string;
address?: string;
city?: string;
countryCode: string;
latitude?: number;
longitude?: number;
active: boolean;
}
interface TrivagoHotelMapping {
hotelId: string;
partnerHotelId: string;
mapped: boolean;
lastSubmittedAt?: string;
}internal hotel id != trivago partner reference4. hotel_data response
Hotel data may be supplied by CSV or API. A simplified API response might look like:
[
{
"hotel_id": "HTL-84721",
"hotel_name": "Example Bosphorus Hotel",
"city": "Istanbul",
"country": "TR",
"latitude": 41.0423,
"longitude": 29.0082
}
]Use the current hotel-data reference for the production field set.
5. hotel_availability request model
A request includes hotel IDs, stay dates and occupancy context.
interface TrivagoAvailabilityRequest {
hotelIds: string[];
checkIn: string;
checkOut: string;
adults: number;
children?: number;
locale?: string;
currency?: string;
}Normalize into your own domain:
interface HotelAvailabilityRequest {
hotelIds: string[];
checkIn: string;
checkOut: string;
rooms: Array<{
adults: number;
childAges: number[];
}>;
currency?: string;
market?: string;
}6. Availability response
FastConnect responses model hotel -> room type -> offer.
Conceptual example:
[
{
"hotel_id": "HTL-84721",
"room_types": {
"Deluxe Room": {
"price": 5400.00,
"currency": "TRY",
"breakfast_included": true,
"free_cancellation": true,
"booking_fee": 0,
"deeplink": "https://booking.example.com/..."
}
}
}
]Use the current API Objects reference for exact mandatory and optional fields.
7. Internal offer model
interface HotelOffer {
hotelId: string;
roomName: string;
ratePlanId?: string;
price: {
amount: number;
currency: string;
};
breakfastIncluded?: boolean;
refundable?: boolean;
cancellationDeadline?: string;
bookingFee?: number;
deeplink: string;
observedAt: string;
}8. Rate semantics
trivago's update history shows that supported price models can change by locale or point of sale.
Preserve explicit semantics:
interface PriceBreakdown {
base: number;
taxes?: number;
mandatoryFees?: number;
bookingFee?: number;
total: number;
currency: string;
model: "all_in" | "tax_exclusive" | "other";
}The lowest numeric amount is not necessarily a comparable offer unless room, occupancy, cancellation and included benefits align.
9. Separate no availability from errors
AVAILABLE
SOLD_OUT
UNKNOWN_HOTEL
INVALID_STAY
UNSUPPORTED_OCCUPANCY
UPSTREAM_TIMEOUT
UPSTREAM_ERROREven when the external protocol expects HTTP 200, retain semantic outcomes internally.
10. Latency budget
FastConnect is on the user-facing search path.
Track:
- p50/p95/p99,
- supplier timeout,
- cache hit,
- answer rate,
- partial coverage.
Keep an internal budget for parsing, mapping, supplier calls, normalization and serialization.
11. Cache policy
A useful cache key includes:
hotel
+ check-in
+ check-out
+ occupancy
+ currency
+ market/localeA fast stale rate can be worse than a slower fresh one. Tighten freshness as booking intent increases.
12. Deep-link handoff
Preserve hotel, dates, occupancy, currency, selected room/rate and tracking context.
interface BookingHandoff {
hotelId: string;
checkIn: string;
checkOut: string;
adults: number;
children: number[];
currency: string;
offerId?: string;
clickId: string;
}13. Conversion tracking
Normalize conversion events and deduplicate by booking identity.
interface TrivagoConversion {
clickId?: string;
bookingId: string;
bookingValue: number;
currency: string;
bookingStatus: "booked" | "cancelled" | "modified";
occurredAt: string;
}14. Error and retry policy
Bound retries for transient supplier failures. Do not blindly retry invalid mappings, malformed requests, unsupported occupancy or unsupported currency.
15. Capacity planning
Capacity is driven by:
peak searches
x requested hotels/search
x cache miss ratio
x supplier fan-out
x retry amplificationnot simply by hotel count.
16. Monitoring
Inventory
- submitted hotels,
- mapping coverage,
- unmatched hotels.
Availability
- request count,
- answer rate,
- sold-out rate,
- timeout/error,
- p50/p95/p99.
Quality
- stale price,
- deep-link success,
- price mismatch,
- unsupported occupancy.
Commercial
- clicks,
- bookings,
- attributed bookings,
- cancellations,
- net conversion.
17. Test matrix
| Test | Expected |
|---|---|
| known hotel | correct offer |
| unknown hotel | semantic unknown |
| sold out | no offer |
| 1 room / 2 adults | happy path |
| child occupancy | context preserved |
| tax-exclusive market | correct model |
| all-in market | correct total |
| upstream timeout | controlled failure |
| stale cache | policy applied |
| broken deeplink | quality alert |
| duplicate conversion | idempotent |
18. Go-live checklist
- trivago onboarding aligned
- hotel inventory feed valid
- mapping coverage monitored
- hotel_data stable
- hotel_availability schema-valid
- UTF-8 / JSON response correct
- compression enabled
- no redirects
- TLS configured
- Basic Auth configured if required
- rate semantics explicit
- latency dashboard ready
- cache/freshness policy defined
- deep-link context tested
- conversion idempotency implemented
- failure modes load-tested
Summary
Treat FastConnect as a realtime inbound pricing service, not simply a hotel-rate endpoint.
trivago request
-> FastConnect adapter
-> canonical availability request
-> pricing engine
-> normalized offers
-> FastConnect JSON
-> deeplink
-> booking/conversion reconciliationThis keeps trivago-specific behavior isolated while making latency, price quality and commercial outcomes observable.
Planning a similar integration?
We can review requirements, feed/API design and the production approach with you.