Skip to content

API-Referenz

Fynex stellt eine REST-API für den programmatischen Zugriff bereit. Alle Endpoints erfordern Authentifizierung über ein Supabase-JWT-Token im Header Authorization: Bearer <token>.

Basis-URL:

  • Entwicklung: http://localhost:3001
  • Produktion: https://api.fynex.solutions

Dispatch

E-Mail senden

POST /api/dispatch/email
ParameterTypErforderlichBeschreibung
account_idUUIDJaZielkonto
template_idUUIDNeinZu verwendende Message-Template
action_typestringNeinAction-Typ (Standard: reminder)

Responses: 200 E-Mail gesendet, 401 Unauthorized, 422 Dispatch blockiert.

SMS senden

POST /api/dispatch/sms
ParameterTypErforderlichBeschreibung
account_idUUIDJaZielkonto
template_idUUIDNeinZu verwendende Message-Template
action_typestringNeinAction-Typ (Standard: reminder)

Responses: 200 SMS gesendet, 422 Dispatch blockiert.

WhatsApp senden

POST /api/dispatch/whatsapp
ParameterTypErforderlichBeschreibung
account_idUUIDJaZielkonto
template_idUUIDNeinZu verwendende Message-Template
action_typestringNeinAction-Typ (Standard: reminder)

Responses: 200 WhatsApp-Nachricht gesendet, 422 Dispatch blockiert.

Voice-Call starten

POST /api/dispatch/voice
ParameterTypErforderlichBeschreibung
account_idUUIDJaZielkonto
agent_typestringNeinai (Standard) oder human
supervisor_user_idUUIDNeinUser-ID für überwachte Calls
voice_opening_modestringNeinNur AI: inherit (Standard), callee_first oder agent_first. Wird ignoriert, wenn agent_type human ist.

Responses: 200 Call gestartet (enthält call_sid und conversation_id), 422 Dispatch blockiert, 502 Provider-Fehler.

Dispatch-Validierung

Alle Dispatch-Endpoints setzen diese Regeln vor dem Versand durch:

  • Opt-out — Blockiert, wenn der Kontakt abgemeldet ist.
  • Frequency limits — Blockiert, wenn die maximale Anzahl Kontakte pro Tag/Woche überschritten würde.
  • Allowed hours — Blockiert außerhalb der konfigurierten Kontaktzeiten der Organisation.
  • Account paused — Blockiert, wenn der Account-Status paused ist.

Bei Blockierung enthält die Response { "blocked": true, "error": "reason" }.

Admin

Telefonnummern

POST /api/admin/phone-numbers
ParameterTypErforderlichBeschreibung
actionstringJasearch, buy oder release
countrystringNeinLändercode für Suche
areaCodestringNeinVorwahl für Suche
phoneNumberstringNeinNummer zum Kaufen oder Freigeben
organizationIdUUIDNeinZuzuweisende Organisation
channelConfigIdUUIDNeinZu aktualisierende Channel-Config

E-Mail-Domains

POST /api/admin/email-domains
ParameterTypErforderlichBeschreibung
actionstringJacreate oder verify
domainstringNeinDomain-Name
organizationIdUUIDNeinOrganisation
channelConfigIdUUIDNeinChannel-Config

ElevenLabs Agent

POST /api/admin/elevenlabs-agent
ParameterTypErforderlichBeschreibung
actionstringJaprovision, status oder set_agent_id
organizationIdUUIDNeinOrganisation (meist aus Auth abgeleitet)
agent_idstringBei set_agent_idElevenLabs Agent-ID für den Voice-Kanal

provision legt den ConvAI-Agenten an bzw. aktualisiert ihn und registriert bei konfigurierter Twilio-Nummer ohne bestehende ElevenLabs-Telefon-ID die Nummer automatisch bei ElevenLabs. Die Antwort kann phone_number_id enthalten.

set_agent_id ist für Organisationen mit eigenverwalteten Zugangsdaten und eigenem Agent gedacht.

Sprach-Konfiguration (Voice)

GET /api/admin/voice-config
PATCH /api/admin/voice-config

GET liefert aktuelle Defaults: llm, voice_id, voices (Sprach-Mapping), voice_opening_mode, agent_id, org_language, supported_llms, curated_voices.

PATCH aktualisiert Organisation und Voice-Kanal in einem Request. Mindestens ein Feld senden:

FeldTypBeschreibung
llmstringLLM-ID für Conversational AI (gegen unterstützte Liste validiert)
voice_idstringStandard-ElevenLabs-Stimme für die Hauptsprache der Org
voicesobjectMap Sprachcode → ElevenLabs-Stimmen-ID
voice_opening_modestringcallee_first oder agent_first
agent_idstringElevenLabs Agent-ID (z. B. Eigenverwaltung)

Campaigns

Campaign anlegen

POST /api/admin/campaigns
ParameterTypErforderlichBeschreibung
namestringJaCampaign-Name (1–200 Zeichen)
objectivestringNeinCampaign-Ziel (max. 1000 Zeichen)
strategy_idUUIDNeinZuzuweisende Strategy (erforderlich zum Aktivieren)
statusstringNeinInitialer Status (Standard: draft)
start_datestringNeinStartdatum (YYYY-MM-DD)
end_datestringNeinEnddatum (YYYY-MM-DD, muss ≥ Start sein)

Responses: 201 Campaign erstellt, 422 Validierung fehlgeschlagen (ungültige Daten, fehlende Strategy bei aktivem Status).

Campaign aktualisieren

PATCH /api/admin/campaigns/:id

Akzeptiert dieselben Felder wie beim Anlegen. Status-Übergänge werden validiert:

  • draft → active (erfordert strategy_id)
  • active → paused (leert ausstehende Queue-Items)
  • active → completed
  • paused → active, paused → completed

Responses: 200 Campaign aktualisiert, 422 Ungültiger Status-Übergang oder Validierungsfehler.

Campaign löschen

DELETE /api/admin/campaigns/:id

Entfernt die Campaign. Allen zugewiesenen Accounts wird campaign_id auf null gesetzt. Ausstehende Queue-Items für diese Campaign werden abgebrochen.

Responses: 200 Campaign gelöscht.

Campaign-Summary

GET /api/admin/campaigns/:id/summary

Liefert berechnete Campaign-Metriken:

FeldTypBeschreibung
campaignobjectCampaign-Details (id, name, status, dates)
account_countnumberGesamtzahl zugewiesener Accounts
contacted_countnumberAccounts mit mindestens einer Interaction
promise_countnumberZahlungszusagen von Campaign-Accounts
total_recoverednumberSumme der Zahlungen von Campaign-Accounts
contact_ratenumbercontacted_count / account_count (0,0 bis 1,0)

Responses: 200 Summary-Daten.

Execution Engine

Execution pausieren

POST /api/admin/execution/pause

Pausiert den automatischen Dispatch für Ihre Organisation. Queue-Items bleiben bestehen, werden aber nicht verarbeitet.

Responses: 200 Execution pausiert.

Execution fortsetzen

POST /api/admin/execution/resume

Setzt die automatische Dispatch-Verarbeitung fort.

Responses: 200 Execution fortgesetzt.

Queue-Status abrufen

GET /api/admin/execution/status

Liefert Anzahlen ausstehender, verarbeitender, abgeschlossener, fehlgeschlagener und übersprungener Items für heute sowie das Pausen-Flag.

Accounts enqueuen

POST /api/admin/execution/enqueue
ParameterTypErforderlichBeschreibung
campaign_idUUIDNeinAuf eine Campaign begrenzen

Löst manuell die Account-Bewertung und das Enqueuing aus. Berechtigte Accounts werden in die Execution-Queue aufgenommen. Wenn campaign_id angegeben ist, muss die Campaign active sein und im Datumsbereich liegen.

Responses: 200 Liefert { enqueued: <count> }, 422 Campaign nicht aktiv oder außerhalb des Datumsbereichs.

Bulk Operations

Bulk Account Actions

POST /api/admin/bulk/accounts
ParameterTypErforderlichBeschreibung
account_idsUUID[]JaZu ändernde Accounts (max. 500)
actionstringJapause, resume, assign_campaign, assign_strategy, change_status
campaign_idUUIDNeinErforderlich für assign_campaign
strategy_idUUIDNeinErforderlich für assign_strategy
statusstringNeinErforderlich für change_status

Responses: 200 Liefert { affected: <count> }.

Billing

Checkout Session erstellen

POST /api/billing/checkout
ParameterTypErforderlichBeschreibung
price_idstringJaStripe Price ID
success_urlURLJaRedirect-URL nach Zahlung
cancel_urlURLJaRedirect-URL bei Abbruch

Responses: 200 Liefert { url: "https://checkout.stripe.com/..." }, 503 Billing nicht konfiguriert.

Billing Portal

POST /api/billing/portal
ParameterTypErforderlichBeschreibung
return_urlURLJaRedirect-URL nach Portal

Responses: 200 Liefert { url: "https://billing.stripe.com/..." }, 503 Billing nicht konfiguriert.

Notifications

Notifications auflisten

GET /api/notifications

Liefert alle Notifications für den authentifizierten Benutzer, sortiert nach neuesten zuerst.

Notification als gelesen markieren

PATCH /api/notifications/:id/read

Markiert eine einzelne Notification als gelesen.

Alle als gelesen markieren

POST /api/notifications/mark-all-read

Markiert alle ungelesenen Notifications für den authentifizierten Benutzer als gelesen.

Voice

Signed URL abrufen

POST /api/voice/signed-url

Liefert eine signierte WebSocket-URL für browserbasierte Voice-Sessions.

ParameterTypErforderlichBeschreibung
organization_idUUIDJaOrganisation

Response: { "signedUrl": "wss://..." }

Capabilities prüfen

POST /api/voice/capabilities

Prüft, ob eine Organisation Voice-Calls tätigen kann (Twilio-Credentials, ElevenLabs-Agent, Telefonnummer).

ParameterTypErforderlichBeschreibung
organization_idUUIDJaOrganisation

Interactions

Voice-Transcript wiederherstellen

POST /api/interactions/:id/refresh-voice

Holt die Conversation-Daten von ElevenLabs für eine Voice-Interaction, deren Post-Call-Webhook verpasst wurde. Aktualisiert Transcript, Disposition, Contact Result, Sentiment und alle Analyse-Metadaten. Wenn der Strategy-Step in waiting_response stecken blieb, wird er automatisch freigegeben.

Dieser Endpoint ist idempotent — ein erneuter Aufruf für eine Interaction, die bereits ein Transcript hat, überschreibt es mit den neuesten Daten von ElevenLabs.

ParameterTypOrtErforderlichBeschreibung
idUUIDpathJaInteraction ID

Responses:

CodeBeschreibung
200Transcript wiederhergestellt; liefert aktualisierte Interaction
404Interaction nicht gefunden oder falsche Organisation
422Keine Voice-Interaction, keine Conversation-ID oder Call noch aktiv
502Abruf der ElevenLabs-API fehlgeschlagen

Public API v1

Die v1-API ermöglicht programmatischen Zugriff für die Integration externer Systeme. Authentifizierung über Header X-API-Key oder Bearer-JWT.

Authentifizierung

MethodHeaderAnwendungsfall
API KeyX-API-Key: fynex_pk_...Machine-to-machine-Integrationen
JWTAuthorization: Bearer <token>Browserbasierter Zugriff

Accounts

POST /api/v1/accounts

Legt einen Account an oder führt Upsert durch. Wenn external_id angegeben ist und einem bestehenden Account entspricht, wird dieser aktualisiert.

ParameterTypErforderlichBeschreibung
external_idstringNeinEindeutige ID Ihres Systems für diesen Account
source_systemstringNeinBezeichnung des Quellsystems
contactobjectJaKontaktdaten (Name erforderlich, E-Mail/Telefon/WhatsApp optional)
total_amountnumberJaGesamtforderungsbetrag
pending_balancenumberNeinStandard: total_amount
referencestringNeinMenschenlesbare Referenznummer
currencystringNeinISO-4217-Code (Standard: ARS)
GET /api/v1/accounts

Listet Accounts mit Pagination.

ParameterTypErforderlichBeschreibung
limitnumberNeinMax. Ergebnisse (Standard 50, max. 1000)
offsetnumberNeinErste N Ergebnisse überspringen
statusstringNeinFilter nach collection_status
external_idstringNeinFilter nach external_id
GET /api/v1/accounts/:id

Ruft einen Account anhand der Fynex-ID ab. Mit ?by=external_id erfolgt die Suche per external ID.

PATCH /api/v1/accounts/:id

Aktualisiert Account-Felder.

Contacts

POST /api/v1/contacts
GET /api/v1/contacts
GET /api/v1/contacts/:id
PATCH /api/v1/contacts/:id

Gleiches Muster wie bei Accounts. Unterstützt Upsert per external_id.

Payments

POST /api/v1/payments

Registriert eine externe Zahlung. Übergeben Sie account_id oder account_external_id.

Import & Export

POST /api/v1/import

Startet asynchronen Bulk-Import. Liefert { job_id, status }.

GET /api/v1/import/:jobId

Prüft den Fortschritt des Import-Jobs.

POST /api/v1/export/accounts

Exportiert Accounts als JSON oder CSV mit Filtern.

Webhook Subscriptions

POST /api/v1/webhooks
GET /api/v1/webhooks
PATCH /api/v1/webhooks/:id
DELETE /api/v1/webhooks/:id
POST /api/v1/webhooks/:id/test

Verwaltet ausgehende Webhook-Subscriptions.

Rate Limits

Alle v1-Endpoints: 100 Requests pro 15 Minuten pro API-Key.

Webhooks

Diese Endpoints empfangen Callbacks von externen Providern. Sie werden nicht von Client-Anwendungen aufgerufen.

EndpointProviderValidierung
POST /api/webhooks/twilioTwilioHMAC-SHA1-Signatur
POST /api/webhooks/resendResendSvix HMAC-SHA256
POST /api/webhooks/elevenlabsElevenLabsHMAC-SHA256
POST /api/webhooks/agent-tool-handlerElevenLabsHMAC-SHA256
POST /api/webhooks/stripeStripeStripe-Signatur

System

Health Check

GET /health

Liefert { "status": "ok", "timestamp": "..." }, wenn der Server läuft.