friendship

Friendship Tracker

Eine persönliche Kontaktbuch-API. Verwalte Kontakte sowie deren Notizen, Aktivitäten und Erinnerungen - alles über parent_id an einen einzelnen Kontakt gebunden. Gebaut für Einzelnutzer, die ein Monica-ähnliches CRM führen.

Basis-URL

https://friendship-tracker.com

Nutzung & Abrechnung

Faire API-Nutzung im Rahmen der Anfragelimits ist in jedem Plan inbegriffen - die Integration soll sich nicht künstlich kompliziert anfühlen, nur weil ein günstigerer Plan gebucht ist. Enterprise-Kunden bekommen angepasste Limits nach Bedarf.

On-Demand-Betreuung ist verfügbar, und unser Entwicklerteam baut bei Bedarf maßgeschneiderte Integrationen - sprich uns an, wenn dein Anwendungsfall mehr braucht als die Standardanbindung.

Schnellstart

  1. 1

    Token erstellen

    Öffne in Friendship Tracker das Integrationen-Menü, klicke *Neues Token*, wähle Name und Berechtigungen, kopiere den pat_… Wert. Er wird genau einmal angezeigt.

  2. 2

    Erste Anfrage senden

    Token als Bearer-Header an einen Friendship Tracker-Endpunkt senden, den deine Berechtigungen abdecken. Paginierung, Filter und Sortierung sind pro Modell dokumentiert.

    curl -H "Authorization: Bearer pat_…" \
    https://friendship-tracker.com/xapi2/data/activity
  3. 3

    Live-Updates abonnieren

    Mit einem einzelnen WebSocket alle Create/Update/Delete-Ereignisse in Echtzeit empfangen - gleiche Zugriffsregeln, gleiches Token. Polling entfällt.

    const ws = new WebSocket(`wss://${location.host}/xapi2/ch?token=${token}`)
    ws.onopen = () => ws.send(
    JSON.stringify({ op: "subscribe", id: "s1", dataType: "activity" }),
    )
    ws.onmessage = (e) => console.log(JSON.parse(e.data))

Diese Dokumentation beschreibt jeden Endpunkt, den die App öffentlich macht. Modell-Seiten enthalten konkrete Code-Beispiele in curl, JavaScript, TypeScript und WebSocket.

Datenmodelle

Produktionsreife, branchenübliche Datenmodelle. Jedes Objekt wird sicher verwaltet - Validierung, Zugriffsregeln und Audit laufen einheitlich auf jedem Pfad - und die Daten gehören jederzeit dem jeweiligen Kunden. Export und Löschung sind selbstverständlich.

Pfeile zeigen vom referenzierenden Datenmodell zum referenzierten. Markierungen am Linienende beschreiben die Kardinalität (z.B. * = beliebig viele, 1 = genau eines, 0..1 = optional). Klick auf einen Knoten öffnet die Modell-Seite.

*1*1*1*1*1*1*1*1*1*1contact29 Felderjournal_entry5 Felderactivityparent_id → contactconversationparent_id → contactcustom_fieldparent_id → contactgiftparent_id → contactlife_eventparent_id → contactnoteparent_id → contactpetparent_id → contactrelationshipparent_id → contacttarget_id → contactreminderparent_id → contact
Pflicht-ReferenzOptionale Referenz
Aktivitäten
activity

Eine protokollierte Interaktion mit einem Kontakt (Treffen, Anruf, E-Mail, Nachricht, Veranstaltung, sonstiges). Über parent_id an einen Kontakt gebunden, optional mit occurred_at und location.

6 Felder1 Refs
GETGETPOSTPATCHDELETE
Kontakte
contact

Eine Person, mit der du in Kontakt bleibst. Trägt Identität (Name, Spitzname, E-Mail, Telefon), Kontext (Firma, Adresse, Social-Links) und Lifecycle-Felder (Geburtstag, Jahrestag, letzter Kontakt). Übergeordnetes Objekt für Notizen, Aktivitäten und Erinnerungen.

29 Felder10
GETGETPOSTPATCHDELETE
Gespräche
conversation

Leichtgewichtiges Kommunikations-Log: ein einzelner Anruf / eine SMS / ein Video- oder Präsenztermin. Beim Erfassen aktualisiert der bump_last_contacted-Hook automatisch das last_contacted_at am übergeordneten Kontakt.

7 Felder1 Refs
GETGETPOSTPATCHDELETE
Eigene Felder
custom_field

Beliebiges Label/Wert-Paar am Kontakt. kind steuert die Darstellung (Text / Zahl / Datum / URL / Boolean); auf der Leitung wird nur der textuelle value übertragen.

5 Felder1 Refs
GETGETPOSTPATCHDELETE
Geschenke
gift

Eine Geschenkidee, ein verschenktes oder erhaltenes Geschenk - an einen Kontakt gebunden. Status steuert die Spalte (Idee / Gegeben / Erhalten).

9 Felder1 Refs
GETGETPOSTPATCHDELETE
Journal
journal_entry

Ein eigenständiger Tagebucheintrag, nicht an einen Kontakt gebunden. Stimmung und Tags helfen beim Wiederfinden auf der Journal-Seite.

5 Felder
GETGETPOSTPATCHDELETE
Lebensereignisse
life_event

Wichtige Ereignisse im Leben eines Kontakts - Geburtstage, Jahrestage, Jobwechsel, Umzüge, Meilensteine. recurring markiert jährlich wiederkehrende Termine für das Dashboard.

7 Felder1 Refs
GETGETPOSTPATCHDELETE
Notizen
note

Ein freier Journaleintrag, über parent_id an einen Kontakt gebunden. Mehrere Notizen pro Kontakt, chronologisch geordnet. Unterstützt eine pinned-Flagge.

3 Felder1 Refs
GETGETPOSTPATCHDELETE
Tiere
pet

Ein Tier des Kontakts. Vordefinierte Tierarten (Hund/Katze/Vogel/…) plus species_other für seltene Fälle. Optional Rasse, Geburtsdatum, Farbe, Notizen.

8 Felder1 Refs
GETGETPOSTPATCHDELETE
Beziehungen
relationship

Eine gerichtete Verbindung zwischen zwei eigenen Kontakten. Der pair_relationship-Hook spiegelt jede Verknüpfung beim Zielkontakt, damit beide Detailseiten sie sehen.

6 Felder2 Refs
GETGETPOSTPATCHDELETE
Erinnerungen
reminder

Eine einmalige Erinnerung zu einem Kontakt: due_date, message und ein completed-Boolean. Wiederkehrende Erinnerungen sind bewusst nicht abgebildet.

4 Felder1 Refs
GETGETPOSTPATCHDELETE