Oracle Opera & OHIP · early-adopter pilot

Corporate invoices from Opera folios, without the month-end rebuild

SwiftInvoicePro takes the postings on an Opera folio — company window only, groups them by the company that owes them, and returns one consolidated, tax-correct invoice per company per period — long stays split cleanly at month-end.

Read-only — nothing written back to Opera
No payment or card data read
Status, plainly: Oracle Opera / OHIP ingestion is built and tested end to end against synthetic Opera payloads, and is now open to a small number of early-adopter properties through a free, read-only 60-day shadow pilot. The first pilot property will be the first live Opera property; until then, nothing on this page is measured on a real hotel.

How Opera data maps

Reservation (resv name id)folioId — every invoice line traces back to it
Hotel, country, currency codeproperty — selects the tax rules
Arrival / departurestay — nights, month-end splits, per-night levies
Folio windows and routingonly the company window reaches the corporate invoice
Transaction codesroom, restaurant, bar or other lines — taxed by category
Payments and card dataignored — never needed, never read

How the connection works

Property-issued, read-only access

The property grants OHIP read access to reservations and folios only. Access is scoped to that property and can be revoked by the property at any time.

Deterministic output

The same transactions always produce the same invoice. Every line traces back to its reservation and transaction, and totals always balance.

Try the live endpoint

A fictional Opera-style folio, mapped as above and posted to https://swiftinvoicepro.com/api/public/v1/folio-normalize. Nothing is stored.

{
  "resvNameId": "OPERA-88213407",
  "hotelName": "Sample City Centre Hotel Birmingham",
  "country": "United Kingdom",
  "currencyCode": "GBP",
  "arrivalDate": "2026-09-28",
  "departureDate": "2026-10-02",
  "folioWindow": 1,
  "postings": [
    {
      "postingDate": "2026-09-28",
      "trxCode": "1000",
      "description": "Accommodation",
      "amount": 153.6
    },
    {
      "postingDate": "2026-09-29",
      "trxCode": "1000",
      "description": "Accommodation",
      "amount": 153.6
    },
    {
      "postingDate": "2026-09-30",
      "trxCode": "1000",
      "description": "Accommodation",
      "amount": 153.6
    },
    {
      "postingDate": "2026-10-01",
      "trxCode": "1000",
      "description": "Accommodation",
      "amount": 153.6
    },
    {
      "postingDate": "2026-09-29",
      "trxCode": "2010",
      "description": "Restaurant Dinner",
      "amount": 51
    },
    {
      "postingDate": "2026-09-30",
      "trxCode": "2200",
      "description": "Bar",
      "amount": 19.2
    }
  ]
}
// response appears here
Press Run to send the sample to the live endpoint.

See it work

Which numbers are measured, and which are not

Measured

92,110 events in five minutes, 0.00% failures, 319 ms p99 folio to invoice, zero duplicates on replay — measured on the production engine.

Modelled

Any savings figure is modelled until a pilot measures it on your own properties.

Run it alongside your current process

A free 60-day shadow pilot on one Opera property, as an early adopter. Read-only, nothing written back, nothing to pay at the end.