Coda Project Events API

Provides access to audit events within an organization.

OpenAPI Specification

coda-project-events-api-openapi.yml Raw ↑
openapi: 3.0.0
info:
  version: 0.0.2
  title: Superhuman Docs Admin Account Events API
  license:
    name: Superhuman Developer Terms
    url: https://docs.superhuman.com/trust/developer
  description: "# Introduction\n\nThe Superhuman Docs Admin API is a RESTful API that allows programmatic access to administrative reports & capabilities within Superhuman Docs (formerly Coda).\n\nAccess to the Admin API is limited to enterprise organizations.\nOnly organization admins can use the Admin API for resources related to their organization.\n\nAs we update and release newer versions of the API, we reserve the right to remove\nolder APIs and functionality with a 3-month deprecation notice. We will post about such changes as well as announce\nnew features in the [Developers Central](https://connect.superhuman.com/c/developers-central) section of our Community,\nand update the [API updates](https://docs.superhuman.com/api-updates) doc.\n\n# Using the Admin API\n\nThe Superhuman Docs Admin REST API is designed to be straightforward to use. You can use the language and platform of your choice\nto make requests. To get a feel for the API, you can also use a tool like [Postman](https://www.getpostman.com/) or\n[Insomnia](https://insomnia.rest/).\n\n## API Endpoint\n\nThis API uses a base path of `https://docs.superhuman.com/apis/admin/v1`.\n\n## Object Hierarchy\n\n### Organizations\n\nEnterprise customers have access to the Organization, an object that contains policy, rules, and audit events\nfor a set of workspaces and one or more domains.  Users accessing Superhuman Docs via an Organization-registered domain are\nsubject to that Organization's policies including allowed forms of authentication,\ndoc & Pack sharing restrictions, etc.\n\n### Workspaces\n\nA workspace is your home base for all things Superhuman Docs. It will store your documents in an organized way, and you'll invite\nmembers into the workspace to help you get the job done. A workspace can be free or paid (depending on your plan),\nand as the workspace's Doc Maker or Doc Maker (Admin), you'll be able to dictate the rules for how it works.\n\n[Learn more about Workspaces in our help center](https://help.coda.io/hc/en-us/articles/39555775119117-Create-and-manage-your-Coda-workspace).\n\n### Folders\n\nWe use folders to keep docs organized in the workspace (think departments, teams, and projects). Your docs are\nwhere the true work gets done with all of your tables, text, and app-like solutions. Folders contain docs within\nthe workspace.\n\n[Learn more about Folders in our help center](https://help.coda.io/hc/en-us/articles/39555852126605-Create-and-share-folders).\n\n### Docs\n\nDocuments are foundational, top-level collaborative projects that contain pages.\n\n### Pack configurations\n\nPack configurations are the settings that define how a Pack may be used within an organization.\n\n### Pack configuration permissions\n\nPack configuration permissions are the settings that define which principals may use a Pack configuration.\n\n### Pack requests\n\nWhen Pack configurations are turned on inside an organization. Pack requests are requests to use a Pack submitted by\nusers in the organization.\n\n### Pages\n\nIndividual pages within a doc offer canvases containing rich text, tables, controls, and other objects.\n\n## Audit events\n\nAudit events contain records of user login/logout activities and other operations performed within a Superhuman Docs organization.\nAudit events are critical to an enterprise's Security Monitoring efforts. It enables Security professionals to proactively\nanalyze the audit events for any suspicious behavior within a Superhuman Docs organization and help them in forensic investigations\nin case of a security breach. Audit events also enable administrators to write their own applications to understand their\nusers' usage of Superhuman Docs.\n\n### Audit event actions\n\nThe following entity types and actions are audited.\n\n| Entity Type | Action Name | Description |\n| ----------- | ----------- | ----------- |\n| agentInstance | AcceptCustomAgentInvitation | Accept an invitation to access a custom agent |\n| agentInstance | AgentScheduleTriggerFired | A scheduled agent trigger fired |\n| agentInstance | CreateAgentInstance | Create a new agent instance |\n| agentInstance | CreateCustomAgentInvitation | Send an invitation to share a custom agent |\n| agentInstance | DeclineCustomAgentInvitation | Decline an invitation to access a custom agent |\n| agentInstance | DeleteAgentInstance | Delete an agent instance |\n| agentInstance | DeleteCustomAgentInvitation | Revoke a pending invitation to a custom agent |\n| agentInstance | StartAgentChat | Start a new agent chat session |\n| agentInstance | UpdateAgentInstance | Update an agent instance |\n| agentInstance | UpdateAgentInstanceSharing | Update sharing permissions on an agent instance |\n| agentToolCall | ApproveAgentToolCall | Approve a tool call during an agent instance session |\n| agentToolCall | ExecuteAgentToolCall | Execute a tool call during an agent instance session |\n| agentToolCall | IgnoreAgentToolCall | Ignore a tool call during an agent instance session |\n| agentToolCall | RejectAgentToolCall | Reject a tool call during an agent instance session |\n| apiToken | DeleteApiToken | Delete an API token |\n| apiToken | GenerateApiToken | Generate an API token |\n| billingAccount | AddBillingGroup | Add a billing group to a billing account |\n| billingAccount | AddBillingGroupAdmin | Assign a billing group admin |\n| billingAccount | DeleteBillingGroup | Delete a billing group from a billing account |\n| billingAccount | RemoveBillingGroupAdmin | Remove a billing group admin |\n| billingAccount | UpdateBillingAccountSettings | Update settings for a billing account |\n| brainQuery | BrainStructuredQuery | Query Coda Brain for structured data |\n| brainQuery | BrainUnstructuredQuery | Query Coda Brain for unstructured data |\n| doc | AddDocPack | Install a Pack within a doc |\n| doc | CopyDoc | Copy a doc to a new location |\n| doc | CopyPages | Copy pages and sub pages within a doc to a new location |\n| doc | CopyTemplate | Copy template to an existing doc |\n| doc | CreateDoc | Create a new doc |\n| doc | DeleteAllReferencingSyncPageTunnels | Delete all sync page tunnels referencing a doc |\n| doc | DeleteDoc | Delete a doc |\n| doc | DeleteDocPack | Remove usage of a Pack from a doc |\n| doc | EditDoc | Edit a doc |\n| doc | ExportDocContent | Export doc content |\n| doc | MoveDoc | Move a doc to a different folder |\n| doc | OpenDoc | Opening a doc for reading, commenting or editing. |\n| doc | ReviveDoc | Revive a deleted doc |\n| doc | SubmitForm | Submit through a form |\n| doc | UpdateDocPermissions | Update sharing permissions on a doc |\n| docPackConnection | CreateExternalConnection | Create a new Pack connection |\n| docPackConnection | DeleteExternalConnection | Delete a Pack connection |\n| docPackConnection | UpdateExternalConnection | Update a Pack connection |\n| folder | CreateFolder | Create a new folder |\n| folder | DeleteFolder | Delete a folder |\n| folder | MoveFolder | Move a folder to a different parent |\n| folder | UpdateFolderMembership | Update membership on a folder |\n| folder | UpdateFolderPermissions | Update sharing permissions on a folder |\n| folder | UpdateFolderSettings | Update folder settings |\n| group | CreateGroup | Create a new group |\n| group | DeleteGroup | Delete a group |\n| group | UpdateGroup | Update group properties |\n| import | CompleteImport | Complete an import |\n| import | FailImport | Fail an import |\n| import | OnboardItem | Onboard a single source item during an import |\n| import | StartImport | Start an import |\n| importPreference | AddImportPreference | Add an import preference for an importer |\n| importPreference | DeleteImportPreference | Delete an import preference for an importer |\n| importPreference | UpdateImportPreference | Update an import preference for an importer |\n| ingestion | CreateIngestion | Create a new Coda Brain ingestion |\n| ingestion | CreateIngestionPermissions | Create Coda Brain ingestion permissions |\n| ingestion | DeleteIngestion | Delete a Coda Brain ingestion |\n| ingestion | DeleteIngestionPermissions | Delete Coda Brain ingestion permissions |\n| ingestion | UpdateIngestion | Update a Coda Brain ingestion |\n| legalHold | CreateLegalHold | Create a new legal hold |\n| legalHold | DeleteLegalHold | Delete a legal hold |\n| legalHold | UpdateLegalHold | Update legal hold |\n| legalHoldExport | CreateLegalHoldExport | Create a new legal hold export |\n| legalHoldExport | DeleteLegalHoldExport | Delete a legal hold export |\n| organization | AddBlockedDomains | Add domains to the blocked domains list |\n| organization | AddTrustedDomains | Add domains to the trusted domains list |\n| organization | ClaimDocOwnership | Claim ownership of a doc after the owner is deactivated |\n| organization | OrganizationPackAccessRequestBlocked | A user attempted to request Pack access while the organization administrator has disabled Pack access requests |\n| organization | OrganizationPackAccessRequested | A user requested access to a Pack |\n| organization | RemoveBlockedDomains | Remove domains from the blocked domains list |\n| organization | RemoveTrustedDomains | Remove domains from the trusted domains list |\n| organization | TransferDocs | Transfer docs from one user to another |\n| organization | UpdateOrganizationSettings | Update organization settings |\n| organization | UpdateOrganizationUserActivation | Update a user's activation status in an organization |\n| organization | UpdateOrganizationUserRole | Add or remove user from organization roles |\n| organization | UpdateWorkspaceAiControls | Update workspace AI controls |\n| pack | AddPackConfigurationPermission | Add a Pack configuration permission |\n| pack | AllowPackAccessRequest | A user was granted access to a Pack |\n| pack | AutoApprovePack | A Pack was auto-approved upon creation per the organization policy |\n| pack | CancelPackReview | Cancel a pending Pack review |\n| pack | CreatePack | Create a new Pack |\n| pack | CreatePackConfiguration | Create a new Pack configuration |\n| pack | CreatePackInvitation | Create a Pack invitation |\n| pack | CreatePackReview | Submit a Pack for Superhuman GO review |\n| pack | DeleteAllConfigurationsOnPack | Delete all configurations for a Pack |\n| pack | DeletePack | Delete a Pack |\n| pack | DeletePackConfiguration | Delete a Pack configuration |\n| pack | DeletePackConfigurationOAuth | Delete OAuth configuration metadata associated with a Pack configuration |\n| pack | DenyPackAccessRequest | A user was denied access to a Pack |\n| pack | RemovePackConfigurationPermission | Delete a Pack configuration permission |\n| pack | SetPackConfigurationOAuth | Set OAuth configuration metadata associated with the Pack configuration |\n| pack | SetPackConfigurationPermissions | Set permissions for a Pack configuration |\n| pack | UpdatePackConfiguration | Update a Pack configuration |\n| pack | UpdatePackListingDraft | Update a Pack listing draft |\n| pack | UpdatePackPermissions | Update Pack permissions |\n| packControl | SetPackControl | Set Pack control for an organization |\n| syncPage | OpenSyncPage | Opening a sync page for reading. |\n| syncPageTunnel | CreateSyncPageTunnel | Create a sync page tunnel |\n| syncPageTunnel | DeleteSyncPageTunnel | Delete a sync page tunnel |\n| syncPageTunnel | UpdateSyncPageTunnel | Update a sync page tunnel |\n| user | CreateUser | Create a new user |\n| user | DeleteUser | Delete an existing user |\n| user | ExportUserData | Export own personal data |\n| user | IssueOAuthToken | Issue an OAuth access/refresh token for a user |\n| user | LogInUser | Login activity of a user |\n| user | LogOutUser | Logout activity of a user |\n| user | RenewOAuthToken | Renew an OAuth access token for a user |\n| user | ResetUserPassword | Reset a user's password |\n| user | RevokeAllOAuthTokens | Revoke all OAuth tokens for a user |\n| user | RevokeOAuthToken | Revoke a single OAuth refresh token for a user |\n| user | UpdateUserAccount | Update a user's account details |\n| user | UpdateUserPassword | Update a user's password |\n| webhook | CreateWebhook | Create a new webhook subscription |\n| webhook | DeleteWebhook | Delete a webhook subscription |\n| webhook | ResetWebhook | Resets a webhook subscription |\n| webhook | UpdateWebhook | Updates parameters for an existing webhook subscription |\n| workspace | CreateCustomIcon | Create a custom icon in a workspace |\n| workspace | CreateWorkspace | Create a new workspace |\n| workspace | DeleteCustomIcon | Delete a custom icon in a workspace |\n| workspace | DeleteWorkspace | Delete a workspace |\n| workspace | ExportWorkspaceMembers | Export workspace members roster |\n| workspace | OffboardWorkspaceUser | Offboard a removed user from a workspace |\n| workspace | PinDocToWorkspace | Pin a doc to a workspace |\n| workspace | ReinstateWorkspaceUser | Allow a user to be re-added to a workspace |\n| workspace | UnpinDocFromWorkspace | Unpin a doc from a workspace |\n| workspace | UpdateWorkspaceSettings | Update workspace settings |\n| workspace | UpdateWorkspaceUserBrainRole | Update a user's Brain role in a workspace |\n| workspace | UpdateWorkspaceUserRole | Update a user's role in a workspace |\n\n### More information\nFor more information about the Superhuman Docs Admin API and these events,\n[detailed information and examples are available](https://docs.superhuman.com/@documentation/admin-audit-api-events-and-documentation).\n\n## Webhooks\n\nWebhooks enable an application to receive notifications of audit events in Superhuman Docs as they occur.\n\nRather than having to \"poll\" repeatedly for new audit events, a webhook will \"push\" events to your internet-accessible\nendpoint via HTTP `POST` requests. This can be much more efficient and convenient for an internet-accessible service.\n\nIt is important to note that webhooks do require a server or server-like endpoint accesible on the internet at all times\nto receive these notifications. For simpler scenarios, it may be easier to just poll for audit events rather than host\nand maintain a server on the internet.\n\n### Webhook Considerations\n\nThis webhook implementation aims to deliver events within a few minutes of occurring under normal operating conditions.\n\nThe system will attempt retries when it detects failures, so it will be possible for you to receive the same events\nmore than once depending on errors or timeouts occurring in your server or in the network infrastructure between Superhuman Docs\nand your server.  Once delivered successfully, it is not possible to replay webhook notifications.\n\nTargets are expected to respond within 10 seconds before delivery times out and is considered a failure.\n\nFailures are retried using exponential backoff timing; after 8 hours of consecutive failures, Superhuman Docs will give up and\nplace the webhook into a disabled state.\n\n### Webhook Setup\n\nOnce a new webhook connection is established, an initial handshake will be attempted in order to prove that the target\nis available on the internet and is owned by the registering entity. In addition, any time the webhook is updated\nto point to a new target URL, the handshake procedure will be kicked off.\n\nAfter the initial handshake completes successfully, new audit events will immediately begin to flow to the target.\n\nIn the event that the handshake fails, the `reset` API can be used to force the webhook to retry the handshake process.\n\n### Webhook Handshake details\n\nTo prove that the target URL is available on the internet and is a valid webhook target, a handshake process is\nstarted anytime a new target URL is set on on a webhook.  This process is asynchronous to the webhook setup API call.\n\nSuperhuman Docs will send a HTTP `GET` request to the registered target URL with a HTTP header named `X-Webhook-Code`. The\ntarget must respond with a standard `200` or `204` HTTP response code and echo back the same header key and its value.\n\n### Webhook Payload details\n\nOnce the webhook handshake has completed successfully, Superhuman Docs will send batches of audit events to the target URL using\nHTTP `POST` requests.\n\nEach notifications the target receives will include:\n\n* A `X-Webhook-Signature` header which enables the server to verify the payload is genuine and originated from Superhuman Docs.\nThis code is a SHA-256 HMAC of the stringified body of the POST request using the Superhuman Docs-generated secret key available\non the webhook object.\n* A JSON body with key `events` which contains an array of audit events using the same format as\nreturned by the `listEvents` endpoint detailed below.\n\n### Payload verification\n\nSample javascript code fragment for verifying a webhook payload originated from Superhuman Docs:\n\n```javascript\nconst crypto = require('crypto');\n\n// This field is available on the Superhuman Docs webhook object.\nconst signatureKey = 'some value';\n\n// These come from the webhook `POST` request to your server\nconst headers = {'X-Webhook-Signature': 'abc123'};\nconst body = {events: []};\n\nconst calculatedSignature = crypto\n  .createHmac('SHA256', signatureKey)\n  .update(JSON.stringify(body))\n  .digest(\"hex\");\n\nconst isValidSignature = crypto.timingSafeEqual(\n  Buffer.from(calculatedSignature),\n  Buffer.from(headers['X-Webhook-Signature']),\n);\n```\n\n## List Endpoints\n\nEndpoints supporting listing of resources have the following fields:\n\n  - `items`: An array containing the listed resources, limited by the `limit` or `pageToken` query parameters\n  - `nextPageLink`: If more results are available, an API link to the next page of results\n  - `nextPageToken`: If more results are available, a page token that can be passed into the `pageToken` query parameter\n\n**The maximum page size may change at any time, and may be different for different endpoints.** Please do not rely on it\nfor any behavior of your application. If you pass a `limit` parameter that is larger than our maximum allowed limit,\nwe will only return as many results as our maximum limit. You should look for the presence of the `nextPageToken` on the\nresponse to see if there are more results available, rather than relying on a result set that matches your provided limit.\n\nTo fetch a subsequent page of results, pass the `pageToken` parameter. Set this parameter to the value given to you as the `nextPageToken`\nin a page response. If no value is provided, there are no more results available. You only need to pass the `pageToken` to get\nthe next page of results, you don't need to pass any of the parameters from your original request, as they are all\nimplied by the `pageToken`. Any other parameters provided alongside a `pageToken` will be ignored.\n\n## Rate Limiting\n\nThe Superhuman Docs Admin API sets a reasonable limit on the number of requests that can be made per minute. Once this limit is\nreached, calls to the API will start returning errors with an HTTP status code of 429.\n\n## OpenAPI/Swagger Spec\n\nIn an effort to standardize our API and make it accessible, we offer an OpenAPI 3.0 specification:\n\n- [OpenAPI 3.0 spec - YAML](https://docs.superhuman.com/apis/admin/v1/openapi.yaml)\n- [OpenAPI 3.0 spec - JSON](https://docs.superhuman.com/apis/admin/v1/openapi.json)\n"
  termsOfService: https://superhuman.com/legal/terms
  contact:
    name: Developer Support
    url: https://superhuman.com/developers
    email: care@superhuman.com
  x-logo:
    url: https://cdn.coda.io/icons/png/color/superhuman-docs-128.png
    backgroundColor: transparent
    altText: Superhuman Docs Admin API
    href: '#'
servers:
- url: https://docs.superhuman.com/apis/admin/v1
  description: Superhuman Docs Admin API (v1)
security:
- Bearer: []
tags:
- name: Events
  description: 'Provides access to audit events within an organization.

    '
paths:
  /organizations/{organizationId}/audit/events:
    get:
      summary: List audit events
      description: 'Returns a list of audit events within an organization.

        '
      operationId: listEvents
      tags:
      - Events
      parameters:
      - $ref: '#/components/parameters/organizationId'
      - name: startTime
        in: query
        description: Return audit events created on or after the given Unix timestamp.
        schema:
          type: integer
      - name: endTime
        in: query
        description: Return audit events created on or before the given Unix timestamp.
        schema:
          type: integer
      - name: action
        in: query
        description: Name of the action(s) performed.
        explode: false
        schema:
          type: array
          items:
            type: string
      - name: userId
        in: query
        description: The Superhuman Docs ID of the user who initiated the action.
        schema:
          type: number
      - name: email
        in: query
        description: The email address(es) of the user(s) who initiated the action.
        explode: false
        schema:
          type: array
          items:
            type: string
            format: email
      - name: entityType
        in: query
        description: Target entity type of the action.
        schema:
          $ref: '#/components/schemas/Type'
      - name: entityId
        in: query
        description: Target entity ID of the action.
        schema:
          type: string
      - name: containerWorkspaceId
        in: query
        description: ID of the workspace that contained the entity at the time the event was generated.
        schema:
          type: string
      - name: containerFolderId
        in: query
        description: ID of the folder that contained the entity at the time the event was generated.
        schema:
          type: string
      - name: containerBillingAccountId
        in: query
        description: ID of the billing account that contained the entity at the time the event was generated.
        schema:
          type: string
      - name: order
        in: query
        description: Defines the ordering of results. If unspecified, will default to 'asc' (ascending) order from oldest to most recent events.
        schema:
          type: string
          enum:
          - asc
          - desc
      - $ref: '#/components/parameters/limit'
      - $ref: '#/components/parameters/pageToken'
      responses:
        '200':
          description: List of Superhuman Docs audit events matching the query.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EventList'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '429':
          $ref: '#/components/responses/TooManyRequestsError'
      x-codeSamples:
      - label: Python 3.13
        lang: python
        source: "import requests\n\nheaders = {'Authorization': 'Bearer <your API token>'}\nuri = 'https://docs.superhuman.com/apis/admin/v1/organizations/<your organization id>/audit/events'\nparams = {\n  'action': 'docAccessDenied',\n}\nres = requests.get(uri, headers=headers, params=params).json()\n\nprint(f'First event is: {res[\"items\"][0][\"action\"]}')\n# => TODO: add response\n"
      - label: Shell
        lang: shell
        source: "curl -s -H 'Authorization: Bearer <your API token>' \\\n  'https://docs.superhuman.com/apis/admin/v1/organizations/<your organization id>/audit/events' |\n  jq .items[0].action\n# => TODO: add response\n"
components:
  schemas:
    EntityBrainQuery:
      x-schema-name: EntityBrainQuery
      description: Info about the entity or resource being acted upon.
      type: object
      required:
      - type
      - brainQuery
      additionalProperties: false
      properties:
        type:
          type: string
          description: Entity type.
          enum:
          - brainQuery
        brainQuery:
          $ref: '#/components/schemas/BrainQuery'
    EntityBillingAccount:
      x-schema-name: EntityBillingAccount
      description: Info about the entity or resource being acted upon.
      type: object
      required:
      - type
      - billingAccount
      additionalProperties: false
      properties:
        type:
          type: string
          description: Entity type.
          enum:
          - billingAccount
        billingAccount:
          $ref: '#/components/schemas/BillingAccount'
    ImportPreference:
      x-schema-name: ImportPreference
      description: An import preference for an external entity.
      type: object
      required:
      - type
      - id
      - externalEntity
      - preferenceType
      - createdAt
      - createdBy
      additionalProperties: false
      properties:
        type:
          type: string
          description: The type of this resource.
          enum:
          - importPreference
          x-tsType: Type.ImportPreference
        id:
          type: string
          format: uuid
          description: ID of the import preference.
          example: afe84ebf-4d06-44c5-b545-a8af5036bebf
        externalEntity:
          $ref: '#/components/schemas/ImportExternalEntity'
        preferenceType:
          type: string
          description: How the item should be treated on import.
          enum:
          - exempt
          - owner
          - location
          example: owner
        preferenceDetail:
          description: 'Settings for owner or location preferences. Omitted for exempt. On create and update, the equivalent fields are sent at the top level of the request body instead.

            '
          oneOf:
          - type: object
            required:
            - ownerEmail
            additionalProperties: false
            properties:
              ownerEmail:
                type: string
                format: email
                maxLength: 512
                description: Email of the user who will own imported documents for this item.
                example: owner@example.com
          - type: object
            required:
            - externalParent
            additionalProperties: false
            properties:
              externalParent:
                $ref: '#/components/schemas/ImportExternalParent'
        createdAt:
          type: string
          format: date-time
          description: When the preference was created, in ISO 8601 format.
          example: '2024-01-15T10:00:00.000Z'
        createdBy:
          type: number
          description: Coda user id that created the preference.
          example: 12345
        updatedAt:
          type: string
          format: date-time
          description: When the preference was last modified, in ISO 8601 format. Omitted if never updated.
          example: '2024-06-02T08:30:00.000Z'
        updatedBy:
          type: number
          description: Coda user id that last modified the preference. Omitted if never updated.
          example: 67890
    WebhookFilterPredicate:
      x-schema-name: WebhookFilterPredicate
      description: One entry in a webhook subscription filter.
      type: object
      required:
      - action
      additionalProperties: false
      properties:
        action:
          type: string
          description: The event action.
          example: EditDoc
    EntityPack:
      x-schema-name: EntityPack
      description: Info about the entity or resource being acted upon.
      type: object
      required:
      - type
      - pack
      additionalProperties: false
      properties:
        type:
          type: string
          description: Entity type.
          enum:
          - pack
        pack:
          $ref: '#/components/schemas/Pack'
    EntityWorkspace:
      x-schema-name: EntityWorkspace
      description: Info about the entity or resource being acted upon.
      type: object
      required:
      - type
      - workspace
      additionalProperties: false
      properties:
        type:
          type: string
          description: Entity type.
          enum:
          - workspace
        workspace:
          $ref: '#/components/schemas/Workspace'
    EntityLegalHold:
      x-schema-name: EntityLegalHold
      description: Info about the entity or resource being acted upon.
      type: object
      required:
      - type
      - legalHold
      additionalProperties: false
      properties:
        type:
          type: string
          description: Entity type.
          enum:
          - legalHold
        legalHold:
          $ref: '#/components/schemas/LegalHold'
    EntitySyncPage:
      x-schema-name: EntitySyncPage
      description: Info about the entity or resource being acted upon.
      type: object
      required:
      - type
      - syncPage
      additionalProperties: false
      properties:
        type:
          type: string
          description: Entity type.
          enum:
          - syncPage
        syncPage:
          $ref: '#/components/schemas/SyncPage'
    EntityExternalConnection:
      x-schema-name: EntityExternalConnection
      description: Info about the entity or resource being acted upon.
      type: object
      required:
      - type
      - externalConnection
      additionalProperties: false
      properties:
        type:
          type: string
          description: Entity type.
          enum:
          - externalConnection
        externalConnection:
          $ref: '#/components/schemas/ExternalConnection'
    WebhookFilter:
      x-schema-name: WebhookFilter
      description: Filter set for the webhook subscription.
      type: object
      additionalProperties: false
      properties:
        or:
          type: array
          items:
            $ref: '#/components/schemas/WebhookFilterPredicate'
    FolderType:
      x-schema-name: FolderType
      type: string
      enum:
      - Standard
      - Personal
      x-tsEnumNames:
      - Standard
      - Personal
    User:
      x-schema-name: User
      description: Info about the user who initiated an action.
      type: object
      required:
      - type
      - id
      - email
      additionalProperties: false
      properties:
        type:
          type: string
          description: The type of this resource.
          enum:
          - user
          x-tsType: Type.User
        id:
          type: number
          description: Internal Superhuman Docs ID of the user.
          example: 867102
        email:
          type: string
          description: Email address of the user.
          example: user@example.com
    Type:
      x-schema-name: Type
      description: A constant identifying the type of the resource.
      type: string
      enum:
      - agentInstance
      - agentToolCall
      - apiToken
      - billingAccount
      - brainQuery
      - doc
      - docPackConnection
      - event
      - externalConnection
      - folder
      - group
      - import
      - importPreference
      - ingestion
      - legalHold
      - legalHoldExport
      - organization
      - pack
      - packControl
      - packConfiguration
      - packConfigurationOauth
      - packConfigurationPermission
      - packRequest
      - page
      - permission
      - syncPage
      - syncPageTunnel
      - user
      - webhook
      - workspace
      x-tsEnumNames:
      - AgentInstance
      - AgentToolCall
      - ApiToken
      - BillingAccount
      - BrainQuery
      - Doc
      - DocPackConnection
      - Event
      - ExternalConnection
      - Folder
      - Group
      - Import
      - ImportPreference
      - Ingestion
      - LegalHold
      - LegalHoldExport
      - Organization
      - Pack
      - PackControl
      - PackConfiguration
      - PackConfigurationOauth
      - PackConfigurationPermission
      - PackRequest
      - Page
      - Permission
      - SyncPage
      - SyncPageTunnel
      - User
      - Webhook
      - Workspace
    LegalHoldExportState:
      x-schema-name: LegalHoldState
      type: string
      enum:
      - generating
      - ready
      - error
      x-tsEnumNames:
      - Generating
      - Ready
      - Error
    EntityAgentInstance:
      x-schema-name: EntityAgentInstance
      description: Info about the entity or resource being acted upon.
      type: object
      required:
      - type
      - agentInstance
      additionalProperties: false
      pr

# --- truncated at 32 KB (90 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/coda-project/refs/heads/main/openapi/coda-project-events-api-openapi.yml