---
title: Read messages and manage channels | Lightfield
description: Read synced messages and attachments, check channel visibility, and change a DM’s CRM inclusion.
---

Use these endpoints to read messages already synced into Lightfield. Connect the source through [Integrations](/help/settings/integrations/index.md) first. This API does not send Slack or Teams messages or create channels.

## Find a channel and its messages

Use a key with `channels:read` and `messages:read`. [List channels](/api/resources/channel/methods/list/index.md) and [retrieve the chosen channel](/api/resources/channel/methods/retrieve/index.md):

Terminal window

```
curl "https://api.lightfield.app/v1/channels?limit=20&offset=0" \
  -H "Authorization: Bearer $LIGHTFIELD_API_KEY" \
  -H "Lightfield-Version: 2026-03-01"


curl "https://api.lightfield.app/v1/channels/$CHANNEL_ID" \
  -H "Authorization: Bearer $LIGHTFIELD_API_KEY" \
  -H "Lightfield-Version: 2026-03-01"
```

Choose the ID from the first response’s `data` and confirm its fields in the second. Results include only channels the caller can see. A private channel you cannot access returns 404, just like an unknown ID.

[List messages](/api/resources/message/methods/list/index.md) and [retrieve a message](/api/resources/message/methods/retrieve/index.md) using its returned ID:

Terminal window

```
curl "https://api.lightfield.app/v1/messages?limit=20&offset=0" \
  -H "Authorization: Bearer $LIGHTFIELD_API_KEY" \
  -H "Lightfield-Version: 2026-03-01"


curl "https://api.lightfield.app/v1/messages/$MESSAGE_ID" \
  -H "Authorization: Bearer $LIGHTFIELD_API_KEY" \
  -H "Lightfield-Version: 2026-03-01"
```

Both list operations use [offset pagination](/using-the-api/list-endpoints/#pagination/index.md). Message list order is the time records were created in Lightfield, not when messages were sent. Use the documented fields and [filters](/using-the-api/list-endpoints/#filtering/index.md) for the question you are answering.

## Handle redacted text and attachments

Check `accessLevel` before displaying a message body. Seeing a record does not guarantee full access to its contents; an absent or redacted body is not evidence that the original message was empty. Resolve access through the source connection and [privacy settings](/help/privacy-and-access/index.md), rather than retrying under another identity.

Attachment IDs appear in `relationships.$attachment`. Use [Get file URL](/api/resources/file/methods/url/index.md) with `files:read` to fetch each permitted attachment; see the [file download procedure](/using-the-api/file-uploads/index.md). Preserve the API’s access restrictions when storing or displaying the result.

## Change whether your DM appears in the CRM

[Update a channel](/api/resources/channel/methods/update/index.md) accepts only `$includeInCrm`. This is for a DM owned by your connected account. Only that owner can change it; an API scope does not grant ownership. The request needs `channels:update`.

Terminal window

```
curl "https://api.lightfield.app/v1/channels/$CHANNEL_ID" \
  -X POST \
  -H "Authorization: Bearer $LIGHTFIELD_API_KEY" \
  -H "Lightfield-Version: 2026-03-01" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: include-northwind-dm-001" \
  -d '{"fields":{"$includeInCrm":true}}'
```

Confirm `fields.$includeInCrm.value` in the returned channel. Send `false` to reverse this choice. This changes CRM inclusion, not whether the conversation exists in its source service.

For 403, verify both the scope and channel ownership. For 404, check visibility and the ID. Do not turn a permission failure into a claim that the original conversation was deleted.
