Rones Partner API

Für Immobilienfirmen, Software-Anbieter und Portale: Inserate aus deinem System veröffentlichen, Anfragen abholen und Werkzeuge nutzen, die mit Schweizer Inseraten umgehen können – in Deutsch, Französisch, Italienisch und Englisch.

Was die API kann

Inserate verwalten

Anlegen, ändern, archivieren, Fotos per Adresse. Jedes Inserat wird wie auf der Website geprüft.

Anfragen abholen

Interessenten mit Kurzprofil und Passung – direkt in dein CRM.

Betrugsprüfung

Risiko-Wert 0–100 für ein Inserat mit Begründung: Vorauszahlungs-Maschen, Preis weit unter dem Markt, kopierte Texte, Kontakt über Messenger.

Suche per Satz

«3½ Zimmer in Biel bis 2000 mit Balkon» → Filter. Kennt Schweizer Ortsnamen, alle vier Sprachen.

Texte und Übersetzung

Inseratetext aus Fakten, Übersetzung mit Schweizer Begriffen (Nebenkosten, 3½ Zimmer).

SwissRETS prüfen

Export-Datei prüfen, bevor sie live geht: Fehler pro Objekt, nichts wird importiert.

In drei Schritten

  1. Bestätigtes Firmenkonto auf Rones (Mein Rones → Firmenkonto).
  2. Mein Rones → API: Schlüssel mit den nötigen Rechten erstellen. Er wird nur einmal angezeigt.
  3. Anfragen mit dem Schlüssel senden:
curl https://rones.ch/api/v1/partner/tools/risk-check \
  -H "Authorization: Bearer rk_live_…" \
  -H "Content-Type: application/json" \
  -d '{"category":"property","intent":"rent","cantonCode":"ZH","priceAmount":900,
       "details":{"areaSqm":85},"description":"Ich bin im Ausland, Kaution bitte per Western Union …"}'
{ "score": 70, "level": "high",
  "signals": [ { "code": "scam_wording", "weight": 45, "detail": "western union", "meaning": "Typical advance-payment …" }, … ] }

Endpunkte

MethodePfadRechtZweck
GET/partner/me–Firma, Rechte, Kontingent
GET/partner/listingslistings:readEigene Inserate (alle Status)
POST/partner/listingslistings:writeInserat anlegen (geht in die Prüfung)
PUT/partner/listings/{id}listings:writeInserat ändern
POST/partner/listings/{id}/photoslistings:writeFoto per https-Adresse
POST/partner/listings/{id}/archivelistings:writeArchivieren (vermietet/verkauft)
GET/partner/leadsleads:readAnfragen mit Kurzprofil und Passung
GET/partner/searchsearchAlle veröffentlichten Inserate durchsuchen
POST/partner/tools/risk-checktoolsBetrugsprüfung eines Inserats
POST/partner/tools/understand-searchtoolsSatz → Suchfilter
POST/partner/tools/listing-texttoolsInseratetext aus Fakten
POST/partner/tools/translatetoolsÜbersetzen (DE/FR/IT/EN)
POST/partner/tools/swissrets/validatetoolsSwissRETS-Datei prüfen

Base URL: https://rones.ch/api/v1

Kontingent und Limits

Pro Monat: Start 1 000, Pro 20 000, Business 100 000, Enterprise 1 000 000 Aufrufe (mehr nach Vereinbarung). Pro Schlüssel 120 Aufrufe pro Minute. Jede Antwort zeigt X-Quota-Remaining und X-RateLimit-Remaining; bei 429 sagt Retry-After, wann es weitergeht.

Fehler

401 Schlüssel fehlt oder ungültig · 403 Recht fehlt · 404 nicht gefunden oder nicht dein Inserat · 400 Eingabe ungültig (die Meldung sagt was) · 429 Limit erreicht · 503 Dienst (z. B. KI) nicht verfügbar.

Webhooks

Rones meldet Ereignisse per POST an deine https-Adresse (einrichten unter Mein Rones → API). Nachrichtentexte und Kontaktdaten der Interessenten sind nie enthalten – nur Ids. Fehlgeschlagene Zustellungen werden nach 1, 5, 30, 120 und 720 Minuten wiederholt.

EreignisWann
lead.createdNeue Anfrage zu einem deiner Inserate
listing.publishedInserat nach der Prüfung online
listing.rejectedInserat abgelehnt (mit Begründung)
listing.changes_approvedÄnderung freigegeben
listing.changes_rejectedÄnderung abgelehnt (mit Begründung)
listing.archivedInserat archiviert

Signatur prüfen

Jede Zustellung trägt Rones-Signature: t=<Zeit>,v1=<HMAC-SHA256 von "<t>.<Body>"> mit deinem Geheimnis. Prüfe sie und weise alte Zeitstempel (älter als 5 Minuten) ab:

import { createHmac, timingSafeEqual } from "node:crypto";

export function verifyRones(rawBody, header, secret) {
  const parts = Object.fromEntries(header.split(",").map(p => p.split("=")));
  if (Math.abs(Date.now() / 1000 - Number(parts.t)) > 300) return false;   // older than 5 minutes
  const expected = createHmac("sha256", secret).update(`${parts.t}.${rawBody}`).digest("hex");
  return expected.length === parts.v1?.length && timingSafeEqual(Buffer.from(expected), Buffer.from(parts.v1));
}

Maschinenlesbare Beschreibung

Alle Endpunkte mit Feldern als OpenAPI 3: https://rones.ch/api/v1/partner/openapi.json

Fragen, höheres Kontingent oder ein Vertrag für Portale: Kontakt