# Audit log event types

This documents all of the currently supported audit log event types and their corresponding payload formats.

## Create base

**Event type:** `createBase`

A new base was created.

**Payload schema**

- `name: string` — required

  The name of the created base

**Example payload**

```json
{
  "name": "My New Base"
}
```

## Delete base

**Event type:** `deleteBase`

A base was deleted.

**Payload schema**

- `name: string` — required

  The name of the deleted base

**Example payload**

```json
{
  "name": "My Base"
}
```

## Move base

**Event type:** `moveBase`

A base was moved.

**Payload schema**

- `name: string` — required

  The name of the moved base

- `current: object` — required

  The current workspace and enterprise account.

  - `enterpriseAccount: object` — optional

    The enterprise account into which the base was moved. If blank, the base was moved into a non-enterprise workspace.

    - `id: string` — required

    - `name: string` — required

  - `workspace: object` — required

    - `id: string` — required

    - `name: string` — optional

      The name of the workspace. This is optional if a base is moved across differing enterprises to avoid leaking a workspace name (customer sensitive data) to another enterprise.

- `previous: object` — required

  The previous workspace and enterprise account.

  - `enterpriseAccount: object` — optional

    The enterprise account from which the base was moved. If blank, the base was moved from a non-enterprise workspace.

    - `id: string` — required

    - `name: string` — required

  - `workspace: object` — required

    - `id: string` — required

    - `name: string` — optional

      The name of the workspace. This is optional if a base is moved across differing enterprises to avoid leaking a workspace name (customer sensitive data) to another enterprise.

**Example payload**

```json
{
  "name": "My Base",
  "previous": {
    "workspace": {
      "id": "wspmhESAta6clCCwF",
      "name": "Previous Workspace"
    }
  },
  "current": {
    "workspace": {
      "id": "wspHvvm4dAktsStZH",
      "name": "Current Workspace"
    },
    "enterpriseAccount": {
      "id": "entUBq2RGdihxl3vU",
      "name": "Current Enterprise Account"
    }
  }
}
```

## Duplicate base

**Event type:** `duplicateBase`

A base was duplicated.

**Payload schema**

- `current: object` — required

  The current workspace and enterprise account.

  - `enterpriseAccount: object` — optional

    The enterprise account into which the base was duplicated. If blank, the base was duplicated into a non-enterprise workspace.

    - `id: string` — required

    - `name: string` — required

  - `application: object` — required

    - `id: string` — required

    - `name: string` — optional

      The name of the newly-duplicated base. This is optional if a base is duplicated across differing enterprises to avoid leaking an application name (customer sensitive data) to another enterprise.

  - `workspace: object` — required

    - `id: string` — required

    - `name: string` — optional

      The name of the workspace. This is optional if a base is duplicated across differing enterprises to avoid leaking an application name (customer sensitive data) to another enterprise.

- `previous: object` — required

  The previous workspace and enterprise account.

  - `enterpriseAccount: object` — optional

    The enterprise account from which the base was duplicated. If blank, the base was duplicated from a non-enterprise workspace.

    - `id: string` — required

    - `name: string` — required

  - `application: object` — required

    - `id: string` — required

    - `name: string` — optional

      The name of the base that was duplicated. This is optional if a base is duplicated across differing enterprises to avoid leaking an application name (customer sensitive data) to another enterprise.

  - `workspace: object` — required

    - `id: string` — required

    - `name: string` — optional

      The name of the workspace. This is optional if a base is duplicated across differing enterprises to avoid leaking a workspace name (customer sensitive data) to another enterprise.

**Example payload**

```json
{
  "previous": {
    "application": {
      "id": "appLkNDICXNqxSDhG",
      "name": "Monthly budgeting"
    },
    "workspace": {
      "id": "wspmhESAta6clCCwF",
      "name": "Family Workspace"
    }
  },
  "current": {
    "application": {
      "id": "appSW9R5uCNmRmfl6",
      "name": "Monthly budgeting copy"
    },
    "workspace": {
      "id": "wspmhESAta6clCCwF",
      "name": "Family Workspace"
    }
  }
}
```

## View base

**Event type:** `viewBase`

A base was viewed. This includes viewing a base, table, view or record. This event is emitted at most once every 5 minutes per user/base combination.

**Payload schema**

- `name: string` — required

  The name of the viewed base

**Example payload**

```json
{
  "name": "My Base"
}
```

## Restore base from snapshot

**Event type:** `restoreBaseFromSnapshot`

A base was restored from a snapshot.

**Payload schema**

- `id: string` — required

  The new ID of the restored base.

- `name: string` — required

  The new name of the restored base

- `workspace: object` — required

  - `id: string` — required

  - `name: string` — required

    The name of the workspace at time of restore

**Example payload**

```json
{
  "id": "appLkNDICXNqxSDhG",
  "name": "My Base",
  "workspace": {
    "id": "wspmhESAta6clCCwF",
    "name": "My Workspace"
  }
}
```

## Restore base from trash

**Event type:** `restoreBaseFromTrash`

A base was restored from the trash.

**Payload schema**

- `name: string` — required

  The name of the restored base

- `workspace: object` — required

  - `id: string` — required

  - `name: string` — required

    The name of the workspace at time of restore

**Example payload**

```json
{
  "name": "My Base",
  "workspace": {
    "id": "wspmhESAta6clCCwF",
    "name": "My Workspace"
  }
}
```

## Apply changes from sandbox

**Event type:** `applyChangesFromSandbox`

Changes from a sandbox base were applied to the main base.

**Payload schema**

- `sandboxApplication: object` — required

  The sandbox base from which the applied changes were generated from

  - `id: string` — required

**Example payload**

```json
{
  "sandboxApplication": {
    "id": "app4iu8QmuwcCbWCE"
  }
}
```

## Download attachment

**Event type:** `downloadAttachment`

An attachment download was initiated.

**Payload schema**

- `type: string` — required

  The attachment file type.

- `filename: string` — required

- `field: object` — required

  Field from which the attachment was downloaded.

  - `id: string` — required

  - `name: string` — required

    The name of the field.

- `record: object` — required

  Record from which the attachment was downloaded.

  - `id: string` — required

- `table: object` — required

  Table from which the attachment was downloaded.

  - `id: string` — required

  - `name: string` — required

    The name of the table.

**Example payload**

```json
{
  "filename": "image.png",
  "type": "image/png",
  "table": {
    "id": "tblqanjXyxwWrvkUm",
    "name": "Table name"
  },
  "field": {
    "id": "fldnub6EOKobEpdGx",
    "name": "Attachments"
  },
  "record": {
    "id": "recqrHTqPZOc8mlWW"
  }
}
```

## Rename base

**Event type:** `updateBaseName`

A base was renamed.

**Payload schema**

- `current: object` — required

  - `name: string` — required

    The new name of the base

- `previous: object` — required

  - `name: string` — required

    The name of the base prior to being renamed

**Example payload**

```json
{
  "previous": {
    "name": "Previous base name"
  },
  "current": {
    "name": "New base name"
  }
}
```

## Update base guide text

**Event type:** `updateBaseGuideText`

Base guide text for a base was changed.

**Payload schema**

- `current: object` — required

  - `guideText: string` — required

    The content of the base guide text after being updated

- `previous: object` — required

  - `guideText: string` — required

    The content of the base guide text before being updated

**Example payload**

```json
{
  "previous": {
    "guideText": "Previous base guide text"
  },
  "current": {
    "guideText": "New base guide text"
  }
}
```

## Create a base invite link

**Event type:** `addBaseInviteLink`

An invite link for a base was created.

**Payload schema**

- `permissionLevel: "read" | "comment" | "edit" | "create"` — required

  The permission level a user would be granted when accepting this invite

- `url: string` — required

  The URL of the invite link

- `effectiveEmailDomainAllowList: array<string>` — required

  The email domains effectively allowed to access this invite link. This factors in the invite link's email domain restrictions and all enterprise-wide invite link restrictions. A viewer must have an account associated with an email domain included in the allow list to accept this invite link. When `null`, any email domain may accept the invite link. If the list is empty, the invite link cannot be used by anyone due to restrictions, (e.g. no member of restrictEmailDomainTo is allowed by enterprise-wide invite restrictions).

- `restrictedToEmailDomains: array<string>` — required

  The email domain restrictions assigned to the invite link. When `null`, no domain restrictions are assigned to the invite link,but higher level ones may affect it. We recommend using effectiveEmailDomainAllowList to understand invite link accessibility.

- `base: object` — required

  - `id: string` — required

  - `name: string` — required

    The name of the base at time of invite link creation

**Example payload**

```json
{
  "url": "https://airtable.com/invite/l?inviteId=invJiqaXmPqq6Ec87&inviteToken=0000000000000000000000000000000000000000000000000000000000000000",
  "permissionLevel": "comment",
  "restrictedToEmailDomains": null,
  "effectiveEmailDomainAllowList": [
    "example.com",
    "example1.com"
  ],
  "base": {
    "name": "My base",
    "id": "appLkNDICXNqxSDhG"
  }
}
```

## Remove a base invite link

**Event type:** `removeBaseInviteLink`

An invite link for a base was removed.

**Payload schema**

- `permissionLevel: "read" | "comment" | "edit" | "create"` — required

  The permission level a user would be granted when accepting this invite

- `url: string` — required

  The URL of the invite link

- `effectiveEmailDomainAllowList: array<string>` — required

  The email domains effectively allowed to access this invite link. This factors in the invite link's email domain restrictions and all enterprise-wide invite link restrictions. A viewer must have an account associated with an email domain included in the allow list to accept this invite link. When `null`, any email domain may accept the invite link. If the list is empty, the invite link cannot be used by anyone due to restrictions, (e.g. no member of restrictEmailDomainTo is allowed by enterprise-wide invite restrictions).

- `restrictedToEmailDomains: array<string>` — required

  The email domain restrictions assigned to the invite link. When `null`, no domain restrictions are assigned to the invite link,but higher level ones may affect it. We recommend using effectiveEmailDomainAllowList to understand invite link accessibility.

- `base: object` — required

  - `id: string` — required

  - `name: string` — required

    The name of the base at time of invite link removal

**Example payload**

```json
{
  "url": "https://airtable.com/invite/l?inviteId=invJiqaXmPqq6Ec87&inviteToken=0000000000000000000000000000000000000000000000000000000000000000",
  "permissionLevel": "comment",
  "restrictedToEmailDomains": null,
  "effectiveEmailDomainAllowList": [
    "example.com",
    "example1.com"
  ],
  "base": {
    "name": "My base",
    "id": "appLkNDICXNqxSDhG"
  }
}
```

## Configure base invite link

**Event type:** `configureBaseInviteLink`

A base invite link's configuration was changed.

**Payload schema**

- `permissionLevel: "read" | "comment" | "edit" | "create"` — optional

  The permission level a user would be granted when accepting this invite

- `url: string` — optional

  The URL of the invite link

- `current: object` — required

  The properties of the invite link configuration after these changes were applied

  - `emailDomain: string` — optional

  - `permissionLevel: "read" | "comment" | "edit" | "create"` — optional

  - `url: string` — optional

  - `effectiveEmailDomainAllowList: array<string>` — optional

  - `restrictedToEmailDomains: array<string>` — optional

- `previous: object` — required

  The properties of the invite link configuration before these changes were applied

  - `emailDomain: string` — optional

  - `permissionLevel: "read" | "comment" | "edit" | "create"` — optional

  - `url: string` — optional

  - `effectiveEmailDomainAllowList: array<string>` — optional

  - `restrictedToEmailDomains: array<string>` — optional

- `effectiveEmailDomainAllowList: array<string>` — optional

  The email domains effectively allowed to access this invite link. This factors in the invite link's email domain restrictions and all enterprise-wide invite link restrictions. A viewer must have an account associated with an email domain included in the allow list to accept this invite link. When `null`, any email domain may accept the invite link. If the list is empty, the invite link cannot be used by anyone due to restrictions, (e.g. no member of restrictEmailDomainTo is allowed by enterprise-wide invite restrictions).

- `restrictedToEmailDomains: array<string>` — optional

  The email domain restrictions assigned to the invite link. When `null`, no domain restrictions are assigned to the invite link,but higher level ones may affect it. We recommend using effectiveEmailDomainAllowList to understand invite link accessibility.

- `base: object` — required

  - `id: string` — required

  - `name: string` — required

    The name of the invite link's base

**Example payload**

```json
{
  "url": "https://airtable.com/invite/l?inviteId=invJiqaXmPqq6Ec87&inviteToken=0000000000000000000000000000000000000000000000000000000000000000",
  "restrictedToEmailDomains": null,
  "effectiveEmailDomainAllowList": [
    "example.com",
    "example1.com"
  ],
  "previous": {
    "permissionLevel": "comment"
  },
  "current": {
    "permissionLevel": "edit"
  },
  "base": {
    "name": "My base",
    "id": "appLkNDICXNqxSDhG"
  }
}
```

## Change application AI permissions

**Event type:** `changeBaseAiPermissions`

The AI permissions for an application were changed.

**Payload schema**

- `current: object` — required

  - `isAiAssistantAvailableInInterfaces: boolean` — required

    Whether AI assistant was available in interfaces after this AI permissions update. Ignored if `isAiAssistantEnabled` is `false`.

  - `isAiAssistantEnabled: boolean` — required

    Whether AI assistant was enabled after this AI permissions update

- `previous: object` — required

  - `isAiAssistantAvailableInInterfaces: boolean` — required

    Whether AI assistant was available in interfaces before this AI permissions update. Ignored if `isAiAssistantEnabled` is `false`.

  - `isAiAssistantEnabled: boolean` — required

    Whether AI assistant was enabled before this AI permissions update

**Example payload**

```json
{
  "previous": {
    "isAiAssistantEnabled": false,
    "isAiAssistantAvailableInInterfaces": false
  },
  "current": {
    "isAiAssistantEnabled": true,
    "isAiAssistantAvailableInInterfaces": true
  }
}
```

## Create sandbox base

**Event type:** `createSandboxBase`

A sandbox base was created from a production base.

**Payload schema**

- `name: string` — required

  The name of the created sandbox base

- `productionApplication: object` — required

  The production base from which the sandbox was created

  - `id: string` — required

**Example payload**

```json
{
  "name": "My Sandbox Base",
  "productionApplication": {
    "id": "appLkNDICXNqxSDhG"
  }
}
```

## Invite base collaborator

**Event type:** `inviteBaseCollaborator`

A user was invited to collaborate on a base.

**Payload schema**

- `name: string` — required

  The name of the base to which this user was invited

- `user: object` — required

  The user invited as a collaborator.

  - `id: string` — optional

    Present when the invited user is already an Airtable user

  - `permissionLevel: "read" | "comment" | "edit" | "create"` — required

    The permission level at which the user was invited as a collaborator.

  - `name: string` — optional

    Present when the invited user is already an Airtable user

  - `email: string` — required

**Example payload**

```json
{
  "name": "My Base",
  "user": {
    "email": "john.jacob@example.com",
    "permissionLevel": "comment"
  }
}
```

## Add base collaborator

**Event type:** `addBaseCollaborator`

A collaborator was added to a base.

**Payload schema**

One of the following payload variants:

#### Variant 1

- `type: "user"` — required

  The type of collaborator added to the base

- `name: string` — required

  The name of the base to which this user was added

- `user: object` — required

  The user added as a collaborator.

  - `id: string` — required

  - `permissionLevel: "read" | "comment" | "edit" | "create"` — required

    The permission level at which the user was added as a collaborator.

  - `email: string` — required

  - `name: string` — required

#### Variant 2

- `type: "group"` — required

  The type of collaborator added to the base

- `name: string` — required

  The name of the base to which this group was added

- `group: object` — required

  The group added as a collaborator.

  - `id: string` — required

  - `permissionLevel: "read" | "comment" | "edit" | "create"` — required

    The permission level at which the group was added as a collaborator.

  - `name: string` — required

**Example payload**

```json
{
  "name": "My Base",
  "type": "user",
  "user": {
    "id": "usrL2PNC5o3H4lBEi",
    "email": "john.jacob@example.com",
    "name": "John Jacob",
    "permissionLevel": "comment"
  }
}
```

## Change base collaborator permission

**Event type:** `changeBaseCollaboratorPermission`

The direct permission of a collaborator on a base was changed.

**Payload schema**

One of the following payload variants:

#### Variant 1

- `type: "user"` — required

  The type of collaborator whose permission on the base was changed.

- `name: string` — required

  The name of the base on which this user's permission was changed.

- `user: object` — required

  The user whose direct permission on the base was changed.

  - `id: string` — required

  - `email: string` — required

  - `name: string` — required

- `current: object` — required

  - `user: object` — required

    - `permissionLevel: "read" | "comment" | "edit" | "create"` — required

      The new direct base permission level of the user.

- `previous: object` — required

  - `user: object` — required

    - `permissionLevel: "read" | "comment" | "edit" | "create"` — required

      The direct base permission level of the user prior to this change.

#### Variant 2

- `type: "group"` — required

  The type of collaborator whose permission on the base was changed.

- `name: string` — required

  The name of the base on which this group's permission was changed.

- `group: object` — required

  The group whose direct permission on the base was changed.

  - `id: string` — required

  - `name: string` — required

- `current: object` — required

  - `group: object` — required

    - `permissionLevel: "read" | "comment" | "edit" | "create"` — required

      The new direct base permission level of the group.

- `previous: object` — required

  - `group: object` — required

    - `permissionLevel: "read" | "comment" | "edit" | "create"` — required

      The direct base permission level of the group prior to this change.

**Example payload**

```json
{
  "name": "My Base",
  "type": "user",
  "user": {
    "id": "usrL2PNC5o3H4lBEi",
    "email": "john.jacob@example.com",
    "name": "John Jacob"
  },
  "previous": {
    "user": {
      "permissionLevel": "read"
    }
  },
  "current": {
    "user": {
      "permissionLevel": "comment"
    }
  }
}
```

## Change base invite permission

**Event type:** `changeBaseInvitePermission`

The permission a user will receive on a base when they accept the associated invite was changed.

**Payload schema**

- `name: string` — required

  The name of the base on which this invite's permission was changed.

- `user: object` — required

  The user whose invited permission on the base was changed.

  - `id: string` — optional

    Present when the invited user is already an Airtable user

  - `name: string` — optional

    Present when the invited user is already an Airtable user

  - `email: string` — required

- `current: object` — required

  - `user: object` — required

    - `permissionLevel: "read" | "comment" | "edit" | "create"` — required

      The new direct permission level the invited user will receive on accepting the base invite.

- `previous: object` — required

  - `user: object` — required

    - `permissionLevel: "read" | "comment" | "edit" | "create"` — required

      The direct permission level the invited user would have received on accepting the base invite prior to this change.

**Example payload**

```json
{
  "name": "My Base",
  "user": {
    "email": "john.jacob@example.com"
  },
  "previous": {
    "user": {
      "permissionLevel": "read"
    }
  },
  "current": {
    "user": {
      "permissionLevel": "comment"
    }
  }
}
```

## Uninvite base collaborator

**Event type:** `uninviteBaseCollaborator`

A user was uninvited from a base.

**Payload schema**

- `name: string` — required

  The name of the base from which this user was uninvited

- `user: object` — required

  The user uninvited from the base.

  - `id: string` — optional

    Present when the uninvited user is already an Airtable user

  - `permissionLevel: "read" | "comment" | "edit" | "create"` — required

    The permission level of the user when uninvited from the base.

  - `name: string` — optional

    Present when the uninvited user is already an Airtable user

  - `email: string` — required

**Example payload**

```json
{
  "name": "My Base",
  "user": {
    "email": "john.jacob@example.com",
    "permissionLevel": "comment"
  }
}
```

## Remove base collaborator

**Event type:** `removeBaseCollaborator`

A collaborator was removed from a base.

**Payload schema**

One of the following payload variants:

#### Variant 1

- `type: "user"` — required

  The type of collaborator removed from the base

- `name: string` — required

  The name of the base from which this user was removed

- `user: object` — required

  The user removed from the base.

  - `id: string` — required

  - `permissionLevel: "read" | "comment" | "edit" | "create"` — required

    The permission level of the user when removed from the base.

  - `email: string` — required

  - `name: string` — required

#### Variant 2

- `type: "group"` — required

  The type of collaborator removed from the base

- `name: string` — required

  The name of the base from which this group was removed

- `group: object` — required

  The group removed from the base.

  - `id: string` — required

  - `permissionLevel: "read" | "comment" | "edit" | "create"` — required

    The permission level of the group when removed from the base.

  - `name: string` — required

**Example payload**

```json
{
  "name": "My Base",
  "type": "user",
  "user": {
    "id": "usrL2PNC5o3H4lBEi",
    "email": "john.jacob@example.com",
    "name": "John Jacob",
    "permissionLevel": "comment"
  }
}
```

## Resend base invite

**Event type:** `resendBaseInvite`

An invitation to join a base was resent.

**Payload schema**

- `email: string` — required

  The recipient email of the resent invite.

- `originatingUser: object` — required

  The user who resent the invite.

  - `id: string` — required

  - `email: string` — required

  - `name: string` — required

- `referrerUser: object` — required

  The user who originally sent the invite.

  - `id: string` — required

  - `email: string` — required

  - `name: string` — required

**Example payload**

```json
{
  "email": "invited.user@example.com",
  "referrerUser": {
    "email": "joe@example.com",
    "id": "usr5552HdvtT659X4",
    "name": "Joe Mama"
  },
  "originatingUser": {
    "email": "jane@example.com",
    "id": "usr555uT6FtT63Tz5",
    "name": "Jane Mama"
  }
}
```

## Create group

**Event type:** `createGroup`

A new group was created.

**Payload schema**

- `name: string` — required

  The name of the created group.

**Example payload**

```json
{
  "name": "Awesome New Group"
}
```

## Delete group

**Event type:** `deleteGroup`

An existing group was deleted.

**Payload schema**

- `name: string` — required

  The name of the deleted group.

**Example payload**

```json
{
  "name": "Awesome Deleted Group"
}
```

## Move group

**Event type:** `moveGroup`

A group was moved between accounts.

**Payload schema**

- `name: string` — required

  The name of the moved group

- `current: object` — required

  The enterprise account into which the group was moved

  - `id: string` — required

  - `name: string` — required

- `previous: object` — required

  The enterprise account from which the group was moved

  - `id: string` — required

  - `name: string` — required

**Example payload**

```json
{
  "name": "Awesome Group",
  "previous": {
    "id": "entUBq2RGdihxl3vU",
    "name": "Previous Enterprise Account"
  },
  "current": {
    "id": "entWUuXRJs5lGKuot",
    "name": "Current Enterprise Account"
  }
}
```

## Add member role

**Event type:** `addGroupMember`

A user was added to a group.

**Payload schema**

- `name: string` — required

  The name of the group to which this user was added.

- `user: object` — required

  - `id: string` — required

  - `role: "manager" | "member"` — required

    The role of the user within the group.

  - `email: string` — required

  - `name: string` — required

**Example payload**

```json
{
  "name": "Awesome Group",
  "user": {
    "id": "usrcGuHdvFtT63Tz5",
    "name": "Questin Umpleby",
    "email": "questin.umpleby@example.com",
    "role": "manager"
  }
}
```

## Change group member role

**Event type:** `changeGroupMemberRole`

A user's role within a group was changed.

**Payload schema**

- `name: string` — required

  The name of the group in which the user's role was changed.

- `current: object` — required

  - `user: object` — required

    - `role: "manager" | "member"` — required

      The new role granted to the user.

- `previous: object` — required

  - `user: object` — required

    - `role: "manager" | "member"` — required

      The user's previous role.

- `user: object` — required

  - `id: string` — required

  - `email: string` — required

  - `name: string` — required

**Example payload**

```json
{
  "name": "Awesome Group",
  "user": {
    "id": "usrcGuHdvFtT63Tz5",
    "name": "Questin Umpleby",
    "email": "questin.umpleby@example.com"
  },
  "previous": {
    "user": {
      "role": "manager"
    }
  },
  "current": {
    "user": {
      "role": "member"
    }
  }
}
```

## Remove group member

**Event type:** `removeGroupMember`

A user was removed from a group.

**Payload schema**

- `name: string` — required

  The name of the group from which this user was removed.

- `user: object` — required

  - `id: string` — required

  - `role: "manager" | "member"` — required

    The role of the user within the group at time of removal.

  - `email: string` — required

  - `name: string` — required

**Example payload**

```json
{
  "name": "Awesome Group",
  "user": {
    "id": "usrcGuHdvFtT63Tz5",
    "name": "Questin Umpleby",
    "email": "questin.umpleby@example.com",
    "role": "manager"
  }
}
```

## Delete group invite

**Event type:** `deleteGroupInvite`

An invitation to join a user group was deleted.

**Payload schema**

- `email: string` — required

  The deleted invite's original recipient's email.

- `originatingUser: object` — required

  The user who deleted the invite.

  - `id: string` — required

  - `email: string` — required

  - `name: string` — required

- `referrerUser: object` — required

  The user who created the now-deleted invite.

  - `id: string` — required

  - `email: string` — required

  - `name: string` — required

**Example payload**

```json
{
  "email": "invited.user@example.com",
  "referrerUser": {
    "email": "questin.umpleby@example.com",
    "id": "usr5552HdvtT659X4",
    "name": "Questin Umpleby"
  },
  "originatingUser": {
    "email": "clifford.radicchio@example.com",
    "id": "usr555uT6FtT63Tz5",
    "name": "Clifford Radicchio"
  }
}
```

## Resend group invite

**Event type:** `resendGroupInvite`

An invitation to join a user group was resent.

**Payload schema**

- `email: string` — required

  The recipient email of the resent invite.

- `originatingUser: object` — required

  The user who resent the invite.

  - `id: string` — required

  - `email: string` — required

  - `name: string` — required

- `referrerUser: object` — required

  The user who originally sent the invite.

  - `id: string` — required

  - `email: string` — required

  - `name: string` — required

**Example payload**

```json
{
  "email": "invited.user@example.com",
  "referrerUser": {
    "email": "questin.umpleby@example.com",
    "id": "usr5552HdvtT659X4",
    "name": "Questin Umpleby"
  },
  "originatingUser": {
    "email": "clifford.radicchio@example.com",
    "id": "usr555uT6FtT63Tz5",
    "name": "Clifford Radicchio"
  }
}
```

## Invite group member

**Event type:** `inviteGroupMember`

A user was invited to join a group.

**Payload schema**

- `name: string` — required

  The name of the group to which the user was invited

- `referrerUser: object` — required

  The inviting user

  - `id: string` — required

  - `email: string` — required

  - `name: string` — required

- `user: object` — required

  The invited user

  - `id: string` — optional

    Present when the invited user is already an Airtable user

  - `role: "manager" | "member"` — required

    The role for which the user was invited to the group

  - `name: string` — optional

    Present when the invited user is already an Airtable user

  - `email: string` — required

**Example payload**

```json
{
  "name": "Awesome Group",
  "referrerUser": {
    "email": "questin.umpleby@example.com",
    "id": "usr5552HdvtT659X4",
    "name": "Questin Umpleby"
  },
  "user": {
    "email": "clifford.radicchio@example.com",
    "role": "member"
  }
}
```

## Create role

**Event type:** `createRole`

A new role was created.

**Payload schema**

- `name: string` — required

  The name of the created role.

- `roleType: "admin"` — required

  The type of the created role.

- `permissionTypes: array<object>` — required

  The permissions of the created role.

  - `permissionType: "adminFullPermissions" | "adminSettingsIntegrationsManage" | "adminSettingsDevelopmentManage" | "adminSettingsBlocksManage" | "adminSettingsLicenseManage" | "adminSettingsBrandingManage" | "adminDataTablesManage" | "adminUsersInfoRead" | "adminUsersLicenseManage" | "adminUsersInviteManage" | "adminUsersIdentityManage" | "adminUsersTokensManage" | "adminUsersMembershipManage" | "adminUsersCollaborationsManage" | "adminServiceAccountsManage" | "adminGroupsInfoRead" | "adminGroupsManage" | "adminGroupsMembershipManage" | "adminGroupsLicenseManage" | "adminWorkspacesInfoRead" | "adminApplicationsInfoRead" | "adminPageBundlesInfoRead" | "adminAttachmentsUpload"` — required

**Example payload**

```json
{
  "name": "My Role",
  "roleType": "admin",
  "permissionTypes": [
    {
      "permissionType": "adminSettingsIntegrationsManage"
    }
  ]
}
```

## Enable share link

**Event type:** `enableShare`

A share link was enabled.

**Payload schema**

One of the following payload variants:

#### Variant 1

- `type: "view"` — required

  The type of share

- `isPasswordProtected: boolean` — required

  Whether access to this share link is password protected

- `restrictEmailDomainTo: string` — required

  If non-empty, the email domain restriction assigned to the share. If empty, no domain restrictions are assigned to the share, but higher level ones may affect it. We recommend using effectiveEmailDomainAllowList to understand share accessibility.

- `restrictedToEnterpriseMembers: boolean` — required

  If true, this share is only accessible by members of the enterprise account. This works in conjunction with `effectiveEmailDomainAllowList`.

- `shouldAllowCopy: boolean` — required

  Whether viewers should be allowed to copy data out of the share

- `shouldShowExtensions: boolean` — required

  Whether extensions added to this share should be shown

- `url: string` — required

  The URL of the share link

- `effectiveEmailDomainAllowList: array<string>` — required

  The email domains effectively allowed to access this share link. This factors in the share link's email domain restrictions and all enterprise-wide share link restrictions. A viewer must have an account associated with an email domain included in the allow list to access this share link. When `null`, any email domain may access the share link. If the list is empty, the share link cannot be viewed by anyone due to restrictions, (e.g. no member of restrictEmailDomainTo is allowed by enterprise-wide sharing restrictions).

- `table: object` — required

  The view's table

  - `id: string` — required

  - `name: string` — required

    The name of the table

- `view: object` — required

  The shared view.

  - `id: string` — required

  - `type: "form" | "grid" | "calendar" | "gallery" | "kanban" | "timeline" | "block" | "levels"` — required

    The type of the view

  - `name: string` — required

    The name of the view

#### Variant 2

- `type: "base"` — required

  The type of share

- `isPasswordProtected: boolean` — required

  Whether access to this share link is password protected

- `restrictEmailDomainTo: string` — required

  If non-empty, the email domain restriction assigned to the share. If empty, no domain restrictions are assigned to the share, but higher level ones may affect it. We recommend using effectiveEmailDomainAllowList to understand share accessibility.

- `restrictedToEnterpriseMembers: boolean` — required

  If true, this share is only accessible by members of the enterprise account. This works in conjunction with `effectiveEmailDomainAllowList`.

- `shouldAllowCopy: boolean` — required

  Whether viewers should be allowed to copy data out of the share

- `shouldShowExtensions: boolean` — required

  Whether extensions added to this share should be shown

- `url: string` — required

  The URL of the share link

- `base: object` — required

  The shared base.

  - `id: string` — required

  - `name: string` — required

    The name of the base

- `effectiveEmailDomainAllowList: array<string>` — required

  The email domains effectively allowed to access this share link. This factors in the share link's email domain restrictions and all enterprise-wide share link restrictions. A viewer must have an account associated with an email domain included in the allow list to access this share link. When `null`, any email domain may access the share link. If the list is empty, the share link cannot be viewed by anyone due to restrictions, (e.g. no member of restrictEmailDomainTo is allowed by enterprise-wide sharing restrictions).

#### Variant 3

- `type: "extension"` — required

  The type of share

- `isPasswordProtected: boolean` — required

  Whether access to this share link is password protected

- `restrictEmailDomainTo: string` — required

  If non-empty, the email domain restriction assigned to the share. If empty, no domain restrictions are assigned to the share, but higher level ones may affect it. We recommend using effectiveEmailDomainAllowList to understand share accessibility.

- `restrictedToEnterpriseMembers: boolean` — required

  If true, this share is only accessible by members of the enterprise account. This works in conjunction with `effectiveEmailDomainAllowList`.

- `shouldAllowCopy: boolean` — required

  Whether viewers should be allowed to copy data out of the share

- `shouldShowExtensions: boolean` — required

  Whether extensions added to this share should be shown

- `url: string` — required

  The URL of the share link

- `base: object` — required

  The extension's base.

  - `id: string` — required

  - `name: string` — required

    The name of the base

- `effectiveEmailDomainAllowList: array<string>` — required

  The email domains effectively allowed to access this share link. This factors in the share link's email domain restrictions and all enterprise-wide share link restrictions. A viewer must have an account associated with an email domain included in the allow list to access this share link. When `null`, any email domain may access the share link. If the list is empty, the share link cannot be viewed by anyone due to restrictions, (e.g. no member of restrictEmailDomainTo is allowed by enterprise-wide sharing restrictions).

- `extension: object` — required

  The shared extension.

  - `id: string` — required

  - `name: string` — required

    The name of the extension

#### Variant 4

- `type: "page"` — required

  The type of share

- `isPasswordProtected: boolean` — required

  Whether access to this share link is password protected

- `restrictEmailDomainTo: string` — required

  If non-empty, the email domain restriction assigned to the share. If empty, no domain restrictions are assigned to the share, but higher level ones may affect it. We recommend using effectiveEmailDomainAllowList to understand share accessibility.

- `restrictedToEnterpriseMembers: boolean` — required

  If true, this share is only accessible by members of the enterprise account. This works in conjunction with `effectiveEmailDomainAllowList`.

- `shouldAllowCopy: boolean` — required

  Whether viewers should be allowed to copy data out of the share

- `shouldShowExtensions: boolean` — required

  Whether extensions added to this share should be shown

- `url: string` — required

  The URL of the share link

- `effectiveEmailDomainAllowList: array<string>` — required

  The email domains effectively allowed to access this share link. This factors in the share link's email domain restrictions and all enterprise-wide share link restrictions. A viewer must have an account associated with an email domain included in the allow list to access this share link. When `null`, any email domain may access the share link. If the list is empty, the share link cannot be viewed by anyone due to restrictions, (e.g. no member of restrictEmailDomainTo is allowed by enterprise-wide sharing restrictions).

- `page: object` — required

  The shared page.

  - `id: string` — required

  - `name: string` — optional

    The name of the page

**Example payload**

```json
{
  "type": "view",
  "url": "https://airtable.com/appLkNDICXNqxSDhG/shr9SpczJvQpfAzSp",
  "shouldAllowCopy": false,
  "shouldShowExtensions": true,
  "isPasswordProtected": false,
  "restrictEmailDomainTo": null,
  "effectiveEmailDomainAllowList": [
    "example.com"
  ],
  "view": {
    "id": "viwMPdu7I2siHHW6U",
    "name": "Grid view",
    "type": "grid"
  },
  "table": {
    "id": "tblqanjXyxwWrvkUm",
    "name": "Table name"
  },
  "restrictedToEnterpriseMembers": false
}
```

## Disable share link

**Event type:** `disableShare`

A share link was disabled.

**Payload schema**

One of the following payload variants:

#### Variant 1

- `type: "view"` — required

  The type of share

- `isPasswordProtected: boolean` — required

  Whether access to this share link is password protected

- `restrictEmailDomainTo: string` — required

  If non-empty, the email domain restriction assigned to the share. If empty, no domain restrictions are assigned to the share, but higher level ones may affect it. We recommend using effectiveEmailDomainAllowList to understand share accessibility.

- `restrictedToEnterpriseMembers: boolean` — required

  If true, this share is only accessible by members of the enterprise account. This works in conjunction with `effectiveEmailDomainAllowList`.

- `shouldAllowCopy: boolean` — required

  Whether viewers should be allowed to copy data out of the share

- `shouldShowExtensions: boolean` — required

  Whether extensions added to this share should be shown

- `url: string` — required

  The URL of the share link

- `effectiveEmailDomainAllowList: array<string>` — required

  The email domains effectively allowed to access this share link. This factors in the share link's email domain restrictions and all enterprise-wide share link restrictions. A viewer must have an account associated with an email domain included in the allow list to access this share link. When `null`, any email domain may access the share link. If the list is empty, the share link cannot be viewed by anyone due to restrictions, (e.g. no member of restrictEmailDomainTo is allowed by enterprise-wide sharing restrictions).

- `table: object` — required

  The view's table

  - `id: string` — required

  - `name: string` — required

    The name of the table

- `view: object` — required

  The shared view.

  - `id: string` — required

  - `type: "form" | "grid" | "calendar" | "gallery" | "kanban" | "timeline" | "block" | "levels"` — required

    The type of the view

  - `name: string` — required

    The name of the view

#### Variant 2

- `type: "base"` — required

  The type of share

- `isPasswordProtected: boolean` — required

  Whether access to this share link is password protected

- `restrictEmailDomainTo: string` — required

  If non-empty, the email domain restriction assigned to the share. If empty, no domain restrictions are assigned to the share, but higher level ones may affect it. We recommend using effectiveEmailDomainAllowList to understand share accessibility.

- `restrictedToEnterpriseMembers: boolean` — required

  If true, this share is only accessible by members of the enterprise account. This works in conjunction with `effectiveEmailDomainAllowList`.

- `shouldAllowCopy: boolean` — required

  Whether viewers should be allowed to copy data out of the share

- `shouldShowExtensions: boolean` — required

  Whether extensions added to this share should be shown

- `url: string` — required

  The URL of the share link

- `base: object` — required

  The shared base.

  - `id: string` — required

  - `name: string` — required

    The name of the base

- `effectiveEmailDomainAllowList: array<string>` — required

  The email domains effectively allowed to access this share link. This factors in the share link's email domain restrictions and all enterprise-wide share link restrictions. A viewer must have an account associated with an email domain included in the allow list to access this share link. When `null`, any email domain may access the share link. If the list is empty, the share link cannot be viewed by anyone due to restrictions, (e.g. no member of restrictEmailDomainTo is allowed by enterprise-wide sharing restrictions).

#### Variant 3

- `type: "extension"` — required

  The type of share

- `isPasswordProtected: boolean` — required

  Whether access to this share link is password protected

- `restrictEmailDomainTo: string` — required

  If non-empty, the email domain restriction assigned to the share. If empty, no domain restrictions are assigned to the share, but higher level ones may affect it. We recommend using effectiveEmailDomainAllowList to understand share accessibility.

- `restrictedToEnterpriseMembers: boolean` — required

  If true, this share is only accessible by members of the enterprise account. This works in conjunction with `effectiveEmailDomainAllowList`.

- `shouldAllowCopy: boolean` — required

  Whether viewers should be allowed to copy data out of the share

- `shouldShowExtensions: boolean` — required

  Whether extensions added to this share should be shown

- `url: string` — required

  The URL of the share link

- `base: object` — required

  The extension's base.

  - `id: string` — required

  - `name: string` — required

    The name of the base

- `effectiveEmailDomainAllowList: array<string>` — required

  The email domains effectively allowed to access this share link. This factors in the share link's email domain restrictions and all enterprise-wide share link restrictions. A viewer must have an account associated with an email domain included in the allow list to access this share link. When `null`, any email domain may access the share link. If the list is empty, the share link cannot be viewed by anyone due to restrictions, (e.g. no member of restrictEmailDomainTo is allowed by enterprise-wide sharing restrictions).

- `extension: object` — required

  The shared extension.

  - `id: string` — required

  - `name: string` — required

    The name of the extension

#### Variant 4

- `type: "page"` — required

  The type of share

- `isPasswordProtected: boolean` — required

  Whether access to this share link is password protected

- `restrictEmailDomainTo: string` — required

  If non-empty, the email domain restriction assigned to the share. If empty, no domain restrictions are assigned to the share, but higher level ones may affect it. We recommend using effectiveEmailDomainAllowList to understand share accessibility.

- `restrictedToEnterpriseMembers: boolean` — required

  If true, this share is only accessible by members of the enterprise account. This works in conjunction with `effectiveEmailDomainAllowList`.

- `shouldAllowCopy: boolean` — required

  Whether viewers should be allowed to copy data out of the share

- `shouldShowExtensions: boolean` — required

  Whether extensions added to this share should be shown

- `url: string` — required

  The URL of the share link

- `effectiveEmailDomainAllowList: array<string>` — required

  The email domains effectively allowed to access this share link. This factors in the share link's email domain restrictions and all enterprise-wide share link restrictions. A viewer must have an account associated with an email domain included in the allow list to access this share link. When `null`, any email domain may access the share link. If the list is empty, the share link cannot be viewed by anyone due to restrictions, (e.g. no member of restrictEmailDomainTo is allowed by enterprise-wide sharing restrictions).

- `page: object` — required

  The shared page.

  - `id: string` — required

  - `name: string` — optional

    The name of the page

**Example payload**

```json
{
  "type": "view",
  "url": "https://airtable.com/appLkNDICXNqxSDhG/shr9SpczJvQpfAzSp",
  "shouldAllowCopy": false,
  "shouldShowExtensions": true,
  "isPasswordProtected": false,
  "restrictEmailDomainTo": null,
  "effectiveEmailDomainAllowList": [
    "example.com"
  ],
  "view": {
    "id": "viwMPdu7I2siHHW6U",
    "name": "Grid view",
    "type": "grid"
  },
  "table": {
    "id": "tblqanjXyxwWrvkUm",
    "name": "Table name"
  },
  "restrictedToEnterpriseMembers": false
}
```

## Configure share link

**Event type:** `configureShare`

A share link's configuration was changed.

**Payload schema**

One of the following payload variants:

#### Variant 1

- `type: "view"` — required

  The type of share

- `url: string` — required

  The URL of the shared view link

- `isPasswordProtected: boolean` — optional

  Whether access to this share link is password protected

- `restrictEmailDomainTo: string` — optional

  If non-empty, the email domain restriction assigned to the share. If empty, no domain restrictions are assigned to the share, but higher level ones may affect it. We recommend using effectiveEmailDomainAllowList to understand share accessibility.

- `restrictedToEnterpriseMembers: boolean` — optional

  If true, this share is only accessible by members of the enterprise account. This works in conjunction with `effectiveEmailDomainAllowList`.

- `shouldAllowCopy: boolean` — optional

  Whether viewers should be allowed to copy data out of the share

- `shouldShowExtensions: boolean` — optional

  Whether extensions added to this share should be shown

- `current: object` — required

  The properties of the share configuration after these changes were applied

  - `isPasswordProtected: boolean` — optional

    Whether access to this share link is password protected

  - `restrictEmailDomainTo: string` — optional

    If non-empty, the email domain restriction assigned to the share. If empty, no domain restrictions are assigned to the share, but higher level ones may affect it. We recommend using effectiveEmailDomainAllowList to understand share accessibility.

  - `restrictedToEnterpriseMembers: boolean` — optional

    If true, this share is only accessible by members of the enterprise account. This works in conjunction with `effectiveEmailDomainAllowList`.

  - `shouldAllowCopy: boolean` — optional

    Whether viewers should be allowed to copy data out of the share

  - `shouldShowExtensions: boolean` — optional

    Whether extensions added to this share should be shown

  - `effectiveEmailDomainAllowList: array<string>` — optional

    The email domains effectively allowed to access this share link. This factors in the share link's email domain restrictions and all enterprise-wide share link restrictions. A viewer must have an account associated with an email domain included in the allow list to access this share link. When `null`, any email domain may access the share link. If the list is empty, the share link cannot be viewed by anyone due to restrictions, (e.g. no member of restrictEmailDomainTo is allowed by enterprise-wide sharing restrictions).

- `previous: object` — required

  The properties of the share configuration before these changes were applied

  - `isPasswordProtected: boolean` — optional

    Whether access to this share link is password protected

  - `restrictEmailDomainTo: string` — optional

    If non-empty, the email domain restriction assigned to the share. If empty, no domain restrictions are assigned to the share, but higher level ones may affect it. We recommend using effectiveEmailDomainAllowList to understand share accessibility.

  - `restrictedToEnterpriseMembers: boolean` — optional

    If true, this share is only accessible by members of the enterprise account. This works in conjunction with `effectiveEmailDomainAllowList`.

  - `shouldAllowCopy: boolean` — optional

    Whether viewers should be allowed to copy data out of the share

  - `shouldShowExtensions: boolean` — optional

    Whether extensions added to this share should be shown

  - `effectiveEmailDomainAllowList: array<string>` — optional

    The email domains effectively allowed to access this share link. This factors in the share link's email domain restrictions and all enterprise-wide share link restrictions. A viewer must have an account associated with an email domain included in the allow list to access this share link. When `null`, any email domain may access the share link. If the list is empty, the share link cannot be viewed by anyone due to restrictions, (e.g. no member of restrictEmailDomainTo is allowed by enterprise-wide sharing restrictions).

- `table: object` — required

  The view's table

  - `id: string` — required

  - `name: string` — required

    The name of the table

- `view: object` — required

  The shared view.

  - `id: string` — required

  - `type: "form" | "grid" | "calendar" | "gallery" | "kanban" | "timeline" | "block" | "levels"` — required

    The type of the view

  - `name: string` — required

    The name of the view

- `effectiveEmailDomainAllowList: array<string>` — optional

  The email domains effectively allowed to access this share link. This factors in the share link's email domain restrictions and all enterprise-wide share link restrictions. A viewer must have an account associated with an email domain included in the allow list to access this share link. When `null`, any email domain may access the share link. If the list is empty, the share link cannot be viewed by anyone due to restrictions, (e.g. no member of restrictEmailDomainTo is allowed by enterprise-wide sharing restrictions).

#### Variant 2

- `type: "base"` — required

  The type of share

- `url: string` — required

  The URL of the shared base link

- `isPasswordProtected: boolean` — optional

  Whether access to this share link is password protected

- `restrictEmailDomainTo: string` — optional

  If non-empty, the email domain restriction assigned to the share. If empty, no domain restrictions are assigned to the share, but higher level ones may affect it. We recommend using effectiveEmailDomainAllowList to understand share accessibility.

- `restrictedToEnterpriseMembers: boolean` — optional

  If true, this share is only accessible by members of the enterprise account. This works in conjunction with `effectiveEmailDomainAllowList`.

- `shouldAllowCopy: boolean` — optional

  Whether viewers should be allowed to copy data out of the share

- `shouldShowExtensions: boolean` — optional

  Whether extensions added to this share should be shown

- `base: object` — required

  The shared base.

  - `id: string` — required

  - `name: string` — required

    The name of the base

- `current: object` — required

  The properties of the share configuration after these changes were applied

  - `isPasswordProtected: boolean` — optional

    Whether access to this share link is password protected

  - `restrictEmailDomainTo: string` — optional

    If non-empty, the email domain restriction assigned to the share. If empty, no domain restrictions are assigned to the share, but higher level ones may affect it. We recommend using effectiveEmailDomainAllowList to understand share accessibility.

  - `restrictedToEnterpriseMembers: boolean` — optional

    If true, this share is only accessible by members of the enterprise account. This works in conjunction with `effectiveEmailDomainAllowList`.

  - `shouldAllowCopy: boolean` — optional

    Whether viewers should be allowed to copy data out of the share

  - `shouldShowExtensions: boolean` — optional

    Whether extensions added to this share should be shown

  - `effectiveEmailDomainAllowList: array<string>` — optional

    The email domains effectively allowed to access this share link. This factors in the share link's email domain restrictions and all enterprise-wide share link restrictions. A viewer must have an account associated with an email domain included in the allow list to access this share link. When `null`, any email domain may access the share link. If the list is empty, the share link cannot be viewed by anyone due to restrictions, (e.g. no member of restrictEmailDomainTo is allowed by enterprise-wide sharing restrictions).

- `previous: object` — required

  The properties of the share configuration before these changes were applied

  - `isPasswordProtected: boolean` — optional

    Whether access to this share link is password protected

  - `restrictEmailDomainTo: string` — optional

    If non-empty, the email domain restriction assigned to the share. If empty, no domain restrictions are assigned to the share, but higher level ones may affect it. We recommend using effectiveEmailDomainAllowList to understand share accessibility.

  - `restrictedToEnterpriseMembers: boolean` — optional

    If true, this share is only accessible by members of the enterprise account. This works in conjunction with `effectiveEmailDomainAllowList`.

  - `shouldAllowCopy: boolean` — optional

    Whether viewers should be allowed to copy data out of the share

  - `shouldShowExtensions: boolean` — optional

    Whether extensions added to this share should be shown

  - `effectiveEmailDomainAllowList: array<string>` — optional

    The email domains effectively allowed to access this share link. This factors in the share link's email domain restrictions and all enterprise-wide share link restrictions. A viewer must have an account associated with an email domain included in the allow list to access this share link. When `null`, any email domain may access the share link. If the list is empty, the share link cannot be viewed by anyone due to restrictions, (e.g. no member of restrictEmailDomainTo is allowed by enterprise-wide sharing restrictions).

- `effectiveEmailDomainAllowList: array<string>` — optional

  The email domains effectively allowed to access this share link. This factors in the share link's email domain restrictions and all enterprise-wide share link restrictions. A viewer must have an account associated with an email domain included in the allow list to access this share link. When `null`, any email domain may access the share link. If the list is empty, the share link cannot be viewed by anyone due to restrictions, (e.g. no member of restrictEmailDomainTo is allowed by enterprise-wide sharing restrictions).

#### Variant 3

- `type: "extension"` — required

  The type of share

- `url: string` — required

  The URL of the shared extension link

- `isPasswordProtected: boolean` — optional

  Whether access to this share link is password protected

- `restrictEmailDomainTo: string` — optional

  If non-empty, the email domain restriction assigned to the share. If empty, no domain restrictions are assigned to the share, but higher level ones may affect it. We recommend using effectiveEmailDomainAllowList to understand share accessibility.

- `restrictedToEnterpriseMembers: boolean` — optional

  If true, this share is only accessible by members of the enterprise account. This works in conjunction with `effectiveEmailDomainAllowList`.

- `shouldAllowCopy: boolean` — optional

  Whether viewers should be allowed to copy data out of the share

- `shouldShowExtensions: boolean` — optional

  Whether extensions added to this share should be shown

- `base: object` — required

  The extension's base.

  - `id: string` — required

  - `name: string` — required

    The name of the base

- `current: object` — required

  The properties of the share configuration after these changes were applied

  - `isPasswordProtected: boolean` — optional

    Whether access to this share link is password protected

  - `restrictEmailDomainTo: string` — optional

    If non-empty, the email domain restriction assigned to the share. If empty, no domain restrictions are assigned to the share, but higher level ones may affect it. We recommend using effectiveEmailDomainAllowList to understand share accessibility.

  - `restrictedToEnterpriseMembers: boolean` — optional

    If true, this share is only accessible by members of the enterprise account. This works in conjunction with `effectiveEmailDomainAllowList`.

  - `shouldAllowCopy: boolean` — optional

    Whether viewers should be allowed to copy data out of the share

  - `shouldShowExtensions: boolean` — optional

    Whether extensions added to this share should be shown

  - `effectiveEmailDomainAllowList: array<string>` — optional

    The email domains effectively allowed to access this share link. This factors in the share link's email domain restrictions and all enterprise-wide share link restrictions. A viewer must have an account associated with an email domain included in the allow list to access this share link. When `null`, any email domain may access the share link. If the list is empty, the share link cannot be viewed by anyone due to restrictions, (e.g. no member of restrictEmailDomainTo is allowed by enterprise-wide sharing restrictions).

- `extension: object` — required

  The shared extension.

  - `id: string` — required

  - `name: string` — required

    The name of the extension

- `previous: object` — required

  The properties of the share configuration before these changes were applied

  - `isPasswordProtected: boolean` — optional

    Whether access to this share link is password protected

  - `restrictEmailDomainTo: string` — optional

    If non-empty, the email domain restriction assigned to the share. If empty, no domain restrictions are assigned to the share, but higher level ones may affect it. We recommend using effectiveEmailDomainAllowList to understand share accessibility.

  - `restrictedToEnterpriseMembers: boolean` — optional

    If true, this share is only accessible by members of the enterprise account. This works in conjunction with `effectiveEmailDomainAllowList`.

  - `shouldAllowCopy: boolean` — optional

    Whether viewers should be allowed to copy data out of the share

  - `shouldShowExtensions: boolean` — optional

    Whether extensions added to this share should be shown

  - `effectiveEmailDomainAllowList: array<string>` — optional

    The email domains effectively allowed to access this share link. This factors in the share link's email domain restrictions and all enterprise-wide share link restrictions. A viewer must have an account associated with an email domain included in the allow list to access this share link. When `null`, any email domain may access the share link. If the list is empty, the share link cannot be viewed by anyone due to restrictions, (e.g. no member of restrictEmailDomainTo is allowed by enterprise-wide sharing restrictions).

- `effectiveEmailDomainAllowList: array<string>` — optional

  The email domains effectively allowed to access this share link. This factors in the share link's email domain restrictions and all enterprise-wide share link restrictions. A viewer must have an account associated with an email domain included in the allow list to access this share link. When `null`, any email domain may access the share link. If the list is empty, the share link cannot be viewed by anyone due to restrictions, (e.g. no member of restrictEmailDomainTo is allowed by enterprise-wide sharing restrictions).

#### Variant 4

- `type: "page"` — required

  The type of share

- `url: string` — required

  The URL of the shared page link

- `isPasswordProtected: boolean` — optional

  Whether access to this share link is password protected

- `restrictEmailDomainTo: string` — optional

  If non-empty, the email domain restriction assigned to the share. If empty, no domain restrictions are assigned to the share, but higher level ones may affect it. We recommend using effectiveEmailDomainAllowList to understand share accessibility.

- `restrictedToEnterpriseMembers: boolean` — optional

  If true, this share is only accessible by members of the enterprise account. This works in conjunction with `effectiveEmailDomainAllowList`.

- `shouldAllowCopy: boolean` — optional

  Whether viewers should be allowed to copy data out of the share

- `shouldShowExtensions: boolean` — optional

  Whether extensions added to this share should be shown

- `current: object` — required

  The properties of the share configuration after these changes were applied

  - `isPasswordProtected: boolean` — optional

    Whether access to this share link is password protected

  - `restrictEmailDomainTo: string` — optional

    If non-empty, the email domain restriction assigned to the share. If empty, no domain restrictions are assigned to the share, but higher level ones may affect it. We recommend using effectiveEmailDomainAllowList to understand share accessibility.

  - `restrictedToEnterpriseMembers: boolean` — optional

    If true, this share is only accessible by members of the enterprise account. This works in conjunction with `effectiveEmailDomainAllowList`.

  - `shouldAllowCopy: boolean` — optional

    Whether viewers should be allowed to copy data out of the share

  - `shouldShowExtensions: boolean` — optional

    Whether extensions added to this share should be shown

  - `effectiveEmailDomainAllowList: array<string>` — optional

    The email domains effectively allowed to access this share link. This factors in the share link's email domain restrictions and all enterprise-wide share link restrictions. A viewer must have an account associated with an email domain included in the allow list to access this share link. When `null`, any email domain may access the share link. If the list is empty, the share link cannot be viewed by anyone due to restrictions, (e.g. no member of restrictEmailDomainTo is allowed by enterprise-wide sharing restrictions).

- `page: object` — required

  The shared page.

  - `id: string` — required

  - `name: string` — optional

    The name of the page

- `previous: object` — required

  The properties of the share configuration before these changes were applied

  - `isPasswordProtected: boolean` — optional

    Whether access to this share link is password protected

  - `restrictEmailDomainTo: string` — optional

    If non-empty, the email domain restriction assigned to the share. If empty, no domain restrictions are assigned to the share, but higher level ones may affect it. We recommend using effectiveEmailDomainAllowList to understand share accessibility.

  - `restrictedToEnterpriseMembers: boolean` — optional

    If true, this share is only accessible by members of the enterprise account. This works in conjunction with `effectiveEmailDomainAllowList`.

  - `shouldAllowCopy: boolean` — optional

    Whether viewers should be allowed to copy data out of the share

  - `shouldShowExtensions: boolean` — optional

    Whether extensions added to this share should be shown

  - `effectiveEmailDomainAllowList: array<string>` — optional

    The email domains effectively allowed to access this share link. This factors in the share link's email domain restrictions and all enterprise-wide share link restrictions. A viewer must have an account associated with an email domain included in the allow list to access this share link. When `null`, any email domain may access the share link. If the list is empty, the share link cannot be viewed by anyone due to restrictions, (e.g. no member of restrictEmailDomainTo is allowed by enterprise-wide sharing restrictions).

- `effectiveEmailDomainAllowList: array<string>` — optional

  The email domains effectively allowed to access this share link. This factors in the share link's email domain restrictions and all enterprise-wide share link restrictions. A viewer must have an account associated with an email domain included in the allow list to access this share link. When `null`, any email domain may access the share link. If the list is empty, the share link cannot be viewed by anyone due to restrictions, (e.g. no member of restrictEmailDomainTo is allowed by enterprise-wide sharing restrictions).

**Example payload**

```json
{
  "type": "base",
  "url": "https://airtable.com/appLkNDICXNqxSDhG/shr9SpczJvQpfAzSp",
  "shouldShowExtensions": true,
  "isPasswordProtected": false,
  "restrictedToEnterpriseMembers": false,
  "current": {
    "shouldAllowCopy": true,
    "restrictEmailDomainTo": "example.com",
    "effectiveEmailDomainAllowList": [
      "example.com"
    ]
  },
  "previous": {
    "shouldAllowCopy": false,
    "restrictEmailDomainTo": null,
    "effectiveEmailDomainAllowList": [
      "example.com",
      "example1.com"
    ]
  },
  "base": {
    "id": "appLkNDICXNqxSDhG",
    "name": "My Shared Base"
  }
}
```

## Regenerate share link

**Event type:** `regenerateShare`

A share link was regenerated.

**Payload schema**

One of the following payload variants:

#### Variant 1

- `type: "view"` — required

  The type of share

- `current: object` — required

  The new, regenerated share link

  - `id: string` — required

  - `isPasswordProtected: boolean` — required

    Whether access to this share link is password protected

  - `restrictEmailDomainTo: string` — required

    If non-empty, the email domain restriction assigned to the share. If empty, no domain restrictions are assigned to the share, but higher level ones may affect it. We recommend using effectiveEmailDomainAllowList to understand share accessibility.

  - `restrictedToEnterpriseMembers: boolean` — required

    If true, this share is only accessible by members of the enterprise account. This works in conjunction with `effectiveEmailDomainAllowList`.

  - `shouldAllowCopy: boolean` — required

    Whether viewers should be allowed to copy data out of the share

  - `shouldShowExtensions: boolean` — required

    Whether extensions added to this share should be shown

  - `url: string` — required

    The URL of the share link

  - `effectiveEmailDomainAllowList: array<string>` — required

    The email domains effectively allowed to access this share link. This factors in the share link's email domain restrictions and all enterprise-wide share link restrictions. A viewer must have an account associated with an email domain included in the allow list to access this share link. When `null`, any email domain may access the share link. If the list is empty, the share link cannot be viewed by anyone due to restrictions, (e.g. no member of restrictEmailDomainTo is allowed by enterprise-wide sharing restrictions).

- `previous: object` — required

  The old share and its properties

  - `id: string` — required

  - `isPasswordProtected: boolean` — required

    Whether access to this share link is password protected

  - `restrictEmailDomainTo: string` — required

    If non-empty, the email domain restriction assigned to the share. If empty, no domain restrictions are assigned to the share, but higher level ones may affect it. We recommend using effectiveEmailDomainAllowList to understand share accessibility.

  - `restrictedToEnterpriseMembers: boolean` — required

    If true, this share is only accessible by members of the enterprise account. This works in conjunction with `effectiveEmailDomainAllowList`.

  - `shouldAllowCopy: boolean` — required

    Whether viewers should be allowed to copy data out of the share

  - `shouldShowExtensions: boolean` — required

    Whether extensions added to this share should be shown

  - `url: string` — required

    The URL of the share link

  - `effectiveEmailDomainAllowList: array<string>` — required

    The email domains effectively allowed to access this share link. This factors in the share link's email domain restrictions and all enterprise-wide share link restrictions. A viewer must have an account associated with an email domain included in the allow list to access this share link. When `null`, any email domain may access the share link. If the list is empty, the share link cannot be viewed by anyone due to restrictions, (e.g. no member of restrictEmailDomainTo is allowed by enterprise-wide sharing restrictions).

- `table: object` — required

  The view's table

  - `id: string` — required

  - `name: string` — required

    The name of the table

- `view: object` — required

  The shared view.

  - `id: string` — required

  - `type: "form" | "grid" | "calendar" | "gallery" | "kanban" | "timeline" | "block" | "levels"` — required

    The type of the view

  - `name: string` — required

    The name of the view

#### Variant 2

- `type: "base"` — required

  The type of share

- `base: object` — required

  The shared base.

  - `id: string` — required

  - `name: string` — required

    The name of the base

- `current: object` — required

  The new, regenerated share link

  - `id: string` — required

  - `isPasswordProtected: boolean` — required

    Whether access to this share link is password protected

  - `restrictEmailDomainTo: string` — required

    If non-empty, the email domain restriction assigned to the share. If empty, no domain restrictions are assigned to the share, but higher level ones may affect it. We recommend using effectiveEmailDomainAllowList to understand share accessibility.

  - `restrictedToEnterpriseMembers: boolean` — required

    If true, this share is only accessible by members of the enterprise account. This works in conjunction with `effectiveEmailDomainAllowList`.

  - `shouldAllowCopy: boolean` — required

    Whether viewers should be allowed to copy data out of the share

  - `shouldShowExtensions: boolean` — required

    Whether extensions added to this share should be shown

  - `url: string` — required

    The URL of the share link

  - `effectiveEmailDomainAllowList: array<string>` — required

    The email domains effectively allowed to access this share link. This factors in the share link's email domain restrictions and all enterprise-wide share link restrictions. A viewer must have an account associated with an email domain included in the allow list to access this share link. When `null`, any email domain may access the share link. If the list is empty, the share link cannot be viewed by anyone due to restrictions, (e.g. no member of restrictEmailDomainTo is allowed by enterprise-wide sharing restrictions).

- `previous: object` — required

  The old share and its properties

  - `id: string` — required

  - `isPasswordProtected: boolean` — required

    Whether access to this share link is password protected

  - `restrictEmailDomainTo: string` — required

    If non-empty, the email domain restriction assigned to the share. If empty, no domain restrictions are assigned to the share, but higher level ones may affect it. We recommend using effectiveEmailDomainAllowList to understand share accessibility.

  - `restrictedToEnterpriseMembers: boolean` — required

    If true, this share is only accessible by members of the enterprise account. This works in conjunction with `effectiveEmailDomainAllowList`.

  - `shouldAllowCopy: boolean` — required

    Whether viewers should be allowed to copy data out of the share

  - `shouldShowExtensions: boolean` — required

    Whether extensions added to this share should be shown

  - `url: string` — required

    The URL of the share link

  - `effectiveEmailDomainAllowList: array<string>` — required

    The email domains effectively allowed to access this share link. This factors in the share link's email domain restrictions and all enterprise-wide share link restrictions. A viewer must have an account associated with an email domain included in the allow list to access this share link. When `null`, any email domain may access the share link. If the list is empty, the share link cannot be viewed by anyone due to restrictions, (e.g. no member of restrictEmailDomainTo is allowed by enterprise-wide sharing restrictions).

#### Variant 3

- `type: "extension"` — required

  The type of share

- `base: object` — required

  The extension's base.

  - `id: string` — required

  - `name: string` — required

    The name of the base

- `current: object` — required

  The new, regenerated share link

  - `id: string` — required

  - `isPasswordProtected: boolean` — required

    Whether access to this share link is password protected

  - `restrictEmailDomainTo: string` — required

    If non-empty, the email domain restriction assigned to the share. If empty, no domain restrictions are assigned to the share, but higher level ones may affect it. We recommend using effectiveEmailDomainAllowList to understand share accessibility.

  - `restrictedToEnterpriseMembers: boolean` — required

    If true, this share is only accessible by members of the enterprise account. This works in conjunction with `effectiveEmailDomainAllowList`.

  - `shouldAllowCopy: boolean` — required

    Whether viewers should be allowed to copy data out of the share

  - `shouldShowExtensions: boolean` — required

    Whether extensions added to this share should be shown

  - `url: string` — required

    The URL of the share link

  - `effectiveEmailDomainAllowList: array<string>` — required

    The email domains effectively allowed to access this share link. This factors in the share link's email domain restrictions and all enterprise-wide share link restrictions. A viewer must have an account associated with an email domain included in the allow list to access this share link. When `null`, any email domain may access the share link. If the list is empty, the share link cannot be viewed by anyone due to restrictions, (e.g. no member of restrictEmailDomainTo is allowed by enterprise-wide sharing restrictions).

- `extension: object` — required

  The shared extension.

  - `id: string` — required

  - `name: string` — required

    The name of the extension

- `previous: object` — required

  The old share and its properties

  - `id: string` — required

  - `isPasswordProtected: boolean` — required

    Whether access to this share link is password protected

  - `restrictEmailDomainTo: string` — required

    If non-empty, the email domain restriction assigned to the share. If empty, no domain restrictions are assigned to the share, but higher level ones may affect it. We recommend using effectiveEmailDomainAllowList to understand share accessibility.

  - `restrictedToEnterpriseMembers: boolean` — required

    If true, this share is only accessible by members of the enterprise account. This works in conjunction with `effectiveEmailDomainAllowList`.

  - `shouldAllowCopy: boolean` — required

    Whether viewers should be allowed to copy data out of the share

  - `shouldShowExtensions: boolean` — required

    Whether extensions added to this share should be shown

  - `url: string` — required

    The URL of the share link

  - `effectiveEmailDomainAllowList: array<string>` — required

    The email domains effectively allowed to access this share link. This factors in the share link's email domain restrictions and all enterprise-wide share link restrictions. A viewer must have an account associated with an email domain included in the allow list to access this share link. When `null`, any email domain may access the share link. If the list is empty, the share link cannot be viewed by anyone due to restrictions, (e.g. no member of restrictEmailDomainTo is allowed by enterprise-wide sharing restrictions).

#### Variant 4

- `type: "page"` — required

  The type of share

- `current: object` — required

  The new, regenerated share link

  - `id: string` — required

  - `isPasswordProtected: boolean` — required

    Whether access to this share link is password protected

  - `restrictEmailDomainTo: string` — required

    If non-empty, the email domain restriction assigned to the share. If empty, no domain restrictions are assigned to the share, but higher level ones may affect it. We recommend using effectiveEmailDomainAllowList to understand share accessibility.

  - `restrictedToEnterpriseMembers: boolean` — required

    If true, this share is only accessible by members of the enterprise account. This works in conjunction with `effectiveEmailDomainAllowList`.

  - `shouldAllowCopy: boolean` — required

    Whether viewers should be allowed to copy data out of the share

  - `shouldShowExtensions: boolean` — required

    Whether extensions added to this share should be shown

  - `url: string` — required

    The URL of the share link

  - `effectiveEmailDomainAllowList: array<string>` — required

    The email domains effectively allowed to access this share link. This factors in the share link's email domain restrictions and all enterprise-wide share link restrictions. A viewer must have an account associated with an email domain included in the allow list to access this share link. When `null`, any email domain may access the share link. If the list is empty, the share link cannot be viewed by anyone due to restrictions, (e.g. no member of restrictEmailDomainTo is allowed by enterprise-wide sharing restrictions).

- `page: object` — required

  The shared page.

  - `id: string` — required

  - `name: string` — optional

    The name of the page

- `previous: object` — required

  The old share and its properties

  - `id: string` — required

  - `isPasswordProtected: boolean` — required

    Whether access to this share link is password protected

  - `restrictEmailDomainTo: string` — required

    If non-empty, the email domain restriction assigned to the share. If empty, no domain restrictions are assigned to the share, but higher level ones may affect it. We recommend using effectiveEmailDomainAllowList to understand share accessibility.

  - `restrictedToEnterpriseMembers: boolean` — required

    If true, this share is only accessible by members of the enterprise account. This works in conjunction with `effectiveEmailDomainAllowList`.

  - `shouldAllowCopy: boolean` — required

    Whether viewers should be allowed to copy data out of the share

  - `shouldShowExtensions: boolean` — required

    Whether extensions added to this share should be shown

  - `url: string` — required

    The URL of the share link

  - `effectiveEmailDomainAllowList: array<string>` — required

    The email domains effectively allowed to access this share link. This factors in the share link's email domain restrictions and all enterprise-wide share link restrictions. A viewer must have an account associated with an email domain included in the allow list to access this share link. When `null`, any email domain may access the share link. If the list is empty, the share link cannot be viewed by anyone due to restrictions, (e.g. no member of restrictEmailDomainTo is allowed by enterprise-wide sharing restrictions).

**Example payload**

```json
{
  "type": "base",
  "base": {
    "id": "appLkNDICXNqxSDhG",
    "name": "My Shared Base"
  },
  "previous": {
    "id": "shr9SpczJvQpfAzSp",
    "url": "https://airtable.com/appLkNDICXNqxSDhG/shr9SpczJvQpfAzSp",
    "shouldAllowCopy": false,
    "shouldShowExtensions": true,
    "isPasswordProtected": false,
    "restrictEmailDomainTo": "example.com",
    "effectiveEmailDomainAllowList": [
      "example.com"
    ],
    "restrictedToEnterpriseMembers": false
  },
  "current": {
    "id": "shrMg5vs9SpczJvQp",
    "url": "https://airtable.com/appLkNDICXNqxSDhG/shrMg5vs9SpczJvQp",
    "shouldAllowCopy": false,
    "shouldShowExtensions": true,
    "isPasswordProtected": false,
    "restrictEmailDomainTo": "example.com",
    "effectiveEmailDomainAllowList": [
      "example.com"
    ],
    "restrictedToEnterpriseMembers": false
  }
}
```

## View share

**Event type:** `viewShare`

A share was viewed. This event is emitted at most once every 5 minutes per user/view combination. Events are emitted for logged-in and logged-out users.

**Payload schema**

One of the following payload variants:

#### Variant 1

- `type: "view"` — required

  The type of share

- `isPasswordProtected: boolean` — required

  Whether access to this share link is password protected

- `restrictEmailDomainTo: string` — required

  If non-empty, the email domain restriction assigned to the share. If empty, no domain restrictions are assigned to the share, but higher level ones may affect it. We recommend using effectiveEmailDomainAllowList to understand share accessibility.

- `restrictedToEnterpriseMembers: boolean` — required

  If true, this share is only accessible by members of the enterprise account. This works in conjunction with `effectiveEmailDomainAllowList`.

- `shouldAllowCopy: boolean` — required

  Whether viewers should be allowed to copy data out of the share

- `shouldShowExtensions: boolean` — required

  Whether extensions added to this share should be shown

- `url: string` — required

  The URL of the share link

- `effectiveEmailDomainAllowList: array<string>` — required

  The email domains effectively allowed to access this share link. This factors in the share link's email domain restrictions and all enterprise-wide share link restrictions. A viewer must have an account associated with an email domain included in the allow list to access this share link. When `null`, any email domain may access the share link. If the list is empty, the share link cannot be viewed by anyone due to restrictions, (e.g. no member of restrictEmailDomainTo is allowed by enterprise-wide sharing restrictions).

- `table: object` — required

  The view's table

  - `id: string` — required

  - `name: string` — required

    The name of the table

- `view: object` — required

  The shared view.

  - `id: string` — required

  - `type: "form" | "grid" | "calendar" | "gallery" | "kanban" | "timeline" | "block" | "levels"` — required

    The type of the view

  - `name: string` — required

    The name of the view

#### Variant 2

- `type: "base"` — required

  The type of share

- `isPasswordProtected: boolean` — required

  Whether access to this share link is password protected

- `restrictEmailDomainTo: string` — required

  If non-empty, the email domain restriction assigned to the share. If empty, no domain restrictions are assigned to the share, but higher level ones may affect it. We recommend using effectiveEmailDomainAllowList to understand share accessibility.

- `restrictedToEnterpriseMembers: boolean` — required

  If true, this share is only accessible by members of the enterprise account. This works in conjunction with `effectiveEmailDomainAllowList`.

- `shouldAllowCopy: boolean` — required

  Whether viewers should be allowed to copy data out of the share

- `shouldShowExtensions: boolean` — required

  Whether extensions added to this share should be shown

- `url: string` — required

  The URL of the share link

- `base: object` — required

  The shared base.

  - `id: string` — required

  - `name: string` — required

    The name of the base

- `effectiveEmailDomainAllowList: array<string>` — required

  The email domains effectively allowed to access this share link. This factors in the share link's email domain restrictions and all enterprise-wide share link restrictions. A viewer must have an account associated with an email domain included in the allow list to access this share link. When `null`, any email domain may access the share link. If the list is empty, the share link cannot be viewed by anyone due to restrictions, (e.g. no member of restrictEmailDomainTo is allowed by enterprise-wide sharing restrictions).

#### Variant 3

- `type: "extension"` — required

  The type of share

- `isPasswordProtected: boolean` — required

  Whether access to this share link is password protected

- `restrictEmailDomainTo: string` — required

  If non-empty, the email domain restriction assigned to the share. If empty, no domain restrictions are assigned to the share, but higher level ones may affect it. We recommend using effectiveEmailDomainAllowList to understand share accessibility.

- `restrictedToEnterpriseMembers: boolean` — required

  If true, this share is only accessible by members of the enterprise account. This works in conjunction with `effectiveEmailDomainAllowList`.

- `shouldAllowCopy: boolean` — required

  Whether viewers should be allowed to copy data out of the share

- `shouldShowExtensions: boolean` — required

  Whether extensions added to this share should be shown

- `url: string` — required

  The URL of the share link

- `base: object` — required

  The extension's base.

  - `id: string` — required

  - `name: string` — required

    The name of the base

- `effectiveEmailDomainAllowList: array<string>` — required

  The email domains effectively allowed to access this share link. This factors in the share link's email domain restrictions and all enterprise-wide share link restrictions. A viewer must have an account associated with an email domain included in the allow list to access this share link. When `null`, any email domain may access the share link. If the list is empty, the share link cannot be viewed by anyone due to restrictions, (e.g. no member of restrictEmailDomainTo is allowed by enterprise-wide sharing restrictions).

- `extension: object` — required

  The shared extension.

  - `id: string` — required

  - `name: string` — required

    The name of the extension

#### Variant 4

- `type: "page"` — required

  The type of share

- `isPasswordProtected: boolean` — required

  Whether access to this share link is password protected

- `restrictEmailDomainTo: string` — required

  If non-empty, the email domain restriction assigned to the share. If empty, no domain restrictions are assigned to the share, but higher level ones may affect it. We recommend using effectiveEmailDomainAllowList to understand share accessibility.

- `restrictedToEnterpriseMembers: boolean` — required

  If true, this share is only accessible by members of the enterprise account. This works in conjunction with `effectiveEmailDomainAllowList`.

- `shouldAllowCopy: boolean` — required

  Whether viewers should be allowed to copy data out of the share

- `shouldShowExtensions: boolean` — required

  Whether extensions added to this share should be shown

- `url: string` — required

  The URL of the share link

- `effectiveEmailDomainAllowList: array<string>` — required

  The email domains effectively allowed to access this share link. This factors in the share link's email domain restrictions and all enterprise-wide share link restrictions. A viewer must have an account associated with an email domain included in the allow list to access this share link. When `null`, any email domain may access the share link. If the list is empty, the share link cannot be viewed by anyone due to restrictions, (e.g. no member of restrictEmailDomainTo is allowed by enterprise-wide sharing restrictions).

- `page: object` — required

  The shared page.

  - `id: string` — required

  - `name: string` — optional

    The name of the page

**Example payload**

```json
{
  "type": "view",
  "url": "https://airtable.com/appLkNDICXNqxSDhG/shr9SpczJvQpfAzSp",
  "shouldAllowCopy": false,
  "shouldShowExtensions": true,
  "isPasswordProtected": false,
  "restrictEmailDomainTo": null,
  "effectiveEmailDomainAllowList": [
    "example.com"
  ],
  "view": {
    "id": "viwMPdu7I2siHHW6U",
    "name": "Grid view",
    "type": "grid"
  },
  "table": {
    "id": "tblqanjXyxwWrvkUm",
    "name": "Table name"
  },
  "restrictedToEnterpriseMembers": false
}
```

## Login user

**Event type:** `loginUser`

A user logged in.

**Payload schema**

- `method: "apple" | "google" | "password" | "sso" | "mobileLink" | "desktopLink" | "emailLink"` — optional

  The login method.

**Example payload**

```json
{
  "method": "sso"
}
```

## Claim user

**Event type:** `claimUser`

A user was claimed (to be managed) by this enterprise account.

**Payload schema**

- `email: string` — required

- `name: string` — required

**Example payload**

```json
{
  "email": "clifford.radicchio@example.com",
  "name": "Clifford Radicchio"
}
```

## Unclaim user

**Event type:** `unclaimUser`

A user was unclaimed (not to be managed) by this enterprise account.

**Payload schema**

- `email: string` — required

- `name: string` — required

**Example payload**

```json
{
  "email": "clifford.radicchio@example.com",
  "name": "Clifford Radicchio"
}
```

## Create user

**Event type:** `createUser`

A user was created through SCIM.

**Payload schema**

- `email: string` — required

- `name: string` — required

**Example payload**

```json
{
  "email": "clifford.radicchio@example.com",
  "name": "Clifford Radicchio"
}
```

## Delete user

**Event type:** `deleteUser`

A user was deleted.

**Payload schema**

- `email: string` — required

- `name: string` — required

**Example payload**

```json
{
  "email": "clifford.radicchio@example.com",
  "name": "Clifford Radicchio"
}
```

## Provision user

**Event type:** `provisionUser`

An administered user was provisioned.

**Payload schema**

- `email: string` — required

- `name: string` — required

**Example payload**

```json
{
  "email": "clifford.radicchio@example.com",
  "name": "Clifford Radicchio"
}
```

## Deactivate user

**Event type:** `deactivateUser`

An administered user was deactivated.

**Payload schema**

- `email: string` — required

- `name: string` — required

**Example payload**

```json
{
  "email": "clifford.radicchio@example.com",
  "name": "Clifford Radicchio"
}
```

## Update Email

**Event type:** `updateUserEmail`

A user changed their email. Includes optional SSO context when the change was triggered by SSO login.

**Payload schema**

- `ssoIdentityProviderId: string` — optional

  The SSO identity provider that triggered this email change, if applicable

- `ssoNameId: string` — optional

  The SSO NameID of the user whose email was changed, if applicable

- `current: object` — required

  - `email: string` — required

    The new email of the user

- `previous: object` — required

  - `email: string` — required

    The previous email of the user

**Example payload**

```json
{
  "previous": {
    "email": "bob@bloomberg.com"
  },
  "current": {
    "email": "bob@bloomberg.net"
  },
  "ssoIdentityProviderId": "idpExAmPlE0000001",
  "ssoNameId": "bob@bloomberg.com"
}
```

## Change password

**Event type:** `changePassword`

A user changed their password.

**Payload schema**

- `email: string` — required

- `name: string` — required

**Example payload**

```json
{
  "email": "clifford.radicchio@example.com",
  "name": "Clifford Radicchio"
}
```

## Update profile picture

**Event type:** `updateUserProfilePicture`

A user updated their profile picture.

**Payload schema**

- `email: string` — required

- `name: string` — required

- `current: object` — required

  - `profilePictureUrl: string` — required

- `previous: object` — required

  - `profilePictureUrl: string` — required

**Example payload**

```json
{
  "email": "john.doe@example.com",
  "name": "John Doe",
  "previous": {
    "profilePictureUrl": "https://example.com/image.png"
  },
  "current": {
    "profilePictureUrl": "https://example.com/image.png"
  }
}
```

## User assigned license

**Event type:** `userAssignedLicense`

A user was assigned a license by an admin, either directly or via membership in a license assigned user group.

**Payload schema**

- `license: "" | "editor" | "portalEditor" | "contributor" | "builder" | "viewer" | "viewerRestricted" | "none"` — required

- `reason: string` — required

- `userGroupId: string` — optional

**Example payload**

```json
{
  "license": "editor",
  "reason": "adminAssigned"
}
```

## User assigned global Hub license

**Event type:** `userAssignedGridGlobalLicense`

A user was assigned a global Hub license by a super admin, impacting all org units where the user has a license.

**Payload schema**

- `license: "editor" | "contributor" | "builder" | "portalEditor" | "viewer" | "viewerRestricted"` — required

- `reason: "adminAssigned" | "acquiredPermissionToWorkspace" | "acquiredPermissionToBase" | "acquiredPermissionToInterface" | "upgradedBasedOnPageBundleAction" | "upgradedBasedOnApplicationAction" | "upgradedBasedOnWorkspaceAction" | "initialEmptyLicenseAssignedForExistingSkpBeforeAutoUpgrade" | "basedOnPermissionHeldWhenInitialLicenseWasAssigned" | "initialEmptyLicenseAssignedForExistingEditorLicenseModelBeforeAutoUpgrade" | "consolidatedToEditorLicenseFromBuilderContributor"` — required

- `enterpriseAccountIdsAffected: array<string>` — required

**Example payload**

```json
{
  "license": "viewer",
  "reason": "adminAssigned",
  "enterpriseAccountIdsAffected": [
    "entEEnPbptK123456"
  ]
}
```

## Create service account

**Event type:** `createServiceAccount`

A service account was created.

**Payload schema**

- `email: string` — required

- `name: string` — required

**Example payload**

```json
{
  "email": "service.account@example.com",
  "name": "Service Account"
}
```

## Delete service account

**Event type:** `deleteServiceAccount`

A service account was deleted.

**Payload schema**

- `email: string` — required

- `name: string` — required

**Example payload**

```json
{
  "email": "service.account@example.com",
  "name": "Service Account"
}
```

## Move service account

**Event type:** `moveServiceAccount`

A service account was moved between accounts.

**Payload schema**

- `email: string` — required

  The email of the moved service account

- `name: string` — required

  The name of the moved service account

- `current: object` — required

  The enterprise account into which the service account was moved

  - `id: string` — required

  - `name: string` — required

- `previous: object` — required

  The enterprise account from which the service account was moved

  - `id: string` — required

  - `name: string` — required

**Example payload**

```json
{
  "name": "Service Account",
  "email": "service.account@example.com",
  "previous": {
    "id": "entUBq2RGdihxl3vU",
    "name": "Previous Enterprise Account"
  },
  "current": {
    "id": "entWUuXRJs5lGKuot",
    "name": "Current Enterprise Account"
  }
}
```

## Accept terms of use

**Event type:** `acceptTermsOfUse`

A user accepted an enterprise account's terms of use.

**Payload schema**

`object`.

**Example payload**

```json
{}
```

## Link SSO identity

**Event type:** `linkSsoIdentity`

An SSO identity was linked to a user during SSO login or SCIM provisioning.

**Payload schema**

- `ssoIdentityProviderId: string` — required

  The SSO identity provider the user was linked to

- `ssoNameId: string` — required

  The NameID value from the SAML assertion

**Example payload**

```json
{
  "ssoNameId": "bob@bloomberg.com",
  "ssoIdentityProviderId": "idpExAmPlE0000001"
}
```

## Update SSO identity

**Event type:** `updateSsoIdentity`

A user's SSO identity provider and/or NameID was updated via SCIM. Emitted when the Airtable SCIM extension re-routes a user to a different IdP.

**Payload schema**

- `current: object` — required

  - `ssoIdentityProviderId: string` — required

    The new SSO identity provider authenticating the user

  - `ssoNameId: string` — required

    The new NameID value

- `previous: object` — required

  - `ssoIdentityProviderId: string` — required

    The previous SSO identity provider authenticating the user

  - `ssoNameId: string` — required

    The previous NameID value

**Example payload**

```json
{
  "previous": {
    "ssoIdentityProviderId": "idpExAmPlE0000001",
    "ssoNameId": "bob.old@bloomberg.com"
  },
  "current": {
    "ssoIdentityProviderId": "idpExAmPlE0000002",
    "ssoNameId": "bob.new@bloomberg.com"
  }
}
```

## Create SSO external user

**Event type:** `createSsoExternalUser`

An SSO-only external user account was created during SSO login when the IdP asserted an email on a domain not verified by the enterprise. The account is created in an email-unverified state; sign-in only completes after the user clicks the verification link.

**Payload schema**

- `email: string` — required

  The created user's email address as asserted by the IdP.

- `ssoIdentityProviderId: string` — required

  The SSO identity provider that asserted the email and triggered external user creation.

- `ssoNameId: string` — required

  The NameID value from the SAML assertion. May differ from the email when the IdP asserts a non-email NameID.

**Example payload**

```json
{
  "email": "frontline.franchisee@hilton-canopy.com",
  "ssoIdentityProviderId": "idpExAmPlE0000001",
  "ssoNameId": "frontline.franchisee@hilton-canopy.com"
}
```

## Add two-factor authentication strategy

**Event type:** `addTwoFactorAuthenticationStrategy`

A user added a new two-factor authentication strategy to their account.

**Payload schema**

- `type: "totp" | "sms" | "phoneCall"` — required

- `user: object` — required

  The user who added the two-factor authentication strategy to their account.

  - `id: string` — required

  - `email: string` — required

  - `name: string` — required

**Example payload**

```json
{
  "type": "sms",
  "user": {
    "id": "usrwz9oy2faX6CPRV",
    "email": "clifford.radicchio@example.com",
    "name": "Clifford Radicchio"
  }
}
```

## Remove two-factor authentication strategy

**Event type:** `removeTwoFactorAuthenticationStrategy`

A user removed a two-factor authentication strategy from their account.

**Payload schema**

- `type: "totp" | "sms" | "phoneCall"` — required

- `user: object` — required

  The user who removed the two-factor authentication strategy from their account.

  - `id: string` — required

  - `email: string` — required

  - `name: string` — required

**Example payload**

```json
{
  "type": "sms",
  "user": {
    "id": "usrwz9oy2faX6CPRV",
    "email": "clifford.radicchio@example.com",
    "name": "Clifford Radicchio"
  }
}
```

## Set default two-factor authentication strategy

**Event type:** `setDefaultTwoFactorAuthenticationStrategy`

A user chose a default two-factor authentication strategy.

**Payload schema**

- `type: "totp" | "sms" | "phoneCall"` — required

- `user: object` — required

  The user who chose a default two-factor authentication strategy for their account.

  - `id: string` — required

  - `email: string` — required

  - `name: string` — required

**Example payload**

```json
{
  "type": "phoneCall",
  "user": {
    "id": "usrwz9oy2faX6CPRV",
    "email": "clifford.radicchio@example.com",
    "name": "Clifford Radicchio"
  }
}
```

## Regenerate two-factor authentication backup codes

**Event type:** `regenerateTwoFactorAuthenticationBackupCodes`

A user regenerated their two-factor authentication backup codes.

**Payload schema**

- `user: object` — required

  The user who regenerated their two-factor authentication backup codes.

  - `id: string` — required

  - `email: string` — required

  - `name: string` — required

**Example payload**

```json
{
  "user": {
    "id": "usrwz9oy2faX6CPRV",
    "email": "clifford.radicchio@example.com",
    "name": "Clifford Radicchio"
  }
}
```

## Disable two-factor authentication

**Event type:** `disableTwoFactorAuthentication`

A user completely disabled two-factor authentication for their account.

**Payload schema**

- `user: object` — required

  The user who disabled two-factor authentication for their account.

  - `id: string` — required

  - `email: string` — required

  - `name: string` — required

**Example payload**

```json
{
  "user": {
    "id": "usrwz9oy2faX6CPRV",
    "email": "clifford.radicchio@example.com",
    "name": "Clifford Radicchio"
  }
}
```

## Create OAuth access token

**Event type:** `createOauthAccessToken`

A user authorized an OAuth integration, granting the integration an API access token.

**Payload schema**

- `scopes: array<string>` — required

  The actions the token is allowed to perform (only if the user also has the permission to perform them).

- `oauthIntegration: object` — required

  - `clientId: string` — required

    Unique identifier of the OAuth integration

  - `name: string` — required

**Example payload**

```json
{
  "oauthIntegration": {
    "name": "Example OAuth integration",
    "clientId": "677907f7-3405-4900-9899-6aed15cdda6e"
  },
  "scopes": [
    "data.records:read",
    "data.records:write"
  ]
}
```

## Refresh OAuth access token

**Event type:** `refreshOauthAccessToken`

An OAuth integration previously authorized by a user refreshed their access tokens, renewing their API access.

**Payload schema**

- `current: object` — required

  - `scopes: array<string>` — required

    The actions the token can perform after refresh. Equal to or a subset of the previous scopes.

- `oauthIntegration: object` — required

  - `clientId: string` — required

    Unique identifier of the OAuth integration

  - `name: string` — required

- `previous: object` — required

  - `scopes: array<string>` — required

    The actions the token could perform before refresh.

**Example payload**

```json
{
  "oauthIntegration": {
    "name": "Example OAuth integration",
    "clientId": "677907f7-3405-4900-9899-6aed15cdda6e"
  },
  "previous": {
    "scopes": [
      "data.records:read",
      "data.records:write"
    ]
  },
  "current": {
    "scopes": [
      "data.records:read",
      "data.records:write"
    ]
  }
}
```

## Create sync integration source

**Event type:** `createSyncIntegrationSource`

A user connected a sync integration source (e.g., Salesforce, Jira, Google Sheets) via OAuth.

**Payload schema**

- `type: string` — required

  The type of integration (e.g., SALESFORCE, ATLASSIAN_JIRA, GOOGLE_SHEETS)

- `name: string` — optional

  The user-friendly name for this integration

- `externalAccountMetadata: object` — optional

  Full metadata from the external account at the time of the event

**Example payload**

```json
{
  "type": "GMAIL",
  "name": "Gmail Account",
  "externalAccountMetadata": {
    "googleProfile": {
      "email": "user@gmail.com"
    }
  }
}
```

## Rename sync integration source

**Event type:** `renameSyncIntegrationSource`

A user renamed a sync integration source.

**Payload schema**

- `type: string` — required

  The type of integration (e.g., SALESFORCE, ATLASSIAN_JIRA, GOOGLE_SHEETS)

- `current: object` — required

  - `name: string` — required

    The new name

- `previous: object` — required

  - `name: string` — required

    The name prior to being renamed

**Example payload**

```json
{
  "type": "SALESFORCE",
  "previous": {
    "name": "Old Salesforce Account"
  },
  "current": {
    "name": "New Salesforce Account"
  }
}
```

## Reconnect sync integration source

**Event type:** `reconnectSyncIntegrationSource`

A user reconnected a sync integration source via OAuth.

**Payload schema**

- `type: string` — required

  The type of integration (e.g., SALESFORCE, ATLASSIAN_JIRA, GOOGLE_SHEETS)

- `name: string` — optional

  The user-friendly name for this integration

- `externalAccountMetadata: object` — optional

  Full metadata from the external account at the time of the event

**Example payload**

```json
{
  "type": "SLACK",
  "name": "Slack Account",
  "externalAccountMetadata": {
    "slackProfile": {
      "displayName": "caleb.jiang",
      "team": {
        "name": "Airtable"
      }
    }
  }
}
```

## Delete sync integration source

**Event type:** `deleteSyncIntegrationSource`

A user deleted a sync integration source (e.g., Salesforce, Jira, Google Sheets).

**Payload schema**

- `type: string` — required

  The type of integration (e.g., SALESFORCE, ATLASSIAN_JIRA, GOOGLE_SHEETS)

- `name: string` — optional

  The user-friendly name for this integration

- `externalAccountMetadata: object` — optional

  Full metadata from the external account at the time of the event

**Example payload**

```json
{
  "type": "GITHUB_PULL_REQUESTS",
  "name": "GitHub Pull Requests Account",
  "externalAccountMetadata": {
    "profile": {
      "login": "torvalds"
    }
  }
}
```

## Connect sync integration to table

**Event type:** `connectSyncIntegrationToTable`

A user connected a sync integration source to a table.

**Payload schema**

- `type: string` — required

  The type of integration (e.g., SALESFORCE, ATLASSIAN_JIRA, GOOGLE_CALENDAR)

- `name: string` — optional

  The user-friendly name for this integration

- `table: object` — required

  The table to which the sync source was connected

  - `id: string` — required

    The ID of the table to which the sync source was connected

  - `name: string` — required

    The name of the table to which the sync source was connected

- `syncSourceMetadata: object` — optional

  Metadata about the sync source (e.g., calendarName for Google Calendar, objectName for Salesforce)

**Example payload**

```json
{
  "type": "GOOGLE_CALENDAR",
  "name": "Google Calendar Account",
  "table": {
    "id": "tblXXXXXXXXXXXXXX",
    "name": "My Calendar Events"
  },
  "syncSourceMetadata": {
    "calendarName": "Work Calendar"
  }
}
```

## Change sync integration table source

**Event type:** `changeSyncIntegrationTableSource`

A user changed the sync integration source on a table.

**Payload schema**

- `type: string` — required

  The type of integration (e.g., SALESFORCE, ATLASSIAN_JIRA, GOOGLE_CALENDAR)

- `name: string` — optional

  The user-friendly name for this integration

- `table: object` — required

  The table whose sync source was changed

  - `id: string` — required

    The ID of the table whose sync source was changed

  - `name: string` — required

    The name of the table whose sync source was changed

- `syncSourceMetadata: object` — optional

  Metadata about the sync source (e.g., calendarName for Google Calendar, objectName for Salesforce)

**Example payload**

```json
{
  "type": "SALESFORCE",
  "name": "Salesforce Account",
  "table": {
    "id": "tblXXXXXXXXXXXXXX",
    "name": "My Salesforce Contacts"
  },
  "syncSourceMetadata": {
    "objectName": "Contact"
  }
}
```

## Disconnect sync integration from table

**Event type:** `disconnectSyncIntegrationFromTable`

A user disconnected a sync integration source from a table.

**Payload schema**

- `type: string` — required

  The type of integration (e.g., SALESFORCE, ATLASSIAN_JIRA, GOOGLE_CALENDAR)

- `name: string` — optional

  The user-friendly name for this integration

- `table: object` — required

  The table from which the sync source was disconnected

  - `id: string` — required

    The ID of the table from which the sync source was disconnected

  - `name: string` — required

    The name of the table from which the sync source was disconnected

- `syncSourceMetadata: object` — optional

  Metadata about the sync source (e.g., calendarName for Google Calendar, objectName for Salesforce)

**Example payload**

```json
{
  "type": "GOOGLE_CALENDAR",
  "name": "Google Calendar Account",
  "table": {
    "id": "tblXXXXXXXXXXXXXX",
    "name": "My Calendar Events"
  },
  "syncSourceMetadata": {
    "calendarName": "Work Calendar"
  }
}
```

## Create personal access token

**Event type:** `createPersonalAccessToken`

A user created a token to read/write data via the Airtable API.

**Payload schema**

- `name: string` — required

- `newTokenResources: object` — required

- `scopes: array<string>` — required

  The actions the token is allowed to perform.

**Example payload**

```json
{
  "name": "Example personal access token",
  "newTokenResources": {
    "type": "specificModelIds",
    "workspaceIds": [],
    "applicationIds": []
  },
  "scopes": [
    "data.records:read",
    "data.records:write"
  ]
}
```

## Grant enterprise admin access

**Event type:** `grantEnterpriseAdminAccess`

Admin access was granted to a user.

**Payload schema**

- `user: object` — required

  The user granted admin access.

  - `id: string` — required

  - `email: string` — required

  - `name: string` — required

- `roles: array<object>` — optional

  The admin roles granted to the user.

  - `id: string` — required

  - `managedRoleType: "adminFull" | "adminIntegration" | "adminLicense" | "adminBrand" | "adminUser"` — required

  - `name: string` — required

  - `roleType: "admin"` — required

  - `permissionTypes: array<"adminFullPermissions" | "adminSettingsIntegrationsManage" | "adminSettingsDevelopmentManage" | "adminSettingsBlocksManage" | "adminSettingsLicenseManage" | "adminSettingsBrandingManage" | "adminDataTablesManage" | "adminUsersInfoRead" | "adminUsersLicenseManage" | "adminUsersInviteManage" | "adminUsersIdentityManage" | "adminUsersTokensManage" | "adminUsersMembershipManage" | "adminUsersCollaborationsManage" | "adminServiceAccountsManage" | "adminGroupsInfoRead" | "adminGroupsManage" | "adminGroupsMembershipManage" | "adminGroupsLicenseManage" | "adminWorkspacesInfoRead" | "adminApplicationsInfoRead" | "adminPageBundlesInfoRead" | "adminAttachmentsUpload">` — required

**Example payload**

```json
{
  "user": {
    "id": "usrwz9oy2faX6CPRV",
    "email": "clifford.radicchio@example.com",
    "name": "Clifford Radicchio"
  },
  "roles": [
    {
      "id": "rol1h7cOflUSHYcCH",
      "roleType": "admin",
      "managedRoleType": "adminFull",
      "name": "Role name",
      "permissionTypes": [
        "adminFullPermissions"
      ]
    }
  ]
}
```

## Grant enterprise upgrader access

**Event type:** `grantEnterpriseUpgraderAccess`

Upgrader access was granted to a user.

**Payload schema**

- `user: object` — required

  The user granted upgrader access.

  - `id: string` — required

  - `email: string` — required

  - `name: string` — required

**Example payload**

```json
{
  "user": {
    "id": "usrwz9oy2faX6CPRV",
    "email": "clifford.radicchio@example.com",
    "name": "Clifford Radicchio"
  }
}
```

## Revoke enterprise admin access

**Event type:** `revokeEnterpriseAdminAccess`

Admin access was revoked from a user.

**Payload schema**

- `user: object` — required

  The user with revoked admin access.

  - `id: string` — required

  - `email: string` — required

  - `name: string` — required

- `roles: array<object>` — optional

  The admin roles granted to the user.

  - `id: string` — required

  - `managedRoleType: "adminFull" | "adminIntegration" | "adminLicense" | "adminBrand" | "adminUser"` — required

  - `name: string` — required

  - `roleType: "admin"` — required

  - `permissionTypes: array<"adminFullPermissions" | "adminSettingsIntegrationsManage" | "adminSettingsDevelopmentManage" | "adminSettingsBlocksManage" | "adminSettingsLicenseManage" | "adminSettingsBrandingManage" | "adminDataTablesManage" | "adminUsersInfoRead" | "adminUsersLicenseManage" | "adminUsersInviteManage" | "adminUsersIdentityManage" | "adminUsersTokensManage" | "adminUsersMembershipManage" | "adminUsersCollaborationsManage" | "adminServiceAccountsManage" | "adminGroupsInfoRead" | "adminGroupsManage" | "adminGroupsMembershipManage" | "adminGroupsLicenseManage" | "adminWorkspacesInfoRead" | "adminApplicationsInfoRead" | "adminPageBundlesInfoRead" | "adminAttachmentsUpload">` — required

**Example payload**

```json
{
  "user": {
    "id": "usrwz9oy2faX6CPRV",
    "email": "clifford.radicchio@example.com",
    "name": "Clifford Radicchio"
  },
  "roles": [
    {
      "id": "rol1h7cOflUSHYcCH",
      "roleType": "admin",
      "managedRoleType": "adminFull",
      "name": "Role name",
      "permissionTypes": [
        "adminFullPermissions"
      ]
    }
  ]
}
```

## Revoke enterprise upgrader access

**Event type:** `revokeEnterpriseUpgraderAccess`

Upgrader access was revoked from a user.

**Payload schema**

- `user: object` — required

  The user with revoked upgrader access.

  - `id: string` — required

  - `email: string` — required

  - `name: string` — required

**Example payload**

```json
{
  "user": {
    "id": "usrwz9oy2faX6CPRV",
    "email": "clifford.radicchio@example.com",
    "name": "Clifford Radicchio"
  }
}
```

## Update enterprise name

**Event type:** `updateEnterpriseName`

An enterprise's name was updated.

**Payload schema**

- `current: object` — required

  - `name: string` — required

    Enterprise name after being updated.

- `previous: object` — required

  - `name: string` — required

    Enterprise name before being updated

**Example payload**

```json
{
  "previous": {
    "name": "Previous-enterprise-name"
  },
  "current": {
    "name": "Current-enterprise-name"
  }
}
```

## Delete enterprise stripe card

**Event type:** `deleteEnterpriseStripeCard`

An enterprise stripe card was deleted.

**Payload schema**

- `stripeCardId: string` — required

  Stripe card id for card to be deleted

- `stripeCustomerId: string` — required

**Example payload**

```json
{
  "stripeCustomerId": "cus_Cutg3jPljaBrC8",
  "stripeCardId": "card_1N5JFjGqPjJ0Sj6HY0NvYgRy"
}
```

## Update enterprise stripe card

**Event type:** `updateEnterpriseStripeCard`

An enterprise stripe card was updated.

**Payload schema**

- `stripeCustomerId: string` — required

**Example payload**

```json
{
  "stripeCustomerId": "cus_Cutg3jPljaBrC8"
}
```

## Update enterprise payment method

**Event type:** `updateEnterprisePaymentMethod`

An enterprise payment method was updated.

**Payload schema**

- `stripeCustomerId: string` — required

**Example payload**

```json
{
  "stripeCustomerId": "cus_Cutg3jPljaBrC8"
}
```

## Update enterprise invoice memo details

**Event type:** `updateEnterpriseInvoiceDetails`

Enterprise memo details have been updated for all future invoices.

**Payload schema**

- `current: object` — required

  - `invoiceDetails: object` — required

    - `address: string` — required

    - `footer: string` — required

    - `taxCode: string` — required

- `previous: object` — required

  - `invoiceDetails: object` — required

    - `address: string` — required

    - `footer: string` — required

    - `taxCode: string` — required

**Example payload**

```json
{
  "previous": {
    "invoiceDetails": {
      "address": "Previous-invoice-memo-address",
      "footer": "Previous-invoice-memo-footer",
      "taxCode": "Previous-invoice-memo-tax-code"
    }
  },
  "current": {
    "invoiceDetails": {
      "address": "Current-invoice-memo-address",
      "footer": "Current-invoice-memo-footer",
      "taxCode": "Current-invoice-memo-tax-code"
    }
  }
}
```

## Update enterprise tax details

**Event type:** `updateEnterpriseTaxDetails`

Enterprise tax details were updated.

**Payload schema**

- `current: object` — required

  - `businessName: string` — optional

    Business name after the update

  - `taxIdType: string` — optional

    Tax ID type after the update

- `previous: object` — required

  - `businessName: string` — optional

    Business name before the update

  - `taxIdType: string` — optional

    Tax ID type before the update

**Example payload**

```json
{
  "previous": {},
  "current": {
    "taxIdType": "eu_vat",
    "businessName": "Example Corporation"
  }
}
```

## Delete enterprise tax ID

**Event type:** `deleteEnterpriseTaxDetails`

An enterprise tax ID was deleted.

**Payload schema**

- `taxIdRecordId: string` — required

**Example payload**

```json
{
  "taxIdRecordId": "txi_1234567890"
}
```

## Create org unit

**Event type:** `createOrgUnit`

An org unit was created.

**Payload schema**

- `name: string` — required

  The name of the created org unit

- `parentEnterpriseAccount: object` — required

  The parent enterprise account of the created org unit

  - `id: string` — required

  - `name: string` — required

**Example payload**

```json
{
  "name": "New Enterprise Account Org Unit",
  "parentEnterpriseAccount": {
    "id": "entUBq2RGdihxl3vU",
    "name": "Parent Enterprise Account"
  }
}
```

## Delete org unit

**Event type:** `deleteOrgUnit`

An org unit was deleted.

**Payload schema**

- `name: string` — required

  The name of the deleted org unit

**Example payload**

```json
{
  "name": "Enterprise Account Org Unit"
}
```

## Create enterprise eDiscovery export

**Event type:** `createEdiscoveryExport`

An enterprise eDiscovery export was created

**Payload schema**

- `base: object` — required

  - `id: string` — required

  - `name: string` — required

    The name of the base at time of export creation

**Example payload**

```json
{
  "base": {
    "name": "My base",
    "id": "appLkNDICXNqxSDhG"
  }
}
```

## Update org unit connection

**Event type:** `updateOrgUnitConnection`

Org unit connection to user groups was updated.

**Payload schema**

- `current: object` — required

  - `connectedUserGroups: array<string>` — required

- `previous: object` — required

  - `connectedUserGroups: array<string>` — required

**Example payload**

```json
{
  "previous": {
    "connectedUserGroups": [
      "ugpVkI4ekrHfSP0xx",
      "ugpVkI4ekrHfSP0yy"
    ]
  },
  "current": {
    "connectedUserGroups": [
      "ugpOjyHm01InnGQYV"
    ]
  }
}
```

## Update membership capture type

**Event type:** `updateMembershipCaptureType`

The membership capture type for the organization was updated.

**Payload schema**

- `current: object` — required

  The current organization membership settings.

  - `membershipCaptureType: "adminReview" | "autoClaim" | "domainCapture" | "userGroupConnections"` — required

    The new membership capture type.

- `previous: object` — required

  The previous organization membership settings.

  - `membershipCaptureType: "adminReview" | "autoClaim" | "domainCapture" | "userGroupConnections"` — required

    The previous membership capture type.

**Example payload**

```json
{
  "previous": {
    "membershipCaptureType": "adminReview"
  },
  "current": {
    "membershipCaptureType": "autoClaim"
  }
}
```

## User requested a license upgrade

**Event type:** `requestLicenseUpgrade`

A user requested a license upgrade in this enterprise account.

**Payload schema**

- `sourceModelId: string` — required

  The resource from which the license upgrade was requested.

- `sourceApplicationId: string` — optional

  The application ID of the source model. Only present if the source model is an application or page bundle.

**Example payload**

```json
{
  "sourceModelId": "appEEnPbptK123456",
  "sourceApplicationId": "appEEnPbptK123456"
}
```

## Admin approved a license upgrade request

**Event type:** `approveLicenseUpgradeRequest`

An admin approved a license upgrade request in this enterprise account.

**Payload schema**

- `userGroupId: string` — optional

  The user group that the user was added to as part of the license upgrade.

- `affectedEnterpriseAccountIds: array<string>` — required

  All enterprise accounts where users license has been upgraded.

**Example payload**

```json
{
  "userGroupId": "ugpQ7PJ2boxzMAKFU",
  "affectedEnterpriseAccountIds": [
    "entEEnPbptK123456"
  ]
}
```

## Admin denied a license upgrade request

**Event type:** `denyLicenseUpgradeRequest`

An admin denied a license upgrade request in this enterprise account.

**Payload schema**

`object`.

**Example payload**

```json
{}
```

## Change invite restrictions for an enterprise

**Event type:** `changeEnterpriseInviteRestrictions`

Restrictions on what users can be invited to content that the enterprise owns

**Payload schema**

- `restrictionType: "unrestricted" | "restrictedToEnterpriseAccountEmailDomains" | "restrictedToEnterpriseAccountMembers"` — optional

  The invite restriction type enabled for the enterprise account

- `emailDomains: array<string>` — required

  Email domains currently associated with the enterprise account.

- `allowedEmailDomains: array<string>` — optional

  Email domains of the user accounts that may be invited to collaborate on the enterprise's assets. If email domain invite restrictions are not enabled, this field will not be present.

- `current: object` — required

  - `restrictionType: "unrestricted" | "restrictedToEnterpriseAccountEmailDomains" | "restrictedToEnterpriseAccountMembers"` — optional

    The invite restriction type enabled for the enterprise account

  - `allowedEmailDomains: array<string>` — optional

    Email domains of the user accounts that may be invited to collaborate on the enterprise's assets. If email domain invite restrictions are not enabled, this field will not be present.

- `previous: object` — required

  - `restrictionType: "unrestricted" | "restrictedToEnterpriseAccountEmailDomains" | "restrictedToEnterpriseAccountMembers"` — optional

    The invite restriction type enabled for the enterprise account

  - `allowedEmailDomains: array<string>` — optional

    Email domains of the user accounts that may be invited to collaborate on the enterprise's assets. If email domain invite restrictions are not enabled, this field will not be present.

**Example payload**

```json
{
  "emailDomains": [
    "example.com",
    "example2.com"
  ],
  "previous": {
    "restrictionType": "unrestricted"
  },
  "current": {
    "restrictionType": "restrictedToEnterpriseAccountEmailDomains",
    "allowedEmailDomains": [
      "example3.com"
    ]
  }
}
```

## Change portal invite restrictions for an enterprise

**Event type:** `changeEnterprisePortalInviteRestrictions`

Restrictions on what users can be invited to portals that the enterprise owns

**Payload schema**

- `restrictionType: "unrestricted" | "restrictedToEnterpriseAccountEmailDomains" | "disabled"` — optional

  The invite restriction type enabled for the portals in the enterprise account

- `emailDomains: array<string>` — required

  Email domains currently associated with the enterprise account.

- `allowedEmailDomains: array<string>` — optional

  Email domains of the user accounts that may be invited to collaborate on the enterprise's portals. If email domain invite restrictions are not enabled, this field will not be present.

- `current: object` — required

  - `restrictionType: "unrestricted" | "restrictedToEnterpriseAccountEmailDomains" | "disabled"` — optional

    The invite restriction type enabled for the portals in the enterprise account

  - `allowedEmailDomains: array<string>` — optional

    Email domains of the user accounts that may be invited to collaborate on the enterprise's portals. If email domain invite restrictions are not enabled, this field will not be present.

- `previous: object` — required

  - `restrictionType: "unrestricted" | "restrictedToEnterpriseAccountEmailDomains" | "disabled"` — optional

    The invite restriction type enabled for the portals in the enterprise account

  - `allowedEmailDomains: array<string>` — optional

    Email domains of the user accounts that may be invited to collaborate on the enterprise's portals. If email domain invite restrictions are not enabled, this field will not be present.

**Example payload**

```json
{
  "emailDomains": [
    "example.com",
    "example2.com"
  ],
  "previous": {
    "restrictionType": "unrestricted"
  },
  "current": {
    "restrictionType": "restrictedToEnterpriseAccountEmailDomains",
    "allowedEmailDomains": [
      "example3.com"
    ]
  }
}
```

## Change interface organization-wide sharing restrictions for an enterprise

**Event type:** `changeEnterpriseInterfaceOrgWideSharingRestrictions`

Restriction on whether creators should be able to share interfaces with the entire organization

**Payload schema**

- `current: object` — required

  - `isInterfaceOrgWideSharingRestrictionEnabled: boolean` — required

    Whether organization-wide sharing has been disabled for the enterprise account

- `previous: object` — required

  - `isInterfaceOrgWideSharingRestrictionEnabled: boolean` — required

    Whether organization-wide sharing has been disabled for the enterprise account

**Example payload**

```json
{
  "previous": {
    "isInterfaceOrgWideSharingRestrictionEnabled": false
  },
  "current": {
    "isInterfaceOrgWideSharingRestrictionEnabled": true
  }
}
```

## Change global share restrictions for an enterprise

**Event type:** `changeEnterpriseGlobalShareRestrictions`

Restrictions on share link access from users outside of the enterprise's own email domains and syncing shared views with other bases has been changed.

**Payload schema**

- `externalTableSyncAdditionalRestrictionType: "unrestricted" | "restrictedToEnterprise" | "restrictedToEnterpriseGrid" | "syncOff"` — optional

  The restriction type that determines share restrictions for external table syncs from share links, applied in addition to any global share restrictions

- `externalTableSyncRestrictedToEnterpriseUserPolicy: "anyUser" | "hasCreatorPermissionOrIsAdmin" | "onlyAdmins"` — optional

  Which users are allowed to toggle external sync restrictions for a share link when share restrictions for external table syncs are restricted to the enterprise

- `isPasswordProtectedShareExemptFromRestriction: boolean` — optional

  Whether password-protected share links are exempt from any share restrictions

- `isPublicPageBundlePageSharingDisabled: boolean` — optional

  Whether creating new public page bundle pages is disabled

- `isSharedFormExemptFromRestriction: boolean` — optional

  Whether shared forms are exempt from any share restrictions

- `restrictionType: "unrestricted" | "restrictedOptional" | "restricted" | "membersOnlyRestricted"` — optional

  The restriction type set for global share restrictions

- `shouldKeepAmbiguousSharesUnrestricted: boolean` — optional

  Whether shares that were previously unrestricted stay unrestricted when setting the share restriction type to "Restricted Optional"

- `emailDomains: array<string>` — required

  Email domains currently associated with the enterprise account.

- `emailDomainsExemptFromRestriction: array<string>` — optional

  User accounts with email addresses of these email domains are exempt from any share restrictions

- `current: object` — required

  - `externalTableSyncAdditionalRestrictionType: "unrestricted" | "restrictedToEnterprise" | "restrictedToEnterpriseGrid" | "syncOff"` — optional

    The restriction type that determines share restrictions for external table syncs from share links, applied in addition to any global share restrictions

  - `externalTableSyncRestrictedToEnterpriseUserPolicy: "anyUser" | "hasCreatorPermissionOrIsAdmin" | "onlyAdmins"` — optional

    Which users are allowed to toggle external sync restrictions for a share link when share restrictions for external table syncs are restricted to the enterprise

  - `isPasswordProtectedShareExemptFromRestriction: boolean` — optional

    Whether password-protected share links are exempt from any share restrictions

  - `isPublicPageBundlePageSharingDisabled: boolean` — optional

    Whether creating new public page bundle pages is disabled

  - `isSharedFormExemptFromRestriction: boolean` — optional

    Whether shared forms are exempt from any share restrictions

  - `restrictionType: "unrestricted" | "restrictedOptional" | "restricted" | "membersOnlyRestricted"` — optional

    The restriction type set for global share restrictions

  - `shouldKeepAmbiguousSharesUnrestricted: boolean` — optional

    Whether shares that were previously unrestricted stay unrestricted when setting the share restriction type to "Restricted Optional"

  - `emailDomainsExemptFromRestriction: array<string>` — optional

    User accounts with email addresses of these email domains are exempt from any share restrictions

- `previous: object` — required

  - `externalTableSyncAdditionalRestrictionType: "unrestricted" | "restrictedToEnterprise" | "restrictedToEnterpriseGrid" | "syncOff"` — optional

    The restriction type that determines share restrictions for external table syncs from share links, applied in addition to any global share restrictions

  - `externalTableSyncRestrictedToEnterpriseUserPolicy: "anyUser" | "hasCreatorPermissionOrIsAdmin" | "onlyAdmins"` — optional

    Which users are allowed to toggle external sync restrictions for a share link when share restrictions for external table syncs are restricted to the enterprise

  - `isPasswordProtectedShareExemptFromRestriction: boolean` — optional

    Whether password-protected share links are exempt from any share restrictions

  - `isPublicPageBundlePageSharingDisabled: boolean` — optional

    Whether creating new public page bundle pages is disabled

  - `isSharedFormExemptFromRestriction: boolean` — optional

    Whether shared forms are exempt from any share restrictions

  - `restrictionType: "unrestricted" | "restrictedOptional" | "restricted" | "membersOnlyRestricted"` — optional

    The restriction type set for global share restrictions

  - `shouldKeepAmbiguousSharesUnrestricted: boolean` — optional

    Whether shares that were previously unrestricted stay unrestricted when setting the share restriction type to "Restricted Optional"

  - `emailDomainsExemptFromRestriction: array<string>` — optional

    User accounts with email addresses of these email domains are exempt from any share restrictions

**Example payload**

```json
{
  "emailDomains": [
    "example.com",
    "example2.com"
  ],
  "previous": {
    "restrictionType": "unrestricted"
  },
  "current": {
    "restrictionType": "restricted",
    "isPasswordProtectedShareExemptFromRestriction": false,
    "isSharedFormExemptFromRestriction": false,
    "emailDomainsExemptFromRestriction": [
      "example3.com"
    ]
  }
}
```

## Change group creation restrictions for an enterprise

**Event type:** `changeEnterpriseGroupCreateRestrictions`

Restrictions on whether all users or only admins can create and modify groups have been changed.

**Payload schema**

- `current: object` — required

  - `role: "onlyAdmins" | "everyone"` — required

- `previous: object` — required

  - `role: "onlyAdmins" | "everyone"` — required

**Example payload**

```json
{
  "previous": {
    "role": "everyone"
  },
  "current": {
    "role": "onlyAdmins"
  }
}
```

## Change extension configuration restrictions for an enterprise

**Event type:** `changeEnterpriseExtensionConfigurationRestrictions`

Restrictions on the use of extensions within the bases owned by the enterprise have been changed.

**Payload schema**

- `developmentSettings: object` — optional

  Restrictions placed on whether users of the enterprise may develop custom extensions, write scripts, and install scripts from the marketplace

  - `isDevelopmentRestrictionEnabled: boolean` — optional

    Whether the restriction is enabled

  - `allowlistedDevelopers: array<object>` — optional

    A list of users exempt from restrictions

    - `id: string` — required

    - `email: string` — required

    - `name: string` — required

- `firstPartyAndPartnerSettings: object` — optional

  Restrictions placed on the use of first-party extensions created by Airtable and created by Airtable partners

  - `restrictionType: "allowAll" | "allowWithoutNetworkAccess" | "denyAll"` — optional

    Determines whether all extensions are allowed for use, only extensions that access Airtable servers, or none at all

  - `allowlistedExtensions: array<object>` — optional

    A list of extensions exempt from restrictions

    - `id: string` — required

    - `name: string` — required

- `thirdPartySettings: object` — optional

  Restrictions placed on the use of third-party extensions within Airtable's marketplace

  - `restrictionType: "allowAll" | "allowWithoutNetworkAccess" | "denyAll"` — optional

    Determines whether all extensions are allowed for use, only extensions that access Airtable servers, or none at all

  - `allowlistedExtensions: array<object>` — optional

    A list of extensions exempt from restrictions

    - `id: string` — required

    - `name: string` — required

- `current: object` — required

  - `developmentSettings: object` — optional

    Restrictions placed on whether users of the enterprise may develop custom extensions, write scripts, and install scripts from the marketplace

    - `isDevelopmentRestrictionEnabled: boolean` — optional

      Whether the restriction is enabled

    - `allowlistedDevelopers: array<object>` — optional

      A list of users exempt from restrictions

      - `id: string` — required

      - `email: string` — required

      - `name: string` — required

  - `firstPartyAndPartnerSettings: object` — optional

    Restrictions placed on the use of first-party extensions created by Airtable and created by Airtable partners

    - `restrictionType: "allowAll" | "allowWithoutNetworkAccess" | "denyAll"` — optional

      Determines whether all extensions are allowed for use, only extensions that access Airtable servers, or none at all

    - `allowlistedExtensions: array<object>` — optional

      A list of extensions exempt from restrictions

      - `id: string` — required

      - `name: string` — required

  - `thirdPartySettings: object` — optional

    Restrictions placed on the use of third-party extensions within Airtable's marketplace

    - `restrictionType: "allowAll" | "allowWithoutNetworkAccess" | "denyAll"` — optional

      Determines whether all extensions are allowed for use, only extensions that access Airtable servers, or none at all

    - `allowlistedExtensions: array<object>` — optional

      A list of extensions exempt from restrictions

      - `id: string` — required

      - `name: string` — required

- `previous: object` — required

  - `developmentSettings: object` — optional

    Restrictions placed on whether users of the enterprise may develop custom extensions, write scripts, and install scripts from the marketplace

    - `isDevelopmentRestrictionEnabled: boolean` — optional

      Whether the restriction is enabled

    - `allowlistedDevelopers: array<object>` — optional

      A list of users exempt from restrictions

      - `id: string` — required

      - `email: string` — required

      - `name: string` — required

  - `firstPartyAndPartnerSettings: object` — optional

    Restrictions placed on the use of first-party extensions created by Airtable and created by Airtable partners

    - `restrictionType: "allowAll" | "allowWithoutNetworkAccess" | "denyAll"` — optional

      Determines whether all extensions are allowed for use, only extensions that access Airtable servers, or none at all

    - `allowlistedExtensions: array<object>` — optional

      A list of extensions exempt from restrictions

      - `id: string` — required

      - `name: string` — required

  - `thirdPartySettings: object` — optional

    Restrictions placed on the use of third-party extensions within Airtable's marketplace

    - `restrictionType: "allowAll" | "allowWithoutNetworkAccess" | "denyAll"` — optional

      Determines whether all extensions are allowed for use, only extensions that access Airtable servers, or none at all

    - `allowlistedExtensions: array<object>` — optional

      A list of extensions exempt from restrictions

      - `id: string` — required

      - `name: string` — required

**Example payload**

```json
{
  "thirdPartySettings": {
    "restrictionType": "allowAll"
  },
  "developmentSettings": {
    "isDevelopmentRestrictionEnabled": false
  },
  "previous": {
    "firstPartyAndPartnerSettings": {
      "restrictionType": "denyAll",
      "allowlistedExtensions": [
        {
          "id": "blkSmwFJEdER6oksM",
          "name": "Test extension"
        }
      ]
    }
  },
  "current": {
    "firstPartyAndPartnerSettings": {
      "restrictionType": "allowAll"
    }
  }
}
```

## Change data retention policy for an enterprise

**Event type:** `changeEnterpriseDataRetentionPolicy`

Data retention policy for the enterprise have been changed.

**Payload schema**

- `baseInactiveInDays: integer` — optional

  The number of days of inactivity that a base is considered inactive and eligible for deletion. Null when inactive base pruning is disabled.

- `deletedBaseInTrashRetentionInDays: integer` — optional

  The retention period for deleted bases in Trash.

- `revisionHistoryRetentionInDays: integer` — optional

  The retention period for the revision history and snapshots. Null value means infinite retention.

- `inactiveBaseNotificationTimeSetting: object` — optional

  The ahead-in-time notification setting for base owners who have upcoming inactive bases. Null when the inactive base pruning is disabled.

  - `notify30DaysAhead: boolean` — required

  - `notify60DaysAhead: boolean` — required

  - `notify90DaysAhead: boolean` — required

- `current: object` — required

  - `baseInactiveInDays: integer` — optional

    The number of days of inactivity that a base is considered inactive and eligible for deletion. Null when inactive base pruning is disabled.

  - `deletedBaseInTrashRetentionInDays: integer` — optional

    The retention period for deleted bases in Trash.

  - `revisionHistoryRetentionInDays: integer` — optional

    The retention period for the revision history and snapshots. Null value means infinite retention.

  - `inactiveBaseNotificationTimeSetting: object` — optional

    The ahead-in-time notification setting for base owners who have upcoming inactive bases. Null when the inactive base pruning is disabled.

    - `notify30DaysAhead: boolean` — required

    - `notify60DaysAhead: boolean` — required

    - `notify90DaysAhead: boolean` — required

- `previous: object` — required

  - `baseInactiveInDays: integer` — optional

    The number of days of inactivity that a base is considered inactive and eligible for deletion. Null when inactive base pruning is disabled.

  - `deletedBaseInTrashRetentionInDays: integer` — optional

    The retention period for deleted bases in Trash.

  - `revisionHistoryRetentionInDays: integer` — optional

    The retention period for the revision history and snapshots. Null value means infinite retention.

  - `inactiveBaseNotificationTimeSetting: object` — optional

    The ahead-in-time notification setting for base owners who have upcoming inactive bases. Null when the inactive base pruning is disabled.

    - `notify30DaysAhead: boolean` — required

    - `notify60DaysAhead: boolean` — required

    - `notify90DaysAhead: boolean` — required

**Example payload**

```json
{
  "revisionHistoryRetentionInDays": 1095,
  "deletedBaseInTrashRetentionInDays": 30,
  "previous": {
    "baseInactiveInDays": 1095,
    "inactiveBaseNotificationTimeSetting": {
      "notify30DaysAhead": true,
      "notify60DaysAhead": true,
      "notify90DaysAhead": true
    }
  },
  "current": {
    "baseInactiveInDays": 730,
    "inactiveBaseNotificationTimeSetting": {
      "notify30DaysAhead": true,
      "notify60DaysAhead": false,
      "notify90DaysAhead": true
    }
  }
}
```

## Change AI restriction policy for an enterprise

**Event type:** `changeEnterpriseAiRestrictionPolicy`

Restrictions on the use of AI within the enterprise have been changed.

**Payload schema**

- `current: object` — required

  The AI restriction policy for an enterprise after being changed

  - `aiWorkspaceRestrictionPolicy: "allWorkspaces" | "noWorkspaces" | "specifiedWorkspaces"` — optional

    Whether AI features are enabled for workspaces in this enterprise

  - `allowedAiModelCreatorsByAiModelProvider: object` — optional

    The AI model creators allowed for each AI model provider enabled for this enterprise

    - `[key: string]: array<"openAi" | "anthropic" | "ibm" | "meta" | "amazon" | "sentenceTransformers" | "google" | "mistralAi">`

  - `isAiEnabled: boolean` — optional

    Whether AI features are enabled for the enterprise

  - `allowedAiModelProviders: array<string>` — optional

    The AI model providers allowed for this enterprise

  - `allowedWorkspaces: array<string>` — optional

    The workspaces where AI features are explicitly enabled

- `previous: object` — required

  The AI restriction policy for an enterprise before being changed

  - `aiWorkspaceRestrictionPolicy: "allWorkspaces" | "noWorkspaces" | "specifiedWorkspaces"` — optional

    Whether AI features are enabled for workspaces in this enterprise

  - `allowedAiModelCreatorsByAiModelProvider: object` — optional

    The AI model creators allowed for each AI model provider enabled for this enterprise

    - `[key: string]: array<"openAi" | "anthropic" | "ibm" | "meta" | "amazon" | "sentenceTransformers" | "google" | "mistralAi">`

  - `isAiEnabled: boolean` — optional

    Whether AI features are enabled for the enterprise

  - `allowedAiModelProviders: array<string>` — optional

    The AI model providers allowed for this enterprise

  - `allowedWorkspaces: array<string>` — optional

    The workspaces where AI features are explicitly enabled

**Example payload**

```json
{
  "previous": {
    "isAiEnabled": true,
    "aiWorkspaceRestrictionPolicy": "allWorkspaces",
    "allowedAiModelProviders": [
      "openAi"
    ],
    "allowedAiModelCreatorsByAiModelProvider": {
      "openAi": [
        "openAi"
      ]
    }
  },
  "current": {
    "isAiEnabled": true,
    "aiWorkspaceRestrictionPolicy": "specifiedWorkspaces",
    "allowedWorkspaces": [
      "wspmhESAta6clCCwF"
    ],
    "allowedAiModelProviders": [
      "anthropic"
    ],
    "allowedAiModelCreatorsByAiModelProvider": {
      "amazonBedrock": [
        "anthropic"
      ]
    }
  }
}
```

## Change MFA policy for an enterprise

**Event type:** `changeEnterpriseMfaPolicy`

The MFA policy for the enterprise has been changed.

**Payload schema**

- `current: object` — required

  - `mfaPolicyType: "optional" | "requiredForMembers" | "requiredForEveryone"` — required

    The MFA policy for this enterprise

- `previous: object` — required

  - `mfaPolicyType: "optional" | "requiredForMembers" | "requiredForEveryone"` — required

    The MFA policy for this enterprise

**Example payload**

```json
{
  "previous": {
    "mfaPolicyType": "optional"
  },
  "current": {
    "mfaPolicyType": "requiredForMembers"
  }
}
```

## Change enterprise license upgrade request configuration

**Event type:** `changeEnterpriseLicenseUpgradeRequestConfig`

The configuration for enterprise license upgrade requests has been changed.

**Payload schema**

- `current: object` — required

  - `defaultConfig: object` — required

  - `message: string` — required

  - `title: string` — required

  - `externalUsersConfig: object` — optional

- `previous: object` — required

  - `defaultConfig: object` — required

  - `message: string` — required

  - `title: string` — required

  - `externalUsersConfig: object` — optional

**Example payload**

```json
{
  "previous": null,
  "current": {
    "title": "Request upgrade",
    "message": "Request license upgrade",
    "defaultConfig": {
      "type": "inApp"
    }
  }
}
```

## Lock grid setting

**Event type:** `updateSettingLock`

An enterprise grid setting was locked

**Payload schema**

- `setting: "adminCustomizedHelpMessage" | "aiRestrictionPolicy" | "airtableToGoogleDriveIntegrationRestriction" | "apiAccessRestriction" | "packageLibraryRestriction" | "attachmentUploadRestriction" | "blockDevelopmentRestriction" | "emailAndApiSyncRestriction" | "emailSyncRestriction" | "apiSyncRestriction" | "adminPanelSyncRestriction" | "firstPartyBlockRestriction" | "groupCreateByRole" | "integrationExternalAccountConfigs" | "integrationsAutomationsExternalSyncAiRestriction" | "inviteRestriction" | "membershipCaptureType" | "oauthRestriction" | "organizationLogo" | "organizationName" | "publishedDatasetPublisherPolicy" | "shareWithAudienceRestriction" | "shareRestriction" | "slackLinkUnfurlingRestriction" | "syncRestriction" | "thirdPartyBlockRestriction" | "dataRetentionPolicy" | "hipaaCompliance" | "dataTableInstallationRestriction" | "colors" | "portalInviteRestriction" | "dataExportControlRestriction" | "restrictWorkspaceAppCreation"` — required

- `current: object` — required

  - `locked: boolean` — required

- `previous: object` — required

  - `locked: boolean` — required

**Example payload**

```json
{
  "setting": "shareRestriction",
  "previous": {
    "locked": true
  },
  "current": {
    "locked": true
  }
}
```

## Change enterprise HyperDB installation restrictions

**Event type:** `changeDataTableInstallationRestrictions`

The setting for enterprise HyperDB installation restrictions has been changed.

**Payload schema**

- `current: "restrictedToEnterpriseGrid" | "restrictedToEnterprise"` — required

- `previous: "restrictedToEnterpriseGrid" | "restrictedToEnterprise"` — required

**Example payload**

```json
{
  "previous": "restrictedToEnterprise",
  "current": "restrictedToEnterpriseGrid"
}
```

## Change enterprise colors

**Event type:** `changeEnterpriseColors`

The setting for enterprise colors has been changed.

**Payload schema**

- `current: array<object>` — required

  - `id: string` — required

  - `isDarkOverride: boolean` — required

  - `name: string` — required

  - `value: string` — required

- `previous: array<object>` — required

  - `id: string` — required

  - `isDarkOverride: boolean` — required

  - `name: string` — required

  - `value: string` — required

**Example payload**

```json
{
  "previous": [
    {
      "id": "ecoUBq2RGdihxl3vU",
      "isDarkOverride": null,
      "name": "My Color",
      "value": "#666666"
    }
  ],
  "current": [
    {
      "id": "ecoUBq2RGdihxl3vU",
      "isDarkOverride": null,
      "name": "My Color",
      "value": "#663399"
    }
  ]
}
```

## Change enterprise terms of use configuration

**Event type:** `changeEnterpriseTermsOfUseOptions`

The configuration for enterprise terms of use has been changed.

**Payload schema**

- `current: object` — required

  - `isDefaultConfigEnabled: boolean` — required

  - `useDifferentConfigForExternalUsers: boolean` — required

  - `isExternalUsersConfigEnabled: boolean` — optional

- `previous: object` — required

  - `isDefaultConfigEnabled: boolean` — required

  - `useDifferentConfigForExternalUsers: boolean` — required

  - `isExternalUsersConfigEnabled: boolean` — optional

**Example payload**

```json
{
  "previous": null,
  "current": {
    "isDefaultConfigEnabled": true,
    "useDifferentConfigForExternalUsers": false
  }
}
```

## Change enterprise data export control restrictions

**Event type:** `changeEnterpriseDataExportControlRestrictions`

Restrictions on data export methods like printing, CSV download, and clipboard copying have been changed.

**Payload schema**

- `emailDomains: array<string>` — required

  Email domains currently associated with the enterprise account.

- `restrictionType: "unrestricted" | "membersOnly" | "restricted"` — optional

- `current: object` — required

  - `restrictionType: "unrestricted" | "membersOnly" | "restricted"` — optional

  - `allowlistedEmailDomains: array<string>` — optional

  - `options: object` — optional

    - `isCopyRestricted: boolean` — required

    - `isCsvDownloadRestricted: boolean` — required

    - `isPrintRestricted: boolean` — required

- `previous: object` — required

  - `restrictionType: "unrestricted" | "membersOnly" | "restricted"` — optional

  - `allowlistedEmailDomains: array<string>` — optional

  - `options: object` — optional

    - `isCopyRestricted: boolean` — required

    - `isCsvDownloadRestricted: boolean` — required

    - `isPrintRestricted: boolean` — required

- `allowlistedEmailDomains: array<string>` — optional

- `options: object` — optional

  - `isCopyRestricted: boolean` — required

  - `isCsvDownloadRestricted: boolean` — required

  - `isPrintRestricted: boolean` — required

**Example payload**

```json
{
  "emailDomains": [
    "example.com",
    "example2.com"
  ],
  "previous": {
    "restrictionType": "unrestricted"
  },
  "current": {
    "restrictionType": "membersOnly",
    "options": {
      "isPrintRestricted": true,
      "isCsvDownloadRestricted": false,
      "isCopyRestricted": true
    },
    "allowlistedEmailDomains": [
      "example3.com"
    ]
  }
}
```

## Change enterprise sensitivity labels

**Event type:** `changeEnterpriseSensitivityLabels`

The setting for enterprise sensitivity labels has been changed.

**Payload schema**

- `current: array<object>` — required

  - `id: string` — required

  - `color: string` — required

  - `description: string` — required

  - `name: string` — required

- `previous: array<object>` — required

  - `id: string` — required

  - `color: string` — required

  - `description: string` — required

  - `name: string` — required

**Example payload**

```json
{
  "previous": [
    {
      "id": "eslUBq2RGdihxl3vU",
      "name": "My Label",
      "description": "My Description",
      "color": "#666666"
    }
  ],
  "current": [
    {
      "id": "eslUBq2RGdihxl3vU",
      "name": "My Label",
      "description": "My Description",
      "color": "#663399"
    }
  ]
}
```

## Change enterprise sensitivity label setting

**Event type:** `changeEnterpriseSensitivityLabelSetting`

The enterprise sensitivity label setting has been changed.

**Payload schema**

- `isEnabled: boolean` — optional

- `isEnforced: boolean` — optional

- `current: object` — required

  - `isEnabled: boolean` — optional

  - `isEnforced: boolean` — optional

- `previous: object` — required

  - `isEnabled: boolean` — optional

  - `isEnforced: boolean` — optional

**Example payload**

```json
{
  "previous": {
    "isEnabled": false,
    "isEnforced": false
  },
  "current": {
    "isEnabled": true,
    "isEnforced": true
  }
}
```

## Change enterprise workspace and app creation restrictions

**Event type:** `changeEnterpriseWorkspaceAppCreationRestrictions`

The restriction on whether workspace and app can be creatd in the enterprise account has been changed.

**Payload schema**

- `current: object` — required

  - `isRestrictWorkspaceAppCreationEnabled: boolean` — required

    Whether workspace app creation is restricted to admins only

  - `allowlistedUserGroups: array<object>` — optional

    User groups whose members are allowed to create workspaces and apps despite the restriction

    - `id: string` — required

    - `name: string` — required

  - `allowlistedUsers: array<object>` — optional

    Users who are allowed to create workspaces and apps despite the restriction

    - `id: string` — required

    - `email: string` — required

- `previous: object` — required

  - `isRestrictWorkspaceAppCreationEnabled: boolean` — required

    Whether workspace app creation is restricted to admins only

  - `allowlistedUserGroups: array<object>` — optional

    User groups whose members are allowed to create workspaces and apps despite the restriction

    - `id: string` — required

    - `name: string` — required

  - `allowlistedUsers: array<object>` — optional

    Users who are allowed to create workspaces and apps despite the restriction

    - `id: string` — required

    - `email: string` — required

**Example payload**

```json
{
  "previous": {
    "isRestrictWorkspaceAppCreationEnabled": false
  },
  "current": {
    "isRestrictWorkspaceAppCreationEnabled": true,
    "allowlistedUsers": [
      {
        "id": "usrXXXXXXXXXXXXXX",
        "email": "user@example.com"
      }
    ],
    "allowlistedUserGroups": [
      {
        "id": "ugpXXXXXXXXXXXXXX",
        "name": "Admins"
      }
    ]
  }
}
```

## Add user or group to enterprise restriction allowlist

**Event type:** `addUserOrGroupToEnterpriseRestrictionAllowlist`

A user or group was added to an enterprise restriction allowlist.

**Payload schema**

- `restrictionType: string` — required

  The type of enterprise restriction (e.g., packageLibraryRestriction, restrictWorkspaceAppCreation)

- `user: object` — optional

  The user added to the allowlist

  - `id: string` — required

  - `email: string` — required

- `userGroup: object` — optional

  The user group added to the allowlist

  - `id: string` — required

  - `name: string` — required

**Example payload**

```json
{
  "restrictionType": "restrictWorkspaceAppCreation",
  "user": {
    "id": "usrXXXXXXXXXXXXXX",
    "email": "user@example.com"
  }
}
```

## Remove user or group from enterprise restriction allowlist

**Event type:** `removeUserOrGroupFromEnterpriseRestrictionAllowlist`

A user or group was removed from an enterprise restriction allowlist.

**Payload schema**

- `restrictionType: string` — required

  The type of enterprise restriction (e.g., packageLibraryRestriction, restrictWorkspaceAppCreation)

- `user: object` — optional

  The user removed from the allowlist

  - `id: string` — required

  - `email: string` — required

- `userGroup: object` — optional

  The user group removed from the allowlist

  - `id: string` — required

  - `name: string` — required

**Example payload**

```json
{
  "restrictionType": "restrictWorkspaceAppCreation",
  "userGroup": {
    "id": "ugpXXXXXXXXXXXXXX",
    "name": "Engineering Team"
  }
}
```

## Apply default enterprise restriction setting

**Event type:** `applyDefaultEnterpriseSetting`

A parent enterprise organization applied an enterprise setting as a default onto a child organization.

**Payload schema**

- `current: object` — required

  The current setting value applied from the parent enterprise account

  - `[key: string]: string`

- `previous: object` — required

  The previous setting value of the child enterprise account before the default was applied

  - `[key: string]: string`

- `setting: string` — required

  The enterprise setting that was applied as default

- `childEnterpriseAccount: object` — required

  The child enterprise account that received the default setting

  - `id: string` — required

- `parentEnterpriseAccount: object` — required

  The parent enterprise account whose default setting was applied

  - `id: string` — required

**Example payload**

```json
{
  "setting": "restrictWorkspaceAppCreation",
  "parentEnterpriseAccount": {
    "id": "entXXXXXXXXXXXXXX"
  },
  "childEnterpriseAccount": {
    "id": "entYYYYYYYYYYYYYY"
  },
  "previous": {
    "isRestrictWorkspaceAppCreationEnabled": false
  },
  "current": {
    "isRestrictWorkspaceAppCreationEnabled": true
  }
}
```

## Create SSO identity provider

**Event type:** `createSsoIdentityProvider`

An SSO identity provider was created for an enterprise account.

**Payload schema**

- `emailDomain: string` — required

  The email domain associated with this SSO identity provider

- `emailAttribute: string` — optional

  The SAML attribute name configured to provide the real email, if any

**Example payload**

```json
{
  "emailDomain": "bloomberg.com",
  "emailAttribute": "mail"
}
```

## Update SSO identity provider

**Event type:** `updateSsoIdentityProvider`

An SSO identity provider configuration was updated.

**Payload schema**

- `didCertificateChange: boolean` — required

  Whether the x509 signing certificate was changed

- `emailDomain: string` — required

  The email domain associated with this SSO identity provider

- `current: object` — required

  - `signinUrl: string` — required

    The new SSO sign-in URL

  - `emailAttribute: string` — optional

    The new SAML email attribute name

- `previous: object` — required

  - `signinUrl: string` — required

    The previous SSO sign-in URL

  - `emailAttribute: string` — optional

    The previous SAML email attribute name

**Example payload**

```json
{
  "emailDomain": "bloomberg.com",
  "didCertificateChange": false,
  "previous": {
    "emailAttribute": null,
    "signinUrl": "https://old-login.bloomberg.com/sso"
  },
  "current": {
    "emailAttribute": "mail",
    "signinUrl": "https://login.bloomberg.com/sso"
  }
}
```

## Delete SSO identity provider

**Event type:** `deleteSsoIdentityProvider`

An SSO identity provider was deleted from an enterprise account.

**Payload schema**

- `emailDomain: string` — required

  The email domain that was associated with the deleted SSO identity provider

**Example payload**

```json
{
  "emailDomain": "bloomberg.com"
}
```

## Inherit SSO from another domain

**Event type:** `setEmailDomainSsoPiggybacking`

An email domain was configured to inherit SSO from another domain in the same enterprise account.

**Payload schema**

- `emailDomain: string` — required

  The email domain that was reassigned to inherit SSO from another

- `parentEmailDomain: string` — required

  The owning email domain of the inherited SSO identity provider

**Example payload**

```json
{
  "emailDomain": "canopy.com",
  "parentEmailDomain": "hilton.com"
}
```

## Stop inheriting SSO from another domain

**Event type:** `clearEmailDomainSsoPiggybacking`

An email domain stopped inheriting SSO from another domain.

**Payload schema**

- `emailDomain: string` — required

  The email domain that stopped inheriting SSO

- `previousParentEmailDomain: string` — required

  The owning email domain of the previously inherited SSO identity provider

**Example payload**

```json
{
  "emailDomain": "canopy.com",
  "previousParentEmailDomain": "hilton.com"
}
```

## Create managed app

**Event type:** `createManagedApp`

A new managed app was created.

**Payload schema**

- `name: string` — required

  The name of the created managed app.

**Example payload**

```json
{
  "name": "Awesome Managed App"
}
```

## Create component

**Event type:** `createComponent`

A new component was created.

**Payload schema**

- `name: string` — required

  The name of the created component.

**Example payload**

```json
{
  "name": "Awesome Component"
}
```

## Delete managed app

**Event type:** `deleteManagedApp`

A managed app was deleted.

**Payload schema**

- `name: string` — required

  The name of the deleted managed app.

**Example payload**

```json
{
  "name": "Awesome Managed App"
}
```

## Delete component

**Event type:** `deleteComponent`

A component was deleted.

**Payload schema**

- `name: string` — required

  The name of the deleted component.

**Example payload**

```json
{
  "name": "Awesome Component"
}
```

## Publish managed app

**Event type:** `publishManagedApp`

A managed app was published.

**Payload schema**

- `name: string` — required

  The name of the published managed app.

**Example payload**

```json
{
  "name": "Awesome Managed App"
}
```

## Publish component

**Event type:** `publishComponent`

A component was published.

**Payload schema**

- `name: string` — required

  The name of the published component.

**Example payload**

```json
{
  "name": "Awesome Component"
}
```

## Rename managed app

**Event type:** `updateManagedAppName`

A managed app was renamed.

**Payload schema**

- `current: object` — required

  - `name: string` — required

    The new name of the managed app.

- `previous: object` — required

  - `name: string` — required

    The name of the managed app prior to being renamed.

**Example payload**

```json
{
  "previous": {
    "name": "Previous app name"
  },
  "current": {
    "name": "New app name"
  }
}
```

## Rename component

**Event type:** `updateComponentName`

A component was renamed.

**Payload schema**

- `current: object` — required

  - `name: string` — required

    The new name of the component.

- `previous: object` — required

  - `name: string` — required

    The name of the component prior to being renamed.

**Example payload**

```json
{
  "previous": {
    "name": "Previous component name"
  },
  "current": {
    "name": "New component name"
  }
}
```

## Add managed app audience member

**Event type:** `addManagedAppAudienceMember`

An audience member was added to a managed app.

**Payload schema**

One of the following payload variants:

#### Variant 1

- `type: "user"` — required

  The type of audience member added to the audience.

- `name: string` — required

  The name of the managed app to whose audience this user was added.

- `user: object` — required

  The user added as an audience member.

  - `id: string` — required

  - `email: string` — required

  - `name: string` — required

#### Variant 2

- `type: "group"` — required

  The type of audience member added to the audience.

- `name: string` — required

  The name of the managed app to which this group was added.

- `group: object` — required

  The group added as an audience member.

  - `id: string` — required

  - `name: string` — required

**Example payload**

```json
{
  "name": "Awesome Managed App",
  "type": "group",
  "group": {
    "id": "ugp1mKGb3KXUyQfOZ",
    "name": "Awesome group"
  }
}
```

## Add component audience member

**Event type:** `addComponentAudienceMember`

An audience member was added to a component.

**Payload schema**

One of the following payload variants:

#### Variant 1

- `type: "user"` — required

  The type of audience member added to the audience.

- `name: string` — required

  The name of the component to to whose audience this user was added.

- `user: object` — required

  The user added as an audience member.

  - `id: string` — required

  - `email: string` — required

  - `name: string` — required

#### Variant 2

- `type: "group"` — required

  The type of audience member added to the audience.

- `name: string` — required

  The name of the component to which this group was added.

- `group: object` — required

  The group added as an audience member.

  - `id: string` — required

  - `name: string` — required

**Example payload**

```json
{
  "name": "Awesome Component",
  "type": "group",
  "group": {
    "id": "ugp1mKGb3KXUyQfOZ",
    "name": "Awesome group"
  }
}
```

## Remove managed app audience member

**Event type:** `removeManagedAppAudienceMember`

An audience member was removed from a managed app.

**Payload schema**

One of the following payload variants:

#### Variant 1

- `type: "user"` — required

  The type of audience member removed from the audience.

- `name: string` — required

  The name of the managed app from whose audience this user was removed

- `user: object` — required

  The user removed from the audience.

  - `id: string` — required

  - `email: string` — required

  - `name: string` — required

#### Variant 2

- `type: "group"` — required

  The type of audience member removed from the audience.

- `name: string` — required

  The name of the managed app from whose audience this group was removed

- `group: object` — required

  The group removed from the audience.

  - `id: string` — required

  - `name: string` — required

**Example payload**

```json
{
  "name": "Awesome Managed App",
  "type": "group",
  "group": {
    "id": "ugp1mKGb3KXUyQfOZ",
    "name": "Awesome group"
  }
}
```

## Remove component audience member

**Event type:** `removeComponentAudienceMember`

An audience member was removed from a component.

**Payload schema**

One of the following payload variants:

#### Variant 1

- `type: "user"` — required

  The type of audience member removed from the audience

- `name: string` — required

  The name of the component from whose audience this user was removed

- `user: object` — required

  The user removed from the audience.

  - `id: string` — required

  - `email: string` — required

  - `name: string` — required

#### Variant 2

- `type: "group"` — required

  The type of audience member removed from the audience

- `name: string` — required

  The name of the component from whose audience this group was removed

- `group: object` — required

  The group removed from the audience.

  - `id: string` — required

  - `name: string` — required

**Example payload**

```json
{
  "name": "Awesome Component",
  "type": "group",
  "group": {
    "id": "ugp1mKGb3KXUyQfOZ",
    "name": "Awesome group"
  }
}
```

## Add managed app collaborator

**Event type:** `addManagedAppCollaborator`

A collaborator was added to a managed app.

**Payload schema**

One of the following payload variants:

#### Variant 1

- `type: "user"` — required

  The type of collaborator added to the managed app.

- `name: string` — required

  The name of the managed app to which this user was added.

- `user: object` — required

  The user added as a collaborator.

  - `id: string` — required

  - `permissionLevel: "read" | "create" | "owner"` — required

    The permission level at which the user was added as a collaborator.

  - `email: string` — required

  - `name: string` — required

#### Variant 2

- `type: "group"` — required

  The type of collaborator added to the managed app.

- `name: string` — required

  The name of the managed app to which this group was added.

- `group: object` — required

  The group added as a collaborator.

  - `id: string` — required

  - `permissionLevel: "read" | "create" | "owner"` — required

    The permission level at which the group was added as a collaborator.

  - `name: string` — required

**Example payload**

```json
{
  "name": "Awesome Managed App",
  "type": "group",
  "group": {
    "id": "ugp1mKGb3KXUyQfOZ",
    "name": "Awesome group",
    "permissionLevel": "read"
  }
}
```

## Add component collaborator

**Event type:** `addComponentCollaborator`

A collaborator was added to a component.

**Payload schema**

One of the following payload variants:

#### Variant 1

- `type: "user"` — required

  The type of collaborator added to the component.

- `name: string` — required

  The name of the component to which this user was added.

- `user: object` — required

  The user added as a collaborator.

  - `id: string` — required

  - `permissionLevel: "read" | "create" | "owner"` — required

    The permission level at which the user was added as a collaborator.

  - `email: string` — required

  - `name: string` — required

#### Variant 2

- `type: "group"` — required

  The type of collaborator added to the component

- `name: string` — required

  The name of the component to which this group was added.

- `group: object` — required

  The group added as a collaborator.

  - `id: string` — required

  - `permissionLevel: "read" | "create" | "owner"` — required

    The permission level at which the group was added as a collaborator.

  - `name: string` — required

**Example payload**

```json
{
  "name": "Awesome Component",
  "type": "group",
  "group": {
    "id": "ugp1mKGb3KXUyQfOZ",
    "name": "Awesome group",
    "permissionLevel": "read"
  }
}
```

## Change managed app collaborator permission

**Event type:** `changeManagedAppCollaboratorPermission`

The direct permission of a collaborator on a managed app was changed.

**Payload schema**

One of the following payload variants:

#### Variant 1

- `type: "user"` — required

  The type of collaborator whose permission on the managed app was changed.

- `name: string` — required

  The name of the managed app on which this user's permission was changed.

- `user: object` — required

  The user whose direct permission on the managed app was changed.

  - `id: string` — required

  - `email: string` — required

  - `name: string` — required

- `current: object` — required

  - `user: object` — required

    - `permissionLevel: "read" | "create" | "owner"` — required

      The new direct managed app permission level of the user.

- `previous: object` — required

  - `user: object` — required

    - `permissionLevel: "read" | "create" | "owner"` — required

      The direct managed app permission level of the user prior to this change.

#### Variant 2

- `type: "group"` — required

  The type of collaborator whose permission on the managed app was changed.

- `name: string` — required

  The name of the managed app on which this group's permission was changed.

- `group: object` — required

  The group whose direct permission on the managed app was changed.

  - `id: string` — required

  - `name: string` — required

- `current: object` — required

  - `group: object` — required

    - `permissionLevel: "read" | "create" | "owner"` — required

      The new direct managed app permission level of the group.

- `previous: object` — required

  - `group: object` — required

    - `permissionLevel: "read" | "create" | "owner"` — required

      The direct managed app permission level of the group prior to this change.

**Example payload**

```json
{
  "name": "Awesome Managed App",
  "type": "user",
  "user": {
    "id": "usrL2PNC5o3H4lBEi",
    "email": "john.jacob@example.com",
    "name": "John Jacob"
  },
  "previous": {
    "user": {
      "permissionLevel": "read"
    }
  },
  "current": {
    "user": {
      "permissionLevel": "owner"
    }
  }
}
```

## Change component collaborator permission

**Event type:** `changeComponentCollaboratorPermission`

The direct permission of a collaborator on a component was changed.

**Payload schema**

One of the following payload variants:

#### Variant 1

- `type: "user"` — required

  The type of collaborator whose permission on the component was changed.

- `name: string` — required

  The name of the component on which this user's permission was changed.

- `user: object` — required

  The user whose direct permission on the component was changed.

  - `id: string` — required

  - `email: string` — required

  - `name: string` — required

- `current: object` — required

  - `user: object` — required

    - `permissionLevel: "read" | "create" | "owner"` — required

      The new direct component permission level of the user.

- `previous: object` — required

  - `user: object` — required

    - `permissionLevel: "read" | "create" | "owner"` — required

      The direct component permission level of the user prior to this change.

#### Variant 2

- `type: "group"` — required

  The type of collaborator whose permission on the component was changed.

- `name: string` — required

  The name of the component on which this group's permission was changed.

- `group: object` — required

  The group whose direct permission on the component was changed.

  - `id: string` — required

  - `name: string` — required

- `current: object` — required

  - `group: object` — required

    - `permissionLevel: "read" | "create" | "owner"` — required

      The new direct component permission level of the group.

- `previous: object` — required

  - `group: object` — required

    - `permissionLevel: "read" | "create" | "owner"` — required

      The direct component permission level of the group prior to this change.

**Example payload**

```json
{
  "name": "Awesome Component",
  "type": "user",
  "user": {
    "id": "usrL2PNC5o3H4lBEi",
    "email": "john.jacob@example.com",
    "name": "John Jacob"
  },
  "previous": {
    "user": {
      "permissionLevel": "read"
    }
  },
  "current": {
    "user": {
      "permissionLevel": "owner"
    }
  }
}
```

## Remove managed app collaborator

**Event type:** `removeManagedAppCollaborator`

A collaborator was removed from a managed app.

**Payload schema**

One of the following payload variants:

#### Variant 1

- `type: "user"` — required

  The type of collaborator removed from the managed app.

- `name: string` — required

  The name of the managed app from which this user was removed.

- `user: object` — required

  The user removed from the managed app.

  - `id: string` — required

  - `permissionLevel: "read" | "create" | "owner"` — required

    The permission level of the user when removed from the managed app.

  - `email: string` — required

  - `name: string` — required

#### Variant 2

- `type: "group"` — required

  The type of collaborator removed from the managed app.

- `name: string` — required

  The name of the managed app from which this group was removed.

- `group: object` — required

  The group removed from the managed app.

  - `id: string` — required

  - `permissionLevel: "read" | "create" | "owner"` — required

    The permission level of the group when removed from the managed app.

  - `name: string` — required

**Example payload**

```json
{
  "name": "Awesome Managed App",
  "type": "group",
  "group": {
    "id": "ugp1mKGb3KXUyQfOZ",
    "name": "Awesome group",
    "permissionLevel": "read"
  }
}
```

## Remove component collaborator

**Event type:** `removeComponentCollaborator`

A collaborator was removed from a component.

**Payload schema**

One of the following payload variants:

#### Variant 1

- `type: "user"` — required

  The type of collaborator removed from the component.

- `name: string` — required

  The name of the component from which this user was removed.

- `user: object` — required

  The user removed from the component.

  - `id: string` — required

  - `permissionLevel: "read" | "create" | "owner"` — required

    The permission level of the user when removed from the component.

  - `email: string` — required

  - `name: string` — required

#### Variant 2

- `type: "group"` — required

  The type of collaborator removed from the component.

- `name: string` — required

  The name of the component from which this group was removed.

- `group: object` — required

  The group removed from the component.

  - `id: string` — required

  - `permissionLevel: "read" | "create" | "owner"` — required

    The permission level of the group when removed from the component.

  - `name: string` — required

**Example payload**

```json
{
  "name": "Awesome Component",
  "type": "group",
  "group": {
    "id": "ugp1mKGb3KXUyQfOZ",
    "name": "Awesome group",
    "permissionLevel": "read"
  }
}
```

## Publish data set

**Event type:** `createPublishedDataset`

Creates a new published data set.

**Payload schema**

- `publishedDataset: object` — required

  The created published data set.

  - `name: string` — required

  - `owner: object` — required

  - `audience: object` — required

    - `type: "orgUnitWide" | "gridWide" | "specificUserGroups" | "unselected"` — required

      The audience type of the data set.

**Example payload**

```json
{
  "publishedDataset": {
    "name": "My data set name",
    "owner": {
      "type": "user",
      "user": {
        "id": "usrL2PNC5o3H4lBEi",
        "email": "john.jacob@example.com",
        "name": "John Jacob",
        "permissionLevel": "owner"
      }
    },
    "audience": {
      "type": "gridWide"
    }
  }
}
```

## Change data set name

**Event type:** `changePublishedDatasetName`

The name of a published data set was changed.

**Payload schema**

- `current: object` — required

  - `publishedDataset: object` — required

    - `name: string` — required

      The new name of the data set.

- `previous: object` — required

  - `publishedDataset: object` — required

    - `name: string` — required

      The previous name of the data set.

**Example payload**

```json
{
  "current": {
    "publishedDataset": {
      "name": "My updated data set name"
    }
  },
  "previous": {
    "publishedDataset": {
      "name": "My old data set name"
    }
  }
}
```

## Unpublish a data set

**Event type:** `deletePublishedDataset`

Deletes a published data set.

**Payload schema**

- `publishedDataset: object` — required

  The deleted published data set.

  - `name: string` — required

**Example payload**

```json
{
  "publishedDataset": {
    "name": "My deleted data set"
  }
}
```

## Update published data set owner

**Event type:** `updatePublishedDatasetOwner`

The owner of a published data set was updated.

**Payload schema**

- `name: string` — required

  The name of the data set in which the owner was updated.

- `current: object` — required

- `previous: object` — required

**Example payload**

```json
{
  "name": "My published data set",
  "current": {
    "type": "user",
    "user": {
      "id": "usrL2PNC5o3H4lBEi",
      "email": "john.jacob@example.com",
      "name": "John Jacob",
      "permissionLevel": "owner"
    }
  },
  "previous": {
    "type": "user",
    "user": {
      "id": "usrM3PNC5o3H4lBEt",
      "email": "jenna.jones@example.com",
      "name": "Jenna Jones",
      "permissionLevel": "comment"
    }
  }
}
```

## Update published data set audiences

**Event type:** `updatePublishedDatasetAudiences`

The audiences of a published data set were updated.

**Payload schema**

- `name: string` — required

  The name of the data set in which the audiences were updated.

- `originatingUserId: string` — required

  Id of the user that performed the audiences update.

- `current: object` — required

  - `type: "orgUnitWide" | "gridWide" | "specificUserGroups" | "unselected"` — required

    The updated audience type of the data set.

  - `audienceIds: array<string>` — required

- `previous: object` — required

  - `type: "orgUnitWide" | "gridWide" | "specificUserGroups" | "unselected"` — required

    The original audience type of the data set.

  - `audienceIds: array<string>` — required

**Example payload**

```json
{
  "name": "My published data set",
  "originatingUserId": "usrL2PNC5o3H4lBEi",
  "current": {
    "type": "orgUnitWide",
    "audienceIds": [
      "ugpOjyHm01InnGQYV"
    ]
  },
  "previous": {
    "type": "specificUserGroups",
    "audienceIds": [
      "ugpVkI4ekrHfSP0xx",
      "ugpVkI4ekrHfSP0yy"
    ]
  }
}
```

## Update published data set verification status

**Event type:** `updatePublishedDatasetVerificationStatus`

Published data set verification status was updated

**Payload schema**

- `name: string` — required

  The name of the data set in which the verification status was updated.

- `current: object` — required

  - `verificationStatus: "unverified" | "verified"` — required

- `previous: object` — required

  - `verificationStatus: "unverified" | "verified"` — required

**Example payload**

```json
{
  "name": "My published data set",
  "previous": {
    "verificationStatus": "unverified"
  },
  "current": {
    "verificationStatus": "verified"
  }
}
```

## Deactivate published data set

**Event type:** `deactivatePublishedDataset`

A published data set was made inactive due to changes in share or sync settings

**Payload schema**

- `deactivationReason: "shareNotEnabled" | "parentSyncTurnedOff" | "shareHasPassword" | "shareEmailDomainRestricted" | "shareTwoWaySyncEnabled" | "dataTableDeleted" | "dataTableBackedDatasetMadeInactive"` — required

- `publishedDataset: object` — required

  The deactivated dataset

  - `name: string` — required

**Example payload**

```json
{
  "publishedDataset": {
    "name": "My published data set"
  },
  "deactivationReason": "shareHasPassword"
}
```

## Reactivate published data set

**Event type:** `reactivatePublishedDataset`

A published data set was made active after deactivation

**Payload schema**

- `publishedDataset: object` — required

  The reactivated dataset

  - `name: string` — required

**Example payload**

```json
{
  "publishedDataset": {
    "name": "My published data set"
  }
}
```

## Create HyperDB table

**Event type:** `createDataTable`

Creates a new HyperDB table.

**Payload schema**

- `dataTable: object` — required

**Example payload**

```json
{
  "dataTable": {
    "sourceType": "csv",
    "name": "My data set name",
    "description": "My HyperDB table description",
    "sourceFilename": "my_data_table.csv"
  }
}
```

## Update HyperDB table single select column choices

**Event type:** `updateDataTableSingleSelectColumnChoices`

Updates choices of a HyperDB table single select column.

**Payload schema**

- `columnId: integer` — required

  The single select column

- `dataTableId: string` — required

  The HyperDB table.

- `choices: array<object>` — required

  The updated choices

  - `id: string` — required

  - `color: "blue" | "cyan" | "teal" | "green" | "yellow" | "orange" | "red" | "pink" | "purple" | "gray" | "blueMedium" | "cyanMedium" | "tealMedium" | "greenMedium" | "yellowMedium" | "orangeMedium" | "redMedium" | "pinkMedium" | "purpleMedium" | "grayMedium" | "blueDark" | "cyanDark" | "tealDark" | "greenDark" | "yellowDark" | "orangeDark" | "redDark" | "pinkDark" | "purpleDark" | "grayDark" | "blueDarker" | "cyanDarker" | "tealDarker" | "greenDarker" | "yellowDarker" | "orangeDarker" | "redDarker" | "pinkDarker" | "purpleDarker" | "grayDarker"` — required

  - `fractionalIndex: string` — required

  - `name: string` — required

**Example payload**

```json
{
  "dataTableId": "edtL2PNC5o3H4lxyz",
  "columnId": 0,
  "choices": [
    {
      "id": "selL2PNC5o3H4lxyz",
      "name": "choice1",
      "color": "blue",
      "fractionalIndex": "a0"
    }
  ]
}
```

## Update HyperDB table source

**Event type:** `updateDataTableSource`

Updates a HyperDB table from a new source file.

**Payload schema**

- `newSourceInfo: object` — required

  The new source information for the HyperDB table.

  - `sourceType: "csv"` — required

    The type of the new source.

  - `filename: string` — optional

    The filename of the new source.

**Example payload**

```json
{
  "newSourceInfo": {
    "sourceType": "csv",
    "filename": "new_data_table.csv"
  }
}
```

## Delete HyperDB table

**Event type:** `deleteDataTable`

Deletes a HyperDB table.

**Payload schema**

- `name: string` — required

  The name of the deleted HyperDB table.

**Example payload**

```json
{
  "name": "My data set name"
}
```

## Publish data set

**Event type:** `createPublishedDatasetFromDataTable`

Creates a new published data set.

**Payload schema**

- `publishedDataset: object` — required

  The created published data set.

  - `name: string` — required

  - `owner: object` — required

  - `audience: object` — required

    - `type: "orgUnitWide" | "gridWide" | "specificUserGroups" | "unselected"` — required

      The audience type of the data set.

**Example payload**

```json
{
  "publishedDataset": {
    "name": "My data set name",
    "owner": {
      "type": "user",
      "user": {
        "id": "usrL2PNC5o3H4lBEi",
        "email": "john.jacob@example.com",
        "name": "John Jacob"
      }
    },
    "audience": {
      "type": "gridWide"
    }
  }
}
```

## Abort HyperDB table import

**Event type:** `abortDataTableImportInProgress`

Cancel the existing import of a HyperDB table.

**Payload schema**

- `name: string` — required

  The name of the HyperDB table.

**Example payload**

```json
{
  "name": "my HyperDB table"
}
```

## Update a HyperDB table published data set

**Event type:** `updateDataTablePublishedDataSet`

Updates a data set backed by a HyperDB table.

**Payload schema**

- `current: object` — required

  The current published data set.

  - `name: string` — required

  - `owner: object` — required

  - `audience: object` — required

    - `type: "orgUnitWide" | "gridWide" | "specificUserGroups" | "unselected"` — required

      The audience type of the data set.

- `previous: object` — required

  The previous published data set.

  - `name: string` — required

  - `owner: object` — required

  - `audience: object` — required

    - `type: "orgUnitWide" | "gridWide" | "specificUserGroups" | "unselected"` — required

      The audience type of the data set.

**Example payload**

```json
{
  "current": {
    "name": "My current data set name",
    "owner": {
      "type": "user",
      "user": {
        "id": "usrL2PNC5o3H4lBEi",
        "email": "jenna.jacob@example.com",
        "name": "Jenna Jacob"
      }
    },
    "audience": {
      "type": "orgUnitWide"
    }
  },
  "previous": {
    "name": "My previous data set name",
    "owner": {
      "type": "user",
      "user": {
        "id": "usrL2PNC5o3H4lBE1",
        "email": "john.jacob@example.com",
        "name": "John Jacob"
      }
    },
    "audience": {
      "type": "gridWide"
    }
  }
}
```

## Update the status of a data set from a HyperDB table

**Event type:** `updateDataTablePublishedDataSetStatus`

Updates the status of a data set that was published from a HyperDB table.

**Payload schema**

- `current: "active" | "inactive" | "activeNotInLibrary"` — required

  The current status of the data set.

- `name: string` — required

  The name of the HyperDB table.

- `previous: "active" | "inactive" | "activeNotInLibrary"` — required

  The current status of the data set.

**Example payload**

```json
{
  "name": "My data set name",
  "current": "active",
  "previous": "activeNotInLibrary"
}
```

## Move HyperDb table to new owner

**Event type:** `moveDataTable`

Moves the HyperDB the HyperDB table to a new enterprise

**Payload schema**

- `name: string` — required

  The name of the moved HyperDB Table

- `current: object` — required

  The current billing plan and enterprise account

  - `enterpriseAccount: object` — required

    The enterprise account into which the HyperDB table was moved.

    - `id: string` — required

    - `name: string` — required

- `previous: object` — required

  The previous billing plan and enterprise account

  - `enterpriseAccount: object` — required

    The enterprise account from which the HyperDB table was moved.

    - `id: string` — required

    - `name: string` — required

**Example payload**

```json
{
  "name": "My HyperDB table",
  "previous": {
    "enterpriseAccount": {
      "id": "entUBq2RGdihxl3vZ",
      "name": "Previous Enterprise Account"
    }
  },
  "current": {
    "enterpriseAccount": {
      "id": "entUBq2RGdihxl3vU",
      "name": "Current Enterprise Account"
    }
  }
}
```

## Create workspace

**Event type:** `createWorkspace`

A new workspace was created.

**Payload schema**

- `name: string` — required

  The name of the created workspace

**Example payload**

```json
{
  "name": "My New Workspace"
}
```

## Delete workspace

**Event type:** `deleteWorkspace`

A workspace was deleted.

**Payload schema**

- `name: string` — required

  The name of the deleted workspace

**Example payload**

```json
{
  "name": "My Workspace"
}
```

## Restore workspace from trash

**Event type:** `restoreWorkspaceFromTrash`

A workspace was restored from the trash.

**Payload schema**

- `name: string` — required

  The name of the restored workspace

**Example payload**

```json
{
  "name": "My Workspace"
}
```

## Rename workspace

**Event type:** `updateWorkspaceName`

A workspace was renamed.

**Payload schema**

- `current: object` — required

  - `name: string` — required

    The new name of the workspace

- `previous: object` — required

  - `name: string` — required

    The name of the workspace prior to being renamed

**Example payload**

```json
{
  "previous": {
    "name": "Previous workspace name"
  },
  "current": {
    "name": "New workspace name"
  }
}
```

## Move workspace

**Event type:** `moveWorkspace`

A workspace was moved between accounts.

**Payload schema**

- `name: string` — required

  The name of the moved workspace

- `current: object` — required

  The current billing plan and enterprise account

  - `billingPlan: object` — required

    The workspace's current billing plan

    - `id: string` — required

    - `type: "free" | "plus" | "starter" | "pro" | "enterprise"` — required

  - `enterpriseAccount: object` — optional

    The enterprise account into which the workspace was moved. If blank, the workspace was moved into a non-enterprise account

    - `id: string` — required

    - `name: string` — required

- `previous: object` — required

  The previous billing plan and enterprise account

  - `billingPlan: object` — required

    The workspace's previous billing plan

    - `id: string` — required

    - `type: "free" | "plus" | "starter" | "pro" | "enterprise"` — required

  - `enterpriseAccount: object` — optional

    The enterprise account from which the workspace was moved. If blank, the workspace was moved from a non-enterprise account

    - `id: string` — required

    - `name: string` — required

**Example payload**

```json
{
  "name": "My Workspace",
  "previous": {
    "billingPlan": {
      "id": "plnbPlNFGdSC2wd8f",
      "type": "free"
    }
  },
  "current": {
    "enterpriseAccount": {
      "id": "entUBq2RGdihxl3vU",
      "name": "Current Enterprise Account"
    },
    "billingPlan": {
      "id": "plnguNcA6hGo17hxU",
      "type": "enterprise"
    }
  }
}
```

## Change workspace sharing restrictions

**Event type:** `changeWorkspaceSharingRestrictions`

The sharing restrictions for a workspace were changed.

**Payload schema**

- `name: string` — required

  The name of the workspace

- `inviteCreationRestriction: "unrestricted" | "onlyOwners"` — optional

  Whether only owners can add collaborators or create invites to this workspace, its bases, and its interfaces

- `shareCreationRestriction: "unrestricted" | "onlyOwners"` — optional

  Whether only owners can create new share links to this workspace, its bases, and its interfaces

- `current: object` — required

  The sharing restrictions for a workspace after being changed

  - `inviteCreationRestriction: "unrestricted" | "onlyOwners"` — optional

    Whether only owners can add collaborators or create invites to this workspace, its bases, and its interfaces

  - `shareCreationRestriction: "unrestricted" | "onlyOwners"` — optional

    Whether only owners can create new share links to this workspace, its bases, and its interfaces

- `previous: object` — required

  The sharing restrictions for a workspace before being changed

  - `inviteCreationRestriction: "unrestricted" | "onlyOwners"` — optional

    Whether only owners can add collaborators or create invites to this workspace, its bases, and its interfaces

  - `shareCreationRestriction: "unrestricted" | "onlyOwners"` — optional

    Whether only owners can create new share links to this workspace, its bases, and its interfaces

**Example payload**

```json
{
  "name": "My Workspace",
  "inviteCreationRestriction": "unrestricted",
  "previous": {
    "shareCreationRestriction": "unrestricted"
  },
  "current": {
    "shareCreationRestriction": "onlyOwners"
  }
}
```

## Create workspace invite link

**Event type:** `addWorkspaceInviteLink`

An invite link was created for a workspace.

**Payload schema**

- `permissionLevel: "read" | "comment" | "edit" | "create" | "owner"` — required

  The permission level a user would be granted when accepting this invite

- `url: string` — required

  The URL of the invite link

- `effectiveEmailDomainAllowList: array<string>` — required

  The email domains effectively allowed to access this invite link. This factors in the invite link's email domain restrictions and all enterprise-wide invite link restrictions. A viewer must have an account associated with an email domain included in the allow list to accept this invite link. When `null`, any email domain may accept the invite link. If the list is empty, the invite link cannot be used by anyone due to restrictions, (e.g. no member of restrictEmailDomainTo is allowed by enterprise-wide invite restrictions).

- `restrictedToEmailDomains: array<string>` — required

  The email domain restrictions assigned to the invite link. When `null`, no domain restrictions are assigned to the invite link, but higher level ones may affect it. We recommend using effectiveEmailDomainAllowList to understand invite link accessibility.

- `workspace: object` — required

  - `id: string` — required

  - `name: string` — required

    The name of the workspace at time of invite link creation

**Example payload**

```json
{
  "url": "https://airtable.com/invite/l?inviteId=invJiqaXmPqq6Ec87&inviteToken=0000000000000000000000000000000000000000000000000000000000000000",
  "permissionLevel": "owner",
  "restrictedToEmailDomains": null,
  "effectiveEmailDomainAllowList": [
    "example.com",
    "example1.com"
  ],
  "workspace": {
    "id": "wspmhESAta6clCCwF",
    "name": "My Workspace"
  }
}
```

## Configure workspace invite link

**Event type:** `configureWorkspaceInviteLink`

An workspace invite link's configuration was changed.

**Payload schema**

- `url: string` — required

  The URL of the invite link

- `permissionLevel: "read" | "comment" | "edit" | "create" | "owner"` — optional

  The permission level a user would be granted when accepting this invite

- `current: object` — required

  The properties of the invite link configuration after these changes were applied

  - `emailDomain: string` — optional

  - `permissionLevel: "read" | "comment" | "edit" | "create" | "owner"` — optional

  - `url: string` — optional

  - `effectiveEmailDomainAllowList: array<string>` — optional

  - `restrictedToEmailDomains: array<string>` — optional

- `previous: object` — required

  The properties of the invite link configuration before these changes were applied

  - `emailDomain: string` — optional

  - `permissionLevel: "read" | "comment" | "edit" | "create" | "owner"` — optional

  - `url: string` — optional

  - `effectiveEmailDomainAllowList: array<string>` — optional

  - `restrictedToEmailDomains: array<string>` — optional

- `effectiveEmailDomainAllowList: array<string>` — optional

  The email domains effectively allowed to access this invite link. This factors in the invite link's email domain restrictions and all enterprise-wide invite link restrictions. A viewer must have an account associated with an email domain included in the allow list to accept this invite link. When `null`, any email domain may accept the invite link. If the list is empty, the invite link cannot be used by anyone due to restrictions, (e.g. no member of restrictEmailDomainTo is allowed by enterprise-wide invite restrictions).

- `restrictedToEmailDomains: array<string>` — optional

  The email domain restrictions assigned to the invite link. When `null`, no domain restrictions are assigned to the invite link, but higher level ones may affect it. We recommend using effectiveEmailDomainAllowList to understand invite link accessibility.

- `workspace: object` — required

  - `id: string` — required

  - `name: string` — required

    The name of the workspace at time of invite link modification

**Example payload**

```json
{
  "url": "https://airtable.com/invite/l?inviteId=invJiqaXmPqq6Ec87&inviteToken=0000000000000000000000000000000000000000000000000000000000000000",
  "restrictedToEmailDomains": null,
  "effectiveEmailDomainAllowList": [
    "example.com",
    "example1.com"
  ],
  "previous": {
    "permissionLevel": "create"
  },
  "current": {
    "permissionLevel": "edit"
  },
  "workspace": {
    "id": "wspmhESAta6clCCwF",
    "name": "My Workspace"
  }
}
```

## Remove workspace invite link

**Event type:** `removeWorkspaceInviteLink`

An invite link was removed from a workspace.

**Payload schema**

- `permissionLevel: "read" | "comment" | "edit" | "create" | "owner"` — required

  The permission level a user would be granted when accepting this invite

- `url: string` — required

  The URL of the invite link

- `effectiveEmailDomainAllowList: array<string>` — required

  The email domains effectively allowed to access this invite link. This factors in the invite link's email domain restrictions and all enterprise-wide invite link restrictions. A viewer must have an account associated with an email domain included in the allow list to accept this invite link. When `null`, any email domain may accept the invite link. If the list is empty, the invite link cannot be used by anyone due to restrictions, (e.g. no member of restrictEmailDomainTo is allowed by enterprise-wide invite restrictions).

- `restrictedToEmailDomains: array<string>` — required

  The email domain restrictions assigned to the invite link. When `null`, no domain restrictions are assigned to the invite link, but higher level ones may affect it. We recommend using effectiveEmailDomainAllowList to understand invite link accessibility.

- `workspace: object` — required

  - `id: string` — required

  - `name: string` — required

    The name of the workspace at time of invite link removal

**Example payload**

```json
{
  "url": "https://airtable.com/invite/l?inviteId=invJiqaXmPqq6Ec87&inviteToken=0000000000000000000000000000000000000000000000000000000000000000",
  "permissionLevel": "owner",
  "restrictedToEmailDomains": null,
  "effectiveEmailDomainAllowList": [
    "example.com",
    "example1.com"
  ],
  "workspace": {
    "id": "wspmhESAta6clCCwF",
    "name": "My Workspace"
  }
}
```

## Change workspace AI permissions

**Event type:** `changeWorkspaceAiPermissions`

The AI permissions for a workspace were changed.

**Payload schema**

- `name: string` — required

  The name of the workspace

- `current: object` — required

  The AI permissions for a workspace after being changed

  - `enableAiFeatures: "allBases" | "noBases"` — optional

    Whether AI features are enabled for bases in this workspace

- `previous: object` — required

  The AI permissions for a workspace before being changed

  - `enableAiFeatures: "allBases" | "noBases"` — optional

    Whether AI features are enabled for bases in this workspace

**Example payload**

```json
{
  "name": "My Workspace",
  "previous": {
    "enableAiFeatures": "noBases"
  },
  "current": {
    "enableAiFeatures": "allBases"
  }
}
```

## Invite workspace collaborator

**Event type:** `inviteWorkspaceCollaborator`

A user was invited to collaborate on a workspace.

**Payload schema**

- `name: string` — required

  The name of the workspace to which this user was invited

- `user: object` — required

  The user invited as a collaborator.

  - `id: string` — optional

    Present when the invited user is already an Airtable user

  - `permissionLevel: "read" | "comment" | "edit" | "create" | "owner"` — required

    The permission level at which the user was invited as a collaborator.

  - `name: string` — optional

    Present when the invited user is already an Airtable user

  - `email: string` — required

**Example payload**

```json
{
  "name": "My Workspace",
  "user": {
    "email": "john.jacob@example.com",
    "permissionLevel": "comment"
  }
}
```

## Add workspace collaborator

**Event type:** `addWorkspaceCollaborator`

A collaborator was added to a workspace.

**Payload schema**

One of the following payload variants:

#### Variant 1

- `type: "user"` — required

  The type of collaborator added to the workspace

- `name: string` — required

  The name of the workspace to which this user was added

- `user: object` — required

  The user added as a collaborator.

  - `id: string` — required

  - `permissionLevel: "read" | "comment" | "edit" | "create" | "owner"` — required

    The permission level at which the user was added as a collaborator.

  - `email: string` — required

  - `name: string` — required

#### Variant 2

- `type: "group"` — required

  The type of collaborator added to the workspace

- `name: string` — required

  The name of the workspace to which this group was added

- `group: object` — required

  The group added as a collaborator.

  - `id: string` — required

  - `permissionLevel: "read" | "comment" | "edit" | "create" | "owner"` — required

    The permission level at which the group was added as a collaborator.

  - `name: string` — required

**Example payload**

```json
{
  "name": "My Workspace",
  "type": "user",
  "user": {
    "id": "usrL2PNC5o3H4lBEi",
    "email": "john.jacob@example.com",
    "name": "John Jacob",
    "permissionLevel": "comment"
  }
}
```

## Change workspace collaborator permission

**Event type:** `changeWorkspaceCollaboratorPermission`

The direct permission of a collaborator on a workspace was changed.

**Payload schema**

One of the following payload variants:

#### Variant 1

- `type: "user"` — required

  The type of collaborator whose permission on the workspace was changed.

- `name: string` — required

  The name of the workspace on which this user's permission was changed.

- `user: object` — required

  The user whose direct permission on the workspace was changed.

  - `id: string` — required

  - `email: string` — required

  - `name: string` — required

- `current: object` — required

  - `user: object` — required

    - `permissionLevel: "read" | "comment" | "edit" | "create" | "owner"` — required

      The new direct workspace permission level of the user.

- `previous: object` — required

  - `user: object` — required

    - `permissionLevel: "read" | "comment" | "edit" | "create" | "owner"` — required

      The direct workspace permission level of the user prior to this change.

#### Variant 2

- `type: "group"` — required

  The type of collaborator whose permission on the workspace was changed.

- `name: string` — required

  The name of the workspace on which this group's permission was changed.

- `group: object` — required

  The group whose direct permission on the workspace was changed.

  - `id: string` — required

  - `name: string` — required

- `current: object` — required

  - `group: object` — required

    - `permissionLevel: "read" | "comment" | "edit" | "create" | "owner"` — required

      The new direct workspace permission level of the group.

- `previous: object` — required

  - `group: object` — required

    - `permissionLevel: "read" | "comment" | "edit" | "create" | "owner"` — required

      The direct workspace permission level of the group prior to this change.

**Example payload**

```json
{
  "name": "My Workspace",
  "type": "user",
  "user": {
    "id": "usrL2PNC5o3H4lBEi",
    "email": "john.jacob@example.com",
    "name": "John Jacob"
  },
  "previous": {
    "user": {
      "permissionLevel": "read"
    }
  },
  "current": {
    "user": {
      "permissionLevel": "comment"
    }
  }
}
```

## Change workspace invite permission

**Event type:** `changeWorkspaceInvitePermission`

The permission a user will receive on a workspace when they accept the associated invite was changed.

**Payload schema**

- `name: string` — required

  The name of the workspace on which this invite's permission was changed.

- `user: object` — required

  The user whose invited permission on the workspace was changed.

  - `id: string` — optional

    Present when the invited user is already an Airtable user

  - `name: string` — optional

    Present when the invited user is already an Airtable user

  - `email: string` — required

- `current: object` — required

  - `user: object` — required

    - `permissionLevel: "read" | "comment" | "edit" | "create" | "owner"` — required

      The new direct permission level the invited user will receive on accepting the workspace invite.

- `previous: object` — required

  - `user: object` — required

    - `permissionLevel: "read" | "comment" | "edit" | "create" | "owner"` — required

      The direct permission level the invited user would have received on accepting the workspace invite prior to this change.

**Example payload**

```json
{
  "name": "My Workspace",
  "user": {
    "email": "john.jacob@example.com"
  },
  "previous": {
    "user": {
      "permissionLevel": "read"
    }
  },
  "current": {
    "user": {
      "permissionLevel": "comment"
    }
  }
}
```

## Uninvite workspace collaborator

**Event type:** `uninviteWorkspaceCollaborator`

A user was uninvited from a workspace.

**Payload schema**

- `name: string` — required

  The name of the workspace from which this user was uninvited

- `user: object` — required

  The user uninvited from the workspace.

  - `id: string` — optional

    Present when the uninvited user is already an Airtable user

  - `permissionLevel: "read" | "comment" | "edit" | "create" | "owner"` — required

    The permission level of the user when uninvited from the workspace.

  - `name: string` — optional

    Present when the uninvited user is already an Airtable user

  - `email: string` — required

**Example payload**

```json
{
  "name": "My Workspace",
  "user": {
    "email": "john.jacob@example.com",
    "permissionLevel": "comment"
  }
}
```

## Remove workspace collaborator

**Event type:** `removeWorkspaceCollaborator`

A collaborator was removed from a workspace.

**Payload schema**

One of the following payload variants:

#### Variant 1

- `type: "user"` — required

  The type of collaborator removed from the workspace

- `name: string` — required

  The name of the workspace from which this user was removed

- `user: object` — required

  The user removed from the workspace.

  - `id: string` — required

  - `permissionLevel: "read" | "comment" | "edit" | "create" | "owner"` — required

    The permission level of the user when removed from the workspace.

  - `email: string` — required

  - `name: string` — required

#### Variant 2

- `type: "group"` — required

  The type of collaborator removed from the workspace

- `name: string` — required

  The name of the workspace from which this group was removed

- `group: object` — required

  The group removed from the workspace.

  - `id: string` — required

  - `permissionLevel: "read" | "comment" | "edit" | "create" | "owner"` — required

    The permission level of the group when removed from the workspace.

  - `name: string` — required

**Example payload**

```json
{
  "name": "My Workspace",
  "type": "user",
  "user": {
    "id": "usrL2PNC5o3H4lBEi",
    "email": "john.jacob@example.com",
    "name": "John Jacob",
    "permissionLevel": "comment"
  }
}
```

## Resend workspace invite

**Event type:** `resendWorkspaceInvite`

An invitation to join a workspace was resent.

**Payload schema**

- `email: string` — required

  The recipient email of the resent invite.

- `originatingUser: object` — required

  The user who resent the invite.

  - `id: string` — required

  - `email: string` — required

  - `name: string` — required

- `referrerUser: object` — required

  The user who originally sent the invite.

  - `id: string` — required

  - `email: string` — required

  - `name: string` — required

**Example payload**

```json
{
  "email": "invited.user@example.com",
  "referrerUser": {
    "email": "joe@example.com",
    "id": "usr5552HdvtT659X4",
    "name": "Joe Mama"
  },
  "originatingUser": {
    "email": "jane@example.com",
    "id": "usr555uT6FtT63Tz5",
    "name": "Jane Mama"
  }
}
```

## Create interface

**Event type:** `createInterface`

An interface was created

**Payload schema**

- `name: string` — required

  The name of the created interface

**Example payload**

```json
{
  "name": "Product Tracker"
}
```

## Delete interface

**Event type:** `deleteInterface`

An interface was deleted.

**Payload schema**

- `name: string` — required

  The name of the deleted interface

**Example payload**

```json
{
  "name": "Product Tracker"
}
```

## Restore interface from trash

**Event type:** `restoreInterfaceFromTrash`

An interface was restored from the trash.

**Payload schema**

- `name: string` — required

  The name of the restored interface

**Example payload**

```json
{
  "name": "Product Tracker"
}
```

## Duplicate Interface

**Event type:** `duplicateInterface`

An interface was duplicated.

**Payload schema**

- `name: string` — required

  The name of the newly duplicated interface

**Example payload**

```json
{
  "name": "Product Tracker"
}
```

## View interface

**Event type:** `viewInterface`

An interface was viewed. This event is emitted at most once every 5 minutes per user/interface combination.

**Payload schema**

- `name: string` — required

  The name of the viewed interface

**Example payload**

```json
{
  "name": "My Interface"
}
```

## Rename interface

**Event type:** `updateInterfaceName`

An interface was renamed

**Payload schema**

- `current: object` — required

  - `name: string` — required

    The new name of the interface

- `previous: object` — required

  - `name: string` — required

    The name of the interface prior to being renamed

**Example payload**

```json
{
  "previous": {
    "name": "Previous interface name"
  },
  "current": {
    "name": "New interface name"
  }
}
```

## Publish interface

**Event type:** `publishInterface`

An interface was published

**Payload schema**

- `name: string` — required

  The name of the published interface

**Example payload**

```json
{
  "name": "Product Tracker"
}
```

## Unpublish interface

**Event type:** `unpublishInterface`

An interface was unpublished.

**Payload schema**

- `name: string` — required

  The name of the unpublished interface

**Example payload**

```json
{
  "name": "Product Tracker"
}
```

## Open record details from interface

**Event type:** `openRecordDetailsFromInterface`

A record details page was opened from an interface.

**Payload schema**

- `interfaceViewMode: "view" | "edit" | "preview"` — required

  The mode the interface was in when the record was viewed. For example, "edit" and "preview" correspond to the record being viewed while the interface is being actively edited or is in preview mode.

- `recordId: string` — required

  The ID of the viewed record.

- `entryPage: object` — required

  The interface page where the record was viewed.

  - `id: string` — required

    The ID of the interface page where the record was viewed.

  - `name: string` — required

    The name of the interface page where the record was viewed.

- `interface: object` — required

  The interface from which the record was viewed.

  - `id: string` — required

    The ID of the interface from which the record was viewed.

  - `name: string` — required

    The name of the interface from which the record was viewed.

- `table: object` — required

  The table the viewed record belongs to.

  - `id: string` — required

    The ID of the table the viewed record belongs to

  - `name: string` — required

    The name of the table the viewed record belongs to

**Example payload**

```json
{
  "interface": {
    "id": "pbdExampleInter01",
    "name": "My Interface"
  },
  "entryPage": {
    "id": "pagExamplePage001",
    "name": "My Page"
  },
  "table": {
    "id": "tblExampleTabl001",
    "name": "My Table"
  },
  "recordId": "recExampleRow0001",
  "interfaceViewMode": "view"
}
```

## View form

**Event type:** `viewForm`

A form was viewed. This event is emitted at most once every 5 minutes per user/form combination.

**Payload schema**

- `name: string` — required

  The name of the viewed form

**Example payload**

```json
{
  "name": "My Form"
}
```

## Publish form

**Event type:** `publishForm`

A form was published

**Payload schema**

- `name: string` — required

  The name of the published form

**Example payload**

```json
{
  "name": "Product Feedback"
}
```

## Unpublish form

**Event type:** `unpublishForm`

A form was unpublished.

**Payload schema**

- `name: string` — required

  The name of the unpublished form

**Example payload**

```json
{
  "name": "Product Feedback"
}
```

## Configure form sharing settings

**Event type:** `configureFormSharingSettings`

A form's sharing settings were configured.

**Payload schema**

- `name: string` — required

  The name of the unpublished form

- `isPasswordProtected: boolean` — optional

  Whether access to this form is password protected

- `isPublic: boolean` — optional

  Whether this form is accessible to anyone, including logged-out users

- `current: object` — required

  The properties of the page configuration after these changes were applied

  - `isPasswordProtected: boolean` — optional

    Whether access to this form is password protected

  - `isPublic: boolean` — optional

    Whether this form is accessible to anyone, including logged-out users

  - `effectiveEmailDomainAllowList: array<string>` — optional

    The email domains effectively allowed to access this form. This factors in the form's email domain restrictions and all enterprise-wide sharing restrictions. A viewer must have an account associated with an email domain included in the allow list to access this form.

- `previous: object` — required

  The properties of the page configuration before these changes were applied

  - `isPasswordProtected: boolean` — optional

    Whether access to this form is password protected

  - `isPublic: boolean` — optional

    Whether this form is accessible to anyone, including logged-out users

  - `effectiveEmailDomainAllowList: array<string>` — optional

    The email domains effectively allowed to access this form. This factors in the form's email domain restrictions and all enterprise-wide sharing restrictions. A viewer must have an account associated with an email domain included in the allow list to access this form.

- `effectiveEmailDomainAllowList: array<string>` — optional

  The email domains effectively allowed to access this form. This factors in the form's email domain restrictions and all enterprise-wide sharing restrictions. A viewer must have an account associated with an email domain included in the allow list to access this form.

**Example payload**

```json
{
  "isPublic": false,
  "effectiveEmailDomainAllowList": [
    "example.com"
  ],
  "previous": {
    "isPasswordProtected": false
  },
  "current": {
    "isPasswordProtected": true
  },
  "name": "Product Feedback"
}
```

## Invite interface collaborator

**Event type:** `inviteInterfaceCollaborator`

A user was invited to collaborate on an interface.

**Payload schema**

- `name: string` — required

  The name of the interface to which this user was invited

- `user: object` — required

  The user invited as a collaborator.

  - `id: string` — optional

    Present when the invited user is already an Airtable user

  - `permissionLevel: "read" | "comment" | "edit"` — required

    The permission level at which the user was invited as a collaborator.

  - `name: string` — optional

    Present when the invited user is already an Airtable user

  - `email: string` — required

**Example payload**

```json
{
  "name": "My Interface",
  "user": {
    "email": "john.jacob@example.com",
    "permissionLevel": "comment"
  }
}
```

## Add interface collaborator

**Event type:** `addInterfaceCollaborator`

A collaborator was added to an interface.

**Payload schema**

One of the following payload variants:

#### Variant 1

- `type: "user"` — required

  The type of collaborator added to the interface

- `name: string` — required

  The name of the interface to which this user was added

- `user: object` — required

  The user added as a collaborator.

  - `id: string` — required

  - `permissionLevel: "read" | "comment" | "edit"` — required

    The permission level at which the user was added as a collaborator.

  - `email: string` — required

  - `name: string` — required

#### Variant 2

- `type: "group"` — required

  The type of collaborator added to the interface

- `name: string` — required

  The name of the interface to which this group was added

- `group: object` — required

  The group added as a collaborator.

  - `id: string` — required

  - `permissionLevel: "read" | "comment" | "edit"` — required

    The permission level at which the group was added as a collaborator.

  - `name: string` — required

**Example payload**

```json
{
  "name": "My Interface",
  "type": "user",
  "user": {
    "id": "usrL2PNC5o3H4lBEi",
    "email": "john.jacob@example.com",
    "name": "John Jacob",
    "permissionLevel": "comment"
  }
}
```

## Change interface collaborator permission

**Event type:** `changeInterfaceCollaboratorPermission`

The direct permission of a collaborator on an interface was changed.

**Payload schema**

One of the following payload variants:

#### Variant 1

- `type: "user"` — required

  The type of collaborator whose permission on the interface was changed.

- `name: string` — required

  The name of the interface on which this user's permission was changed.

- `user: object` — required

  The user whose direct permission on the interface was changed.

  - `id: string` — required

  - `email: string` — required

  - `name: string` — required

- `current: object` — required

  - `user: object` — required

    - `permissionLevel: "read" | "comment" | "edit"` — required

      The new direct interface permission level of the user.

- `previous: object` — required

  - `user: object` — required

    - `permissionLevel: "read" | "comment" | "edit"` — required

      The direct interface permission level of the user prior to this change.

#### Variant 2

- `type: "group"` — required

  The type of collaborator whose permission on the interface was changed.

- `name: string` — required

  The name of the interface on which this group's permission was changed.

- `group: object` — required

  The group whose direct permission on the interface was changed.

  - `id: string` — required

  - `name: string` — required

- `current: object` — required

  - `group: object` — required

    - `permissionLevel: "read" | "comment" | "edit"` — required

      The new direct interface permission level of the group.

- `previous: object` — required

  - `group: object` — required

    - `permissionLevel: "read" | "comment" | "edit"` — required

      The direct interface permission level of the group prior to this change.

**Example payload**

```json
{
  "name": "My Interface",
  "type": "user",
  "user": {
    "id": "usrL2PNC5o3H4lBEi",
    "email": "john.jacob@example.com",
    "name": "John Jacob"
  },
  "previous": {
    "user": {
      "permissionLevel": "read"
    }
  },
  "current": {
    "user": {
      "permissionLevel": "comment"
    }
  }
}
```

## Change interface invite permission

**Event type:** `changeInterfaceInvitePermission`

The permission a user will receive on an interface when they accept the associated invite was changed.

**Payload schema**

- `name: string` — required

  The name of the interface on which this invite's permission was changed.

- `user: object` — required

  The user whose invited permission on the interface was changed.

  - `id: string` — optional

    Present when the invited user is already an Airtable user

  - `name: string` — optional

    Present when the invited user is already an Airtable user

  - `email: string` — required

- `current: object` — required

  - `user: object` — required

    - `permissionLevel: "read" | "comment" | "edit"` — required

      The new direct permission level the invited user will receive on accepting the interface invite.

- `previous: object` — required

  - `user: object` — required

    - `permissionLevel: "read" | "comment" | "edit"` — required

      The direct permission level the invited user would have received on accepting the interface invite prior to this change.

**Example payload**

```json
{
  "name": "My Interface",
  "user": {
    "email": "john.jacob@example.com"
  },
  "previous": {
    "user": {
      "permissionLevel": "read"
    }
  },
  "current": {
    "user": {
      "permissionLevel": "comment"
    }
  }
}
```

## Uninvite interface collaborator

**Event type:** `uninviteInterfaceCollaborator`

A user was uninvited from an interface.

**Payload schema**

- `name: string` — required

  The name of the interface from which this user was uninvited

- `user: object` — required

  The user uninvited from the interface.

  - `id: string` — optional

    Present when the uninvited user is already an Airtable user

  - `permissionLevel: "read" | "comment" | "edit"` — required

    The permission level of the user when uninvited from the interface.

  - `name: string` — optional

    Present when the uninvited user is already an Airtable user

  - `email: string` — required

**Example payload**

```json
{
  "name": "My Interface",
  "user": {
    "email": "john.jacob@example.com",
    "permissionLevel": "comment"
  }
}
```

## Remove interface collaborator

**Event type:** `removeInterfaceCollaborator`

A collaborator was removed from an interface.

**Payload schema**

One of the following payload variants:

#### Variant 1

- `type: "user"` — required

  The type of collaborator removed from the interface

- `name: string` — required

  The name of the interface from which this user was removed

- `user: object` — required

  The user removed from the interface.

  - `id: string` — required

  - `permissionLevel: "read" | "comment" | "edit"` — required

    The permission level of the user when removed from the interface.

  - `email: string` — required

  - `name: string` — required

#### Variant 2

- `type: "group"` — required

  The type of collaborator removed from the interface

- `name: string` — required

  The name of the interface from which this group was removed

- `group: object` — required

  The group removed from the interface.

  - `id: string` — required

  - `permissionLevel: "read" | "comment" | "edit"` — required

    The permission level of the group when removed from the interface.

  - `name: string` — required

**Example payload**

```json
{
  "name": "My Interface",
  "type": "user",
  "user": {
    "id": "usrL2PNC5o3H4lBEi",
    "email": "john.jacob@example.com",
    "name": "John Jacob",
    "permissionLevel": "comment"
  }
}
```

## Resend interface invite

**Event type:** `resendInterfaceInvite`

An invitation to join an interface was resent.

**Payload schema**

- `email: string` — required

  The recipient email of the resent invite.

- `originatingUser: object` — required

  The user who resent the invite.

  - `id: string` — required

  - `email: string` — required

  - `name: string` — required

- `referrerUser: object` — required

  The user who originally sent the invite.

  - `id: string` — required

  - `email: string` — required

  - `name: string` — required

**Example payload**

```json
{
  "email": "invited.user@example.com",
  "referrerUser": {
    "email": "joe@example.com",
    "id": "usr5552HdvtT659X4",
    "name": "Joe Mama"
  },
  "originatingUser": {
    "email": "jane@example.com",
    "id": "usr555uT6FtT63Tz5",
    "name": "Jane Mama"
  }
}
```

## Change interface organization-wide sharing permission

**Event type:** `configureInterfaceOrgWideSharing`

An interface's organization-wide sharing permission was updated.

**Payload schema**

- `name: string` — required

  The name of the interface which was updated with a new permission for organization-wide sharing.

- `audience: object` — required

  The audience with the updated interface organization-wide sharing permission

  - `id: string` — required

  - `enterpriseAccountId: string` — required

  - `name: string` — required

- `current: object` — required

  - `permissionLevel: "edit" | "read" | "comment" | "none"` — required

    The new interface organization-wide sharing permission level post this change.

- `previous: object` — required

  - `permissionLevel: "edit" | "read" | "comment" | "none"` — required

    The interface permission level for organization-wide sharing prior to this change.

**Example payload**

```json
{
  "name": "My Interface",
  "audience": {
    "name": "Example organization",
    "id": "ugpOjyHm01InnGQYV",
    "enterpriseAccountId": "entEEnPbptK123456"
  },
  "previous": {
    "permissionLevel": "read"
  },
  "current": {
    "permissionLevel": "comment"
  }
}
```

## Create portal

**Event type:** `createPortal`

A portal was created

**Payload schema**

- `parentApplicationId: string` — required

  The application ID associated with the newly created portal.

- `portalId: string` — required

  The ID of the created portal.

**Example payload**

```json
{
  "portalId": "ptlwt4HU9cb8JJfvN",
  "parentApplicationId": "appEEnPbptK123456"
}
```

## Delete portal

**Event type:** `deletePortal`

Deletes a portal.

**Payload schema**

- `parentApplicationId: string` — required

  The application ID associated with the deleted portal.

- `portalId: string` — required

  The ID of the deleted portal.

**Example payload**

```json
{
  "portalId": "ptlwt4HU9cb8JJfvN",
  "parentApplicationId": "appEEnPbptK123456"
}
```

## Invite interface guest user

**Event type:** `invitePortalCollaborator`

An interface guest user was invited to collaborate on a portal interface.

**Payload schema**

- `name: string` — required

  The name of the interface to which this guest user was invited

- `user: object` — required

  The invited guest user.

  - `id: string` — optional

    Present when the invited guest user is already an Airtable user

  - `permissionLevel: "read" | "comment" | "edit"` — required

    The permission level at which the guest user was invited.

  - `name: string` — optional

    Present when the invited guest user is already an Airtable user

  - `email: string` — required

**Example payload**

```json
{
  "name": "My Portal Interface",
  "user": {
    "email": "john.jacob@example.com",
    "permissionLevel": "comment"
  }
}
```

## Add interface guest user

**Event type:** `addPortalCollaborator`

An interface guest user was added to a portal interface.

**Payload schema**

- `type: "user"` — required

  The type of guest user added to the interface

- `name: string` — required

  The name of the interface to which this guest user was added

- `user: object` — required

  The added guest user.

  - `id: string` — required

  - `permissionLevel: "read" | "comment" | "edit"` — required

    The permission level at which the guest user was added.

  - `email: string` — required

  - `name: string` — required

**Example payload**

```json
{
  "name": "My Portal Interface",
  "type": "user",
  "user": {
    "id": "usrL2PNC5o3H4lBEi",
    "email": "john.jacob@example.com",
    "name": "John Jacob",
    "permissionLevel": "comment"
  }
}
```

## Uninvite interface guest user

**Event type:** `uninvitePortalCollaborator`

An interface guest user was uninvited from a portal interface.

**Payload schema**

- `name: string` — required

  The name of the interface from which this guest user was uninvited

- `user: object` — required

  The guest user uninvited from the interface.

  - `id: string` — optional

    Present when the uninvited guest user is already an Airtable user

  - `permissionLevel: "read" | "comment" | "edit"` — required

    The permission level of the guest user when uninvited from the interface.

  - `name: string` — optional

    Present when the uninvited guest user is already an Airtable user

  - `email: string` — required

**Example payload**

```json
{
  "name": "My Portal Interface",
  "user": {
    "email": "john.jacob@example.com",
    "permissionLevel": "comment"
  }
}
```

## Change interface guest user permission

**Event type:** `changePortalCollaboratorPermission`

The direct permission of an interface guest user on a portal interface was changed.

**Payload schema**

- `type: "user"` — required

  The type of guest user whose permission on the interface was changed.

- `name: string` — required

  The name of the interface on which this guest user's permission was changed.

- `user: object` — required

  The guest user whose direct permission on the interface was changed.

  - `id: string` — required

  - `email: string` — required

  - `name: string` — required

- `current: object` — required

  - `user: object` — required

    - `permissionLevel: "read" | "comment" | "edit"` — required

      The new direct interface permission level of the guest user.

- `previous: object` — required

  - `user: object` — required

    - `permissionLevel: "read" | "comment" | "edit"` — required

      The direct interface permission level of the guest user prior to this change.

**Example payload**

```json
{
  "name": "My Portal Interface",
  "type": "user",
  "user": {
    "id": "usrL2PNC5o3H4lBEi",
    "email": "john.jacob@example.com",
    "name": "John Jacob"
  },
  "previous": {
    "user": {
      "permissionLevel": "read"
    }
  },
  "current": {
    "user": {
      "permissionLevel": "comment"
    }
  }
}
```

## Change portal interface invite permission

**Event type:** `changePortalInvitePermission`

The permission an interface guest user will receive on an interface when they accept the associated invite was changed.

**Payload schema**

- `name: string` — required

  The name of the interface on which this invite's permission was changed.

- `user: object` — required

  The guest user whose invited permission on the interface was changed.

  - `id: string` — optional

    Present when the invited guest user is already an Airtable user

  - `name: string` — optional

    Present when the invited guest user is already an Airtable user

  - `email: string` — required

- `current: object` — required

  - `user: object` — required

    - `permissionLevel: "read" | "comment" | "edit"` — required

      The new direct permission level the invited guest user will receive on accepting the interface invite.

- `previous: object` — required

  - `user: object` — required

    - `permissionLevel: "read" | "comment" | "edit"` — required

      The direct permission level the invited guest user would have received on accepting the interface invite prior to this change.

**Example payload**

```json
{
  "name": "My Portal Interface",
  "user": {
    "email": "john.jacob@example.com"
  },
  "previous": {
    "user": {
      "permissionLevel": "read"
    }
  },
  "current": {
    "user": {
      "permissionLevel": "comment"
    }
  }
}
```

## Remove interface guest user

**Event type:** `removePortalCollaborator`

An interface guest user was removed from a portal interface.

**Payload schema**

- `type: "user"` — required

  The type of guest user removed from the interface

- `name: string` — required

  The name of the interface from which this guest user was removed

- `user: object` — required

  The guest user removed from the interface.

  - `id: string` — required

  - `permissionLevel: "read" | "comment" | "edit"` — required

    The permission level of the guest user when removed from the interface.

  - `email: string` — required

  - `name: string` — required

**Example payload**

```json
{
  "name": "My Portal Interface",
  "type": "user",
  "user": {
    "id": "usrL2PNC5o3H4lBEi",
    "email": "john.jacob@example.com",
    "name": "John Jacob",
    "permissionLevel": "comment"
  }
}
```

## Download CSV

**Event type:** `downloadCSV`

A CSV document was downloaded from a view or interface page element.

**Payload schema**

One of the following payload variants:

#### Variant 1

- `csvDownloadOrigin: "sharedViewEmbed" | "viewMenuPopover"` — optional

  Origin of the CSV download

- `table: object` — required

  - `name: string` — required

    The name of the table. The table name is null if the view is a public shared view

- `view: object` — required

  - `name: string` — required

    The name of the view

#### Variant 2

- `csvDownloadOrigin: "queryContainerCta" | "dashboardDrilldownOrExpansion"` — optional

  Origin of the CSV download

- `page: object` — required

  - `name: string` — required

    The name of the page from which the data was downloaded.

- `pageElement: object` — required

  - `name: string` — required

    The name of the page element that triggered the download.

**Example payload**

```json
{
  "view": {
    "name": "My View"
  },
  "table": {
    "name": "My Table"
  },
  "csvDownloadOrigin": "sharedViewEmbed"
}
```

## Moderate AI content

**Event type:** `moderateAiContent`

AI content violated an AI provider’s moderation policy and returned an error.

**Payload schema**

- `aiModelProvider: "openAi" | "anthropic" | "amazonBedrock" | "ibmWatsonx" | "selfHosted" | "google"` — required

  The AI model provider that flagged the content

- `surface: string` — required

  The AI surface where the content was moderated

- `categories: array<string>` — required

  The moderation categories that were flagged

- `automation: object` — optional

  Automation that produced the content that was moderated.

  - `id: string` — required

  - `name: string` — optional

- `field: object` — optional

  Field that produced the content that was moderated.

  - `id: string` — required

  - `name: string` — required

- `record: object` — optional

  Record that produced the content that was moderated.

  - `id: string` — required

- `base: object` — optional

  - `id: string` — required

  - `name: string` — required

    The name of the base in which the moderation occured.

- `workspace: object` — optional

  - `id: string` — required

  - `name: string` — required

    The name of the workspace in which the moderation occured.

**Example payload**

```json
{
  "base": {
    "name": "My base",
    "id": "appLkNDICXNqxSDhG"
  },
  "categories": [
    "sexual",
    "violence"
  ],
  "aiModelProvider": "openAi",
  "surface": "Automation",
  "field": {
    "id": "fldoi0c3GaRQJ3xnI",
    "name": "My field"
  },
  "record": {
    "id": "rec560UJdUtocSouk"
  },
  "automation": {
    "id": "wfldKFToDPyy9BUp8",
    "name": "My workflow"
  }
}
```

## Update Automation Subscribers

**Event type:** `updateAutomationSubscribers`

User updated the list of subscribers receiving automation notifications.

**Payload schema**

- `current: array<object>` — required

  The list of subscribers after the update.

  - `id: string` — required

    The ID of the user subscribed to the automation.

  - `displayName: string` — required

    The display name of the user subscribed to the automation.

  - `email: string` — required

    The email address of the user subscribed to the automation.

- `previous: array<object>` — required

  The list of subscribers before the update.

  - `id: string` — required

    The ID of the user subscribed to the automation.

  - `displayName: string` — required

    The display name of the user subscribed to the automation.

  - `email: string` — required

    The email address of the user subscribed to the automation.

**Example payload**

```json
{
  "previous": [
    {
      "id": "usrExampleAlice01",
      "email": "alice@example.com",
      "displayName": "Alice"
    }
  ],
  "current": [
    {
      "id": "usrExampleAlice02",
      "email": "alice@example.com",
      "displayName": "Alice"
    },
    {
      "id": "usrExampleBob0001",
      "email": "bob@example.com",
      "displayName": "Bob"
    }
  ]
}
```
