Entwickler
REST-API, Ereignisse und MCP
Apps verbinden eure Tools und KI-Agenten mit emuchat. Admins installieren sie unter Verwaltung → Apps, wählen die Channels und bekommen einen Token. Eine App sieht nur diese Channels und darf nur, was ihre Scopes erlauben.
Anmeldung
Jede Anfrage trägt den Token als Bearer-Header:
curl https://app.emuchat.de/api/v1/me -H "Authorization: Bearer emu_…"
Antworten sind JSON. Fehler kommen als {"error": "…", "message": "…"} mit 400, 401, 403, 404, 409 oder 429 (höchstens 120 Anfragen pro Minute und App).
Endpunkte
Basis: https://app.emuchat.de/api/v1
GET /me- Die App hinter dem Token: Name, Scopes, Workspace.
GET /channels- Channels, zu denen die App hinzugefügt wurde (channels:read).
GET /channels/{id}/messages?limit=50&before={id}- Neueste Nachrichten, älteste zuerst; before blättert zurück (messages:read). Statt der Id geht auch der Name.
POST /channels/{id}/messages- Nachricht als App schreiben: {"text": "…", "thread_id": 123} (messages:write).
GET /users- Mitglieder mit Id und Name, ohne E-Mail-Adressen (users:read).
Nachrichten enthalten body (Erwähnungen als <@userId>) und text (Erwähnungen als @Name). Erlaubt ist eine Markdown-Teilmenge: *fett*, _kursiv_, `Code`, Listen, Zitate und Links.
curl -X POST https://app.emuchat.de/api/v1/channels/allgemein/messages \
-H "Authorization: Bearer emu_…" -H "Content-Type: application/json" \
-d '{"text": "Build *grün* ✅"}'Ereignisse
Mit einer Ereignis-Adresse (und dem Scope messages:read) schickt emuchat jede neue Nachricht in den Channels der App per POST – nie die eigenen Nachrichten der App:
{
"type": "message.created",
"workspace_id": "…",
"channel": { "id": "…", "name": "allgemein" },
"message": { "id": 42, "thread_id": null,
"author": { "id": "…", "name": "Kim", "bot": false },
"body": "…", "text": "…", "created_at": "…" }
}Prüft die Herkunft mit dem Signatur-Geheimnis: X-Emuchat-Signature: sha256=HMAC_SHA256(geheimnis, timestamp + "." + body) mit X-Emuchat-Timestamp in Sekunden. Ereignisse gehen nur an öffentliche https-Adressen, mit 5 Sekunden Zeitlimit und ohne Wiederholung.
MCP-Server
Claude und andere Agenten arbeiten über das Model Context Protocol (Streamable HTTP) direkt in emuchat – mit demselben Token und denselben Rechten. Werkzeuge: list_channels, read_messages, search_messages, post_message, list_people.
claude mcp add --transport http emuchat https://app.emuchat.de/api/mcp \ --header "Authorization: Bearer emu_…"
Tickets (mit den Scopes tickets:read und tickets:write): inhouseticket_list_projects, inhouseticket_search_tickets, inhouseticket_get_ticket, inhouseticket_create_ticket, inhouseticket_update_ticket, inhouseticket_add_comment, inhouseticket_toggle_subtask, inhouseticket_get_workload, inhouseticket_list_members – dieselben Namen wie bei inhouseticket, bestehende Anweisungen funktionieren also weiter. Die App erreicht die Projekte, die mit einem ihrer Channels verknüpft sind, und handelt als App: Kommentare und Änderungen tragen ihren Namen.
Ohne eigene App
Nur Meldungen in einen Channel schicken? Dafür reicht ein Workflow mit eingehendem Webhook – ohne Token, mit geheimer Adresse.