Opera Cloud
Bloomreach integrates with Oracle's Opera Cloud to automatically import guest reservations, customer profiles, and consent data into your project. You can use this data to trigger campaigns based on reservation status. For example, sending a pre-arrival email when a guest checks in or a win-back offer after checkout.
Oracle Partner NetworkBloomreach is an official member of the Oracle Partner Network.
How the integration works
Once connected, the integration syncs 3 types of data:
- Reservation events: During the initial setup, the integration imports your full reservation history. After that, a delta sync runs daily at 12:00 UTC and picks up newly created reservations. Status changes and other updates on existing reservations aren't emitted as new events (see Limitations).
- Customer profiles: Updated with each sync.
- Consent events: Email and SMS opt-in status, emitted per reservation processed.
Customer matching and data behavior
- The integration uses 2 hard IDs to match incoming Opera data to existing customer profiles:
opera_id: Opera's profile ID; always present and used as the primary identifier. email_id: The guest's primary email from Opera; may be empty if the guest has no email on file.
When a match is found, the existing profile is enriched with the Opera data. When there's no match, a new profile is created.
ImportantIf a guest has no email address, the integration still creates or updates their profile (matched via
opera_id), but no reservation event is tracked. Reservation events are only generated for guests with an email address.
How data updates work
Each sync sends the full set of customer properties from Opera:
- Reservation and consent events are added as new events on the matched profile. They don't overwrite previous events.
- Customer properties (name, phone, city, and so on) are updated to reflect the current values from Opera. Standard identity resolution and customer update logic applies.
Synced fields
Reservation events
Each synced reservation creates an event reservation.
| Field | Description |
|---|---|
| created_at | Reservation creation timestamp |
| expected_arrival_time | Expected arrival date and time |
| expected_departure_time | Expected departure date and time |
| hotel_domain | Hotel domain (if available) |
| hotel_id | Opera hotel identifier |
| hotel_name | Hotel name |
| integration_id | Integration ID |
| integration_name | Integration name |
| integration_type | Integration type identifier |
| origin | Source of sale type |
| person_count | Number of guests (accompanying guests + 1) |
| reservation_id | Opera reservation ID |
| reservation_number | Same as reservation_id |
| status | Computed status — for example, Reserved, CheckedIn, CheckedOut, Canceled |
| type | Guest type |
| updated_at | Last modification timestamp |
NoteThese OHIP API fields aren't currently synced:
adult_count,balance,booking_channel_code,child_count,guarantee_code,market_code,number_of_rooms,rate_amount,rate_code,room_type.
Customer profile properties
Each sync updates the following properties on the matched profile.
| Field | Description |
|---|---|
| birth_date | Date of birth |
| city | City from the first address on file |
| created_at | Profile creation timestamp |
| Primary email address | |
| first_name | Given name |
| last_name | Surname |
| nationality | Guest nationality |
| phone | First phone number on profile |
| status | Profile status code |
| updated_at | Last modification timestamp |
NoteThese OHIP API fields aren't currently synced:
country,full_address,gender,postal_code.
Consent events
Two consent events are tracked per sync—one for email and one for SMS. For each reservation, the integration tracks 2 consent events—one for email (category=email) and one for SMS (category=sms). On initial historical import, this fires once per historical reservation, so a guest with N past reservations gets 2×N consent events on day one.
| Field | Description |
|---|---|
| action | accept or reject, based on Opera optInEmail or optInSms |
| category | email or sms |
| hotel_id | Opera hotel identifier |
| integration_id | Integration ID |
| integration_name | Integration name |
| integration_type | Integration type identifier |
| valid_until | Always set to unlimited |
NoteThe OHIP API has 13 privacy flags in total. Only
optInEmailandoptInSmsare mapped to consent events.
Set up the integration
Prerequisites
Before connecting Opera Cloud, make sure these Hard IDs are set up in your project:
email_id: Hard ID, lowercase, trim; the primary identifier for customers.opera_id: Hard ID; maps to profile_id in Opera Cloud.
Open the integration
Go to Account > Data & Assets > Integrations and search for Opera Cloud.
Get your credentials
Contact your Customer Success Manager (CSM) to get your credentials. As an official Oracle integration partner, Bloomreach creates these on your behalf.
- Chain code
- Region
- Enterprise ID (optional)
Connect and save
Enter the credentials you received from your CSM, then click Save. The integration activates and starts the initial historical import.
Migrate from manual imports
If you're importing Opera data via CSV or SFTP, the integration replaces that workflow. Before you switch over:
- Activate the integration and verify data is flowing correctly.
- Check that both sources use the same customer identifiers (email_id, opera_id) to avoid duplicate profiles.
- Stop manual imports only once you've confirmed the integration is working.
ImportantOne environment should be linked to only one integration.
If possible, use your lower environments to validate the approach and data quality before making changes to your production systems.
Use case examples
- Pre- and post-arrival communication: Trigger emails or SMS messages based on reservation status, such as check-in confirmations or post-stay follow-ups.
- Cross-sell promotions: Offer additional services, such as breakfast packages or excursions, to guests with upcoming reservations.
- Upgrade campaigns: Target guests booked at lower-tier properties with offers for higher-tier options.
Limitations
- Reservation updates: Only newly created reservations are tracked. Updates to existing reservations aren't supported. Status transitions or any other change on an existing reservation (for example, Reserved → CheckedIn → CheckedOut → Canceled, date changes, guest count changes) aren't emitted as new events. Customer profile properties are refreshed on every sync—only the reservation event stream is new-only.
- Customer removal: If a guest is deleted from Opera Cloud, you must manually remove them from your project.
- Consent events: Consent events are reservation-scoped, not delta-scoped: 2 consent events (email + SMS) are emitted for every reservation processed, even if the guest's opt-in status hasn't changed. Volume scales with reservation count, not with guest count or sync count.
- No email, no reservation event: If a guest has no email address on file in Opera Cloud, their reservation event isn't tracked. Only guests with an email generate reservation events.
- One integration per environment: Linking more than one integration to the same environment isn't supported.
Updated 13 days ago
