# Labels

Gmail's 14 system labels and your own, with message and thread counts that are current as soon as a write returns.

Every mailbox holds Gmail's 14 system labels, and a label's counts always match the mail. List the user labels of the busy inbox, create one, trip its conflicts and delete one:

```bash
curl -s -X POST "$RYSTIC_URL/_rystic/scenario" -d '{"name":"gmail_busy_inbox"}' -o /dev/null
G=(-H 'Authorization: Bearer ya29.placeholder')
curl -s "$RYSTIC_URL/gmail/v1/users/me/labels" "${G[@]}" | jq -c '[.labels[] | select(.type == "user") | {id, name}]'
# -> [{"id":"Label_11","name":"Receipts"},{"id":"Label_12","name":"Travel"},{"id":"Label_13","name":"Team/Standup"}]
curl -s "$RYSTIC_URL/gmail/v1/users/me/labels/Label_12" "${G[@]}" | jq -c '{name, messagesTotal, messagesUnread, threadsTotal, threadsUnread}'
# -> {"name":"Travel","messagesTotal":1,"messagesUnread":0,"threadsTotal":1,"threadsUnread":0}
curl -s "$RYSTIC_URL/gmail/v1/users/me/labels" "${G[@]}" -H 'Content-Type: application/json' -d '{"name":"Clients"}' | jq -c '{name}'
# -> {"name":"Clients"}
curl -s "$RYSTIC_URL/gmail/v1/users/me/labels" "${G[@]}" -H 'Content-Type: application/json' -d '{"name":"Travel"}' | jq -c '.error | {code, status, message}'
# -> {"code":409,"status":"ABORTED","message":"Label name exists or conflicts"}
curl -s -X PUT "$RYSTIC_URL/gmail/v1/users/me/labels/Label_12" "${G[@]}" -H 'Content-Type: application/json' -d '{"id":"Label_99","name":"Trips"}' | jq -c '.error | {code, status, message}'
# -> {"code":400,"status":"INVALID_ARGUMENT","message":"Invalid update request"}
curl -s -X DELETE "$RYSTIC_URL/gmail/v1/users/me/labels/Label_12" "${G[@]}" -o /dev/null -w '%{http_code}\n'
# -> 204
curl -s "$RYSTIC_URL/gmail/v1/users/me/messages/19a4c0d1e2f31004" "${G[@]}" | jq -c '.labelIds'
# -> ["INBOX","CATEGORY_UPDATES"]
```

### What each call does

Labels are listed, created, read, updated with `PUT`, patched and deleted under `…/labels`. Reading a label returns its counts, current as soon as a write returns: `messagesTotal`, `messagesUnread`, `threadsTotal` and `threadsUnread`.

| Request | Returns |
|---|---|
| a label name already in use | 409 `aborted`, "Label name exists or conflicts" |
| a `PUT` whose body `id` is not the path's | 400 `invalidArgument`, "Invalid update request" |

Deleting a label strips it from every message that carried it, as the last read above shows.

---

Source: https://www.rystic.ai/docs/simulators/gmail/features/labels · Markdown: https://www.rystic.ai/docs/simulators/gmail/features/labels.md
