# Message

## Retrieve a message

`client.message.retrieve(stringid, RequestOptionsoptions?): MessageRetrieveResponse`

**get** `/v1/messages/{id}`

Retrieves a single message by its ID. The message text is redacted based on the caller-specific channel-visibility resolution, and the response includes a read-only `accessLevel`. Attachment file IDs are exposed via `relationships.$attachment` (same shape as email attachments); fetch their contents with `GET /v1/files/{id}/url`.

**[Required scope](/using-the-api/scopes/):** `messages:read`

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

### Parameters

- `id: string`

  Unique identifier of the message to retrieve.

### Returns

- `MessageRetrieveResponse`

  - `id: string`

    Unique identifier for the entity.

  - `accessLevel: "FULL" | "METADATA"`

    The caller's resolved access level for this message.

    - `"FULL"`

    - `"METADATA"`

  - `createdAt: string`

    ISO 8601 timestamp of when the entity was created.

  - `fields: Record<string, Fields>`

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

    - `value: string | number | boolean | 3 more | null`

      The field value, or null if unset.

      - `string`

      - `number`

      - `boolean`

      - `Array<string>`

      - `Address`

        - `city?: string | null`

          City name.

        - `country?: string | null`

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

        - `latitude?: number | null`

          Latitude coordinate.

        - `longitude?: number | null`

          Longitude coordinate.

        - `postalCode?: string | null`

          Postal or ZIP code.

        - `state?: string | null`

          State or province.

        - `street?: string | null`

          Street address line 1.

        - `street2?: string | null`

          Street address line 2.

      - `FullName`

        - `firstName?: string | null`

          The contact's first name.

        - `lastName?: string | null`

          The contact's last name.

    - `valueType: "ADDRESS" | "CHECKBOX" | "CURRENCY" | 12 more`

      The data type of the field.

      - `"ADDRESS"`

      - `"CHECKBOX"`

      - `"CURRENCY"`

      - `"DATETIME"`

      - `"EMAIL"`

      - `"FULL_NAME"`

      - `"MARKDOWN"`

      - `"MULTI_SELECT"`

      - `"NUMBER"`

      - `"SINGLE_SELECT"`

      - `"SOCIAL_HANDLE"`

      - `"TELEPHONE"`

      - `"TEXT"`

      - `"URL"`

      - `"HTML"`

  - `httpLink: string | null`

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

  - `objectType: "message"`

    Always `message`.

    - `"message"`

  - `relationships: Record<string, Relationships>`

    Map of relationship names to their associated entities. System relationships are prefixed with `$` (e.g. `$owner`, `$contact`).

    - `cardinality: string`

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

    - `objectType: string`

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

    - `values: Array<string>`

      IDs of the related entities.

  - `updatedAt: string | null`

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

  - `externalId?: string | null`

    External identifier for the entity, or null if unset.

### Example

```typescript
import Lightfield from 'lightfield';

const client = new Lightfield({
  apiKey: 'My API Key',
});

const messageRetrieveResponse = await client.message.retrieve('id');

console.log(messageRetrieveResponse.id);
```

#### Response

```json
{
  "id": "msg_cm0abc456def789",
  "accessLevel": "FULL",
  "createdAt": "2026-05-01T09:00:00.000Z",
  "fields": {
    "$text": {
      "value": "Thanks — pushed the fix, should be live shortly.",
      "valueType": "TEXT"
    },
    "$sentAt": {
      "value": "2026-05-01T08:59:30.000Z",
      "valueType": "DATETIME"
    },
    "$provider": {
      "value": "SLACK",
      "valueType": "TEXT"
    },
    "$providerThreadId": {
      "value": "1714553970.123456",
      "valueType": "TEXT"
    },
    "$editedAt": {
      "value": "string",
      "valueType": "DATETIME"
    }
  },
  "httpLink": null,
  "objectType": "message",
  "relationships": {
    "$channel": {
      "cardinality": "has_one",
      "objectType": "channel",
      "values": [
        "chn_cm2def456ghi789"
      ]
    },
    "$attachment": {
      "cardinality": "has_many",
      "objectType": "file",
      "values": [
        "fil_cm3attach789xyz012"
      ]
    }
  },
  "updatedAt": "2026-05-01T09:00:00.000Z",
  "externalId": "externalId"
}
```

## List messages

`client.message.list(MessageListParamsquery?, RequestOptionsoptions?): MessageListResponse`

**get** `/v1/messages`

Returns a paginated list of messages. Use `offset` and `limit` to paginate through results. Each message is filtered per caller to those whose channel they may see, and includes a read-only `accessLevel`. See <u>[List endpoints](/using-the-api/list-endpoints/)</u> for more information about pagination.

**[Required scope](/using-the-api/scopes/):** `messages:read`

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

### Parameters

- `query: MessageListParams`

  - `limit?: number`

    Maximum number of records to return. Defaults to 25, maximum 25.

  - `offset?: number`

    Number of records to skip for pagination. Defaults to 0.

### Returns

- `MessageListResponse`

  - `data: Array<Data>`

    Array of message objects for the current page.

    - `id: string`

      Unique identifier for the entity.

    - `accessLevel: "FULL" | "METADATA"`

      The caller's resolved access level for this message.

      - `"FULL"`

      - `"METADATA"`

    - `createdAt: string`

      ISO 8601 timestamp of when the entity was created.

    - `fields: Record<string, Fields>`

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

      - `value: string | number | boolean | 3 more | null`

        The field value, or null if unset.

        - `string`

        - `number`

        - `boolean`

        - `Array<string>`

        - `Address`

          - `city?: string | null`

            City name.

          - `country?: string | null`

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

          - `latitude?: number | null`

            Latitude coordinate.

          - `longitude?: number | null`

            Longitude coordinate.

          - `postalCode?: string | null`

            Postal or ZIP code.

          - `state?: string | null`

            State or province.

          - `street?: string | null`

            Street address line 1.

          - `street2?: string | null`

            Street address line 2.

        - `FullName`

          - `firstName?: string | null`

            The contact's first name.

          - `lastName?: string | null`

            The contact's last name.

      - `valueType: "ADDRESS" | "CHECKBOX" | "CURRENCY" | 12 more`

        The data type of the field.

        - `"ADDRESS"`

        - `"CHECKBOX"`

        - `"CURRENCY"`

        - `"DATETIME"`

        - `"EMAIL"`

        - `"FULL_NAME"`

        - `"MARKDOWN"`

        - `"MULTI_SELECT"`

        - `"NUMBER"`

        - `"SINGLE_SELECT"`

        - `"SOCIAL_HANDLE"`

        - `"TELEPHONE"`

        - `"TEXT"`

        - `"URL"`

        - `"HTML"`

    - `httpLink: string | null`

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

    - `objectType: "message"`

      Always `message`.

      - `"message"`

    - `relationships: Record<string, Relationships>`

      Map of relationship names to their associated entities. System relationships are prefixed with `$` (e.g. `$owner`, `$contact`).

      - `cardinality: string`

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

      - `objectType: string`

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

      - `values: Array<string>`

        IDs of the related entities.

    - `updatedAt: string | null`

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

    - `externalId?: string | null`

      External identifier for the entity, or null if unset.

  - `object: string`

    The object type, always `"list"`.

  - `totalCount: number`

    Total number of entities matching the query.

### Example

```typescript
import Lightfield from 'lightfield';

const client = new Lightfield({
  apiKey: 'My API Key',
});

const messageListResponse = await client.message.list();

console.log(messageListResponse.data);
```

#### Response

```json
{
  "data": [
    {
      "id": "msg_cm0abc456def789",
      "accessLevel": "FULL",
      "createdAt": "2026-05-01T09:00:00.000Z",
      "fields": {
        "$text": {
          "value": "Thanks — pushed the fix, should be live shortly.",
          "valueType": "TEXT"
        },
        "$sentAt": {
          "value": "2026-05-01T08:59:30.000Z",
          "valueType": "DATETIME"
        },
        "$provider": {
          "value": "SLACK",
          "valueType": "TEXT"
        },
        "$providerThreadId": {
          "value": "1714553970.123456",
          "valueType": "TEXT"
        },
        "$editedAt": {
          "value": "string",
          "valueType": "DATETIME"
        }
      },
      "httpLink": null,
      "objectType": "message",
      "relationships": {
        "$channel": {
          "cardinality": "has_one",
          "objectType": "channel",
          "values": [
            "chn_cm2def456ghi789"
          ]
        },
        "$attachment": {
          "cardinality": "has_many",
          "objectType": "file",
          "values": [
            "fil_cm3attach789xyz012"
          ]
        }
      },
      "updatedAt": "2026-05-01T09:00:00.000Z",
      "externalId": "externalId"
    },
    {
      "id": "msg_cm1xyz123uvw456",
      "accessLevel": "FULL",
      "createdAt": "2026-04-29T15:12:00.000Z",
      "fields": {
        "$text": {
          "value": "Can we sync on pricing tomorrow?",
          "valueType": "TEXT"
        },
        "$sentAt": {
          "value": "2026-04-29T15:11:30.000Z",
          "valueType": "DATETIME"
        },
        "$provider": {
          "value": "SLACK",
          "valueType": "TEXT"
        },
        "$providerThreadId": {
          "value": "string",
          "valueType": "TEXT"
        },
        "$editedAt": {
          "value": "string",
          "valueType": "DATETIME"
        }
      },
      "httpLink": null,
      "objectType": "message",
      "relationships": {
        "$channel": {
          "cardinality": "has_one",
          "objectType": "channel",
          "values": [
            "chn_cm2def456ghi789"
          ]
        },
        "$attachment": {
          "cardinality": "has_many",
          "objectType": "file",
          "values": [
            "fil_cm3attach789xyz012"
          ]
        }
      },
      "updatedAt": "2026-04-29T15:12:00.000Z",
      "externalId": "externalId"
    }
  ],
  "object": "list",
  "totalCount": 2
}
```

## Domain Types

### Message List Response

- `MessageListResponse`

  - `data: Array<Data>`

    Array of message objects for the current page.

    - `id: string`

      Unique identifier for the entity.

    - `accessLevel: "FULL" | "METADATA"`

      The caller's resolved access level for this message.

      - `"FULL"`

      - `"METADATA"`

    - `createdAt: string`

      ISO 8601 timestamp of when the entity was created.

    - `fields: Record<string, Fields>`

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

      - `value: string | number | boolean | 3 more | null`

        The field value, or null if unset.

        - `string`

        - `number`

        - `boolean`

        - `Array<string>`

        - `Address`

          - `city?: string | null`

            City name.

          - `country?: string | null`

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

          - `latitude?: number | null`

            Latitude coordinate.

          - `longitude?: number | null`

            Longitude coordinate.

          - `postalCode?: string | null`

            Postal or ZIP code.

          - `state?: string | null`

            State or province.

          - `street?: string | null`

            Street address line 1.

          - `street2?: string | null`

            Street address line 2.

        - `FullName`

          - `firstName?: string | null`

            The contact's first name.

          - `lastName?: string | null`

            The contact's last name.

      - `valueType: "ADDRESS" | "CHECKBOX" | "CURRENCY" | 12 more`

        The data type of the field.

        - `"ADDRESS"`

        - `"CHECKBOX"`

        - `"CURRENCY"`

        - `"DATETIME"`

        - `"EMAIL"`

        - `"FULL_NAME"`

        - `"MARKDOWN"`

        - `"MULTI_SELECT"`

        - `"NUMBER"`

        - `"SINGLE_SELECT"`

        - `"SOCIAL_HANDLE"`

        - `"TELEPHONE"`

        - `"TEXT"`

        - `"URL"`

        - `"HTML"`

    - `httpLink: string | null`

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

    - `objectType: "message"`

      Always `message`.

      - `"message"`

    - `relationships: Record<string, Relationships>`

      Map of relationship names to their associated entities. System relationships are prefixed with `$` (e.g. `$owner`, `$contact`).

      - `cardinality: string`

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

      - `objectType: string`

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

      - `values: Array<string>`

        IDs of the related entities.

    - `updatedAt: string | null`

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

    - `externalId?: string | null`

      External identifier for the entity, or null if unset.

  - `object: string`

    The object type, always `"list"`.

  - `totalCount: number`

    Total number of entities matching the query.

### Message Retrieve Response

- `MessageRetrieveResponse`

  - `id: string`

    Unique identifier for the entity.

  - `accessLevel: "FULL" | "METADATA"`

    The caller's resolved access level for this message.

    - `"FULL"`

    - `"METADATA"`

  - `createdAt: string`

    ISO 8601 timestamp of when the entity was created.

  - `fields: Record<string, Fields>`

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

    - `value: string | number | boolean | 3 more | null`

      The field value, or null if unset.

      - `string`

      - `number`

      - `boolean`

      - `Array<string>`

      - `Address`

        - `city?: string | null`

          City name.

        - `country?: string | null`

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

        - `latitude?: number | null`

          Latitude coordinate.

        - `longitude?: number | null`

          Longitude coordinate.

        - `postalCode?: string | null`

          Postal or ZIP code.

        - `state?: string | null`

          State or province.

        - `street?: string | null`

          Street address line 1.

        - `street2?: string | null`

          Street address line 2.

      - `FullName`

        - `firstName?: string | null`

          The contact's first name.

        - `lastName?: string | null`

          The contact's last name.

    - `valueType: "ADDRESS" | "CHECKBOX" | "CURRENCY" | 12 more`

      The data type of the field.

      - `"ADDRESS"`

      - `"CHECKBOX"`

      - `"CURRENCY"`

      - `"DATETIME"`

      - `"EMAIL"`

      - `"FULL_NAME"`

      - `"MARKDOWN"`

      - `"MULTI_SELECT"`

      - `"NUMBER"`

      - `"SINGLE_SELECT"`

      - `"SOCIAL_HANDLE"`

      - `"TELEPHONE"`

      - `"TEXT"`

      - `"URL"`

      - `"HTML"`

  - `httpLink: string | null`

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

  - `objectType: "message"`

    Always `message`.

    - `"message"`

  - `relationships: Record<string, Relationships>`

    Map of relationship names to their associated entities. System relationships are prefixed with `$` (e.g. `$owner`, `$contact`).

    - `cardinality: string`

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

    - `objectType: string`

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

    - `values: Array<string>`

      IDs of the related entities.

  - `updatedAt: string | null`

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

  - `externalId?: string | null`

    External identifier for the entity, or null if unset.
