> ## Documentation Index
> Fetch the complete documentation index at: https://docs.go.aiinsurance.io/llms.txt
> Use this file to discover all available pages before exploring further.

# List Record Email Link Events

> The record's link history: each email linked to it or removed from it,
when, why, through which person and by whom. Newest first, 50 per page.
Pass `nextCursor` back as `cursor` for the next page. A caller without
`email.view` sees only the history of email sent from the platform.

Answers `404` while email is not turned on for the company.

**Required permission:** `<resource>.view` for the path's `{entityType}`
(`event.view`, `exposure.view`, `quote.view`, `submission.view`,
`person.view`, `organization.view`).




## OpenAPI

````yaml /openapi/generated-external-api.yaml get /api/v1/companies/{companyId}/entities/{entityType}/{entityId}/email-link-events
openapi: 3.0.3
info:
  title: AI Insurance External API
  description: External API for AI Insurance platform
  version: 1.0.0
  contact:
    email: support@aiinsurance.io
servers:
  - url: https://go.aiinsurance.io
    description: Production
security:
  - ApiKeyAuth: []
paths:
  /api/v1/companies/{companyId}/entities/{entityType}/{entityId}/email-link-events:
    get:
      tags:
        - Record Emails
      summary: List Record Email Link Events
      description: |
        The record's link history: each email linked to it or removed from it,
        when, why, through which person and by whom. Newest first, 50 per page.
        Pass `nextCursor` back as `cursor` for the next page. A caller without
        `email.view` sees only the history of email sent from the platform.

        Answers `404` while email is not turned on for the company.

        **Required permission:** `<resource>.view` for the path's `{entityType}`
        (`event.view`, `exposure.view`, `quote.view`, `submission.view`,
        `person.view`, `organization.view`).
      operationId: listRecordEmailLinkEvents
      parameters:
        - $ref: '#/components/parameters/companyId'
        - $ref: '#/components/parameters/crudEntityType'
        - $ref: '#/components/parameters/entityIdPath'
        - $ref: '#/components/parameters/emailCursor'
      responses:
        '200':
          description: A page of link events
          content:
            application/json:
              schema:
                type: object
                required:
                  - items
                  - nextCursor
                properties:
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/EmailLinkEvent'
                  nextCursor:
                    type: string
                    nullable: true
                    description: Null on the last page.
              examples:
                history:
                  summary: A link and a removal
                  value:
                    items:
                      - id: 9d8c7b6a-5f4e-4d3c-8b2a-1f0e9d8c7b6a
                        action: removed
                        cause: manual
                        messageId: 1a2b3c4d-5e6f-4a1b-8c2d-3e4f5a6b7c8d
                        threadId: 7f0c2a1e-4b5d-4c8e-9a71-2d3e4f5a6b7c
                        subject: Claim update
                        personId: 550e8400-e29b-41d4-a716-446655440010
                        actorUserId: 550e8400-e29b-41d4-a716-446655440099
                        at: '2026-03-02T14:00:00.000Z'
                      - id: 8c7b6a5f-4e3d-4c2b-9a1f-0e9d8c7b6a5f
                        action: linked
                        cause: new_email
                        messageId: 1a2b3c4d-5e6f-4a1b-8c2d-3e4f5a6b7c8d
                        threadId: 7f0c2a1e-4b5d-4c8e-9a71-2d3e4f5a6b7c
                        subject: Claim update
                        personId: 550e8400-e29b-41d4-a716-446655440010
                        actorUserId: null
                        at: '2026-02-15T10:00:01.000Z'
                    nextCursor: null
        '400':
          description: Bad Request - an invalid id or cursor
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                invalidCursor:
                  summary: The cursor is not one this endpoint returned
                  value:
                    error:
                      code: InvalidCursor
                      message: Invalid cursor
                      userMessages:
                        - Invalid cursor
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          description: The record does not exist, or email is not turned on for the company
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                recordNotFound:
                  summary: Record not found
                  value:
                    error:
                      code: NotFoundError
                      message: Event 550e8400-e29b-41d4-a716-446655440301 not found
                      userMessages:
                        - Event 550e8400-e29b-41d4-a716-446655440301 not found
        '500':
          $ref: '#/components/responses/InternalServerError'
      security:
        - BearerAuth: []
        - ApiKeyAuth: []
components:
  parameters:
    companyId:
      name: companyId
      in: path
      required: true
      schema:
        type: string
        format: uuid
      description: Company identifier
    crudEntityType:
      name: entityType
      in: path
      required: true
      schema:
        type: string
        enum:
          - event
          - exposure
          - quote
          - submission
          - person
          - organization
      description: >
        Field Model V1 entity type (lowercase kebab-case URL slug). One of the
        six

        CRUD entity types: `event`, `exposure`, `quote`, `submission`, `person`,

        `organization`. `policy` is NOT valid here — Policy has no generic CRUD
        (its

        writes go through the policy transaction endpoints), though it does have
        a

        read-only `/configuration` schema.
    entityIdPath:
      name: entityId
      in: path
      required: true
      schema:
        type: string
        format: uuid
      description: Entity identifier
    emailCursor:
      name: cursor
      in: query
      required: false
      schema:
        type: string
      description: The `nextCursor` from the previous page. Omit it for the first page.
  schemas:
    EmailLinkEvent:
      type: object
      description: One email linked to, or removed from, a record.
      required:
        - id
        - action
        - cause
        - messageId
        - threadId
        - subject
        - personId
        - actorUserId
        - at
      properties:
        id:
          type: string
          format: uuid
        action:
          type: string
          enum:
            - linked
            - removed
        cause:
          type: string
          enum:
            - sent
            - intake
            - new_email
            - person_added
            - earlier_date
            - person_removed
            - manual
          description: >
            Why it happened:

            - `sent`: the email was sent from the record.

            - `intake`: the email created the record through the intake inbox.

            - `new_email`: a new email from or to a person on the record.

            - `person_added`: a person was added to the record and their earlier
            emails linked.

            - `earlier_date`: a person's emails were linked from an earlier
            date.

            - `person_removed`: a person's emails were removed from the record.

            - `manual`: a conversation was removed from the record.
        messageId:
          type: string
          format: uuid
        threadId:
          type: string
          format: uuid
        subject:
          type: string
        personId:
          type: string
          format: uuid
          nullable: true
          description: The person the link came through.
        actorUserId:
          type: string
          format: uuid
          nullable: true
          description: Who did it; null when the platform did.
        at:
          type: string
          format: date-time
    ErrorResponse:
      type: object
      description: Standard error response for all external API endpoints
      required:
        - error
      properties:
        error:
          type: object
          required:
            - code
            - message
          properties:
            code:
              type: string
              description: Machine-readable error code
              example: VALIDATION_ERROR
            message:
              type: string
              description: Human-readable error message
              example: 'submissionId: Required field is missing'
            userMessages:
              type: array
              description: >-
                Clean, verbatim-displayable messages — one entry per failure,
                free of error-code tags, field paths, and internal noise.
                Suitable for showing to end users as-is.
              items:
                type: string
              example:
                - Exposures of type 'company' require an address
            details:
              type: array
              description: Additional details for validation errors (field-level errors)
              items:
                type: object
                properties:
                  field:
                    type: string
                    description: The field that caused the error
                    example: submissionId
                  code:
                    type: string
                    description: Stable problem code for this individual validation failure
                    example: BLANK_LIST_ELEMENT
                  reason:
                    type: string
                    description: Stable reason the value violates its canonical contract
                    example: blank-list-element
                  expected:
                    type: string
                    description: The expected canonical value contract
                    example: nonblank trimmed string
                  message:
                    type: string
                    description: Description of the field error
                    example: Required field is missing
  responses:
    Unauthorized:
      description: Unauthorized - Invalid or missing API key
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            missingApiKey:
              summary: Missing API key
              value:
                error:
                  code: AuthenticationError
                  message: API key authentication required
                  userMessages:
                    - API key authentication required
            invalidApiKey:
              summary: >-
                Invalid API key (e.g. unknown key, or a Bearer token used
                instead of an API key)
              value:
                error:
                  code: AuthenticationError
                  message: Invalid API key
                  userMessages:
                    - Invalid API key
    Forbidden:
      description: Forbidden - Insufficient permissions
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            insufficientPermissions:
              summary: Insufficient permissions
              value:
                error:
                  code: AuthorizationError
                  message: User is not authorized to perform the requested action
                  userMessages:
                    - User is not authorized to perform the requested action
            companyMismatch:
              summary: A valid API key naming another company in the URL
              value:
                error:
                  code: AuthorizationError
                  message: API key is not scoped to the requested company
                  userMessages:
                    - API key is not scoped to the requested company
    InternalServerError:
      description: Internal Server Error - Unexpected error occurred
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            internalError:
              summary: Unexpected server error
              value:
                error:
                  code: UncaughtActionError
                  message: Uncaught error occurred in <actionName>
                  userMessages:
                    - An unexpected error occurred. Please try again later.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: Authorization
      description: >-
        API key authentication. Send your raw API key as the `Authorization`
        header value with NO scheme prefix — `Authorization: YOUR-API-KEY`. Do
        NOT prefix it with `Bearer ` or `ApiKey `, and do not use an `X-API-Key`
        header; those are not accepted.
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >-
        User-principal OAuth 2.0 Bearer authentication. Send a user-scoped Auth0
        access token (audience = the app API audience) as `Authorization: Bearer
        <jwt>`. The request resolves to the user's identity and is authorized by
        their Role on the `{companyId}` in the path — the same role-based
        permissions the web app enforces. This is the path the MCP connector
        uses to act on a user's behalf; endpoints that accept it list both
        `BearerAuth` and `ApiKeyAuth`.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.