# Coffer > Shared inbox for small teams: one place for every mailbox, with assignments, tags and notes. Mail keeps arriving in the mailboxes a team already has; Coffer puts every conversation in one list with an owner, a state, tags and internal notes. Replies go out from the address the mail came to. ## What it does - One list for every shared address (hello@, support@, billing@), with the mailbox visible on each row. - One owner per conversation, so nobody answers twice and nobody answers never. - Closing says how it ended: resolved or not resolved. - Internal notes with replies and mentions - the team talks beside the thread, the customer never sees it. - Mailboxes connect over IMAP and SMTP, or by forwarding to an address we give you. Gmail and Microsoft 365 connectors ship with the first release. - Attachments are kept in object storage in the European Union. A workspace has 50 GB; a single file over 25 MB is not kept. ## Pages - [Home](https://coffer.email/): what it is, how it works, pricing. - [API documentation](https://coffer.email/docs): keys, endpoints, errors. - [Privacy policy](https://coffer.email/privacy): what is stored, where, and for how long. - [Terms](https://coffer.email/terms): the service, prices, storage, your content. ## API Base address: https://coffer.email/api/v1 (version v1). Every request carries a workspace key: `Authorization: Bearer cof_…`. Keys are made by a workspace owner under Settings, API keys, with a name, an expiry date and one of two levels: read only, or read and change. - `GET /api/v1/me` (read): Check the key and see which workspace it opens. The first call to make. Confirms the key works, names the workspace and says what the key may do. Also tells you whether the workspace is read only because it is scheduled for deletion. - `GET /api/v1/mailboxes` (read): Mailboxes connected to the workspace. Every mailbox with the id you need for the `mailbox` filter on conversations. - `GET /api/v1/tags` (read): Tags used in the workspace. The `slug` is what the `tag` filter on conversations expects. - `GET /api/v1/members` (read): People in the workspace. Ids from here are what `assign` and the author of a note expect. Names repeat and change; ids do not. - `GET /api/v1/contacts` (read): Customers who have written in. Contacts hidden in the panel are left out, exactly as they are in the customer list. - `GET /api/v1/conversations` (read): List conversations, newest message first. Paging uses a cursor, not page numbers: mail keeps arriving, so page two would show you the same rows again. Take `nextBefore` from the response and send it back as `before`. When `nextBefore` is null, you have everything. - `GET /api/v1/conversations/{id}` (read): One conversation with its whole thread. Messages in the order they arrived, plus internal notes with their replies. A message with `draft: true` was written in the panel and never sent. An id from another workspace answers 404, not 403. - `POST /api/v1/conversations/{id}/notes` (write): Add an internal note. Notes are what the team says to each other beside the thread; the customer never sees them. `authorId` is required, because a note is a sentence from a person and a key is not a person. - `POST /api/v1/conversations/{id}/assign` (write): Give a conversation to someone, or take it off them. Send `memberId: null` to unassign. The history line says a program did it, not a person - we do not invent a click that never happened. - `POST /api/v1/conversations/{id}/status` (write): Close a conversation or open it again. Closing always says how it ended - a closed conversation without an outcome is a statistic nobody can use. Errors always look like `{ "error": { "code", "message" } }`: - `401 unauthorized`: No key, a key that never existed, one that expired or was revoked. - `403 forbidden`: A read-only key tried to change something. - `403 read_only`: The workspace is scheduled for deletion, so nothing can change. - `404 not_found`: No such conversation in this workspace. - `400 invalid_request`: A parameter is missing or has a shape we cannot use. ## Notes for agents - Paging uses a cursor (`before` / `nextBefore`), not page numbers - new mail keeps arriving. - A note needs `authorId`: it is a sentence from a person, and a key is not a person. - A conversation id from another workspace answers 404, never 403. - Questions this file does not answer: app@coffer.email