---
title: entities.emailThreadMailboxClientReadState
description: Read email thread mailbox client read state records with the emailThreadMailboxClientReadState repository, and change them with the email thread mailbox client read state mutations. Same records as the REST EmailThreadMailboxClientReadStates entity.
canonical: https://developers.coevera.com/reference/graphql/email-thread-mailbox-client-read-state/
section: graphql
verification: schema
generatedFrom: schema f155746 (2026-10-20)
publisher: Coevera
---

# entities.emailThreadMailboxClientReadState

Read email thread mailbox client read state records with the emailThreadMailboxClientReadState repository, and change them with the email thread mailbox client read state mutations. Same records as the REST EmailThreadMailboxClientReadStates entity.

REST: [EmailThreadMailboxClientReadStates](https://developers.coevera.com/reference/rest/email-thread-mailbox-client-read-states.md).

## Queries

- `getById(entityId: ID!): EmailThreadMailboxClientReadStateEntity` Returns the record with the given id, or null when there is none. Deleted records are returned as well.
- `getByIds(entityIds: [ID!]!): [EmailThreadMailboxClientReadStateEntity!]!` Returns the records with the given ids; ids without a record are left out. Deleted records are returned as well.
- `getAll(limit: Int, offset: Int, filter: EmailThreadMailboxClientReadStateFilterInput, orderBy: [EmailThreadMailboxClientReadStateOrderByInput!], includeDeleted: Boolean): [EmailThreadMailboxClientReadStateEntity!]!` Returns the records that match the filter, paged with limit and offset.
- `getByCriteria(filter: EmailThreadMailboxClientReadStateFilterInput, orderBy: [EmailThreadMailboxClientReadStateOrderByInput!], includeDeleted: Boolean): [EmailThreadMailboxClientReadStateEntity!]!` Returns the records that match the filter as a cursor-paginated connection.
- `getChangedFieldsSinceRevision(id: UUID!, revision: Int!): [UUID!]!` Returns the ids of the fields of a record that changed after the given revision. Returns an empty list for entities without change tracking.

## Mutations

- `createEmailThreadMailboxClientReadState(input: CreateEmailThreadMailboxClientReadStateInput!, validationLevel: [ValidationLevel!]): CreateEmailThreadMailboxClientReadStatePayload` Create one record.
- `updateEmailThreadMailboxClientReadState(input: UpdateEmailThreadMailboxClientReadStateInput!, validationLevel: [ValidationLevel!], sessionIdToUpdate: String): UpdateEmailThreadMailboxClientReadStatePayload` Update fields.
- `bulkUpdateEmailThreadMailboxClientReadState(input: [CreateOrUpdateEmailThreadMailboxClientReadStateInput!]!, deleteInput: [DeleteEmailThreadMailboxClientReadStateInput!], validationLevel: [ValidationLevel!], rollbackMethod: RollbackMethod, match: MatchingInput): BulkUpdateEmailThreadMailboxClientReadStatePayload` Create or update many; per-item results.
- `deleteEmailThreadMailboxClientReadState(input: DeleteEmailThreadMailboxClientReadStateInput!): DeleteEmailThreadMailboxClientReadStatePayload` Soft-delete.

## Types

### EmailThreadMailboxClientReadStateEntity (object)

Time a user last read an email conversation in a mailbox, telling which conversations have unread emails.

- `isDeleteProtected: Boolean!` True when the record is protected against deletion because it must always exist in the space. Deleting a record that is not protected can still fail on other checks. Read-only.
- `id: ID!` Unique identifier of entity.
- `isDeleted: Boolean` Specifies if the entity is considered deleted.
- `modified: DateTime` Last modification time.
- `created: DateTime` Creation time.
- `client: ClientEntity` User whose read state of the email thread is tracked.
- `clientId: ID!` Id of the user whose read state of the email thread is tracked.
- `lastReadAt: DateTime` Time when the user last read the email thread in the mailbox.
- `mailboxId: ID!` Id of the mailbox (connected email account) the email thread belongs to.
- `threadOrId: ID!` Id of the email thread, or the id of the email itself when it does not belong to a thread.
- `instancePermissions: [EntityPermsEnum!]! (1 args)` Permissions the current user has on this record, out of the requested ones.

### EmailThreadMailboxClientReadStateFilterInput (input)

Filter conditions for EmailThreadMailboxClientReadState records. Conditions on different fields are combined with AND; use OR, AND and NOT for other combinations.

- `OR: [EmailThreadMailboxClientReadStateFilterInput!]` Matches records that meet at least one of the listed filters.
- `AND: [EmailThreadMailboxClientReadStateFilterInput!]` Matches records that meet all of the listed filters.
- `NOT: EmailThreadMailboxClientReadStateFilterInput` Matches records that do not meet this filter.
- `globalSearchQuery: String` Search term matched against the fields that the global search covers for this entity.
- `id: EntityFilterStringField` Unique identifier of entity.
- `isDeleted: Boolean` Specifies if the entity is considered deleted.
- `modified: EntityFilterDateTimeField` Last modification time.
- `created: EntityFilterDateTimeField` Creation time.
- `clientId: EntityFilterStringField` Id of the user whose read state of the email thread is tracked.
- `lastReadAt: EntityFilterDateTimeField` Time when the user last read the email thread in the mailbox.
- `mailboxId: EntityFilterStringField` Id of the mailbox (connected email account) the email thread belongs to.
- `threadOrId: EntityFilterStringField` Id of the email thread, or the id of the email itself when it does not belong to a thread.
- `client: ClientFilterInput` User whose read state of the email thread is tracked. Matches records where a related record meets these conditions.

### EmailThreadMailboxClientReadStateOrderByInput (input)

Sorting of EmailThreadMailboxClientReadState records. Set exactly one field in each item; list several items to sort by more fields, in order of priority.

- `id: OrderByEnum` Unique identifier of entity.
- `isDeleted: OrderByEnum` Specifies if the entity is considered deleted.
- `modified: OrderByEnum` Last modification time.
- `created: OrderByEnum` Creation time.
- `client: [ClientOrderByNestedInput!]` User whose read state of the email thread is tracked. Sorts by fields of the related record, listed in order of priority.
- `clientId: OrderByEnum` Id of the user whose read state of the email thread is tracked.

### CreateEmailThreadMailboxClientReadStateInput (input)

Field values of a new EmailThreadMailboxClientReadState record.

- `clientMutationId: String` Optional client-supplied identifier passed on a mutation input and echoed back unchanged on its payload, so a client can correlate the response with its request (Relay convention).
- `modified: DateTime` Last modification time.
- `created: DateTime` Creation time.
- `clientId: ID!` Id of the user whose read state of the email thread is tracked.
- `lastReadAt: DateTime` Time when the user last read the email thread in the mailbox.
- `mailboxId: ID!` Id of the mailbox (connected email account) the email thread belongs to.
- `threadOrId: ID!` Id of the email thread, or the id of the email itself when it does not belong to a thread.

### CreateOrUpdateEmailThreadMailboxClientReadStateInput (input)

Field values of an EmailThreadMailboxClientReadState record to create, or to update when its id is set.

- `clientMutationId: String` Optional client-supplied identifier passed on a mutation input and echoed back unchanged on its payload, so a client can correlate the response with its request (Relay convention).
- `id: ID` Unique identifier of entity.
- `modified: DateTime` Last modification time.
- `created: DateTime` Creation time.
- `clientId: ID` Id of the user whose read state of the email thread is tracked.
- `lastReadAt: DateTime` Time when the user last read the email thread in the mailbox.
- `mailboxId: ID` Id of the mailbox (connected email account) the email thread belongs to.
- `threadOrId: ID` Id of the email thread, or the id of the email itself when it does not belong to a thread.

### DeleteEmailThreadMailboxClientReadStateInput (input)

Id of the EmailThreadMailboxClientReadState record to delete.

- `clientMutationId: String` Optional client-supplied identifier passed on a mutation input and echoed back unchanged on its payload, so a client can correlate the response with its request (Relay convention).
- `id: ID!` Unique identifier of entity.

### UpdateEmailThreadMailboxClientReadStateInput (input)

Id of an EmailThreadMailboxClientReadState record and the field values to change.

- `clientMutationId: String` Optional client-supplied identifier passed on a mutation input and echoed back unchanged on its payload, so a client can correlate the response with its request (Relay convention).
- `id: ID!` Unique identifier of entity.
- `modified: DateTime` Last modification time.
- `created: DateTime` Creation time.
- `clientId: ID` Id of the user whose read state of the email thread is tracked.
- `lastReadAt: DateTime` Time when the user last read the email thread in the mailbox.
- `mailboxId: ID` Id of the mailbox (connected email account) the email thread belongs to.
- `threadOrId: ID` Id of the email thread, or the id of the email itself when it does not belong to a thread.

### BulkUpdateEmailThreadMailboxClientReadStatePayload (object)

Result of the bulkUpdateEmailThreadMailboxClientReadState mutation.

- `result: BulkUpdateResults!` Ids of the created, updated and deleted records, and the items that failed.

### CreateEmailThreadMailboxClientReadStatePayload (object)

Result of the createEmailThreadMailboxClientReadState mutation.

- `emailThreadMailboxClientReadState: EmailThreadMailboxClientReadStateEntity` The created record.
- `clientMutationId: String` Optional client-supplied identifier passed on a mutation input and echoed back unchanged on its payload, so a client can correlate the response with its request (Relay convention).

### DeleteEmailThreadMailboxClientReadStatePayload (object)

Result of the deleteEmailThreadMailboxClientReadState mutation.

- `emailThreadMailboxClientReadState: EmailThreadMailboxClientReadStateEntity` The deleted record.
- `clientMutationId: String` Optional client-supplied identifier passed on a mutation input and echoed back unchanged on its payload, so a client can correlate the response with its request (Relay convention).

### UpdateEmailThreadMailboxClientReadStatePayload (object)

Result of the updateEmailThreadMailboxClientReadState mutation.

- `emailThreadMailboxClientReadState: EmailThreadMailboxClientReadStateEntity` The updated record.
- `clientMutationId: String` Optional client-supplied identifier passed on a mutation input and echoed back unchanged on its payload, so a client can correlate the response with its request (Relay convention).

Types several repositories share, such as `PageInfo` and the filter fields, are in the [types index](https://developers.coevera.com/reference/graphql/types.md). The [SDL](https://developers.coevera.com/graphql/schema.graphql) has the whole schema in one file.

## Example

```graphql
query FirstEmailThreadMailboxClientReadStates {
  entities {
    emailThreadMailboxClientReadState {
      getByCriteria(first: 3, orderBy: [{ modified: Desc }]) {
        totalCount
        edges { node { id modified } }
      }
    }
  }
}
```

```bash
curl 'https://{region}.api.coevera.com/api/v100/app/space/{space_id}/graphql/public' \
  --user "$COEVERA_API_KEY:$COEVERA_API_SECRET" \
  --header 'Content-Type: application/json' \
  --data '{"query":"query FirstEmailThreadMailboxClientReadStates { entities { emailThreadMailboxClientReadState { getByCriteria(first: 3, orderBy: [{ modified: Desc }]) { totalCount edges { node { id modified } } } } } }"}'
```
