Reference

Audit log Beta

On this page

The audit log records changes to your organization and who made them. These endpoints read it, so you can send the events to your own security tools.

Reading the audit log needs the scope audit:read. The person the token acts for must be an admin of your organization. A key that acts as Conclude counts as an admin.

List events

GET /v1/auditEvents · scope audit:read

Returns one page of events, newest first. Every parameter is optional. Conclude rejects an invalid value instead of ignoring it.

ParameterDescription
limitThe number of events on a page, from 1 to 500. The default is 50. A larger value returns 500.
categoryOnly events in these categories. Separate several with commas, as in key,signIn.
typeOnly events of this one type, such as apiKey.issued.
actorOnly events made by this user, as a user ID such as U-3b5d7f9h.
fromOnly events at or after this time, in RFC 3339 format.
toOnly events before this time, in RFC 3339 format.
positionThe nextPosition from the previous page.

URL-encode every value. A + in a time offset or in position otherwise reads as a space.

curl -G https://api.conclude.io/v1/auditEvents \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  --data-urlencode "category=key" \
  --data-urlencode "from=2026-10-01T00:00:00Z"
{
  "events": [
    {
      "id": "1287",
      "type": "apiKey.issued",
      "category": "key",
      "date": "2026-10-27T14:03:12.52Z",
      "actor": {
        "kind": "user",
        "user": {
          "id": "U-3b5d7f9h",
          "name": "Kim Lee",
          "email": "kim.lee@example.com",
          "accounts": [{"platform": "slack", "platformID": "U07ABCDEF12"}]
        }
      },
      "summary": "Issued API key Helpdesk",
      "refs": {},
      "details": [
        {
          "key": "scopes",
          "label": "Scopes",
          "value": ["connections:readwrite", "org:read"],
          "text": "connections:readwrite, org:read"
        },
        {"key": "expiry", "label": "Expires", "value": "2027-10-27T00:00:00Z", "text": "2027-10-27"},
        {"key": "global", "label": "Acts as Conclude", "value": true, "text": "yes"}
      ]
    }
  ],
  "nextPosition": "MjAyNi0xMC0yN1QxNDowMzoxMi41Mlp8MTI4Nw=="
}

To read the next page, send the same request with position set to nextPosition. On the last page, nextPosition is empty.

StatusCodeWhen
400invalid_requestA parameter has an invalid value. param names it.
403forbiddenThe person the token acts for is not an admin, or your organization is not in the beta program.

Get an event

GET /v1/auditEvents/{auditEvent} · scope audit:read

Returns one event. {auditEvent} is the event’s id.

StatusCodeWhen
403forbiddenThe person the token acts for is not an admin, or your organization is not in the beta program.
404not_foundThe event doesn’t exist or is not in your organization’s audit log.

The event object

FieldTypeDescription
idstringThe event’s ID.
typestringWhat happened. See Categories and types.
categorystringThe event’s category.
datetimeWhen it happened.
actorobjectWho made the change. See below.
summarystringA short English label for people. Don’t parse it.
refsobjectWhat the event is about. See below.
detailsarrayFacts about the event. Each has a key, a label, the recorded value and a text for display.
changesarraySettings the event changed. Each has a field, a label, a before and an after value. block is true for text that spans several lines.
redactedbooleantrue when the event names a private channel the token’s person can’t open. The channel then has no name or ID, and its details and changes are left out.

actor.kind says who made the change:

KindWho
userA person, named in actor.user.
apiKeyAn API key, named in actor.apiKey with its id and name. actor.user is the person the key acted for, when there was one.
supportConclude support.
systemConclude itself, for example a nightly job.

A user has these fields:

FieldDescription
idThe user’s ID.
nameThe user’s name.
emailThe user’s email address, when Conclude knows it.
avatarThe URL of the user’s picture, when there is one.
accountsThe user’s accounts in your Slack workspaces and Microsoft Teams tenants. Each has a platform, slack or teams, and the account’s Slack or Microsoft Teams ID as platformID.
leftOrganizationtrue when the user no longer has an active account in any of your workspaces.

refs can hold these fields:

FieldDescription
channelThe channel the event is about.
remoteThe channel on the other side of a connection.
channelsThe channels of a chat.
userThe user the event is about.
orgAnother organization, with its id and name.
workspaceA workspace, with its id, name, platform and its Slack or Microsoft Teams ID as platformID.
bridgeA bridge, with its id and the partner org.
agentAn agent, with its id, name and avatar. deleted is true when the agent no longer exists.

A channel has an id, a name, a platform and its Slack or Microsoft Teams ID as platformID. It also says whether it is private or deleted. It names its team, or its org when it belongs to another organization. The team is the Slack workspace or the team in Microsoft Teams, with its id, name, platform and platformID. A redacted channel only says where it is.

Categories and types

CategoryTypeSummary
accountorganization.config.updatedChanged the configuration
accountorganization.createdCreated the account
accountorganization.deletedDeleted the account
accountorganization.deletion.requestedRequested deletion of the account
accountorganization.mergedMerged another account into this account
accountorganization.updatedUpdated account settings
accountworkspace.addedAdded a workspace
accountworkspace.removedRemoved a workspace
userorganization.role.grantedGave a user a role
userorganization.role.removedTook a role from a user
useruser.hideHid a user in the directory
useruser.merge.blockedCouldn’t merge two users, because both have accounts in one workspace
useruser.mergedMerged two users
useruser.splitSplit a user into a separate account
useruser.unhideShowed a user in the directory again
signInuser.signedInSigned in to a workspace
connectionconnect.channel.createdConnected two channels
connectionconnect.channel.deletedDisconnected two channels
connectionconnect.chat.createdConnected a chat
connectionconnect.chat.deletedDisconnected a chat
connectionconnect.external.createdConnected a channel with another organization
connectionconnect.external.deletedDisconnected a channel from another organization
connectionconnect.external.invitation.createdInvited someone to connect a channel
connectionconnect.external.invitation.deletedWithdrew an invitation to connect a channel
bridgebridge.channel.connectedConnected two channels on a bridge
bridgebridge.channel.disconnectedDisconnected two channels on a bridge
bridgebridge.channel.publishedShared a channel on a bridge
bridgebridge.channel.unpublishedStopped sharing a channel on a bridge
bridgebridge.chat.closedClosed a bridge chat
bridgebridge.chat.createdStarted a bridge chat
bridgebridge.createdStarted a bridge
bridgebridge.deletedDeleted a bridge
bridgebridge.disabledPaused a bridge
bridgebridge.enabledResumed a bridge
bridgebridge.invitation.acceptedAnother organization accepted a bridge invitation
bridgebridge.invitation.createdInvited someone to start a bridge
bridgebridge.invitation.deletedWithdrew a bridge invitation
bridgebridge.invitation.sentSent a bridge invitation
bridgebridge.member.addedGave a user a role on a bridge
bridgebridge.member.removedTook a role on a bridge from a user
appapp.installedInstalled an app in a channel
appapp.removedRemoved an app from a channel
appapp.updatedChanged an app in a channel
apptemplate.createdCreated a template
apptemplate.deletedDeleted a template
apptemplate.updatedChanged a template
agentagent.createdCreated an agent
agentagent.deletedDeleted an agent
agentagent.deployedAdded an agent to a channel
agentagent.modeChanged what an agent does in a channel
agentagent.removedRemoved an agent from a channel
agentchannel.learningChanged whether agents learn in a channel
keyagent.key.budgetSet the monthly budget of an AI provider key
keyagent.key.removedRemoved an AI provider key
keyagent.key.setSet an AI provider key
keyapiKey.issuedIssued an API key
keyapiKey.revokedRevoked an API key
keysecret.createdAdded a secret
keysecret.deletedDeleted a secret
keysecret.updatedChanged a secret

A type outside the category you also give returns no events.