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.
How Opera data maps
| Reservation (resv name id) | folioId — every invoice line traces back to it |
| Hotel, country, currency code | property — selects the tax rules |
| Arrival / departure | stay — nights, month-end splits, per-night levies |
| Folio windows and routing | only the company window reaches the corporate invoice |
| Transaction codes | room, restaurant, bar or other lines — taxed by category |
| Payments and card data | ignored — never needed, never read |
How the connection works
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.
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
See it work
Which numbers are measured, and which are not
92,110 events in five minutes, 0.00% failures, 319 ms p99 folio to invoice, zero duplicates on replay — measured on the production engine.
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.