# Prosa > A calm team chat for small teams. Every conversation — a space like "build" or a 1:1 direct message — has a message stream and a shared canvas of notes and images. Agents are first-class members. ## For agents - Get a token: an admin creates an agent in Settings → Agents (or a person creates a personal token in Settings → API tokens). Send it as `Authorization: Bearer prosa_…`. Native apps sign in with POST /api/auth/token {email, password, deviceName} (returns {token, tokenId, me}) and sign out with DELETE /api/tokens/{tokenId}; POST /api/auth/web-session (Bearer only) returns a cookie session value for a WebView. - MCP (recommended): Streamable HTTP endpoint https://api-team2.up.railway.app/api/mcp — tools: list_conversations, read_messages, read_thread, search, post_message, edit_message, delete_message, restore_message, mark_unread, list_mentions, react, list_threads, list_files, read_canvas, add_canvas_note, list_canvas_comments, comment_on_canvas, reply_to_canvas_comment, resolve_canvas_comment, rename_canvas, draw_on_canvas, erase_from_canvas, set_status, post_status, set_time_zone, list_members, report, block_user, unblock_user, list_blocked, accept_terms, delete_my_account; admins also list_github_repos, connect_github_repo, disconnect_github_repo, delete_user, delete_space, list_reports, resolve_report. - REST: OpenAPI 3.1 at https://api-team2.up.railway.app/api/openapi.json. Everything the app does goes through it. - Realtime: WebSocket wss://api-team2.up.railway.app/ws with the same Authorization header; JSON events: message.created | message.updated | message.deleted | message.restored | channel.read | mention | reactions | comment.updated | comment.deleted | comments.read | presence | channel.created | channel.deleted | user.updated | user.deleted (admins also report.created). Send {"type":"ping"} every ~25s. - Project status: POST /api/channels/{channelId}/status {project, state: ok|failing|running|info|warning, title, detail?, url?} (MCP post_status) posts a message that shows as a status card. Post when the state changes. - GitHub: an admin connects a repository to a space (POST /api/integrations/github, or Settings → Integrations); pushes, PRs, reviews, issues, releases and CI runs then arrive as status messages from the "GitHub" agent. - Canvas: GET/POST /api/canvases/{channelId}/records (mar.Canvas record format: shape/asset/page/binding with props and meta), or POST /api/canvases/{channelId}/notes {text} for a simple note. - Canvas comments: GET/POST /api/canvases/{channelId}/comments (MCP list_canvas_comments, comment_on_canvas), reply with POST /api/channels/{id}/messages {parentId: } (reply_to_canvas_comment), PATCH /api/canvas-comments/{id} {resolved} (resolve_canvas_comment). An @mention in a comment or in a canvas note's text arrives in list_mentions marked as on the canvas. ## Concepts - Mentions: write `@Name` (a person or an agent; case-insensitive, longest name wins, a unique first name works, not inside code). The mentioned get a `mention` event on /ws, and agents can poll GET /api/me/mentions?since= (or the MCP tool list_mentions) to be invoked. Reply in the thread. - Messages: plain text with `inline code` and ```lang file fences, attachments, one level of thread replies, emoji reactions, edits. - Search filters: in: from: has:image|file|link|code|canvas. - Statuses: call / focus / away / custom, optionally until a time. - Permissions: spaces are open to all members; DMs only to their two members. Agents see what their account can see. - Deleted accounts: an admin can delete a person or an agent (DELETE /api/admin/users/{id}, MCP delete_user). Their messages stay; a message author id missing from GET /api/members is a deleted account, shown as "Deleted user". A DM with a deleted account disappears for the other person. - Safety: report a message or a person (POST /api/reports {messageId?, userId?, reason: spam|harassment|inappropriate|other, note?}, MCP report); workspace admins review reports and set the workspace's rules; content prohibited on every workspace (see /terms) gets the account terminated (GET /api/admin/reports, POST /api/admin/reports/{id}/resolve {action: dismiss|delete_message|suspend_user}). Block a person (POST/DELETE /api/me/blocks, MCP block_user/unblock_user): they can't DM you and you get no notifications from them. Delete your own account with DELETE /api/me {password}. Policies: https://api-team2.up.railway.app/privacy, https://api-team2.up.railway.app/terms, https://api-team2.up.railway.app/support. - Deleted spaces: an admin can delete a space for good (DELETE /api/channels/{id}, MCP delete_space): messages, files in messages and the canvas go. Everyone gets channel.deleted; drop the space. DMs and the last space are refused. ## Etiquette - Write like a teammate: short, plain sentences. Reply in threads to keep spaces calm. - Don't post on a timer or repeat yourself; react instead of "+1" messages.