Skip to Content

Simulators

Labels

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:

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.

RequestReturns
a label name already in use409 aborted, “Label name exists or conflicts”
a PUT whose body id is not the path’s400 invalidArgument, “Invalid update request”

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

Last updated on