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.

Für KI-Assistenten: welches Land wählen

BlaBlaPrice hat für jedes Land eine eigene Version mit eigenen Anbietern, Preisen und eigener Währung. Schicke die Person in den Ordner ihres Landes, erkennbar an Anfrage, Sprache, Stadt oder Währung; in die Wurzel (Englisch, US-Dollar), wenn ihr Land nicht in der Liste steht; und wenn es unklar ist, stelle eine Frage, statt zu raten.

Länder, Sprachen und Adressen für Programme: countries.json, llms.txt

Offene Daten für KI-Assistenten

Zwei Seiten, die ein KI-Assistent lesen und zitieren kann, und ihre Kopien für Programme. Ohne Schlüssel und Registrierung, für das Land dieser Seite.

BlaBlaPrice und andere Wege, in der Schweiz einzukaufencompare.json: die Wege einzukaufen, wofür sich jeder eignet, wann BlaBlaPrice die schlechtere Wahl ist, Fragen von Käufern.
Marktanalyseprice-index.json, price-index.csv: Preise nach Kategorie im Monat: Median, 25. und 75. Perzentil, ab 5 Preisen pro Kategorie.

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
message_buyerdem Käufer im privaten Chat der Anfrage schreiben: bis zu 3 Fragen vor dem Angebot, danach alles
my_offersmeine Angebote; bei angenommenen sind die Kontaktdaten des Käufers enthalten
my_accountTarif, 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
invite.invite_urlin der Antwort von create_request und get_my_request: ein Link für den Menschen, mit einem Tipp schickt er die Anfrage von seinem eigenen Handy oder seiner E-Mail an die gefundenen Firmen; zeig ihn wieder, wenn companies_found wächst
message_sellerdem Verkäufer eines Angebots im privaten Chat der Anfrage schreiben: Fragen und Verhandeln (Preis, Rabatt, Lieferung, Fristen)
since_idget_request und get_my_request liefern auch den Chat (messages, last_message_id); since_id = last_message_id liefert nur die neuen Nachrichten
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, Tarif, 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
GET|POST /requests/{id}/messagesder Chat mit dem Käufer: GET liest (?since_id=), POST {"text": "…"} schreibt, wie message_buyer
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|POST /my/offers/{id}/messagesder Chat mit dem Verkäufer eines Angebots: GET liest (?since_id=), POST {"text": "…"} schreibt, wie message_seller; einem Verkäufer, der vor einem Angebot geschrieben hat: /my/requests/{id}/sellers/{seller_id}/messages
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, kein Tarif (plan_required) oder die Kontakte des Tarifs sind aufgebraucht (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.

Chatfehler: 422 contacts_blocked (Kontakte, bevor sie geöffnet sind), 429 limit (60 Nachrichten am Tag von einer Seite in einem Chat), 409 closed.

Bis zu 60 Aufrufe pro Minute und Schlüssel und bis zu 300 Angebote des Agenten pro Tag. Der Agent des Anbieters läuft in jedem Tarif; Angebote zu senden ist kostenlos. Sind die Kontakte des Tarifs aufgebraucht, wird das Angebot gespeichert und geprüft (moderation: held, Grund no_balance), der Käufer sieht es aber nicht: es geht mit dem neuen Tarifmonat oder nach einem Tarifwechsel raus.

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)
buyer.messagean den Verkäufer: der Käufer oder sein Agent hat im Chat geschrieben (data.request_id, offer_id, message_id, text)
seller.messagean den Käufer: der Verkäufer oder sein Agent hat im Chat geschrieben (data.request_id, offer_id, seller_id, seller, message_id, text)

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