InnveraDocs
Administration

Activity Logs

The property's audit trail — what Innvera records automatically, how to filter and read an entry, following a flow by correlation ID, and deleting old logs.

Every meaningful thing that happens in your property leaves a row in the log: a reservation created, a guest checked in, a charge posted or voided, a role assigned, a sync pushed to Channex, an email sent, a failed sign-in. The Logs screen is where you read that trail. Nothing is written by hand — the server records each entry as the action completes, so the log is evidence of what the system actually did rather than a to-do list anyone can edit.

Open Settings in the sidebar and click Logs, the last entry in the settings rail. The page is titled Logs with the line Activity and audit log for this hotel; the same screen is also served at /logs without the settings shell. Two buttons sit in the header: Refresh, which re-fetches the current query without touching your filters, search or page, and Delete old logs.

What is recorded

Entries are written by the server as part of the operation itself, so they cannot drift out of step with the data. Each carries a level, a category and usually an action, plus the context of the request: who was signed in, the IP address, the method and path, how long it took, and a metadata block with the details of the change.

LevelMeaning
InfoThe normal case — something succeeded.
WarningSomething needs attention but the operation continued, for example a sync retry or a mapping that needs manual review.
ErrorThe operation failed.
FatalA failure serious enough that the system itself is degraded.
CategoryWhat lands here
BusinessReservations, check-in and check-out, rooms and blocks, housekeeping tasks, stock and minibar, work orders, lost and found, folio postings and voids, property and room type changes.
SecuritySign-in and sign-out, failed authentication, access denied, role assignment, permission changes, invites, password changes and email verification.
SyncChannel-manager pushes to Channex — requested, started, succeeded, failed, retrying, needs manual review.
External APIIndividual calls out to a provider: succeeded, failed, timed out, rate limited, invalid response.
Data IntegrityMapping failures, ambiguous mappings, duplicate conflicts, stale events ignored, state conflicts.
SystemStart-up, degraded and recovered events, and platform-level housekeeping.

The Action column is a narrower label on the same row — Create, Update, Delete, Login, Auth Failed, Role Assigned, Sync Failed, Posted, Voided and so on.

Sensitive values are removed before the row is written

Anything in the metadata whose field name looks like a secret — password, token, authorization header, API key, client secret, card number, CVV — is replaced with [REDACTED] before the entry is stored. You will see the shape of the request in the log, never the credential.

Reading the list

Entries are listed newest first, 25 to a page, with the total shown at the bottom left and page controls on the right.

ColumnWhat it shows
TimeWhen the entry was written, as MMM d HH:mm:ss. This column stays pinned when you scroll sideways.
LevelInfo, Warning, Error or Fatal, colour-coded.
CategoryOne of the six categories above.
ActionThe action label, or —.
MessageThe human-readable summary, truncated at 80 characters; hover to see the whole line.
Entity TypeWhat the entry is about — Reservation, Room, RATE_PLAN, User and so on.
Entity IDThe record's identifier.
Provider and DirectionThe external service involved and whether the traffic was Inbound or Outbound, for integration rows.
CorrelationA clickable identifier that ties one request's entries together.

Click any row to open the detail drawer. If the list is empty you will see No logs found for the current filters — widen the filters rather than assuming nothing happened.

Filters

Search sits to the left and is always visible. It matches the message, the error code and error message, the entity ID and the external booking and revision IDs, and it is not case sensitive. Everything else lives beside it (on a phone, behind the filter button, which shows how many filters are active and offers Clear all).

FilterOptions
LevelAll Levels, Info, Warning, Error, Fatal
CategoryAll Categories, Business, Security, Sync, External API, Data Integrity, System
ProviderAll Providers, Channex, S3, Resend, Typesense
DirectionAll Directions, Inbound, Outbound
Entity TypeAll Entity Types, then HOTEL, ROOM_TYPE, RATE_PLAN, Reservation, Room, Role, User, UserHotelRole, FolioLineItem, SYSTEM
Entity IDDisabled until you pick an entity type; then it lists only the IDs that actually have logs for that type, up to 200, newest first
Date rangeAll dates by default; picking a range covers whole days, so a single-day range returns that day's entries

The Entity ID list is labelled, not raw: a reservation reads as guest name, booking reference and dates; a room type or rate plan as its name; a user as their name or email; a staff role assignment as person — role. Changing Entity Type clears the entity ID, because an ID almost never belongs to two types.

Any filter change returns you to page 1. Clear next to the filters resets the search and every filter at once.

One provider has no filter

A row's Provider can read Vercel — booking-engine domain problems are recorded against it — even though Vercel is not one of the four choices in the Provider dropdown. Search the message text instead when you are chasing a domain issue.

The detail drawer

Clicking a row opens Log Detail on the right: the full message, then the level, category and action badges, then every field that has a value — empty fields are hidden, so the drawer is short for a simple business event and long for a failed integration call.

Expect Created At, Hotel ID, User ID, Entity Type and Entity ID, Provider and Direction, the queue identifiers (Outbox Message ID, Inbox Event ID), the external Channex identifiers (property, room type, rate plan, booking, revision), Request ID and Correlation ID, IP Address, Method, Path, Status Code, Duration (ms), Error Code and Error Message, and a Metadata block of formatted JSON with the specifics of the change.

Following a flow

One guest action usually produces several entries — a request, a queued message, an outbound push, the provider's reply. They all share a correlation ID.

Click the correlation link, in the Correlation column or in the detail drawer (its tooltip reads Filter by this correlation ID). A bar appears above the table — Showing flow for correlation ID: followed by the identifier — and the list holds only that flow's entries. The ordinary filters are hidden while it is on, so nothing else narrows the picture. Clear on the right of the bar returns you to the normal filtered list.

Deleting old logs

There is no automatic expiry — entries stay until someone removes them. Delete old logs in the header opens a dialog titled Delete old logs, Keep the most recent logs and permanently delete everything older.

Enter Days to keep — a whole number between 20 and 3650. Twenty is the floor and the server enforces it too, so a smaller number is raised rather than obeyed. An amber panel then spells out the cutoff (Logs created before 1 Sep 2026 will be permanently deleted. This cannot be undone), and Delete old logs runs it. A toast reports either No logs were old enough to delete or the number of entries removed and the window applied.

Purging is permanent and property-wide

Deleted entries cannot be recovered, and the purge covers every category — security and finance entries go with the rest. It is scoped to the property you are signed into, so it can never touch another property's logs. Agree a retention period with whoever is responsible for your records before you use it.

Who can see it

Access is not one of the role permissions. The server allows the log for anyone who either created the property or holds any active role in it — in practice, the owner and every member of staff. Anyone else gets an amber panel: You do not have permission to view logs for this hotel. A different failure shows Failed to load logs. Please try again.

Tips

  • Start with the level, not the search box. Filtering to Error and Fatal for the last few days is the fastest way to see whether something is actually wrong.
  • Use the entity filter for a single booking. Pick Entity Type Reservation, then choose the booking by guest name in Entity ID — that is every entry for that reservation in order.
  • The correlation link answers "why did the channel not update?" better than any filter combination: it shows the request, the queued message, the push and the provider's response together. See Channel Manager troubleshooting.
  • There is no export. The list is read in the browser; copy what you need from the detail drawer before purging.

On this page