API-Dokumentation
Die HTTP-Schnittstellen unter /api, mit denen die StockPilot-App arbeitet — 54 Aufrufe in 9 Bereichen.
Grundlagen
Diese Beschreibung deckt die Schnittstellen ab, die die StockPilot-Web-App für angemeldete Personen nutzt, sowie die öffentlichen Berichts- und Statusendpunkte. Betreiber-, Cron- und interne Routen sind nicht enthalten.
Authentifizierung. Es gibt keine API-Schlüssel und keine Partner-Zugänge mit eigenem Verfahren. Alle geschützten Routen erwarten das Sitzungs-Cookie, das Auth.js nach der Anmeldung setzt (E-Mail und Passwort, optional mit zweitem Faktor, oder Google). Die Sitzung ist ein JWT-Cookie und gilt bis zu 30 Tage; sie endet früher bei Sperrung des Kontos oder nach einem Passwortwechsel. Partner- und Betreiberkonten melden sich genauso an, ihre Rolle steht in der Sitzung.
Ändernde Aufrufe. POST, PUT, PATCH und DELETE prüfen die Herkunft: Aus dem Browser sind nur Aufrufe der eigenen Seite zulässig (sonst 403). Aufrufe ohne Browser-Header, etwa aus Skripten, werden nicht abgewiesen — die Sitzung ist trotzdem nötig.
Ohne Sitzung antworten die Routen uneinheitlich: Manche leiten zum Login weiter (307), andere antworten mit 401. Das steht an jeder Route.
Stabilität. Die Schnittstellen sind für die eigene App gebaut und ändern sich mit ihr; es gibt keine Versionierung im Pfad und keine Zusage zur Abwärtskompatibilität. Für dauerhafte Integrationen von Partnern ist ein eigener, versionierter Zugang mit Schlüsselverwaltung geplant.
Fehler. JSON-Fehler haben die Form { "error": "…" }. Verlässlich ist der HTTP-Status; Text und Sprache sind uneinheitlich (überwiegend deutsch, teils kurze englische Codes wie Forbidden oder Blocked, die die App selbst auswertet). Interne Details werden nicht ausgegeben. Jede Route kann bei unerwarteten Fehlern mit 500 antworten.
Grenzen. Anfragen sind je IP oder Konto begrenzt (429). Hochgeladene Dateien sind auf 8 bis 12 MB begrenzt.
Anmeldung
Anmeldung und Sitzung (Auth.js).
get/api/auth/googleAnmeldung mit Google startenöffentlich
Leitet zu Google weiter (HTTP 302). Nach der Rückkehr legt Auth.js das Sitzungs-Cookie an. Gedacht für Browser, nicht für Skripte.
Abfrageparameter
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| callbackUrl | string | nein | Interner Pfad, zu dem nach der Anmeldung weitergeleitet wird. Fremde Adressen werden ersetzt. |
Antworten
- 302Weiterleitung zu Google.
get/api/auth/sessionAktuelle Sitzung abfragenöffentlich
Auth.js-Standardroute. Liefert die Sitzung der Cookie-Inhaberin oder des Inhabers, ohne Sitzung null. Die Anmelderoute ist je IP auf 20 Anfragen pro Minute begrenzt.
Antworten
- 200Sitzung oder
null.application/jsonFelder
Feld Typ Pflicht Beschreibung Variante 2 object nein user object nein user.id string nein user.email string nein user.name string | null nein user.role "USER" | "PARTNER" | "ADMIN" | "SUPER_ADMIN" nein expires string (date-time) nein - 429Zu viele Anfragen in kurzer Zeit.
application/jsonFelder
Feld Typ Pflicht Beschreibung error string ja retryAfter integer nein Sekunden bis zum nächsten erlaubten Versuch (nur bei IP-Limits der Anmeldung).
get/api/auth/csrfCSRF-Token für die Anmeldung holenöffentlich
Auth.js-Standardroute. Das Token wird für POST /api/auth/callback/credentials und POST /api/auth/signout gebraucht und muss zusammen mit dem gesetzten Cookie zurückgesendet werden.
Antworten
- 200Token.
application/jsonFelder
Feld Typ Pflicht Beschreibung csrfToken string ja - 429Zu viele Anfragen in kurzer Zeit.
application/jsonFelder
Feld Typ Pflicht Beschreibung error string ja retryAfter integer nein Sekunden bis zum nächsten erlaubten Versuch (nur bei IP-Limits der Anmeldung).
post/api/auth/callback/credentialsMit E-Mail und Passwort anmeldenöffentlich
Auth.js-Standardroute. Bei Erfolg setzt die Antwort das Sitzungs-Cookie. Die Anmeldeversuche sind je IP begrenzt. Ist ein zweiter Faktor aktiv, muss zusätzlich code mitgeschickt werden. Das Formular unter /login ist der unterstützte Weg; diese Route ist nicht für dauerhafte Integrationen gedacht.
Anfrage-Inhalt
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| csrfToken | string | ja | |
| string (email) | ja | ||
| password | string (password) | ja | |
| code | string (höchstens 40 Zeichen) | nein | App-Code oder Wiederherstellungscode, nur bei aktivierter Zwei-Faktor-Anmeldung. |
application/x-www-form-urlencoded· erforderlich
Antworten
- 302Weiterleitung; bei Erfolg mit gesetztem Sitzungs-Cookie, sonst zurück zur Anmeldung mit Fehlerhinweis.
- 429Zu viele Anfragen in kurzer Zeit.
application/jsonFelder
Feld Typ Pflicht Beschreibung error string ja retryAfter integer nein Sekunden bis zum nächsten erlaubten Versuch (nur bei IP-Limits der Anmeldung).
post/api/auth/signoutAbmeldenöffentlich
Auth.js-Standardroute. Beendet die Sitzung und löscht das Cookie.
Anfrage-Inhalt
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| csrfToken | string | ja |
application/x-www-form-urlencoded· erforderlich
Antworten
- 302Weiterleitung nach dem Abmelden.
- 429Zu viele Anfragen in kurzer Zeit.
application/jsonFelder
Feld Typ Pflicht Beschreibung error string ja retryAfter integer nein Sekunden bis zum nächsten erlaubten Versuch (nur bei IP-Limits der Anmeldung).
Betrieb
Erreichbarkeit, Browser-Berichte und Feedback — öffentlich.
get/api/healthErreichbarkeit prüfenöffentlich
Für Überwachung von außen. Prüft Datenbank und Zwischenspeicher mit je drei Sekunden Zeitlimit. Öffentlich und ohne Details — keine Versionen, Hosts oder Fehlermeldungen. Je IP höchstens 60 Anfragen pro Minute.
Antworten
- 200Datenbank erreichbar.
statusistokodereingeschraenkt(Zwischenspeicher gestört, App läuft weiter).application/jsonFelder
Feld Typ Pflicht Beschreibung status "ok" | "eingeschraenkt" ja datenbank "ok" | "gestoert" ja cache "ok" | "gestoert" ja - 429Zu viele Anfragen.
application/jsonFelder
Feld Typ Pflicht Beschreibung status "zu-viele-anfragen" nein - 503Datenbank nicht erreichbar (
status: gestoert).application/jsonFelder
Feld Typ Pflicht Beschreibung status "gestoert" nein datenbank "gestoert" nein cache "ok" | "gestoert" nein
post/api/csp-berichtVerstoßbericht der Content Security Policy entgegennehmenöffentlich
Empfänger für report-uri der Browser. Öffentlich und ohne Anmeldung. Je IP (IPv6 je /64) höchstens 30 Berichte pro Stunde; Body höchstens 20 KB. Protokolliert wird nur das Nötigste (verletzte Richtlinie, Ziel-Origin, Seitenpfad ohne Query) — keine IP, keine ganzen Adressen. Die Antwort ist immer 204, auch bei Limit oder ungültigem Inhalt.
Anfrage-Inhalt
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| (Inhalt) | object | ja |
application/csp-reportapplication/reports+jsonapplication/json· erforderlich
Antworten
- 204Entgegengenommen (oder verworfen — das lässt sich von außen nicht unterscheiden).
post/api/fehlerberichtFehler aus dem Browser meldenöffentlich
Die Fehlerseiten der App melden hierher. Nur von der eigenen Seite (Sec-Fetch-Site: same-origin); andere Absender werden still verworfen. Je IP höchstens 20 Berichte pro Stunde; Body höchstens 8 KB. Es werden Nachricht, Pfad, Digest, App-Version und die Personengruppe (Betreiber / angemeldet / nicht angemeldet, aus dem Sitzungs-Cookie) protokolliert — keine Nutzerkennung, keine IP. Die Antwort ist immer 204.
Anfrage-Inhalt
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| nachricht | string | ja | |
| pfad | string | nein | |
| digest | string (höchstens 40 Zeichen) | nein | |
| stapel | string (höchstens 4000 Zeichen) | nein | |
| version | string (höchstens 20 Zeichen) | nein |
application/json· erforderlich
Antworten
- 204Entgegengenommen oder verworfen.
post/api/feedbackFeedback, Fehler- oder Funktionswunsch sendenSitzung optional
Anmeldung ist optional: Mit Sitzung werden Nutzerkennung, aktiver Haushalt und Tarif serverseitig ergänzt — Werte dazu im Body werden ignoriert. Ohne Sitzung ist die Meldung anonym. Begrenzt auf 30 Meldungen je IP (IPv6 je /64) und Stunde; Body höchstens 16 KB.
Nur aus der eigenen Seite aufrufbar: Browser-Anfragen von fremden Seiten beantwortet die App mit 403.
Anfrage-Inhalt
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| type | "BUG" | "FEATURE" | "FEEDBACK" | "SUPPORT" | nein | |
| message | string (mind. 1 Zeichen, höchstens 2000 Zeichen) | ja | |
| url | string | null (höchstens 500 Zeichen) | nein | Seitenpfad ohne Kennungen. |
| userAgent | string | null (höchstens 500 Zeichen) | nein | |
| screenWidth | integer | null | nein | |
| screenHeight | integer | null | nein | |
| appVersion | string | null (höchstens 30 Zeichen) | nein | |
| fehlercode | string | null | nein | Fehlercode der Fehlerseite (Muster [A-Za-z0-9_-]{1,40}); andere Werte werden ignoriert. |
| metadata | object | null | nein | Flache Gerätedaten: höchstens 20 Einträge, Schlüssel bis 40 und Texte bis 200 Zeichen. Verschachteltes fällt still weg. |
application/json· erforderlich
Antworten
- 201Gespeichert.
application/jsonFelder
Feld Typ Pflicht Beschreibung success true ja id string ja - 400Kein gültiges JSON.
application/json - 403Die Anfrage kam nicht von StockPilot selbst (Schutz vor fremd ausgelösten Anfragen). Wird bei ändernden Aufrufen aus dem Browser mit fremdem Origin ausgelöst.
application/json - 413Die Meldung ist zu lang.
application/json - 422Ungültige Eingabe (Text leer oder zu lang).
application/json - 429Zu viele Meldungen in kurzer Zeit.
application/json
Medien
Bilder und Dateien, die nur nach Zugriffsprüfung ausgeliefert werden.
get/api/bild/{art}/{id}Profil- oder Titelbild abrufenSitzung nötig
Liefert ein in der Datenbank gespeichertes Bild als Datei. Profilbilder (avatar) nur mit Sitzung und nicht zwischen Personen mit Blockade; Titelbilder (cover) nur für Mitglieder des Haushalts. Der Parameter v muss zum aktuellen Bild passen — die Adresse lässt sich nicht aus einer Kennung allein bilden. Cache: private, no-cache mit ETag (Rückfrage mit If-None-Match ergibt 304).
Pfadparameter
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| art | string | ja | avatar oder cover. |
| id | string | ja | Nutzerkennung (avatar) oder Haushaltskennung (cover). |
Abfrageparameter
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| v | string | ja | Versionskennung aus der Bildadresse, die die App ausliefert. |
Antworten
- 200Das Bild.
image/jpegimage/pngimage/webpimage/gif - 304Unverändert (ETag passt).
- 401Keine gültige Sitzung.
application/jsontext/plain - 404Kein Bild, falsche Version, kein Zugriff (Text
Not Found).text/plain
get/api/receipts/{id}/imageKassenbon-Bild abrufenSitzung nötig
Liefert das gespeicherte Bild eines Kassenbons — nur an die Eigentümerin oder den Eigentümer und an berechtigte Betreiber. Antwort mit Cache-Control: private, no-store.
Pfadparameter
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| id | string | ja | Kennung des Kassenbons. |
Antworten
- 200Das Bild.
image/jpegimage/pngimage/webp - 401Keine gültige Sitzung.
application/jsontext/plain - 403Kein Zugriff (keine Teilnahme, Blockade oder Rolle).
application/json - 404Nicht gefunden — oder für die angemeldete Person nicht sichtbar.
application/json
post/api/receipts/detectPapierbereich eines Kassenbon-Fotos erkennenSitzung nötig
Findet die Ecken des Bons im Foto, damit die App es zuschneiden kann. Das Bild wird nur zur Berechnung gelesen und nicht gespeichert. Tageslimit: 100 Erkennungen je Konto. Datei höchstens 10 MB.
Nur aus der eigenen Seite aufrufbar: Browser-Anfragen von fremden Seiten beantwortet die App mit 403.
Anfrage-Inhalt
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| file | string (binary) | ja | Foto des Bons, höchstens 10 MB. |
multipart/form-data· erforderlich
Antworten
- 200Ecken im Uhrzeigersinn ab links oben, in Pixeln des (ausgerichteten) Bilds. Wird kein Papier gefunden, ist es das ganze Bild.
bonAnzahlab 2: Mehrere Bons liegen nebeneinander (höchstens 4), die Ecken umfassen dann nur den breitesten. Bons untereinander zählen hier nicht mit; sie trennt erst das Auslesen, wenn bei jedem die Summe aufgeht.application/jsonFelder
Feld Typ Pflicht Beschreibung corners object[] ja corners[].x number ja corners[].y number ja imageWidth integer ja imageHeight integer ja bonAnzahl integer (≥ 1, ≤ 4) ja - 400Keine Datei.
application/json - 401Keine gültige Sitzung.
application/jsontext/plain - 403Die Anfrage kam nicht von StockPilot selbst (Schutz vor fremd ausgelösten Anfragen). Wird bei ändernden Aufrufen aus dem Browser mit fremdem Origin ausgelöst.
application/json - 413Datei zu groß.
application/json - 429Das Tageslimit für diese Art von Inhalt ist erreicht. Morgen geht es weiter.
application/json - 500Erkennung fehlgeschlagen.
application/json
Uploads
Bilder hochladen.
post/api/uploads/communityBild für einen Community-Beitrag hochladenSitzung nötig
Speichert das Bild neu kodiert und liefert den Dateinamen, der beim Erstellen oder Bearbeiten eines Beitrags oder Kommentars als imageFilename mitgeschickt wird. Voraussetzung: bestätigte E-Mail-Adresse und ein angelegter Haushalt. Tageslimit: 30 Bilder je Konto.
Nur aus der eigenen Seite aufrufbar: Browser-Anfragen von fremden Seiten beantwortet die App mit 403.
Anfrage-Inhalt
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| file | string (binary) | ja | JPEG, PNG oder WebP, höchstens 12 MB. Der Inhalt wird geprüft (nicht nur der gemeldete Typ), neu kodiert und verliert dabei alle Metadaten wie Aufnahmeort und Kamera. |
multipart/form-data· erforderlich
Antworten
- 200Gespeichert.
application/jsonFelder
Feld Typ Pflicht Beschreibung filename string ja url string ja - 400Datei fehlt, falscher Typ (nur JPEG, PNG, WebP) oder Pflichtfeld fehlt.
application/json - 401Keine gültige Sitzung.
application/jsontext/plain - 403E-Mail nicht bestätigt oder kein Haushalt angelegt.
application/json - 413Datei oder Anfrage zu groß.
application/json - 429Das Tageslimit für diese Art von Inhalt ist erreicht. Morgen geht es weiter.
application/json
post/api/uploads/marketplaceBild zu einem eigenen Marktplatz-Angebot hochladenSitzung nötig
Höchstens 5 Bilder je Angebot. Neue Bilder können zur Prüfung zurückgehalten werden (zurPruefung). Tageslimit: 60 Bilder je Konto.
Nur aus der eigenen Seite aufrufbar: Browser-Anfragen von fremden Seiten beantwortet die App mit 403.
Anfrage-Inhalt
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| file | string (binary) | ja | JPEG, PNG oder WebP, höchstens 12 MB. Der Inhalt wird geprüft (nicht nur der gemeldete Typ), neu kodiert und verliert dabei alle Metadaten wie Aufnahmeort und Kamera. |
| listingId | string | ja | Kennung des eigenen Angebots. |
multipart/form-data· erforderlich
Antworten
- 200Gespeichert.
application/jsonFelder
Feld Typ Pflicht Beschreibung id string ja url string ja zurPruefung boolean ja - 400Datei fehlt, falscher Typ (nur JPEG, PNG, WebP) oder Pflichtfeld fehlt.
application/json - 401Keine gültige Sitzung.
application/jsontext/plain - 403Die Anfrage kam nicht von StockPilot selbst (Schutz vor fremd ausgelösten Anfragen). Wird bei ändernden Aufrufen aus dem Browser mit fremdem Origin ausgelöst.
application/json - 404Angebot nicht gefunden oder nicht das eigene.
application/json - 413Datei oder Anfrage zu groß.
application/json - 429Das Tageslimit für diese Art von Inhalt ist erreicht. Morgen geht es weiter.
application/json - 500Hochladen fehlgeschlagen.
application/json
delete/api/uploads/marketplaceBild eines eigenen Marktplatz-Angebots entfernenSitzung nötig
Nur aus der eigenen Seite aufrufbar: Browser-Anfragen von fremden Seiten beantwortet die App mit 403.
Abfrageparameter
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| imageId | string | ja | Kennung des Bilds. |
Antworten
- 200Entfernt.
application/jsonFelder
Feld Typ Pflicht Beschreibung ok true ja - 400
imageIdfehlt.application/json - 401Keine gültige Sitzung.
application/jsontext/plain - 403Die Anfrage kam nicht von StockPilot selbst (Schutz vor fremd ausgelösten Anfragen). Wird bei ändernden Aufrufen aus dem Browser mit fremdem Origin ausgelöst.
application/json - 404Bild nicht gefunden oder nicht das eigene.
application/json - 500Entfernen fehlgeschlagen.
application/json
post/api/uploads/product-correctionsBild für einen Produktkorrekturvorschlag hochladenSitzung nötig
Nutzerinnen und Nutzer schlagen Korrekturen vor, Betreiber entscheiden darüber. Nicht verwendete Bilder werden nach sieben Tagen gelöscht. Tageslimit: 30 Bilder je Konto.
Voraussetzung: bestätigte E-Mail-Adresse (sonst 403 „E-Mail nicht bestätigt“).
Nur aus der eigenen Seite aufrufbar: Browser-Anfragen von fremden Seiten beantwortet die App mit 403.
Anfrage-Inhalt
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| file | string (binary) | ja | JPEG, PNG oder WebP, höchstens 12 MB. Der Inhalt wird geprüft (nicht nur der gemeldete Typ), neu kodiert und verliert dabei alle Metadaten wie Aufnahmeort und Kamera. |
| barcode | string | ja | Barcode des Produkts. |
multipart/form-data· erforderlich
Antworten
- 200Gespeichert.
application/jsonFelder
Feld Typ Pflicht Beschreibung url string (uri) ja - 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307,
Location: /login— mitcallbackUrl, wenn die Anfrage von einer eigenen Seite kam). Es gibt keinen 401 mit Fehlertext. Programmatische Clients sollten Weiterleitungen nicht folgen und die Sitzung erneuern. - 400Datei fehlt, falscher Typ (nur JPEG, PNG, WebP) oder Pflichtfeld fehlt.
application/json - 403E-Mail-Adresse nicht bestätigt (
{ "error": "E-Mail nicht bestätigt" }).application/json - 413Datei oder Anfrage zu groß.
application/json - 429Das Tageslimit für diese Art von Inhalt ist erreicht. Morgen geht es weiter.
application/json
post/api/uploads/recipesFoto zu einem Rezept hochladenSitzung nötig
recipeType bestimmt, wohin das Foto gehört: user = eigenes Rezept (Standard), community-user = freigegebenes Rezept einer anderen Person, system = Systemrezept. Höchstens 3 Fotos je Rezept. Tageslimit: 30 Fotos je Konto.
Nur aus der eigenen Seite aufrufbar: Browser-Anfragen von fremden Seiten beantwortet die App mit 403.
Anfrage-Inhalt
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| file | string (binary) | ja | JPEG, PNG oder WebP, höchstens 12 MB. Der Inhalt wird geprüft (nicht nur der gemeldete Typ), neu kodiert und verliert dabei alle Metadaten wie Aufnahmeort und Kamera. |
| recipeId | string (höchstens 200 Zeichen) | ja | Kennung des Rezepts (bei Systemrezepten der Slug). |
| recipeType | "user" | "community-user" | "system" | nein | |
| altText | string (höchstens 300 Zeichen) | nein | Alternativtext für das Foto. |
multipart/form-data· erforderlich
Antworten
- 200Gespeichert.
application/jsonFelder
Feld Typ Pflicht Beschreibung id string ja url string ja - 400Datei oder
recipeIdfehlt, ungültigerrecipeType, falscher Dateityp oder schon 3 Fotos am Rezept.application/json - 401Keine gültige Sitzung.
application/jsontext/plain - 403Rezept nicht für die Community freigegeben.
application/json - 404Rezept nicht gefunden.
application/json - 413Datei oder Anfrage zu groß.
application/json - 429Das Tageslimit für diese Art von Inhalt ist erreicht. Morgen geht es weiter.
application/json
Vorrat und Einkauf
Export und Live-Aktualisierung.
get/api/inventory/exportVorrat des aktiven Haushalts als CSV exportierenSitzung nötig
Alle Artikel, die nicht verbraucht sind. UTF-8 mit Byte-Order-Mark, Zeilenende CRLF, jede Zelle in Anführungszeichen; Zellen, die wie Formeln beginnen, werden entschärft. Spalten: Name, Marke, Kategorie, Menge, Einheit, Lagerort, MHD (Tage), MHD-Datum. Antwort mit Cache-Control: private, no-store.
Antworten
- 200CSV-Datei als Download (
stockpilot-vorrat-JJJJ-MM-TT.csv).text/csv - 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307,
Location: /login— mitcallbackUrl, wenn die Anfrage von einer eigenen Seite kam). Es gibt keinen 401 mit Fehlertext. Programmatische Clients sollten Weiterleitungen nicht folgen und die Sitzung erneuern. - 400Kein aktiver Haushalt (Text
Kein aktiver Haushalt).text/plain - 500Export fehlgeschlagen (Text
Fehler beim Export).text/plain
get/api/shopping-list/streamÄnderungen der Einkaufsliste live empfangen (Server-Sent Events)Sitzung nötig
Offener Ereignisstrom für die Einkaufsliste eines Haushalts. Das erste Ereignis connected trägt { "householdId": … }; danach kommt bei jeder Änderung ein Ereignis update mit einem Zeitstempel als Daten. Alle 25 Sekunden folgt ein Herzschlag. Höchstens 8 gleichzeitige Ströme je Person — der älteste wird geschlossen. Die Mitgliedschaft wird bei jedem Herzschlag erneut geprüft. Steht der Ereigniskanal nicht zur Verfügung, kommen keine Ereignisse; Clients sollten dann selbst nachladen. Fehlertexte sind reiner Text.
Abfrageparameter
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| householdId | string (höchstens 64 Zeichen) | ja | Kennung des Haushalts, dem die Person angehören muss (höchstens 64 Zeichen). |
Antworten
- 200Ereignisstrom.
text/event-stream - 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307,
Location: /login— mitcallbackUrl, wenn die Anfrage von einer eigenen Seite kam). Es gibt keinen 401 mit Fehlertext. Programmatische Clients sollten Weiterleitungen nicht folgen und die Sitzung erneuern. - 400
householdIdfehlt (TextMissing householdId).text/plain - 403Kein Mitglied des Haushalts (Text
Forbidden).text/plain - 503Datenbank nicht erreichbar (Text
Service unavailable).text/plain
Chat
Unterhaltungen zwischen Personen der Nachbarschaft und im Marktplatz.
get/api/messages/conversationsUnterhaltungen und offene Nachbarschaftsanfragen auflistenSitzung nötig
Antworten
- 200Liste.
application/jsonFelder
Feld Typ Pflicht Beschreibung conversations Unterhaltung[] ja conversations[].id string | null nein Leer, solange es mit dieser Person noch keine Unterhaltung gibt. conversations[].otherUserId string ja conversations[].otherUserName string ja conversations[].otherUserAvatarUrl string | null nein conversations[].otherLastSeenAt string | null (date-time) nein conversations[].listingId string | null nein conversations[].listingTitle string | null nein conversations[].isFriend boolean nein conversations[].lastMessage string | null nein conversations[].lastMessageKind "photo" | "gif" | "location" | "voice" | null nein conversations[].lastMessageAt string | null (date-time) nein conversations[].lastMessageIsOwn boolean nein conversations[].lastMessageReadAt string | null (date-time) nein conversations[].unreadCount integer (≥ 0) ja conversations[].blockedByMe boolean ja conversations[].blockedMe boolean ja incomingRequests NachbarAnfrage[] ja incomingRequests[].id string ja incomingRequests[].requesterId string ja incomingRequests[].requesterName string ja incomingRequests[].requesterAvatarUrl string | null nein incomingRequests[].message string ja incomingRequests[].createdAt string (date-time) ja - 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307,
Location: /login— mitcallbackUrl, wenn die Anfrage von einer eigenen Seite kam). Es gibt keinen 401 mit Fehlertext. Programmatische Clients sollten Weiterleitungen nicht folgen und die Sitzung erneuern.
get/api/messages/unreadAnzahl ungelesener NachrichtenSitzung optional
Ohne Sitzung (und bei Fehlern) antwortet die Route mit { "count": 0 } statt mit einer Weiterleitung.
Antworten
- 200Anzahl.
application/jsonFelder
Feld Typ Pflicht Beschreibung count integer (≥ 0) ja
get/api/messages/{conversationId}Nachrichten einer Unterhaltung ladenSitzung nötig
Seitenweise, immer aufsteigend nach Zeit. Ohne Parameter die jüngsten 50. vor lädt die 50 davor, nach neuere ab dieser Nachricht (mit kleiner Überlappung), ids frischt einzelne Nachrichten auf (höchstens 100; kombinierbar mit nach). vor ist nicht mit nach/ids kombinierbar. Das Laden markiert eingehende Nachrichten als gelesen (Sprachnachrichten erst nach dem Anhören).
Pfadparameter
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| conversationId | string | ja | Kennung der Unterhaltung. Nur Teilnehmende haben Zugriff. |
Abfrageparameter
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| vor | string | nein | Kennung einer Nachricht; liefert die davor. |
| nach | string | nein | Kennung einer Nachricht; liefert neuere. |
| ids | string | nein | Kommagetrennte Nachrichtenkennungen zum Auffrischen. |
Antworten
- 200Seite.
application/jsonFelder
Feld Typ Pflicht Beschreibung messages ChatNachricht[] ja Aufsteigend nach Zeit. messages[].id string ja messages[].content string ja Text, höchstens 500 Zeichen. Bei Foto-Nachrichten die Bildunterschrift (bis 2000 Zeichen), bei Sprach-, Standort- und Sticker-Nachrichten leer. messages[].createdAt string (date-time) ja messages[].readAt string | null (date-time) nein Wann die andere Seite die Nachricht gelesen hat. messages[].isOwn boolean ja Stammt die Nachricht von der angemeldeten Person? messages[].senderId string ja messages[].senderName string ja messages[].imageUrl string | null nein Adresse eines Chat-Fotos ( /uploads/messages/…, nur für Teilnehmende abrufbar).messages[].audioUrl string | null nein Adresse einer Sprachnachricht ( /uploads/messages/…).messages[].durationSeconds integer | null nein messages[].location null | object nein Vom Absender bewusst geteilter Standort einer Standort-Nachricht. messages[].location.lat number ja messages[].location.lng number ja messages[].gifId string | null nein messages[].editedAt string | null (date-time) nein messages[].isDeleted boolean ja messages[].reactions object[] ja messages[].reactions[].emoji string ja messages[].reactions[].userId string ja hasMore boolean ja Gibt es jenseits dieser Seite noch Nachrichten? - 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307,
Location: /login— mitcallbackUrl, wenn die Anfrage von einer eigenen Seite kam). Es gibt keinen 401 mit Fehlertext. Programmatische Clients sollten Weiterleitungen nicht folgen und die Sitzung erneuern. - 400
vormitnachoderidskombiniert.application/json - 403Keine Teilnahme an der Unterhaltung.
application/json - 404Die Bezugsnachricht ist nicht (mehr) sichtbar.
application/json
post/api/messages/{conversationId}Textnachricht sendenSitzung nötig
Mit clientId ist das Senden wiederholbar: Kam die Antwort nicht an und der Client sendet erneut, liefert der zweite Aufruf dieselbe Nachricht statt einer zweiten. Läuft der erste Aufruf noch, antwortet die Route 409. Tageslimit: 1000 Nachrichten je Konto (gilt gemeinsam für Text, Sticker und Standorte).
Voraussetzung: bestätigte E-Mail-Adresse (sonst 403 „E-Mail nicht bestätigt“).
Nur aus der eigenen Seite aufrufbar: Browser-Anfragen von fremden Seiten beantwortet die App mit 403.
Pfadparameter
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| conversationId | string | ja | Kennung der Unterhaltung. Nur Teilnehmende haben Zugriff. |
Anfrage-Inhalt
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| content | string (mind. 1 Zeichen, höchstens 500 Zeichen) | ja | |
| clientId | string | nein | Vom Client je Nachricht erzeugte Kennung für sichere Wiederholung. |
application/json· erforderlich
Antworten
- 200Gesendet.
application/jsonFelder
Feld Typ Pflicht Beschreibung message object ja message.id string ja message.createdAt string (date-time) ja - 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307,
Location: /login— mitcallbackUrl, wenn die Anfrage von einer eigenen Seite kam). Es gibt keinen 401 mit Fehlertext. Programmatische Clients sollten Weiterleitungen nicht folgen und die Sitzung erneuern. - 400Ungültige Eingabe (Inhalt, Datei, Dauer, Koordinaten) oder Gespräch durch Blockade gesperrt.
application/json - 403Keine Teilnahme an der Unterhaltung — oder E-Mail-Adresse nicht bestätigt.
application/json - 409Dieselbe
clientIdwird gerade noch gespeichert.application/json - 429Das Tageslimit für diese Art von Inhalt ist erreicht. Morgen geht es weiter.
application/json
delete/api/messages/{conversationId}/{messageId}Eigene Nachricht löschenSitzung nötig
Nur die eigene Nachricht und nur in den ersten 15 Minuten. Sie bleibt für alle als gelöscht markiert (isDeleted) sichtbar; Text, Bild, Audio, Standort und Sticker werden entfernt. Wiederholtes Löschen ist unschädlich.
Voraussetzung: bestätigte E-Mail-Adresse (sonst 403 „E-Mail nicht bestätigt“).
Nur aus der eigenen Seite aufrufbar: Browser-Anfragen von fremden Seiten beantwortet die App mit 403.
Pfadparameter
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| conversationId | string | ja | Kennung der Unterhaltung. Nur Teilnehmende haben Zugriff. |
| messageId | string | ja | Kennung der Nachricht innerhalb der Unterhaltung. |
Antworten
- 200Gelöscht.
application/jsonFelder
Feld Typ Pflicht Beschreibung message object ja message.id string nein - 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307,
Location: /login— mitcallbackUrl, wenn die Anfrage von einer eigenen Seite kam). Es gibt keinen 401 mit Fehlertext. Programmatische Clients sollten Weiterleitungen nicht folgen und die Sitzung erneuern. - 403Keine Teilnahme, Blockade, nicht die eigene Nachricht, 15-Minuten-Fenster abgelaufen oder E-Mail nicht bestätigt.
application/json - 404Nicht gefunden — oder für die angemeldete Person nicht sichtbar.
application/json
patch/api/messages/{conversationId}/{messageId}Eigene Nachricht bearbeitenSitzung nötig
Nur eigene Nachrichten, außer Sprach- und Standortnachrichten, und nur in den ersten 15 Minuten nach dem Senden (danach 403).
Voraussetzung: bestätigte E-Mail-Adresse (sonst 403 „E-Mail nicht bestätigt“).
Nur aus der eigenen Seite aufrufbar: Browser-Anfragen von fremden Seiten beantwortet die App mit 403.
Pfadparameter
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| conversationId | string | ja | Kennung der Unterhaltung. Nur Teilnehmende haben Zugriff. |
| messageId | string | ja | Kennung der Nachricht innerhalb der Unterhaltung. |
Anfrage-Inhalt
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| content | string (mind. 1 Zeichen, höchstens 500 Zeichen) | ja |
application/json· erforderlich
Antworten
- 200Bearbeitet.
application/jsonFelder
Feld Typ Pflicht Beschreibung message object ja message.id string nein message.editedAt string (date-time) nein - 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307,
Location: /login— mitcallbackUrl, wenn die Anfrage von einer eigenen Seite kam). Es gibt keinen 401 mit Fehlertext. Programmatische Clients sollten Weiterleitungen nicht folgen und die Sitzung erneuern. - 400Ungültiger Inhalt, nicht bearbeitbar (Sprache, Standort) oder schon gelöscht.
application/json - 403Keine Teilnahme, Blockade, nicht die eigene Nachricht, 15-Minuten-Fenster abgelaufen oder E-Mail nicht bestätigt.
application/json - 404Nicht gefunden — oder für die angemeldete Person nicht sichtbar.
application/json
post/api/messages/{conversationId}/{messageId}/listenSprachnachricht als angehört meldenSitzung nötig
Setzt die Lesebestätigung einer erhaltenen Sprachnachricht (idempotent).
Nur aus der eigenen Seite aufrufbar: Browser-Anfragen von fremden Seiten beantwortet die App mit 403.
Pfadparameter
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| conversationId | string | ja | Kennung der Unterhaltung. Nur Teilnehmende haben Zugriff. |
| messageId | string | ja | Kennung der Nachricht innerhalb der Unterhaltung. |
Antworten
- 200Gemeldet.
application/jsonFelder
Feld Typ Pflicht Beschreibung message object ja message.messageId string nein - 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307,
Location: /login— mitcallbackUrl, wenn die Anfrage von einer eigenen Seite kam). Es gibt keinen 401 mit Fehlertext. Programmatische Clients sollten Weiterleitungen nicht folgen und die Sitzung erneuern. - 400Keine Sprachnachricht.
application/json - 403Keine Teilnahme oder Blockade.
application/json - 404Nicht gefunden — oder für die angemeldete Person nicht sichtbar.
application/json
put/api/messages/{conversationId}/{messageId}/reactionMit Emoji auf eine Nachricht reagierenSitzung nötig
Setzt oder ersetzt die eigene Reaktion (eine je Person und Nachricht).
Voraussetzung: bestätigte E-Mail-Adresse (sonst 403 „E-Mail nicht bestätigt“).
Nur aus der eigenen Seite aufrufbar: Browser-Anfragen von fremden Seiten beantwortet die App mit 403.
Pfadparameter
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| conversationId | string | ja | Kennung der Unterhaltung. Nur Teilnehmende haben Zugriff. |
| messageId | string | ja | Kennung der Nachricht innerhalb der Unterhaltung. |
Anfrage-Inhalt
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| emoji | string (höchstens 24 Zeichen) | ja |
application/json· erforderlich
Antworten
- 200Gesetzt.
application/jsonFelder
Feld Typ Pflicht Beschreibung reaction object ja reaction.messageId string nein reaction.emoji string nein - 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307,
Location: /login— mitcallbackUrl, wenn die Anfrage von einer eigenen Seite kam). Es gibt keinen 401 mit Fehlertext. Programmatische Clients sollten Weiterleitungen nicht folgen und die Sitzung erneuern. - 400Ungültiges Emoji oder Nachricht gelöscht.
application/json - 403Keine Teilnahme, Blockade oder E-Mail nicht bestätigt.
application/json - 404Nicht gefunden — oder für die angemeldete Person nicht sichtbar.
application/json
delete/api/messages/{conversationId}/{messageId}/reactionEigene Reaktion entfernenSitzung nötig
Nur aus der eigenen Seite aufrufbar: Browser-Anfragen von fremden Seiten beantwortet die App mit 403.
Pfadparameter
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| conversationId | string | ja | Kennung der Unterhaltung. Nur Teilnehmende haben Zugriff. |
| messageId | string | ja | Kennung der Nachricht innerhalb der Unterhaltung. |
Antworten
- 200Entfernt (auch, wenn keine vorhanden war).
application/jsonFelder
Feld Typ Pflicht Beschreibung reaction object ja reaction.messageId string nein - 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307,
Location: /login— mitcallbackUrl, wenn die Anfrage von einer eigenen Seite kam). Es gibt keinen 401 mit Fehlertext. Programmatische Clients sollten Weiterleitungen nicht folgen und die Sitzung erneuern. - 403Keine Teilnahme oder Blockade.
application/json - 404Nicht gefunden — oder für die angemeldete Person nicht sichtbar.
application/json
get/api/messages/{conversationId}/blockBlockadestand einer UnterhaltungSitzung nötig
Aus Sicht der angemeldeten Person. Ob das Gegenüber blockiert hat, verrät die Antwort nicht eigens — nur, ob die Unterhaltung gesperrt ist.
Pfadparameter
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| conversationId | string | ja | Kennung der Unterhaltung. Nur Teilnehmende haben Zugriff. |
Antworten
- 200Stand.
application/jsonFelder
Feld Typ Pflicht Beschreibung blockedByMe boolean ja gesperrt boolean ja - 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307,
Location: /login— mitcallbackUrl, wenn die Anfrage von einer eigenen Seite kam). Es gibt keinen 401 mit Fehlertext. Programmatische Clients sollten Weiterleitungen nicht folgen und die Sitzung erneuern. - 404Keine Teilnahme an der Unterhaltung.
application/json
post/api/messages/{conversationId}/gifSticker sendenSitzung nötig
Tageslimit gemeinsam mit Textnachrichten (1000 je Konto).
Voraussetzung: bestätigte E-Mail-Adresse (sonst 403 „E-Mail nicht bestätigt“).
Nur aus der eigenen Seite aufrufbar: Browser-Anfragen von fremden Seiten beantwortet die App mit 403.
Pfadparameter
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| conversationId | string | ja | Kennung der Unterhaltung. Nur Teilnehmende haben Zugriff. |
Anfrage-Inhalt
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| gifId | string | ja | Kennung eines Stickers aus dem Katalog der App. |
application/json· erforderlich
Antworten
- 200Gesendet.
application/jsonFelder
Feld Typ Pflicht Beschreibung message object ja message.id string ja message.createdAt string (date-time) ja - 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307,
Location: /login— mitcallbackUrl, wenn die Anfrage von einer eigenen Seite kam). Es gibt keinen 401 mit Fehlertext. Programmatische Clients sollten Weiterleitungen nicht folgen und die Sitzung erneuern. - 400Ungültige Eingabe (Inhalt, Datei, Dauer, Koordinaten) oder Gespräch durch Blockade gesperrt.
application/json - 403Keine Teilnahme an der Unterhaltung — oder E-Mail-Adresse nicht bestätigt.
application/json - 429Das Tageslimit für diese Art von Inhalt ist erreicht. Morgen geht es weiter.
application/json
post/api/messages/{conversationId}/locationStandort in den Chat sendenSitzung nötig
Teilt einen von der Person gewählten Punkt als Nachricht — das ist eine bewusste Einzelaktion, kein Live-Standort. Tageslimit gemeinsam mit Textnachrichten (1000 je Konto).
Voraussetzung: bestätigte E-Mail-Adresse (sonst 403 „E-Mail nicht bestätigt“).
Nur aus der eigenen Seite aufrufbar: Browser-Anfragen von fremden Seiten beantwortet die App mit 403.
Pfadparameter
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| conversationId | string | ja | Kennung der Unterhaltung. Nur Teilnehmende haben Zugriff. |
Anfrage-Inhalt
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| lat | number (≥ -90, ≤ 90) | ja | |
| lng | number (≥ -180, ≤ 180) | ja |
application/json· erforderlich
Antworten
- 200Gesendet.
application/jsonFelder
Feld Typ Pflicht Beschreibung message object ja message.id string ja message.createdAt string (date-time) ja - 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307,
Location: /login— mitcallbackUrl, wenn die Anfrage von einer eigenen Seite kam). Es gibt keinen 401 mit Fehlertext. Programmatische Clients sollten Weiterleitungen nicht folgen und die Sitzung erneuern. - 400Ungültige Eingabe (Inhalt, Datei, Dauer, Koordinaten) oder Gespräch durch Blockade gesperrt.
application/json - 403Keine Teilnahme an der Unterhaltung — oder E-Mail-Adresse nicht bestätigt.
application/json - 429Das Tageslimit für diese Art von Inhalt ist erreicht. Morgen geht es weiter.
application/json
post/api/messages/{conversationId}/muteUnterhaltung stumm schalten oder wieder lautSitzung nötig
Wer nicht teilnimmt, ändert nichts und bekommt ok: false — kein 403, damit die Antwort nicht verrät, ob es die Unterhaltung gibt.
Nur aus der eigenen Seite aufrufbar: Browser-Anfragen von fremden Seiten beantwortet die App mit 403.
Pfadparameter
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| conversationId | string | ja | Kennung der Unterhaltung. Nur Teilnehmende haben Zugriff. |
Anfrage-Inhalt
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| stumm | boolean | ja |
application/json· erforderlich
Antworten
- 200Ergebnis.
application/jsonFelder
Feld Typ Pflicht Beschreibung ok boolean ja - 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307,
Location: /login— mitcallbackUrl, wenn die Anfrage von einer eigenen Seite kam). Es gibt keinen 401 mit Fehlertext. Programmatische Clients sollten Weiterleitungen nicht folgen und die Sitzung erneuern. - 400
stummfehlt oder ist kein Wahrheitswert.application/json - 403Die Anfrage kam nicht von StockPilot selbst (Schutz vor fremd ausgelösten Anfragen). Wird bei ändernden Aufrufen aus dem Browser mit fremdem Origin ausgelöst.
application/json
post/api/messages/{conversationId}/photoFoto sendenSitzung nötig
Das Foto wird zu WebP umgerechnet und ohne Metadaten gespeichert. Abrufbar nur für Teilnehmende (/uploads/messages/…). Tageslimit: 100 Fotos je Konto.
Voraussetzung: bestätigte E-Mail-Adresse (sonst 403 „E-Mail nicht bestätigt“).
Nur aus der eigenen Seite aufrufbar: Browser-Anfragen von fremden Seiten beantwortet die App mit 403.
Pfadparameter
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| conversationId | string | ja | Kennung der Unterhaltung. Nur Teilnehmende haben Zugriff. |
Anfrage-Inhalt
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| photo | string (binary) | ja | Bild, höchstens 12 MB. |
| caption | string | nein | Bildunterschrift. |
multipart/form-data· erforderlich
Antworten
- 200Gesendet.
application/jsonFelder
Feld Typ Pflicht Beschreibung message object ja message.id string ja message.createdAt string (date-time) ja - 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307,
Location: /login— mitcallbackUrl, wenn die Anfrage von einer eigenen Seite kam). Es gibt keinen 401 mit Fehlertext. Programmatische Clients sollten Weiterleitungen nicht folgen und die Sitzung erneuern. - 400Ungültige Eingabe (Inhalt, Datei, Dauer, Koordinaten) oder Gespräch durch Blockade gesperrt.
application/json - 403Keine Teilnahme an der Unterhaltung — oder E-Mail-Adresse nicht bestätigt.
application/json - 413Datei oder Anfrage zu groß.
application/json - 429Das Tageslimit für diese Art von Inhalt ist erreicht. Morgen geht es weiter.
application/json - 500Speichern fehlgeschlagen.
application/json
get/api/messages/{conversationId}/presenceZuletzt gesehen und grobe Entfernung des GegenübersSitzung nötig
Bei Blockade (in eine der beiden Richtungen) oder ohne Gegenüber sind beide Werte null. distanceBucket ist zusätzlich null, wenn nicht beide Personen in der Nachbarschaft sichtbar sind; die Entfernung kommt als grobe Stufe.
Pfadparameter
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| conversationId | string | ja | Kennung der Unterhaltung. Nur Teilnehmende haben Zugriff. |
Antworten
- 200Anwesenheit.
application/jsonFelder
Feld Typ Pflicht Beschreibung lastSeenAt string | null (date-time) ja distanceBucket null | "<1" | "1-3" | "3-10" | ">10" ja - 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307,
Location: /login— mitcallbackUrl, wenn die Anfrage von einer eigenen Seite kam). Es gibt keinen 401 mit Fehlertext. Programmatische Clients sollten Weiterleitungen nicht folgen und die Sitzung erneuern. - 403Keine Teilnahme an der Unterhaltung.
application/json
get/api/messages/{conversationId}/streamEreignisse einer Unterhaltung live empfangen (Server-Sent Events)Sitzung nötig
Offener Ereignisstrom. Ereignisse: connected ({ conversationId }), message ({ kind, messageId?, readerId? } — nur Kennungen, den Inhalt holt der Client über GET /api/messages/{conversationId}), typing ({ senderId }) und block ({}; danach den Stand über …/block abfragen). Bei Blockade kommt außer block nichts mehr durch. Herzschlag alle 25 Sekunden; höchstens 8 gleichzeitige Ströme je Person. Solange der Strom steht, gilt die Unterhaltung als geöffnet — für neue Nachrichten darin gibt es dann keine Push-Mitteilung. Fehlertexte sind reiner Text.
Pfadparameter
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| conversationId | string | ja | Kennung der Unterhaltung. Nur Teilnehmende haben Zugriff. |
Antworten
- 200Ereignisstrom.
text/event-stream - 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307,
Location: /login— mitcallbackUrl, wenn die Anfrage von einer eigenen Seite kam). Es gibt keinen 401 mit Fehlertext. Programmatische Clients sollten Weiterleitungen nicht folgen und die Sitzung erneuern. - 403Keine Teilnahme (Text
Forbidden).text/plain
post/api/messages/{conversationId}/typing„schreibt …“ meldenSitzung nötig
Sendet das Ereignis typing an die Unterhaltung. Bei Blockade 403.
Nur aus der eigenen Seite aufrufbar: Browser-Anfragen von fremden Seiten beantwortet die App mit 403.
Pfadparameter
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| conversationId | string | ja | Kennung der Unterhaltung. Nur Teilnehmende haben Zugriff. |
Antworten
- 200Gemeldet.
application/jsonFelder
Feld Typ Pflicht Beschreibung ok true ja - 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307,
Location: /login— mitcallbackUrl, wenn die Anfrage von einer eigenen Seite kam). Es gibt keinen 401 mit Fehlertext. Programmatische Clients sollten Weiterleitungen nicht folgen und die Sitzung erneuern. - 403Keine Teilnahme oder Blockade.
application/json
delete/api/messages/{conversationId}/verlaufVerlauf für die eigene Person löschenSitzung nötig
Wer nicht teilnimmt, ändert nichts und bekommt ok: false. endgueltig zeigt, dass beide Seiten gelöscht haben und die Unterhaltung entfernt wurde.
Nur aus der eigenen Seite aufrufbar: Browser-Anfragen von fremden Seiten beantwortet die App mit 403.
Pfadparameter
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| conversationId | string | ja | Kennung der Unterhaltung. Nur Teilnehmende haben Zugriff. |
Antworten
- 200Ergebnis.
application/jsonFelder
Feld Typ Pflicht Beschreibung ok boolean ja endgueltig boolean ja - 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307,
Location: /login— mitcallbackUrl, wenn die Anfrage von einer eigenen Seite kam). Es gibt keinen 401 mit Fehlertext. Programmatische Clients sollten Weiterleitungen nicht folgen und die Sitzung erneuern. - 403Die Anfrage kam nicht von StockPilot selbst (Schutz vor fremd ausgelösten Anfragen). Wird bei ändernden Aufrufen aus dem Browser mit fremdem Origin ausgelöst.
application/json
post/api/messages/{conversationId}/voiceSprachnachricht sendenSitzung nötig
Audio als WebM oder MP4/M4A, höchstens 8 MB und 120 Sekunden. Abrufbar nur für Teilnehmende. Tageslimit: 100 Sprachnachrichten je Konto.
Voraussetzung: bestätigte E-Mail-Adresse (sonst 403 „E-Mail nicht bestätigt“).
Nur aus der eigenen Seite aufrufbar: Browser-Anfragen von fremden Seiten beantwortet die App mit 403.
Pfadparameter
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| conversationId | string | ja | Kennung der Unterhaltung. Nur Teilnehmende haben Zugriff. |
Anfrage-Inhalt
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| audio | string (binary) | ja | |
| durationSeconds | integer (≥ 1, ≤ 120) | ja |
multipart/form-data· erforderlich
Antworten
- 200Gesendet.
application/jsonFelder
Feld Typ Pflicht Beschreibung message object ja message.id string ja message.createdAt string (date-time) ja - 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307,
Location: /login— mitcallbackUrl, wenn die Anfrage von einer eigenen Seite kam). Es gibt keinen 401 mit Fehlertext. Programmatische Clients sollten Weiterleitungen nicht folgen und die Sitzung erneuern. - 400Ungültige Eingabe (Inhalt, Datei, Dauer, Koordinaten) oder Gespräch durch Blockade gesperrt.
application/json - 403Keine Teilnahme an der Unterhaltung — oder E-Mail-Adresse nicht bestätigt.
application/json - 413Datei oder Anfrage zu groß.
application/json - 429Das Tageslimit für diese Art von Inhalt ist erreicht. Morgen geht es weiter.
application/json - 500Speichern fehlgeschlagen.
application/json
Nachbarschaft
Sichtbarkeit, Anfragen und aggregierte Karte.
get/api/neighborhood/overviewNachbarschaft: Sichtbarkeit, Personen, Anfragen und HeatmapSitzung nötig
Ist die eigene Sichtbarkeit aus, sind alle Listen leer. Die Heatmap enthält nur aggregierte Zellen mit Mindestanzahl; es gibt keine Einzelmarker und keine genauen Standorte.
Antworten
- 200Übersicht.
application/jsonFelder
Feld Typ Pflicht Beschreibung visible boolean ja neighbors Nachbar[] ja neighbors[].userId string ja neighbors[].name string ja neighbors[].avatarUrl string | null nein neighbors[].lastSeenAt string | null (date-time) nein neighbors[].isFriend boolean nein neighbors[].distanceBucket "<1" | "1-3" | "3-10" | ">10" ja Grobe Entfernung in Kilometern. neighbors[].status "none" | "requested" | "connected" ja neighbors[].conversationId string | null nein neighbors[].unreadCount integer (≥ 0) nein incomingRequests NachbarAnfrage[] ja incomingRequests[].id string ja incomingRequests[].requesterId string ja incomingRequests[].requesterName string ja incomingRequests[].requesterAvatarUrl string | null nein incomingRequests[].message string ja incomingRequests[].createdAt string (date-time) ja heatmap object ja heatmap.cells HeatmapZelle[] ja heatmap.cells[].lat number ja heatmap.cells[].lng number ja heatmap.cells[].count integer (≥ 3) ja heatmap.center null | Koordinaten ja heatmap.center.lat number (≥ -90, ≤ 90) ja heatmap.center.lng number (≥ -180, ≤ 180) ja - 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307,
Location: /login— mitcallbackUrl, wenn die Anfrage von einer eigenen Seite kam). Es gibt keinen 401 mit Fehlertext. Programmatische Clients sollten Weiterleitungen nicht folgen und die Sitzung erneuern.
post/api/neighborhood/visibilitySichtbarkeit in der Nachbarschaft ein- oder ausschaltenSitzung nötig
Einschalten braucht einen Standort: aus dem Body oder, wenn dort keiner steht, aus der Postleitzahl im Profil. Er wird gerundet gespeichert. Ausschalten löscht den gespeicherten Standort.
Nur aus der eigenen Seite aufrufbar: Browser-Anfragen von fremden Seiten beantwortet die App mit 403.
Anfrage-Inhalt
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| Variante 1 | object | nein | |
| action | "enable" | ja | |
| lat | number (≥ -90, ≤ 90) | nein | |
| lng | number (≥ -180, ≤ 180) | nein | |
| Variante 2 | object | nein | |
| action | "disable" | ja |
application/json· erforderlich
Antworten
- 200Umgestellt.
application/jsonFelder
Feld Typ Pflicht Beschreibung ok true ja visible boolean ja - 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307,
Location: /login— mitcallbackUrl, wenn die Anfrage von einer eigenen Seite kam). Es gibt keinen 401 mit Fehlertext. Programmatische Clients sollten Weiterleitungen nicht folgen und die Sitzung erneuern. - 400Ungültige Eingabe, oder kein Standort verfügbar (
{ "error": "no_location" }).application/json - 403Die Anfrage kam nicht von StockPilot selbst (Schutz vor fremd ausgelösten Anfragen). Wird bei ändernden Aufrufen aus dem Browser mit fremdem Origin ausgelöst.
application/json - 500Fehler.
application/json
post/api/neighborhood/location/refreshGespeicherten Standort auffrischenSitzung nötig
Wirkt nur bei eingeschalteter Sichtbarkeit; der Standort wird gerundet gespeichert. Höchstens 30 Aufrufe pro Stunde je Konto.
Nur aus der eigenen Seite aufrufbar: Browser-Anfragen von fremden Seiten beantwortet die App mit 403.
Anfrage-Inhalt
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| lat | number (≥ -90, ≤ 90) | ja | |
| lng | number (≥ -180, ≤ 180) | ja |
application/json· erforderlich
Antworten
- 200Aufgefrischt.
application/jsonFelder
Feld Typ Pflicht Beschreibung ok true ja - 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307,
Location: /login— mitcallbackUrl, wenn die Anfrage von einer eigenen Seite kam). Es gibt keinen 401 mit Fehlertext. Programmatische Clients sollten Weiterleitungen nicht folgen und die Sitzung erneuern. - 400Ungültige Koordinaten.
application/json - 403Die Anfrage kam nicht von StockPilot selbst (Schutz vor fremd ausgelösten Anfragen). Wird bei ändernden Aufrufen aus dem Browser mit fremdem Origin ausgelöst.
application/json - 429Zu viele Standort-Aktualisierungen.
application/json
post/api/neighborhood/requestsNachbarschaftsanfrage sendenSitzung nötig
Nur an sichtbare Personen im Umkreis (20 km) und nicht bei Blockade. Je Konto gilt ein Tageslimit für Anfragen (429).
Nur aus der eigenen Seite aufrufbar: Browser-Anfragen von fremden Seiten beantwortet die App mit 403.
Anfrage-Inhalt
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| recipientId | string (mind. 1 Zeichen) | ja | |
| message | string (mind. 1 Zeichen, höchstens 300 Zeichen) | ja |
application/json· erforderlich
Antworten
- 200Ergebnis.
application/jsonFelder
Feld Typ Pflicht Beschreibung status "sent" | "reverse_exists" | "already_connected" ja - 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307,
Location: /login— mitcallbackUrl, wenn die Anfrage von einer eigenen Seite kam). Es gibt keinen 401 mit Fehlertext. Programmatische Clients sollten Weiterleitungen nicht folgen und die Sitzung erneuern. - 400Ungültige Eingabe, Anfrage an sich selbst oder Blockade.
application/json - 403Zu weit entfernt oder nicht in der Nachbarschaft sichtbar.
application/json - 429Tageslimit für Anfragen erreicht.
application/json
post/api/neighborhood/requests/{id}Nachbarschaftsanfrage annehmen oder ablehnenSitzung nötig
Beim Annehmen entsteht eine Unterhaltung, ihre Kennung steht in der Antwort.
Nur aus der eigenen Seite aufrufbar: Browser-Anfragen von fremden Seiten beantwortet die App mit 403.
Pfadparameter
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| id | string | ja | Kennung der Anfrage. |
Anfrage-Inhalt
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| action | "accept" | "decline" | ja |
application/json· erforderlich
Antworten
- 200Beantwortet.
application/jsonFelder
Feld Typ Pflicht Beschreibung conversationId string | null ja - 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307,
Location: /login— mitcallbackUrl, wenn die Anfrage von einer eigenen Seite kam). Es gibt keinen 401 mit Fehlertext. Programmatische Clients sollten Weiterleitungen nicht folgen und die Sitzung erneuern. - 400Ungültige Eingabe.
application/json - 403Nicht die Empfängerin oder der Empfänger der Anfrage.
application/json - 409Mit dieser Person ist kein Chat möglich (Blockade).
application/json
Benachrichtigungen
Push-Mitteilungen.
post/api/notifications/subscribePush-Mitteilungen für dieses Gerät einschaltenSitzung nötig
Speichert ein Web-Push-Abonnement. Nur bekannte Push-Dienste sind erlaubt. Höchstens 10 Abonnements je Konto — ältere weichen dem neuen. Ein Abonnement, das schon einem anderen Konto gehört, wird nur bei gleichen Schlüsseln übernommen. Body höchstens 8 KB.
Nur aus der eigenen Seite aufrufbar: Browser-Anfragen von fremden Seiten beantwortet die App mit 403.
Anfrage-Inhalt
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| endpoint | string (uri) | ja | |
| keys | object | ja | |
| keys.p256dh | string (höchstens 200 Zeichen) | ja | |
| keys.auth | string (höchstens 100 Zeichen) | ja |
application/json· erforderlich
Antworten
- 200Gespeichert.
application/jsonFelder
Feld Typ Pflicht Beschreibung ok true ja - 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307,
Location: /login— mitcallbackUrl, wenn die Anfrage von einer eigenen Seite kam). Es gibt keinen 401 mit Fehlertext. Programmatische Clients sollten Weiterleitungen nicht folgen und die Sitzung erneuern. - 400Pflichtfelder fehlen, unbekannter Push-Dienst oder ungültige Schlüssel.
application/json - 403Die Anfrage kam nicht von StockPilot selbst (Schutz vor fremd ausgelösten Anfragen). Wird bei ändernden Aufrufen aus dem Browser mit fremdem Origin ausgelöst.
application/json - 409Das Abonnement gehört zu einem anderen Konto.
application/json - 413Zu groß.
application/json - 500Datenbankfehler.
application/json
delete/api/notifications/unsubscribePush-Mitteilungen für dieses Gerät ausschaltenSitzung nötig
Nur aus der eigenen Seite aufrufbar: Browser-Anfragen von fremden Seiten beantwortet die App mit 403.
Anfrage-Inhalt
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| endpoint | string | ja |
application/json· erforderlich
Antworten
- 200Entfernt (auch, wenn es kein Abonnement gab).
application/jsonFelder
Feld Typ Pflicht Beschreibung ok true ja - 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307,
Location: /login— mitcallbackUrl, wenn die Anfrage von einer eigenen Seite kam). Es gibt keinen 401 mit Fehlertext. Programmatische Clients sollten Weiterleitungen nicht folgen und die Sitzung erneuern. - 400
endpointfehlt oder ungültiges JSON.application/json - 403Die Anfrage kam nicht von StockPilot selbst (Schutz vor fremd ausgelösten Anfragen). Wird bei ändernden Aufrufen aus dem Browser mit fremdem Origin ausgelöst.
application/json - 500Datenbankfehler.
application/json
post/api/notifications/test-pushTestmitteilung an das jüngste Abonnement sendenSitzung nötig
Höchstens 5 Tests pro Stunde und Konto. Ein abgelaufenes Abonnement wird dabei entfernt. Aus der Store-App mit { geraeteToken } im Körper: dann an genau dieses Gerät über FCM.
Nur aus der eigenen Seite aufrufbar: Browser-Anfragen von fremden Seiten beantwortet die App mit 403.
Antworten
- 200Gesendet.
application/jsonFelder
Feld Typ Pflicht Beschreibung success true ja - 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307,
Location: /login— mitcallbackUrl, wenn die Anfrage von einer eigenen Seite kam). Es gibt keinen 401 mit Fehlertext. Programmatische Clients sollten Weiterleitungen nicht folgen und die Sitzung erneuern. - 400Store-App: ungültiges Gerätetoken.
application/json - 403Die Anfrage kam nicht von StockPilot selbst (Schutz vor fremd ausgelösten Anfragen). Wird bei ändernden Aufrufen aus dem Browser mit fremdem Origin ausgelöst.
application/json - 404Auf dem Gerät sind Mitteilungen noch nicht eingeschaltet.
application/json - 429Zu viele Tests.
application/json - 502Der Push-Dienst hat abgelehnt; das Abonnement ist möglicherweise abgelaufen.
application/json - 503Mitteilungen sind serverseitig nicht eingerichtet.
application/json
get/api/notifications/nativeMitteilungen in der Store-App verfügbar?Sitzung nötig
Die Android-App fragt vor dem Einschalten, ob der Versand über Firebase Cloud Messaging eingerichtet ist.
Antworten
- 200Stand.
application/jsonFelder
Feld Typ Pflicht Beschreibung verfuegbar boolean ja - 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307,
Location: /login— mitcallbackUrl, wenn die Anfrage von einer eigenen Seite kam). Es gibt keinen 401 mit Fehlertext. Programmatische Clients sollten Weiterleitungen nicht folgen und die Sitzung erneuern.
post/api/notifications/nativeGerät der Store-App für Mitteilungen anmeldenSitzung nötig
Speichert das FCM-Token der App. Ein Token, das schon einem anderen Konto gehört, wandert zum aufrufenden Konto (Kontowechsel auf dem Gerät). Höchstens 5 Geräte je Konto — ältere weichen. Body höchstens 4 KB.
Nur aus der eigenen Seite aufrufbar: Browser-Anfragen von fremden Seiten beantwortet die App mit 403.
Anfrage-Inhalt
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| token | string (mind. 20 Zeichen, höchstens 1024 Zeichen) | ja | |
| plattform | "android" | "ios" | ja |
application/json· erforderlich
Antworten
- 200Gespeichert.
application/jsonFelder
Feld Typ Pflicht Beschreibung ok true ja - 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307,
Location: /login— mitcallbackUrl, wenn die Anfrage von einer eigenen Seite kam). Es gibt keinen 401 mit Fehlertext. Programmatische Clients sollten Weiterleitungen nicht folgen und die Sitzung erneuern. - 400Ungültiges JSON, Token oder Plattform.
application/json - 403Die Anfrage kam nicht von StockPilot selbst (Schutz vor fremd ausgelösten Anfragen). Wird bei ändernden Aufrufen aus dem Browser mit fremdem Origin ausgelöst.
application/json - 413Zu groß.
application/json - 500Datenbankfehler.
application/json - 503Mitteilungen in der App sind serverseitig nicht eingerichtet.
application/json
delete/api/notifications/nativeGerät der Store-App abmeldenSitzung optional
Läuft auch beim Abmelden aus der App, wenn die Sitzung schon beendet ist. Mit Sitzung nur eigene Geräte; ohne genügt das Token (kennt nur das Gerät).
Nur aus der eigenen Seite aufrufbar: Browser-Anfragen von fremden Seiten beantwortet die App mit 403.
Anfrage-Inhalt
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| token | string | ja |
application/json· erforderlich
Antworten
- 200Entfernt (auch, wenn es das Gerät nicht gab).
application/jsonFelder
Feld Typ Pflicht Beschreibung ok true ja - 400Ungültiges JSON oder Token.
application/json - 403Die Anfrage kam nicht von StockPilot selbst (Schutz vor fremd ausgelösten Anfragen). Wird bei ändernden Aufrufen aus dem Browser mit fremdem Origin ausgelöst.
application/json - 500Datenbankfehler.
application/json
post/api/notifications/mhd-checkMitteilungen zu ablaufenden Lebensmitteln jetzt erzeugenSitzung nötig
Prüft das MHD in allen Haushalten der Person und legt eine Sammelmitteilung an (Glocke und Push).
Nur aus der eigenen Seite aufrufbar: Browser-Anfragen von fremden Seiten beantwortet die App mit 403.
Antworten
- 200Anzahl neu angelegter Mitteilungen.
application/jsonFelder
Feld Typ Pflicht Beschreibung count integer (≥ 0) ja - 401Keine gültige Sitzung.
application/jsontext/plain - 403Die Anfrage kam nicht von StockPilot selbst (Schutz vor fremd ausgelösten Anfragen). Wird bei ändernden Aufrufen aus dem Browser mit fremdem Origin ausgelöst.
application/json
Sonstiges
Ortssuche, Anwesenheit, Blockaden.
get/api/postal-codes/searchPostleitzahlen und Orte suchenSitzung nötig
Sucht nach Postleitzahl (Anfang) oder Ortsname (Teilstring). Bei zu kurzer oder ungültiger Suche ist results leer, kein Fehler.
Abfrageparameter
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| q | string (mind. 2 Zeichen, höchstens 120 Zeichen) | ja | Suchtext, 2 bis 120 Zeichen. |
| limit | integer (≥ 1, ≤ 20, Standard 10) | nein | Höchstzahl der Treffer. |
Antworten
- 200Treffer.
application/jsonFelder
Feld Typ Pflicht Beschreibung results Postleitzahl[] ja results[].id string nein results[].plz string nein results[].place string nein results[].state string nein results[].lat number nein results[].lng number nein results[].population integer | null nein results[].areaKm2 number | null nein - 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307,
Location: /login— mitcallbackUrl, wenn die Anfrage von einer eigenen Seite kam). Es gibt keinen 401 mit Fehlertext. Programmatische Clients sollten Weiterleitungen nicht folgen und die Sitzung erneuern.
post/api/presence/pingAnwesenheit meldenSitzung nötig
Setzt „zuletzt gesehen“ und liefert die Zahl ungelesener Nachrichten. Die App ruft das regelmäßig auf, solange sie offen ist. Fehler bei der Zählung führen nur dazu, dass ungelesen fehlt.
Nur aus der eigenen Seite aufrufbar: Browser-Anfragen von fremden Seiten beantwortet die App mit 403.
Antworten
- 200Gemeldet.
application/jsonFelder
Feld Typ Pflicht Beschreibung ok true ja ungelesen integer (≥ 0) nein - 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307,
Location: /login— mitcallbackUrl, wenn die Anfrage von einer eigenen Seite kam). Es gibt keinen 401 mit Fehlertext. Programmatische Clients sollten Weiterleitungen nicht folgen und die Sitzung erneuern. - 403Die Anfrage kam nicht von StockPilot selbst (Schutz vor fremd ausgelösten Anfragen). Wird bei ändernden Aufrufen aus dem Browser mit fremdem Origin ausgelöst.
application/json
post/api/users/{userId}/blockPerson blockierenSitzung nötig
Eine Blockade wirkt in beide Richtungen: kein Chat, keine Anwesenheit, keine Profilbilder. Haushaltsmitglieder und die eigene Person lassen sich nicht blockieren.
Nur aus der eigenen Seite aufrufbar: Browser-Anfragen von fremden Seiten beantwortet die App mit 403.
Pfadparameter
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| userId | string | ja | Kennung der zu blockierenden Person. |
Anfrage-Inhalt
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| reason | "SPAM" | "HARASSMENT" | "NOT_INTERESTED" | "OTHER" | ja | |
| note | string | null (höchstens 300 Zeichen) | nein |
application/json· erforderlich
Antworten
- 200Blockiert.
application/jsonFelder
Feld Typ Pflicht Beschreibung ok true ja - 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307,
Location: /login— mitcallbackUrl, wenn die Anfrage von einer eigenen Seite kam). Es gibt keinen 401 mit Fehlertext. Programmatische Clients sollten Weiterleitungen nicht folgen und die Sitzung erneuern. - 400Ungültige Eingabe, eigene Person oder Haushaltsmitglied.
application/json - 403Die Anfrage kam nicht von StockPilot selbst (Schutz vor fremd ausgelösten Anfragen). Wird bei ändernden Aufrufen aus dem Browser mit fremdem Origin ausgelöst.
application/json
post/api/users/{userId}/unblockEigene Blockade aufhebenSitzung nötig
Nur wer blockiert hat, kann die Blockade aufheben.
Nur aus der eigenen Seite aufrufbar: Browser-Anfragen von fremden Seiten beantwortet die App mit 403.
Pfadparameter
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
| userId | string | ja | Kennung der Person, die blockiert wurde. |
Antworten
- 200Aufgehoben.
application/jsonFelder
Feld Typ Pflicht Beschreibung ok true ja - 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307,
Location: /login— mitcallbackUrl, wenn die Anfrage von einer eigenen Seite kam). Es gibt keinen 401 mit Fehlertext. Programmatische Clients sollten Weiterleitungen nicht folgen und die Sitzung erneuern. - 403Die Anfrage kam nicht von StockPilot selbst (Schutz vor fremd ausgelösten Anfragen). Wird bei ändernden Aufrufen aus dem Browser mit fremdem Origin ausgelöst.
application/json - 404Es gab keine eigene Blockade.
application/json
Fehlt etwas oder stimmt etwas nicht? Schreib uns