HotCodePush

Audit log

What the HotCodePush audit log records, the event types per object, how to filter it by object, actor, app and time, and how to download it as a CSV file.

The audit log records every change to your organization: who made it, with which credential and from where, on which object, with the object's fields. Rows are written on every plan and kept for the retention period. Owners and Admins read them where the plan includes it.

What is recorded

FieldWhat it holds
TypeHolds object.action, such as release.created or channel.paused. The full list is under Event types.
TimeHolds when the change was made, in UTC.
ActorNames the member who made the change, or system for an automatic change: auto-pause, channel and bundle expiry, the spending cap, a payment event.
CredentialNames the session the member was signed in with, or the API token that made the request, by id.
PlaceHolds the country, the IP address and the user agent of the request.
ObjectNames the organization, the app where there is one, and the id of the channel, release, bundle, member or other object the row is about.
SnapshotHolds the object's fields worth reading at that moment, plus the changed fields for every updated type, never a bundle's file list and never a secret.

A row is written together with the change, so a change without its record cannot exist. History outlives its objects: deleting an app, a channel or a release keeps every row about it.

A row names the object while it exists and shows its id afterwards. Only deleting the organization removes its rows.

Not recorded:

  • Device reports and update outcomes, which are counted into each release's statistics.
  • The single files of an upload, and an aborted upload.
  • Reads such as the audience preview, release create --dry-run, device probe and MCP tool calls.
  • Opening a checkout or the customer portal, and marking a notification read.
  • Your own account's events, such as sign-ins, password and two-factor changes and API tokens, which belong to you and not to an organization.

Event types

ObjectTypeWhen
Appapp.createdAn app is created, with its default channel.
app.deletedAn app is deleted.
app.restoredSupport restores an app inside the seven-day window.
app.transferredAn app moves to another organization, one row per organization.
app.updatedThe name, the default channel or a setting changes.
Binarybinary.createdhotcodepush binary create registers a store build.
binary.expiredNo device has reported the build for the retention period.
Bundlebundle.deletedA bundle is deleted.
bundle.expiredRetention removes an unused bundle.
bundle.uploadedAn upload completes.
Channelchannel.createdA channel is created.
channel.deletedA channel is deleted.
channel.expiredA preview channel is deleted past its expiry.
channel.pausedA channel is paused.
channel.resumedA channel is resumed.
channel.updatedThe name, a flag, the expiry or the auto-pause policy changes.
Deliverydelivery.redeliveredA webhook's or the telemetry export's delivery is sent again from the console or the CLI.
Devicedevice.deletedAn erasure request deletes a device.
Invitationinvitation.acceptedAn invitation is accepted.
invitation.createdAn invitation is sent.
invitation.revokedAn invitation is withdrawn.
Membermember.joinedSingle sign-on provisions a membership.
member.removedA member is removed or leaves.
member.role_changedA role changes, the ownership transfer included.
Organizationorganization.createdThe organization is created.
organization.deletedThe organization is deleted.
organization.dormancy_noticed12 months pass without a device report or a sign-in.
organization.fair_use_warningA fair-use warning is sent.
organization.limit_overriddenA limit is raised on request.
organization.restoredSupport restores it inside the seven-day window.
organization.spending_cap_changedThe spending cap changes.
organization.spending_cap_reachedThe month's MAU reaches the cap, or the cap is lowered below it.
organization.spending_cap_warningThe month's MAU crosses 80 percent of the cap.
organization.storage_limit_reachedAn upload is refused by the organization's storage limit. Ask support to raise it.
organization.storage_limit_warningAn upload crosses the warning threshold below the organization's storage limit. Ask support to raise it.
organization.updatedThe name or a security setting changes.
Paymentpayment.failedThe subscription is past due. The amount and the reason stay with the payment provider's own mail.
Releaserelease.createdA release is created from a path, a bundle, another channel or a rollback.
release.failure_rate_exceededThe auto-pause rule fires with the action set to notify.
release.pausedA person or auto-pause pauses it.
release.resumedA release is resumed.
release.revokedA person, a bulk revoke or auto-pause revokes it.
release.rollout_changedThe percentage changes, by a person or by progression.
release.updatedThe notes, the mandatory flag or an auto-pause override changes.
Signing keysigning_key.createdA signing key is registered.
signing_key.deletedA signing key is deleted.
SSO providersso_provider.createdA provider is set.
sso_provider.deletedThe provider is deleted.
sso_provider.updatedThe provider changes.
sso_provider.verifiedThe domain verification succeeds.
Subscriptionsubscription.cancellation_scheduledA cancellation is scheduled, in the console or the customer portal.
subscription.createdA subscription starts.
subscription.endedThe plan returns to Free.
subscription.uncanceledA scheduled cancellation is withdrawn.
Telemetry exporttelemetry_export.createdThe telemetry export is set.
telemetry_export.deletedThe export is removed.
telemetry_export.disabledConsecutive failed deliveries disable it.
telemetry_export.updatedThe export is replaced or switched on or off, never a header value.
Webhookwebhook.createdA webhook is created.
webhook.deletedA webhook is deleted.
webhook.disabledConsecutive failed deliveries disable it.
webhook.updatedA webhook changes, never its secret.

Events and payload lists the types a webhook can deliver, with each one's snapshot, and the ones that stay internal. The telemetry export carries every type.

The console page

The page is Audit logs under the organization, newest first. Each row shows the actor, the event, the object id, the app, the country and the time. A row opens its detail with the IP address, the user agent, the credential and the snapshot.

The Filter button offers four fields:

  • Object narrows the log to one kind of object, every action on it, such as channel.*.
  • Actor narrows it to System, or to a member found by email.
  • App narrows it to one app, found by name.
  • Time range narrows it to the last 7, 30 or 90 days.

Apply writes the filters into the page's URL, so a filtered view can be shared with another Admin.

The CSV download

Download CSV writes every row matching the current filters into audit-logs.csv, unpaginated, so a 12-month log downloads whole. The columns are id, createdAt, type, actorType, userId, appId, objectId, country, address, userAgent, sessionId, apiKeyId and snapshot, the snapshot as JSON. Together with the usage page's download and the complete listings of the API reference, it is the data export.

The API and the CLI

The rows are the audit-logs operations of the Swagger reference, newest first, with the console's filters by type, actor, user, app and time, the embedded app and user, the count and the CSV above. The CLI's hotcodepush audit-log list takes the same filters from the command line.

Both need a signed-in session or an OAuth access token, and an API token is refused with forbidden. Where the organization's plan does not include the audit log, every read answers plan_required with HTTP 402. The rows are written all the same, so upgrading shows the history from before the upgrade.

Last updated on

On this page