Zum Inhalt springen
← Zurück/API-Dokumentation

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

FeldTypPflichtBeschreibung
callbackUrlstringneinInterner 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/json

    Felder

    FeldTypPflichtBeschreibung
    Variante 2objectnein
    userobjectnein
    user.idstringnein
    user.emailstringnein
    user.namestring | nullnein
    user.role"USER" | "PARTNER" | "ADMIN" | "SUPER_ADMIN"nein
    expiresstring (date-time)nein
  • 429Zu viele Anfragen in kurzer Zeit.

    application/json

    Felder

    FeldTypPflichtBeschreibung
    errorstringja
    retryAfterintegerneinSekunden 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/json

    Felder

    FeldTypPflichtBeschreibung
    csrfTokenstringja
  • 429Zu viele Anfragen in kurzer Zeit.

    application/json

    Felder

    FeldTypPflichtBeschreibung
    errorstringja
    retryAfterintegerneinSekunden 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

FeldTypPflichtBeschreibung
csrfTokenstringja
emailstring (email)ja
passwordstring (password)ja
codestring (höchstens 40 Zeichen)neinApp-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/json

    Felder

    FeldTypPflichtBeschreibung
    errorstringja
    retryAfterintegerneinSekunden 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

FeldTypPflichtBeschreibung
csrfTokenstringja

application/x-www-form-urlencoded· erforderlich

Antworten

  • 302Weiterleitung nach dem Abmelden.
  • 429Zu viele Anfragen in kurzer Zeit.

    application/json

    Felder

    FeldTypPflichtBeschreibung
    errorstringja
    retryAfterintegerneinSekunden 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. status ist ok oder eingeschraenkt (Zwischenspeicher gestört, App läuft weiter).

    application/json

    Felder

    FeldTypPflichtBeschreibung
    status"ok" | "eingeschraenkt"ja
    datenbank"ok" | "gestoert"ja
    cache"ok" | "gestoert"ja
  • 429Zu viele Anfragen.

    application/json

    Felder

    FeldTypPflichtBeschreibung
    status"zu-viele-anfragen"nein
  • 503Datenbank nicht erreichbar (status: gestoert).

    application/json

    Felder

    FeldTypPflichtBeschreibung
    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

FeldTypPflichtBeschreibung
(Inhalt)objectja

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

FeldTypPflichtBeschreibung
nachrichtstringja
pfadstringnein
digeststring (höchstens 40 Zeichen)nein
stapelstring (höchstens 4000 Zeichen)nein
versionstring (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

FeldTypPflichtBeschreibung
type"BUG" | "FEATURE" | "FEEDBACK" | "SUPPORT"nein
messagestring (mind. 1 Zeichen, höchstens 2000 Zeichen)ja
urlstring | null (höchstens 500 Zeichen)neinSeitenpfad ohne Kennungen.
userAgentstring | null (höchstens 500 Zeichen)nein
screenWidthinteger | nullnein
screenHeightinteger | nullnein
appVersionstring | null (höchstens 30 Zeichen)nein
fehlercodestring | nullneinFehlercode der Fehlerseite (Muster [A-Za-z0-9_-]{1,40}); andere Werte werden ignoriert.
metadataobject | nullneinFlache 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/json

    Felder

    FeldTypPflichtBeschreibung
    successtrueja
    idstringja
  • 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

FeldTypPflichtBeschreibung
artstringjaavatar oder cover.
idstringjaNutzerkennung (avatar) oder Haushaltskennung (cover).

Abfrageparameter

FeldTypPflichtBeschreibung
vstringjaVersionskennung 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

FeldTypPflichtBeschreibung
idstringjaKennung 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

FeldTypPflichtBeschreibung
filestring (binary)jaFoto 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. bonAnzahl ab 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/json

    Felder

    FeldTypPflichtBeschreibung
    cornersobject[]ja
    corners[].xnumberja
    corners[].ynumberja
    imageWidthintegerja
    imageHeightintegerja
    bonAnzahlinteger (≥ 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

FeldTypPflichtBeschreibung
filestring (binary)jaJPEG, 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/json

    Felder

    FeldTypPflichtBeschreibung
    filenamestringja
    urlstringja
  • 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

FeldTypPflichtBeschreibung
filestring (binary)jaJPEG, 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.
listingIdstringjaKennung des eigenen Angebots.

multipart/form-data· erforderlich

Antworten

  • 200Gespeichert.

    application/json

    Felder

    FeldTypPflichtBeschreibung
    idstringja
    urlstringja
    zurPruefungbooleanja
  • 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

FeldTypPflichtBeschreibung
imageIdstringjaKennung des Bilds.

Antworten

  • 200Entfernt.

    application/json

    Felder

    FeldTypPflichtBeschreibung
    oktrueja
  • 400imageId 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

  • 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

FeldTypPflichtBeschreibung
filestring (binary)jaJPEG, 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.
barcodestringjaBarcode des Produkts.

multipart/form-data· erforderlich

Antworten

  • 200Gespeichert.

    application/json

    Felder

    FeldTypPflichtBeschreibung
    urlstring (uri)ja
  • 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307, Location: /login — mit callbackUrl, 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

FeldTypPflichtBeschreibung
filestring (binary)jaJPEG, 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.
recipeIdstring (höchstens 200 Zeichen)jaKennung des Rezepts (bei Systemrezepten der Slug).
recipeType"user" | "community-user" | "system"nein
altTextstring (höchstens 300 Zeichen)neinAlternativtext für das Foto.

multipart/form-data· erforderlich

Antworten

  • 200Gespeichert.

    application/json

    Felder

    FeldTypPflichtBeschreibung
    idstringja
    urlstringja
  • 400Datei oder recipeId fehlt, ungültiger recipeType, 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 — mit callbackUrl, 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

FeldTypPflichtBeschreibung
householdIdstring (höchstens 64 Zeichen)jaKennung 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 — mit callbackUrl, wenn die Anfrage von einer eigenen Seite kam). Es gibt keinen 401 mit Fehlertext. Programmatische Clients sollten Weiterleitungen nicht folgen und die Sitzung erneuern.
  • 400householdId fehlt (Text Missing 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/json

    Felder

    FeldTypPflichtBeschreibung
    conversationsUnterhaltung[]ja
    conversations[].idstring | nullneinLeer, solange es mit dieser Person noch keine Unterhaltung gibt.
    conversations[].otherUserIdstringja
    conversations[].otherUserNamestringja
    conversations[].otherUserAvatarUrlstring | nullnein
    conversations[].otherLastSeenAtstring | null (date-time)nein
    conversations[].listingIdstring | nullnein
    conversations[].listingTitlestring | nullnein
    conversations[].isFriendbooleannein
    conversations[].lastMessagestring | nullnein
    conversations[].lastMessageKind"photo" | "gif" | "location" | "voice" | nullnein
    conversations[].lastMessageAtstring | null (date-time)nein
    conversations[].lastMessageIsOwnbooleannein
    conversations[].lastMessageReadAtstring | null (date-time)nein
    conversations[].unreadCountinteger (≥ 0)ja
    conversations[].blockedByMebooleanja
    conversations[].blockedMebooleanja
    incomingRequestsNachbarAnfrage[]ja
    incomingRequests[].idstringja
    incomingRequests[].requesterIdstringja
    incomingRequests[].requesterNamestringja
    incomingRequests[].requesterAvatarUrlstring | nullnein
    incomingRequests[].messagestringja
    incomingRequests[].createdAtstring (date-time)ja
  • 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307, Location: /login — mit callbackUrl, 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/json

    Felder

    FeldTypPflichtBeschreibung
    countinteger (≥ 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

FeldTypPflichtBeschreibung
conversationIdstringjaKennung der Unterhaltung. Nur Teilnehmende haben Zugriff.

Abfrageparameter

FeldTypPflichtBeschreibung
vorstringneinKennung einer Nachricht; liefert die davor.
nachstringneinKennung einer Nachricht; liefert neuere.
idsstringneinKommagetrennte Nachrichtenkennungen zum Auffrischen.

Antworten

  • 200Seite.

    application/json

    Felder

    FeldTypPflichtBeschreibung
    messagesChatNachricht[]jaAufsteigend nach Zeit.
    messages[].idstringja
    messages[].contentstringjaText, höchstens 500 Zeichen. Bei Foto-Nachrichten die Bildunterschrift (bis 2000 Zeichen), bei Sprach-, Standort- und Sticker-Nachrichten leer.
    messages[].createdAtstring (date-time)ja
    messages[].readAtstring | null (date-time)neinWann die andere Seite die Nachricht gelesen hat.
    messages[].isOwnbooleanjaStammt die Nachricht von der angemeldeten Person?
    messages[].senderIdstringja
    messages[].senderNamestringja
    messages[].imageUrlstring | nullneinAdresse eines Chat-Fotos (/uploads/messages/…, nur für Teilnehmende abrufbar).
    messages[].audioUrlstring | nullneinAdresse einer Sprachnachricht (/uploads/messages/…).
    messages[].durationSecondsinteger | nullnein
    messages[].locationnull | objectneinVom Absender bewusst geteilter Standort einer Standort-Nachricht.
    messages[].location.latnumberja
    messages[].location.lngnumberja
    messages[].gifIdstring | nullnein
    messages[].editedAtstring | null (date-time)nein
    messages[].isDeletedbooleanja
    messages[].reactionsobject[]ja
    messages[].reactions[].emojistringja
    messages[].reactions[].userIdstringja
    hasMorebooleanjaGibt es jenseits dieser Seite noch Nachrichten?
  • 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307, Location: /login — mit callbackUrl, wenn die Anfrage von einer eigenen Seite kam). Es gibt keinen 401 mit Fehlertext. Programmatische Clients sollten Weiterleitungen nicht folgen und die Sitzung erneuern.
  • 400vor mit nach oder ids kombiniert.

    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

FeldTypPflichtBeschreibung
conversationIdstringjaKennung der Unterhaltung. Nur Teilnehmende haben Zugriff.

Anfrage-Inhalt

FeldTypPflichtBeschreibung
contentstring (mind. 1 Zeichen, höchstens 500 Zeichen)ja
clientIdstringneinVom Client je Nachricht erzeugte Kennung für sichere Wiederholung.

application/json· erforderlich

Antworten

  • 200Gesendet.

    application/json

    Felder

    FeldTypPflichtBeschreibung
    messageobjectja
    message.idstringja
    message.createdAtstring (date-time)ja
  • 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307, Location: /login — mit callbackUrl, 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 clientId wird 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

FeldTypPflichtBeschreibung
conversationIdstringjaKennung der Unterhaltung. Nur Teilnehmende haben Zugriff.
messageIdstringjaKennung der Nachricht innerhalb der Unterhaltung.

Antworten

  • 200Gelöscht.

    application/json

    Felder

    FeldTypPflichtBeschreibung
    messageobjectja
    message.idstringnein
  • 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307, Location: /login — mit callbackUrl, 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

FeldTypPflichtBeschreibung
conversationIdstringjaKennung der Unterhaltung. Nur Teilnehmende haben Zugriff.
messageIdstringjaKennung der Nachricht innerhalb der Unterhaltung.

Anfrage-Inhalt

FeldTypPflichtBeschreibung
contentstring (mind. 1 Zeichen, höchstens 500 Zeichen)ja

application/json· erforderlich

Antworten

  • 200Bearbeitet.

    application/json

    Felder

    FeldTypPflichtBeschreibung
    messageobjectja
    message.idstringnein
    message.editedAtstring (date-time)nein
  • 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307, Location: /login — mit callbackUrl, 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

FeldTypPflichtBeschreibung
conversationIdstringjaKennung der Unterhaltung. Nur Teilnehmende haben Zugriff.
messageIdstringjaKennung der Nachricht innerhalb der Unterhaltung.

Antworten

  • 200Gemeldet.

    application/json

    Felder

    FeldTypPflichtBeschreibung
    messageobjectja
    message.messageIdstringnein
  • 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307, Location: /login — mit callbackUrl, 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

FeldTypPflichtBeschreibung
conversationIdstringjaKennung der Unterhaltung. Nur Teilnehmende haben Zugriff.
messageIdstringjaKennung der Nachricht innerhalb der Unterhaltung.

Anfrage-Inhalt

FeldTypPflichtBeschreibung
emojistring (höchstens 24 Zeichen)ja

application/json· erforderlich

Antworten

  • 200Gesetzt.

    application/json

    Felder

    FeldTypPflichtBeschreibung
    reactionobjectja
    reaction.messageIdstringnein
    reaction.emojistringnein
  • 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307, Location: /login — mit callbackUrl, 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

FeldTypPflichtBeschreibung
conversationIdstringjaKennung der Unterhaltung. Nur Teilnehmende haben Zugriff.
messageIdstringjaKennung der Nachricht innerhalb der Unterhaltung.

Antworten

  • 200Entfernt (auch, wenn keine vorhanden war).

    application/json

    Felder

    FeldTypPflichtBeschreibung
    reactionobjectja
    reaction.messageIdstringnein
  • 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307, Location: /login — mit callbackUrl, 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

FeldTypPflichtBeschreibung
conversationIdstringjaKennung der Unterhaltung. Nur Teilnehmende haben Zugriff.

Antworten

  • 200Stand.

    application/json

    Felder

    FeldTypPflichtBeschreibung
    blockedByMebooleanja
    gesperrtbooleanja
  • 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307, Location: /login — mit callbackUrl, 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

FeldTypPflichtBeschreibung
conversationIdstringjaKennung der Unterhaltung. Nur Teilnehmende haben Zugriff.

Anfrage-Inhalt

FeldTypPflichtBeschreibung
gifIdstringjaKennung eines Stickers aus dem Katalog der App.

application/json· erforderlich

Antworten

  • 200Gesendet.

    application/json

    Felder

    FeldTypPflichtBeschreibung
    messageobjectja
    message.idstringja
    message.createdAtstring (date-time)ja
  • 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307, Location: /login — mit callbackUrl, 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

FeldTypPflichtBeschreibung
conversationIdstringjaKennung der Unterhaltung. Nur Teilnehmende haben Zugriff.

Anfrage-Inhalt

FeldTypPflichtBeschreibung
latnumber (≥ -90, ≤ 90)ja
lngnumber (≥ -180, ≤ 180)ja

application/json· erforderlich

Antworten

  • 200Gesendet.

    application/json

    Felder

    FeldTypPflichtBeschreibung
    messageobjectja
    message.idstringja
    message.createdAtstring (date-time)ja
  • 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307, Location: /login — mit callbackUrl, 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

FeldTypPflichtBeschreibung
conversationIdstringjaKennung der Unterhaltung. Nur Teilnehmende haben Zugriff.

Anfrage-Inhalt

FeldTypPflichtBeschreibung
stummbooleanja

application/json· erforderlich

Antworten

  • 200Ergebnis.

    application/json

    Felder

    FeldTypPflichtBeschreibung
    okbooleanja
  • 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307, Location: /login — mit callbackUrl, wenn die Anfrage von einer eigenen Seite kam). Es gibt keinen 401 mit Fehlertext. Programmatische Clients sollten Weiterleitungen nicht folgen und die Sitzung erneuern.
  • 400stumm fehlt 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

FeldTypPflichtBeschreibung
conversationIdstringjaKennung der Unterhaltung. Nur Teilnehmende haben Zugriff.

Anfrage-Inhalt

FeldTypPflichtBeschreibung
photostring (binary)jaBild, höchstens 12 MB.
captionstringneinBildunterschrift.

multipart/form-data· erforderlich

Antworten

  • 200Gesendet.

    application/json

    Felder

    FeldTypPflichtBeschreibung
    messageobjectja
    message.idstringja
    message.createdAtstring (date-time)ja
  • 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307, Location: /login — mit callbackUrl, 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

FeldTypPflichtBeschreibung
conversationIdstringjaKennung der Unterhaltung. Nur Teilnehmende haben Zugriff.

Antworten

  • 200Anwesenheit.

    application/json

    Felder

    FeldTypPflichtBeschreibung
    lastSeenAtstring | null (date-time)ja
    distanceBucketnull | "<1" | "1-3" | "3-10" | ">10"ja
  • 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307, Location: /login — mit callbackUrl, 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

FeldTypPflichtBeschreibung
conversationIdstringjaKennung 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 — mit callbackUrl, 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

FeldTypPflichtBeschreibung
conversationIdstringjaKennung der Unterhaltung. Nur Teilnehmende haben Zugriff.

Antworten

  • 200Gemeldet.

    application/json

    Felder

    FeldTypPflichtBeschreibung
    oktrueja
  • 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307, Location: /login — mit callbackUrl, 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

FeldTypPflichtBeschreibung
conversationIdstringjaKennung der Unterhaltung. Nur Teilnehmende haben Zugriff.

Antworten

  • 200Ergebnis.

    application/json

    Felder

    FeldTypPflichtBeschreibung
    okbooleanja
    endgueltigbooleanja
  • 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307, Location: /login — mit callbackUrl, 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

FeldTypPflichtBeschreibung
conversationIdstringjaKennung der Unterhaltung. Nur Teilnehmende haben Zugriff.

Anfrage-Inhalt

FeldTypPflichtBeschreibung
audiostring (binary)ja
durationSecondsinteger (≥ 1, ≤ 120)ja

multipart/form-data· erforderlich

Antworten

  • 200Gesendet.

    application/json

    Felder

    FeldTypPflichtBeschreibung
    messageobjectja
    message.idstringja
    message.createdAtstring (date-time)ja
  • 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307, Location: /login — mit callbackUrl, 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/json

    Felder

    FeldTypPflichtBeschreibung
    visiblebooleanja
    neighborsNachbar[]ja
    neighbors[].userIdstringja
    neighbors[].namestringja
    neighbors[].avatarUrlstring | nullnein
    neighbors[].lastSeenAtstring | null (date-time)nein
    neighbors[].isFriendbooleannein
    neighbors[].distanceBucket"<1" | "1-3" | "3-10" | ">10"jaGrobe Entfernung in Kilometern.
    neighbors[].status"none" | "requested" | "connected"ja
    neighbors[].conversationIdstring | nullnein
    neighbors[].unreadCountinteger (≥ 0)nein
    incomingRequestsNachbarAnfrage[]ja
    incomingRequests[].idstringja
    incomingRequests[].requesterIdstringja
    incomingRequests[].requesterNamestringja
    incomingRequests[].requesterAvatarUrlstring | nullnein
    incomingRequests[].messagestringja
    incomingRequests[].createdAtstring (date-time)ja
    heatmapobjectja
    heatmap.cellsHeatmapZelle[]ja
    heatmap.cells[].latnumberja
    heatmap.cells[].lngnumberja
    heatmap.cells[].countinteger (≥ 3)ja
    heatmap.centernull | Koordinatenja
    heatmap.center.latnumber (≥ -90, ≤ 90)ja
    heatmap.center.lngnumber (≥ -180, ≤ 180)ja
  • 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307, Location: /login — mit callbackUrl, 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

FeldTypPflichtBeschreibung
Variante 1objectnein
action"enable"ja
latnumber (≥ -90, ≤ 90)nein
lngnumber (≥ -180, ≤ 180)nein
Variante 2objectnein
action"disable"ja

application/json· erforderlich

Antworten

  • 200Umgestellt.

    application/json

    Felder

    FeldTypPflichtBeschreibung
    oktrueja
    visiblebooleanja
  • 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307, Location: /login — mit callbackUrl, 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

FeldTypPflichtBeschreibung
latnumber (≥ -90, ≤ 90)ja
lngnumber (≥ -180, ≤ 180)ja

application/json· erforderlich

Antworten

  • 200Aufgefrischt.

    application/json

    Felder

    FeldTypPflichtBeschreibung
    oktrueja
  • 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307, Location: /login — mit callbackUrl, 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

FeldTypPflichtBeschreibung
recipientIdstring (mind. 1 Zeichen)ja
messagestring (mind. 1 Zeichen, höchstens 300 Zeichen)ja

application/json· erforderlich

Antworten

  • 200Ergebnis.

    application/json

    Felder

    FeldTypPflichtBeschreibung
    status"sent" | "reverse_exists" | "already_connected"ja
  • 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307, Location: /login — mit callbackUrl, 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

FeldTypPflichtBeschreibung
idstringjaKennung der Anfrage.

Anfrage-Inhalt

FeldTypPflichtBeschreibung
action"accept" | "decline"ja

application/json· erforderlich

Antworten

  • 200Beantwortet.

    application/json

    Felder

    FeldTypPflichtBeschreibung
    conversationIdstring | nullja
  • 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307, Location: /login — mit callbackUrl, 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

FeldTypPflichtBeschreibung
endpointstring (uri)ja
keysobjectja
keys.p256dhstring (höchstens 200 Zeichen)ja
keys.authstring (höchstens 100 Zeichen)ja

application/json· erforderlich

Antworten

  • 200Gespeichert.

    application/json

    Felder

    FeldTypPflichtBeschreibung
    oktrueja
  • 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307, Location: /login — mit callbackUrl, 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

FeldTypPflichtBeschreibung
endpointstringja

application/json· erforderlich

Antworten

  • 200Entfernt (auch, wenn es kein Abonnement gab).

    application/json

    Felder

    FeldTypPflichtBeschreibung
    oktrueja
  • 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307, Location: /login — mit callbackUrl, wenn die Anfrage von einer eigenen Seite kam). Es gibt keinen 401 mit Fehlertext. Programmatische Clients sollten Weiterleitungen nicht folgen und die Sitzung erneuern.
  • 400endpoint fehlt 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/json

    Felder

    FeldTypPflichtBeschreibung
    successtrueja
  • 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307, Location: /login — mit callbackUrl, 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/json

    Felder

    FeldTypPflichtBeschreibung
    verfuegbarbooleanja
  • 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307, Location: /login — mit callbackUrl, 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

FeldTypPflichtBeschreibung
tokenstring (mind. 20 Zeichen, höchstens 1024 Zeichen)ja
plattform"android" | "ios"ja

application/json· erforderlich

Antworten

  • 200Gespeichert.

    application/json

    Felder

    FeldTypPflichtBeschreibung
    oktrueja
  • 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307, Location: /login — mit callbackUrl, 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

FeldTypPflichtBeschreibung
tokenstringja

application/json· erforderlich

Antworten

  • 200Entfernt (auch, wenn es das Gerät nicht gab).

    application/json

    Felder

    FeldTypPflichtBeschreibung
    oktrueja
  • 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/json

    Felder

    FeldTypPflichtBeschreibung
    countinteger (≥ 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

FeldTypPflichtBeschreibung
qstring (mind. 2 Zeichen, höchstens 120 Zeichen)jaSuchtext, 2 bis 120 Zeichen.
limitinteger (≥ 1, ≤ 20, Standard 10)neinHöchstzahl der Treffer.

Antworten

  • 200Treffer.

    application/json

    Felder

    FeldTypPflichtBeschreibung
    resultsPostleitzahl[]ja
    results[].idstringnein
    results[].plzstringnein
    results[].placestringnein
    results[].statestringnein
    results[].latnumbernein
    results[].lngnumbernein
    results[].populationinteger | nullnein
    results[].areaKm2number | nullnein
  • 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307, Location: /login — mit callbackUrl, 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/json

    Felder

    FeldTypPflichtBeschreibung
    oktrueja
    ungeleseninteger (≥ 0)nein
  • 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307, Location: /login — mit callbackUrl, 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

FeldTypPflichtBeschreibung
userIdstringjaKennung der zu blockierenden Person.

Anfrage-Inhalt

FeldTypPflichtBeschreibung
reason"SPAM" | "HARASSMENT" | "NOT_INTERESTED" | "OTHER"ja
notestring | null (höchstens 300 Zeichen)nein

application/json· erforderlich

Antworten

  • 200Blockiert.

    application/json

    Felder

    FeldTypPflichtBeschreibung
    oktrueja
  • 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307, Location: /login — mit callbackUrl, 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

FeldTypPflichtBeschreibung
userIdstringjaKennung der Person, die blockiert wurde.

Antworten

  • 200Aufgehoben.

    application/json

    Felder

    FeldTypPflichtBeschreibung
    oktrueja
  • 307Keine gültige Sitzung: Die Route leitet zum Login weiter (HTTP 307, Location: /login — mit callbackUrl, 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