Core concepts

Labels

Labels mark state on messages and threads. Five are set by Goshen Email; the rest are yours.

System labels

LabelSet when
receivedThe message arrived from outside.
sentThe inbox sent the message.
unreadThe message arrived and nobody has removed the label yet.
trashThe message or thread was moved to Trash. Trashed mail is hidden from lists unless you ask for it.
quarantinedThe scanner held the message. Only a person can release it from the dashboard. See Quarantine.

quarantined is the one label no API key can add or remove; the request fails with quarantine_review_required. received and sent are set by Goshen Email when mail arrives or leaves. The API does not stop you from removing them, but the dashboard's Inbox and Sent views depend on them, so leave them alone. unread and trash are meant to be changed.

Your labels

Any other label is yours to define. Labels are 1 to 64 characters. A message can carry up to 50 labels when sent. Typical uses:

Labels are free text, so decide on a vocabulary before your agents start inventing their own.

Adding and removing labels

On a message:

curl "https://api.goshenemail.com/v1/inboxes/research%40agents.goshenemail.com/messages/%3Cid%40example.net%3E/labels" \
  -H "Authorization: Bearer $GOSHENEMAIL_API_KEY" -X PATCH \
  -H "Content-Type: application/json" \
  -d '{"addLabels":["invoice","needs-human"],"removeLabels":["unread"]}'

On a thread, PATCH /v1/inboxes/{inboxId}/threads/{threadId}/labels takes the same body and applies to every message in the thread.

Both operations need the messages:write scope. They return an empty 200 on success.

Labels on outgoing mail

send and reply accept a labels array so a message is tagged from the moment it leaves. The sent label is added regardless.

Filtering by label

listMessages and listThreads take labels as a repeated query parameter and return items that carry every label given:

curl "https://api.goshenemail.com/v1/inboxes/research%40agents.goshenemail.com/messages?labels=received&labels=invoice" \
  -H "Authorization: Bearer $GOSHENEMAIL_API_KEY"

In the dashboard

The dashboard shows labels on each conversation and lets you add or remove them, move mail to Trash, and mark it read. Inbox, Sent, All mail, Quarantine, and Trash are views over these labels, not separate folders.