## Log an email

`client.Email.Log(ctx, body) (*EmailLogResponse, error)`

**post** `/v1/emails/log`

Logs an email that no connected account will sync, such as history from a previous CRM or a mailbox export. The email appears on account, contact, and opportunity timelines at `$sentAt` and threads with related emails. `$sentAt` must be in the past, and at least one participant must be a workspace member and one must be external.

The `Message-ID` header (or a generated one) identifies the email. If an email with the same `Message-ID` already exists, the request returns 409 and writes nothing. Group emails into threads with `$threadId`, or pass `In-Reply-To` and `References` in `headers`.

Privacy defaults to the most permissive setting among the participants’ connected accounts, else `METADATA`. Set `$privacySetting` to override it. Logging an email never sends it, never cancels a sequence enrollment, and creates records only when `autoCreateRecords` is true. Filter out personal and non-sales mail before logging.

Supports idempotency via the `Idempotency-Key` header.

**[Required scope](/using-the-api/scopes/):** `emails:create`

**[Rate limit category](/using-the-api/rate-limits/):** Write

### Parameters

- `body EmailLogParams`

  - `Fields param.Field[EmailLogParamsFields]`

    Field values for the logged email. System fields use a `$` prefix. Required: `$sentAt` and `$from`, plus at least one recipient across `$to`, `$cc`, and `$bcc`.

    - `From string`

      The sender address. This field accepts a single email address.

    - `SentAt string`

      When the email was sent, in ISO 8601 format. Must be in the past.

    - `Bcc []string`

      Bcc-recipient addresses.

    - `Body EmailLogParamsFieldsBody`

      The email body. Pass whichever parts you have.

      - `HTML string`

        The HTML part of the email.

      - `Text string`

        The plain-text part of the email.

    - `Cc []string`

      Cc-recipient addresses.

    - `PrivacySetting string`

      The privacy setting for the email (`FULL` or `METADATA`). Defaults to the most permissive setting among the participants’ connected accounts, else `METADATA`.

      - `const EmailLogParamsFieldsPrivacySettingFull EmailLogParamsFieldsPrivacySetting = "FULL"`

      - `const EmailLogParamsFieldsPrivacySettingMetadata EmailLogParamsFieldsPrivacySetting = "METADATA"`

    - `Subject string`

      The email subject line.

    - `ThreadID string`

      Any stable grouping key. Emails with the same value share a thread. Overrides threading derived from `headers`.

    - `To []string`

      To-recipient addresses.

  - `AutoCreateRecords param.Field[bool]`

    When true, the post-create sync may create account and contact records for unknown external participants.

  - `Headers param.Field[map[string, string]]`

    Raw RFC 5322 headers, passed through as read (any key case). Only `Message-ID`, `In-Reply-To`, and `References` are used. At most 64 KB.

### Returns

- `type EmailLogResponse struct{…}`

  - `ID string`

    Unique identifier for the entity.

  - `AccessLevel EmailLogResponseAccessLevel`

    The caller's resolved access level for this email.

    - `const EmailLogResponseAccessLevelFull EmailLogResponseAccessLevel = "FULL"`

    - `const EmailLogResponseAccessLevelMetadata EmailLogResponseAccessLevel = "METADATA"`

  - `CreatedAt string`

    ISO 8601 timestamp of when the entity was created.

  - `Fields map[string, EmailLogResponseField]`

    Map of field names to their typed values. System fields are prefixed with `$` (e.g. `$name`, `$email`); custom attributes use their bare slug.

    - `Value EmailLogResponseFieldValueUnion`

      The field value, or null if unset.

      - `string`

      - `float64`

      - `bool`

      - `type EmailLogResponseFieldValueArray []string`

      - `type EmailLogResponseFieldValueAddress struct{…}`

        - `City string`

          City name.

        - `Country string`

          2-letter ISO 3166-1 alpha-2 country code.

        - `Latitude float64`

          Latitude coordinate.

        - `Longitude float64`

          Longitude coordinate.

        - `PostalCode string`

          Postal or ZIP code.

        - `State string`

          State or province.

        - `Street string`

          Street address line 1.

        - `Street2 string`

          Street address line 2.

      - `type EmailLogResponseFieldValueFullName struct{…}`

        - `FirstName string`

          The contact's first name.

        - `LastName string`

          The contact's last name.

    - `ValueType string`

      The data type of the field.

      - `const EmailLogResponseFieldValueTypeAddress EmailLogResponseFieldValueType = "ADDRESS"`

      - `const EmailLogResponseFieldValueTypeCheckbox EmailLogResponseFieldValueType = "CHECKBOX"`

      - `const EmailLogResponseFieldValueTypeCurrency EmailLogResponseFieldValueType = "CURRENCY"`

      - `const EmailLogResponseFieldValueTypeDatetime EmailLogResponseFieldValueType = "DATETIME"`

      - `const EmailLogResponseFieldValueTypeEmail EmailLogResponseFieldValueType = "EMAIL"`

      - `const EmailLogResponseFieldValueTypeFullName EmailLogResponseFieldValueType = "FULL_NAME"`

      - `const EmailLogResponseFieldValueTypeMarkdown EmailLogResponseFieldValueType = "MARKDOWN"`

      - `const EmailLogResponseFieldValueTypeMultiSelect EmailLogResponseFieldValueType = "MULTI_SELECT"`

      - `const EmailLogResponseFieldValueTypeNumber EmailLogResponseFieldValueType = "NUMBER"`

      - `const EmailLogResponseFieldValueTypeSingleSelect EmailLogResponseFieldValueType = "SINGLE_SELECT"`

      - `const EmailLogResponseFieldValueTypeSocialHandle EmailLogResponseFieldValueType = "SOCIAL_HANDLE"`

      - `const EmailLogResponseFieldValueTypeTelephone EmailLogResponseFieldValueType = "TELEPHONE"`

      - `const EmailLogResponseFieldValueTypeText EmailLogResponseFieldValueType = "TEXT"`

      - `const EmailLogResponseFieldValueTypeURL EmailLogResponseFieldValueType = "URL"`

      - `const EmailLogResponseFieldValueTypeHTML EmailLogResponseFieldValueType = "HTML"`

  - `HTTPLink string`

    URL to view the entity in the Lightfield web app, or null.

  - `ObjectType EmailLogResponseObjectType`

    Always `email`.

    - `const EmailLogResponseObjectTypeEmail EmailLogResponseObjectType = "email"`

  - `Relationships map[string, EmailLogResponseRelationship]`

    Map of relationship names to their associated entities. System relationships are prefixed with `$` (e.g. `$owner`, `$contact`). A self-referential relationship keeps its merged values and includes optional directional values. List filters select the current record's role with `:asSource` or `:asDestination`, for example `?parent:asSource[contains]=account_id`.

    - `Cardinality string`

      Whether the relationship is `has_one` or `has_many`.

    - `ObjectType string`

      The type of the related object (e.g. `account`, `contact`).

    - `Values []string`

      IDs of the related entities.

    - `Directions EmailLogResponseRelationshipDirections`

      Directional values for a self-referential relationship. List filters use the relationship key with `:asSource` or `:asDestination`; writes continue to use the bare key.

      - `AsDestination EmailLogResponseRelationshipDirectionsAsDestination`

        The current record is the destination (incoming) endpoint.

        - `Cardinality string`

          Whether this endpoint direction is `HAS_ONE` or `HAS_MANY`.

          - `const EmailLogResponseRelationshipDirectionsAsDestinationCardinalityHasOne EmailLogResponseRelationshipDirectionsAsDestinationCardinality = "HAS_ONE"`

          - `const EmailLogResponseRelationshipDirectionsAsDestinationCardinalityHasMany EmailLogResponseRelationshipDirectionsAsDestinationCardinality = "HAS_MANY"`

        - `Values []string`

          IDs of the related entities in this direction.

      - `AsSource EmailLogResponseRelationshipDirectionsAsSource`

        The current record is the source (outgoing) endpoint.

        - `Cardinality string`

          Whether this endpoint direction is `HAS_ONE` or `HAS_MANY`.

          - `const EmailLogResponseRelationshipDirectionsAsSourceCardinalityHasOne EmailLogResponseRelationshipDirectionsAsSourceCardinality = "HAS_ONE"`

          - `const EmailLogResponseRelationshipDirectionsAsSourceCardinalityHasMany EmailLogResponseRelationshipDirectionsAsSourceCardinality = "HAS_MANY"`

        - `Values []string`

          IDs of the related entities in this direction.

  - `UpdatedAt string`

    ISO 8601 timestamp of when the entity was last updated, or null.

  - `ExternalID string`

    External identifier for the entity, or null if unset.

### Example

```go
package main

import (
  "context"
  "fmt"

  "github.com/Lightfld/lightfield-go"
  "github.com/Lightfld/lightfield-go/option"
)

func main() {
  client := githubcomlightfldlightfieldgo.NewClient(
    option.WithAPIKey("My API Key"),
  )
  emailLogResponse, err := client.Email.Log(context.TODO(), githubcomlightfldlightfieldgo.EmailLogParams{
    Fields: githubcomlightfldlightfieldgo.EmailLogParamsFields{
      From: "$from",
      SentAt: "$sentAt",
    },
  })
  if err != nil {
    panic(err.Error())
  }
  fmt.Printf("%+v\n", emailLogResponse.ID)
}
```

#### Response

```json
{
  "id": "eml_cm0abc456def789",
  "accessLevel": "FULL",
  "createdAt": "2026-05-01T09:00:00.000Z",
  "fields": {
    "$subject": {
      "value": "Following up on our chat",
      "valueType": "TEXT"
    },
    "$sentAt": {
      "value": "2026-05-01T08:30:00.000Z",
      "valueType": "DATETIME"
    },
    "$from": {
      "value": [
        "sales@acme.com"
      ],
      "valueType": "EMAIL"
    },
    "$to": {
      "value": [
        "lead@example.com"
      ],
      "valueType": "EMAIL"
    },
    "$cc": {
      "value": [
        "string"
      ],
      "valueType": "EMAIL"
    },
    "$bcc": {
      "value": [
        "string"
      ],
      "valueType": "EMAIL"
    },
    "$privacySetting": {
      "value": "string",
      "valueType": "TEXT"
    },
    "$body": {
      "value": "<p>Hi there,</p><p>Following up on our chat earlier this week.</p>",
      "valueType": "HTML"
    }
  },
  "httpLink": null,
  "objectType": "email",
  "relationships": {
    "$account": {
      "cardinality": "has_many",
      "objectType": "account",
      "values": [
        "acc_cm4stu901uvw234"
      ],
      "directions": {
        "asDestination": {
          "cardinality": "HAS_ONE",
          "values": [
            "string"
          ]
        },
        "asSource": {
          "cardinality": "HAS_ONE",
          "values": [
            "string"
          ]
        }
      }
    },
    "$contact": {
      "cardinality": "has_many",
      "objectType": "contact",
      "values": [
        "con_cm2ghi789jkl012"
      ],
      "directions": {
        "asDestination": {
          "cardinality": "HAS_ONE",
          "values": [
            "string"
          ]
        },
        "asSource": {
          "cardinality": "HAS_ONE",
          "values": [
            "string"
          ]
        }
      }
    }
  },
  "updatedAt": "2026-05-01T10:00:00.000Z",
  "externalId": "externalId"
}
```
