Audit log

The audit log records who changed what in your organization and when. Every change to a project is in it: edits to the code, compiles, settings, deploys, secrets, members and API keys. A row is added after the change has gone through. The one exception is a refused deploy, which is recorded as deployment.blocked.

Where to find it

  • Organization: the Audit log entry in the sidebar lists the rows of every project.
  • Project: the Audit log tab under Manage lists the rows of that project. The dashboard guide shows where the tabs are.
  • API: GET /api/v1/audit-events takes a personal API key or an organization admin key. Add project_id to read one project. Use limit (up to 200) with cursor to page through the rows, or start for numbered pages of at most 50. Both return the action, the resource, the actor and the time of each row.

The tables show time, action, resource, actor and IP address, and can be filtered by action, actor and time range. Rows of ended sessions (session.end) are stored but hidden from the lists.

What is recorded

Every row names the actor: a person, an API key, or the system when there is no one to name. Each project row also carries the project id, so the project tab and the API filter find it.

  • Code. A save or a template start stores the revision before and after, the paths that were added, changed and removed, the size in bytes of each file that was added or changed, and the total size before and after. File contents are never recorded.
  • Compiles. The request is recorded when you start it. The result is recorded by the platform when the compile finishes, as build.compile_succeeded or build.compile_failed, attributed to whoever requested it. It names the compile job, the build, the outcome and the duration, plus a failure code when it failed, and it is written once per job.
  • Settings. A change stores the keys that changed, each with its old and new value. Strings longer than 200 characters are cut and flagged as cut. A change that leaves every value as it was writes no row.
  • Secrets and credentials. Only the name is recorded. The value of a secret, a registry credential or an API key is never stored in the log, and a setting whose key looks like a secret is recorded as changed without its values.

Actions

These are all the values of the action field.

Project

ActionWhat it records
project.createA project was created.
project.deleteA project was deleted.
project.template_changeStarting from a template changed the project's template.

Code and builds

ActionWhat it records
source.updateThe project's source files were saved.
source.seedThe source was replaced with the files of a template.
llm.ejectThe LLM agent was ejected into editable source code in the Code tab.
llm.tools.discoverDiscover now connected to an MCP tool source of the LLM agent to list its tools.
build.uploadA build was uploaded.
build.promoteA build was promoted to the project's active build.
build.rollbackThe project went back to an earlier build.
build.compile_requestedA compile of the source was requested.
build.compile_succeededA compile finished and produced a build. The resource is the compile job.
build.compile_failedA compile finished with an error. The resource is the compile job.

Deployments and canary

ActionWhat it records
deployment.createA deploy was requested.
deployment.undeployThe project was undeployed.
deployment.blockedA deploy was refused, for example because the previous version was still finishing calls.
deployment.force_endA forced deploy ended the calls still running on an older version.
deployment.completedA deploy finished and the new version is live.
deployment.failedA deploy ended as failed.
canary.startA canary deployment was started.
canary.updateThe settings of the active canary were changed.
canary.promoteThe canary was promoted to the project's main version.
canary.abortThe canary was stopped by a person.
canary.auto_abortThe canary was stopped automatically.

Settings

ActionWhat it records
project.settings_updateA runner setting of the project was changed.
project.session_settings_updateA session setting of the project was changed.
project.voice_settings_updateA voice setting of the project was changed.
project.voice_advanced_settings_updateAn advanced voice setting of the project was changed.
project.billing_settings_updateA billing setting of the project was changed.
project.cors_origins_updateThe list of allowed browser origins (CORS) was changed.
project.subscription_changeThe project was moved to another subscription.

Widget

ActionWhat it records
widget.updateThe widget configuration was saved.
widget.publishThe widget was published.

Secrets, environment, services and registry

ActionWhat it records
environment.upsertAn environment variable was created or changed.
environment.deleteAn environment variable was deleted.
secret.createA secret was created. Secrets cannot be edited, so a new value is a delete and a create.
secret.deleteA secret was deleted.
service.upsertA project service was created or changed.
service.deleteA project service was deleted.
service.rotate_tokenA project service's token was rotated.
registry_credential.upsertA registry credential for service images was created or changed.
registry_credential.deleteA registry credential was deleted.

Members

ActionWhat it records
org.member.addA member was added to the organization.
org.member.removeA member was removed from the organization.
org.member.role_updateAn organization member's role was changed.
project.member.addA member was given access to a project.
project.member.removeA member's access to a project was removed.
project.member.role_updateA project member's role was changed.
org.ownership_transferOwnership of the organization was transferred.

Sessions

ActionWhat it records
session.startA session was started.
session.endA session ended. These rows are stored but not shown in the audit log lists.
session.recording.deleteA session recording was deleted.
conversation.export_requestedAn export of the conversation history was requested.

API keys and CLI login

ActionWhat it records
api_key.createA project API key was created.
api_key.revokeA project API key was revoked.
user_api_key.createA personal API key was created.
user_api_key.revokeA personal API key was revoked.
user_api_key.renameA personal API key was renamed.
cli_device_authorize.approveA CLI login was approved in the dashboard.
cli_device_authorize.denyA CLI login was denied in the dashboard.
cli_device_authorize.consumeThe CLI collected the credentials of an approved login.

Billing and account

ActionWhat it records
subscription.expiredA subscription expired.
project.undeployed_due_to_billingA project was undeployed because its subscription expired.
account.deletion_requestedDeletion of the account was requested.
account.deletion_completedDeletion of the account finished.

Admin

ActionWhat it records
platform_admin.grantVoiceThere staff access was granted for support. Only VoiceThere staff trigger this.
platform_admin.revokeVoiceThere staff access was revoked. Only VoiceThere staff trigger this.
demo_limits.resetVoiceThere staff reset public demo counters. Only VoiceThere staff trigger this.
demo_limits.pauseVoiceThere staff switched off the per-visitor and per-IP public demo limits for a set time. Only VoiceThere staff trigger this.
demo_limits.resumeVoiceThere staff turned the public demo limits back on. Only VoiceThere staff trigger this.
demo_limits.settings_updateVoiceThere staff changed the public demo limits (daily budget, sessions per day, session length or cost estimate). Only VoiceThere staff trigger this.
demo_limits.showcase_llm_updateVoiceThere staff changed the LLM setup (provider, model, temperature, max output tokens or API key secret name) of the public assistant demo. Only VoiceThere staff trigger this.

← All documentation