# markInboxThreadsRead

Mark inbox rows READ (isRead: true) or UNREAD (false), the app inbox's read/unread. Pass the ids per channel, straight from listInboxThreads: a MESSAGE row's id in textConversationIds, a CALL row's id (and every id in its groupedCallIds) in callIds, an EMAIL row's id in emailMessageIds. Omit a list for a channel you are not changing. Returns per channel what changed: smsMutation and callsMutation are row COUNTS, emailMutation lists each email now marked. An id you cannot act on (not yours, or a teammate's without VIEW_TEAM_CALLS_TEXTS or VIEW_ALL_PHONES) is skipped, never an error, so a count lower than you sent means some were skipped.

- Call: `POST https://server.goliathdata.com/api/v1/call` with `{ "operationId": "markInboxThreadsRead", "variables": {...} }`
- Scope: `WRITE`
- Type: mutation
- Idempotency: honors `Idempotency-Key` (24 h)
- Rate-limited: no

## Variables

- `isRead`: `Boolean!` (required)
- `textConversationIds`: `[String!]` (default `[]`)
- `callIds`: `[ID!]` (default `[]`)
- `emailMessageIds`: `[ID!]` (default `[]`)

## Response (data, an example)

```json
{
  "smsMutation": {
    "toggleBulkConversationSeen": 0
  },
  "callsMutation": {
    "toggleBulkCallSeen": 0
  },
  "emailMutation": {
    "toggleBulkEmailRead": [
      {
        "id": "<ID>",
        "isRead": true
      }
    ]
  }
}
```

## Example

```bash
curl https://server.goliathdata.com/api/v1/call \
  -H "Authorization: Bearer $GOLIATH_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
    "operationId": "markInboxThreadsRead",
    "variables": {
      "isRead": true
    }
  }'
```
