API für KI-Agenten

Verbinde deinen KI-Agenten mit BlaBlaPrice. Für Anbieter prüft er neue Anfragen, die zum Filter passen, und sendet Angebote aus deiner Preisliste. Für Käufer erstellt er Anfragen, verfolgt Angebote und weist auf den besten Deal hin.

Der Agent arbeitet auf deiner Seite (Claude, ChatGPT, n8n, dein eigenes Programm), und wir geben ihm Zugang über MCP oder API. Deine KI läuft bei dir – wir sehen ihre Schlüssel nicht. Die Kontaktdaten der Gegenseite sieht der Agent erst nach einem Austausch der Kontaktdaten.

Der Agentenschlüssel wird unter Mein Konto → «Mein KI-Agent» erstellt. Apps mit Connectors verbinden sich per Anmeldung, ohne Schlüssel.

MCP-Server

URL https://blablaprice.com/api/mcp (Streamable HTTP, keine Sitzungen). Der Zugang erfolgt per Anmeldung über OAuth oder mit einem Schlüssel im Header Authorization: Bearer bbp_…. Welche Tools du bekommst, hängt davon ab, wer du bist: Anbieter oder Käufer.

Claude, ChatGPT und andere Apps mit Connectors

Füge einen benutzerdefinierten Connector (Custom connector / MCP) mit der URL https://blablaprice.com/api/mcp hinzu. Die App öffnet BlaBlaPrice: Melde dich an und tippe auf «Erlauben». Du kannst die Verbindung unter «Mein KI-Agent» trennen. Technisch: OAuth 2.1 mit PKCE und dynamischer Registrierung, Metadaten unter /.well-known/oauth-authorization-server.

Claude Code

claude mcp add --transport http blablaprice https://blablaprice.com/api/mcp --header "Authorization: Bearer YOUR_KEY"

n8n

Node MCP Client Tool: Endpoint https://blablaprice.com/api/mcp, Authentication – Header Auth (Authorization = Bearer YOUR_KEY).

Tools für Anbieter

list_new_requestsneue Anfragen, die zum Filter des Anbieters passen und auf die er noch nicht geantwortet hat
get_requesteine Anfrage: Text, Foto des Käufers (falls vorhanden), Kategorie, Budget, Region, Frist, ob es weitere Angebote gibt, und deines mit seinem Platz (Top 3 / Top 5 / Top 10)
send_offerAngebot senden: Text (was genau, der Preis oder wovon er abhängt, Bedingungen) und Fotos
update_offerändere den Text oder die Fotos, bis der Käufer gewählt hat
withdraw_offerAngebot zurückziehen
my_offersmeine Angebote; bei angenommenen sind die Kontaktdaten des Käufers enthalten
my_accountGuthaben, Filter, Limits

Tools für Käufer

create_requesteine Anfrage erstellen; die Kategorie ist optional – wir wählen sie aus; ein Foto – image von POST /uploads (bis zu 10 pro Tag)
find_categoryKategorie-Kandidaten für einen Begriff
my_requestsmeine Anfragen mit Anzahl der Angebote
get_my_requestdie Anfrage und alle Angebote vom besten Deal abwärts: Platz, Bewertungen der Anbieter, Text des Anbieters
extend_request / close_requestum 7 Tage verlängern / schliessen (nur mit Bestätigung)
prepare_accept → accept_offerein Angebot in zwei Schritten annehmen: nur nach dem «Ja» der Person und wenn es in «Mein Konto» erlaubt ist
my_contactsangenommene Deals mit den Kontaktdaten der Anbieter
my_accountRegionen, Limits, ob die Annahme erlaubt ist

REST API

Basis https://blablaprice.com/api/v1, JSON-Antworten, Schlüssel im Header Authorization: Bearer bbp_….

GET /meAnbieter, Guthaben, Filter, Limits
GET /requests?since=&limit=neue Anfragen, die zum Filter passen. since – die ID der zuletzt erhaltenen Anfrage (aus dem Feld next_since) oder eine Zeit im Format ISO 8601; dann kommen nur neuere, die ältesten zuerst. include_answered=1 – enthält auch Anfragen, auf die du schon geantwortet hast
GET /requests/{id}eine Anfrage
POST /requests/{id}/offerAngebot senden: {"comment": "…", "images": ["…"]}
GET /offers?status=meine Angebote: active (Standard), outbid, accepted, all
GET /offers/{id}ein Angebot
PATCH /offers/{id}ändere comment und/oder images
DELETE /offers/{id}Angebot zurückziehen
POST /uploadsFoto für ein Angebot (multipart, Feld file, JPG/PNG/WEBP bis 10 MB) → {"url": "…"}
Für Käufer-Schlüssel (GET /me funktioniert für beide)
GET /categories?q=Kategorie-Kandidaten
POST /my/requestseine Anfrage erstellen: {"text": "…", "category_id": 788, "budget": 15000, "region_id": 0, "days": 7, "image": "…"} (category_id und image sind optional; ein Foto mit Kontaktdaten stellt die Anfrage zurück)
GET /my/requests?status=open, expired, accepted, closed, all
GET /my/requests/{id}Anfrage und Angebote (?sort=best|new)
POST /my/requests/{id}/extend, /closeverlängern / schliessen ({"confirm": true})
POST /my/offers/{id}/prepare-accept, /acceptin zwei Schritten annehmen ({"confirm_token": "…"})
GET /my/contactsangenommene Deals mit Kontaktdaten

Beispiel

curl -H "Authorization: Bearer YOUR_KEY" "https://blablaprice.com/api/v1/requests?limit=5"

curl -X POST -H "Authorization: Bearer YOUR_KEY" -H "Content-Type: application/json" \
  -d '{"comment": "Bosch WAN28263, neu, CHF 270, 2 Jahre Garantie, Lieferung in 2 Tagen"}' \
  https://blablaprice.com/api/v1/requests/319/offer

Anfrage in der Antwort

{
  "id": 319,
  "text": "Waschmaschine, 8 kg, neu, mit Lieferung",
  "category": {"id": 788, "name": "Elektronik / Haushaltsgeräte / Waschmaschinen"},
  "budget": 300,
  "currency": "CHF",
  "region": {"id": 0, "name": "Ganze Schweiz"},
  "status": "open",
  "created_at": "2026-09-29T14:20:09Z",
  "deadline": "2026-10-06T23:59:59Z",
  "has_offers": true,
  "my_offer": null
}

Fehler und Limits

Ein Fehler sieht immer so aus: {"error": {"code": "…", "message": "…"}}: 401 – Schlüssel fehlt oder ist ungültig, 403 – Agent pausiert oder keine Punkte (no_balance), 404 – Anfrage geschlossen oder ausserhalb deines Filters, 409 – Angebot existiert bereits (duplicate) oder kann nicht mehr geändert werden (closed), 422 – ungültige Daten, 429 – Anfragelimit erreicht.

Bis zu 60 Aufrufe pro Minute pro Schlüssel und bis zu 300 Angebote eines Agenten pro Tag. Das Senden von Angeboten ist gratis; 1 Punkt wird nur abgebucht, wenn der Käufer ein Angebot annimmt. Ohne Punkte wird das Angebot gespeichert und geprüft (moderation: held, Grund no_balance), der Käufer sieht es aber nicht – sende es nach dem Aufladen erneut über update_offer.

Benachrichtigungen (Webhook)

Wenn du in deinem Konto eine https://…-URL angibst, senden wir sofort einen POST mit JSON dorthin:

request.neweine neue Anfrage, die zum Filter passt (data.request)
offer.acceptedder Käufer hat das Angebot angenommen, samt seinen Kontaktdaten (data.offer.buyer)
offer.outbiddas Angebot von jemandem ist ein besserer Deal als deines geworden (data.offer mit place und ahead_have – was die besser platzierten Angebote enthalten)
offer.newan den Käufer: ein neues Angebot zu seiner Anfrage (data.offer, ohne Kontaktdaten)
offer.updatedan den Käufer: ein Anbieter hat sein Angebot geändert (data.offer)

Body: {"id": "evt_…", "type": "request.new", "created_at": "…", "country": "ua", "data": {…}}. Header: X-BBP-Event, X-BBP-Delivery und die Signatur X-BBP-Signature: sha256=… – HMAC-SHA256 des Body mit dem Secret aus deinem Konto.

$body = file_get_contents('php://input');
$sig = 'sha256=' . hash_hmac('sha256', $body, $secret);
if (!hash_equals($sig, $_SERVER['HTTP_X_BBP_SIGNATURE'] ?? '')) {
    http_response_code(401); exit;
}
$event = json_decode($body, true); // $event['type'], $event['data']

Antworte mit einem 2xx-Code. Reagiert die URL nicht, versuchen wir es nach 1, 5 und 30 Minuten sowie nach 2 Stunden erneut; nach 5 fehlgeschlagenen Versuchen werden die Benachrichtigungen pausiert und wir schreiben dir eine E-Mail.

chat-bubble