Erfassungs-Webhook
Der Erfassungs-Webhook macht aus einer Sprachnotiz oder einem kurzen Text eine Aufgabe im Eingang. Jedes Gerät, jede App und jedes Skript, das eine HTTP-Anfrage senden kann, schickt den Text und wahlweise eine Audioaufnahme an Ihren eigenen Cloud-Server. Der Server erstellt die Aufgabe, hängt die Aufnahme an, und Ihre Geräte holen bei der nächsten Synchronisierung beides ab.
Dafür brauchen Sie den selbst gehosteten Cloud-Server. Wenn Sie Mindwtr ohne Server nutzen, erfassen Sie stattdessen über das Teilen-Menü des Telefons oder über Siri.
Der Endpunkt
POST /v1/captureJede Anfrage trägt denselben Bearer-Token wie der Rest der API, in einem Authorization: Bearer <token>-Header. Der Inhalt kann multipart/form-data sein, application/json mit denselben Feldnamen oder text/plain, wobei der gesamte Inhalt die Transkription ist. Nur multipart/form-data kann Audio übertragen: JSON- und Klartext-Anfragen enthalten nur Text, und ein audio-Feld innerhalb von JSON wird ignoriert. Unbekannte Felder werden ignoriert.
Nur Text
curl -X POST https://your-server.example/v1/capture \
-H "Authorization: Bearer $MINDWTR_TOKEN" \
-H "Content-Type: text/plain" \
--data "Call the dentist about the crown"Audio mit Transkription
curl -X POST https://your-server.example/v1/capture \
-H "Authorization: Bearer $MINDWTR_TOKEN" \
-F "transcription=Call the dentist about the crown" \
-F "audio=@note.m4a" \
-F "recordedAt=1756900000000" \
-F "client=Pebble Index 01"Felder
| Feld | Wirkung |
|---|---|
transcription | Der erfasste Text. Die erste Zeile wird zum Aufgabentitel, der vollständige Text wird zur Beschreibung. text und title werden als weitere Namen für dasselbe Feld akzeptiert. |
audio | Die Aufnahme, die an die Aufgabe angehängt wird. Sie wird wie jeder andere Anhang auf Ihre Geräte synchronisiert. Sie wird nur aus einer multipart/form-data-Anfrage gelesen. |
recordedAt | Der Zeitpunkt der Aufnahme, als Millisekunden seit der Epoche oder als ISO-8601-Zeitstempel. Er wird zur Erstellungszeit der Aufgabe, sofern er gültig ist und nicht in der Zukunft liegt. |
client | Eine kurze Bezeichnung für das Gerät oder die App, die die Erfassung gesendet hat. Sie wird angenommen und ignoriert, damit Sender wie die Pebble-App weiter funktionieren. |
captureId | Optional. Eine UUID, die der Sender für diese Erfassung wählt; sie wird zur ID der neuen Aufgabe. Wird derselbe Wert bei einem erneuten Versuch noch einmal gesendet, antwortet der Server mit 200 und "replayed": true und legt nichts an. Ein fehlerhafter Wert wird mit 400 abgelehnt. |
Senden Sie mindestens eines der Felder transcription und audio. Die Aufnahme kann m4a, mp4, aac, mp3, wav, ogg oder webm sein.
Antworten
| Status | Bedeutung |
|---|---|
201 | Die Aufgabe wurde erstellt. Der Antwortinhalt ist die neue Aufgabe. |
400 | Es wurde weder eine Transkription noch eine Audiodatei gesendet. |
401 | Der Token fehlt oder ist falsch. |
413 | Die Anfrage überschreitet das Größenlimit des Servers: entweder eine Audiodatei über dem Anhanglimit oder eine Transkription über dem Textlimit. |
415 | Der Typ der Audiodatei wird nicht unterstützt. |
Nur-Erfassungs-Token
Ein Gerät, das nur erfasst, sollte keinen Token besitzen, der alles in Ihrem Konto lesen, ändern und löschen kann. Ein Nur-Erfassungs-Token ist ein zweites Geheimnis für dasselbe Konto. Der Server akzeptiert ihn bei POST /v1/capture und sonst nirgends.
Erstellen Sie einen mit Ihrem vollen Token. Das label ist optional. Die Antwort zeigt den Token einmal. Der Server speichert ihn nie im Klartext, kopieren Sie ihn also jetzt.
curl -X POST https://your-server.example/v1/capture-tokens \
-H "Authorization: Bearer $MINDWTR_TOKEN" \
-H "Content-Type: application/json" \
--data '{"label":"Pebble ring"}'{
"id": "6f1c2d1e-8a4b-4c3e-9f2a-1b2c3d4e5f60",
"token": "mwc_…",
"label": "Pebble ring",
"createdAt": "2026-09-06T10:12:00.000Z"
}Listen Sie die Token des Kontos auf. Die Antwort enthält id, label und createdAt für jeden Token und keine Geheimnisse.
curl https://your-server.example/v1/capture-tokens \
-H "Authorization: Bearer $MINDWTR_TOKEN"Widerrufen Sie einen über seine id.
curl -X DELETE https://your-server.example/v1/capture-tokens/<id> \
-H "Authorization: Bearer $MINDWTR_TOKEN"- Ein Nur-Erfassungs-Token funktioniert nur bei
POST /v1/capture. Dort verhält er sich genau wie der volle Token: gleiche Inhaltsformate, gleiche Antworten, gleiches Ratenlimit wie das Konto. Jede andere Route antwortet mit403. - Ein Konto kann bis zu 20 Nur-Erfassungs-Token halten.
- Im Allowlist-Modus hört ein Nur-Erfassungs-Token auf zu funktionieren, wenn der volle Token des Kontos von der Allowlist entfernt wird.
Pebble Index 01
Die App des Pebble Index 01 sendet Sprachnotizen genau in diesem Format und erlaubt eigene Anfrage-Header. Deshalb ist kein Zwischencode nötig: Sie füllen nur zwei Einstellungen aus.
- Öffnen Sie die Pebble-App auf Ihrem Telefon und gehen Sie zu den Webhook-Einstellungen für Sprachnotizen
- Setzen Sie die Webhook-URL auf
https://your-server.example/v1/capture, mit Ihrer eigenen Serveradresse anstelle des Beispiels - Fügen Sie einen Anfrage-Header namens
Authorizationmit dem WertBearer <token>hinzu und verwenden Sie einen Nur-Erfassungs-Token aus dem Abschnitt oben. Ihr voller Token funktioniert auch, aber der Nur-Erfassungs-Token ist die sicherere Wahl für ein Gerät, das nur Notizen aufnimmt - Nehmen Sie eine Notiz auf der Uhr auf. Sie erreicht Ihren Eingang bei der nächsten Synchronisierung, mit der Transkription als Aufgabe und der Aufnahme als Anhang
Weitere Geräte und Automatisierungen
Nichts davon ist auf Pebble beschränkt. Alles, was ein HTTP-POST senden kann, funktioniert genauso:
- iOS- und Apple-Watch-Kurzbefehle: eine Aktion Inhalte von URL abfragen, Methode POST, mit dem Header und einem Textfeld. Siehe das Rezept Von der Apple Watch erfassen auf der Seite zu Apple-Kurzbefehlen
- Android-Automatisierungs-Apps wie Tasker: eine HTTP-Request-Aktion mit derselben URL und demselben Header
- Home Assistant: ein
rest_command, das den Text einer Automatisierung oder einer Sprachassistenten-Antwort sendet - Shell-Skripte und Cronjobs: die curl-Befehle von oben, mit dem Token in einer Umgebungsvariablen