GET /api/v1/status
Prüft den Schlüssel und zeigt Paket, Rechte und Verbrauch im laufenden Monat.
Beispiel
curl "https://hops24.de/api/v1/status" \ -H "Authorization: Bearer hk_test_…"
Alles, was du für die Integration brauchst. Version 1 · Basis-URL: https://hops24.de/api/v1
OpenAPI-Datei herunterladen Noch kein Schlüssel? Kostenlos registrieren
Sende deinen Schlüssel bei jedem Abruf im Header. Schlüssel nie in URLs oder öffentlichem Code ablegen – Domains für Browser-Aufrufe trägst du selbst in deinem API-Konto ein.
Authorization: Bearer hk_live_… # oder X-API-Key: hk_live_…
Schlüssel mit hk_test_ liefern feste Beispieldaten (Angebote 900001–900004). So kannst du integrieren, bevor du live gehst. Live-Schlüssel beginnen mit hk_live_ und liefern echte Angebote ab dem 20.10.2026.
Erfolgreiche Antworten liefern data (und bei Listen meta mit Seiteninfos), Fehler liefern error mit code und message. Preise als Zahl in der Währung aus currency (EUR, in der Schweiz CHF, im Vereinigten Königreich GBP); fehlt ein Preis, ist price_on_request true.
{ "data": [ … ], "meta": { "page": 1, "per_page": 20, "total": 14, "pages": 1 } }
{ "error": { "code": "quota_exceeded", "message": "…" } }
| HTTP | Code |
|---|---|
| 400 | invalid_parameter |
| 401 | unauthorized |
| 403 | insufficient_scope · no_provider_account · provider_approval_required · origin_not_allowed · client_suspended |
| 404 | not_found |
| 409 | idempotency_conflict |
| 412 | version_conflict |
| 428 | precondition_required |
| 429 | rate_limited · quota_exceeded |
| 503 | temporarily_unavailable |
| 500 | server_error |
Jeder Abruf zählt zum Monatskontingent. Die Header X-Quota-Limit und X-Quota-Remaining zeigen den Stand. Ist das Kontingent erschöpft, antwortet die API mit 429 – es entstehen keine Zusatzkosten.
| Paket | Abrufe / Monat | Abrufe / Sekunde |
|---|---|---|
| Free | 1.000 | 2 |
| Starter | 25.000 | 10 |
| Business | 250.000 | 30 |
| Partner | nach Vereinbarung | 50 |
/api/v1/statusPrüft den Schlüssel und zeigt Paket, Rechte und Verbrauch im laufenden Monat.
Beispiel
curl "https://hops24.de/api/v1/status" \ -H "Authorization: Bearer hk_test_…"
/api/v1/categoriesAlle Kategorien mit Übersetzungen (de, en, es, fr, nl, it, pt).
Recht: listings:read
Beispiel
curl "https://hops24.de/api/v1/categories" \ -H "Authorization: Bearer hk_test_…"
/api/v1/changesÖffentliche Änderungen und Rücknahmen seit einem Cursor. Abruf etwa alle 60 Sekunden; Details erneut laden. Ereignisse werden 90 Tage aufbewahrt – liegt dein Cursor davor, meldet meta.resync_required einen vollständigen Neuabgleich.
Recht: listings:read
| Parameter | Typ | Beschreibung |
|---|---|---|
after | int | Letzte verarbeitete Änderungs-ID, anfangs 0 |
limit | int | Maximal 200 Änderungen |
Beispiel
curl "https://hops24.de/api/v1/changes" \ -H "Authorization: Bearer hk_test_…"
/api/v1/listingsSuche nach öffentlichen Angeboten. Gleiche Logik wie die Suche auf hops24.de.
Recht: listings:read
| Parameter | Typ | Beschreibung |
|---|---|---|
q | string | Freitext (Titel, Ort, Beschreibung) |
country | string | Land (DE, AT, CH, FR, BE, LU, NL, ES, IT, GB, IE); Standard DE. Liefert Angebote von Anbietern dieses Landes bzw. mit freigeschaltetem Land |
postal_code | string | PLZ oder Ort; berücksichtigt Liefergebiete (Locations: Ort der Location) |
lat, lng | number | Koordinaten; findet Anbieter, deren Lieferradius den Punkt abdeckt, und Locations im Umkreis von 25 km |
category | string | Kategorie-Schlüssel aus /categories |
date | YYYY-MM-DD | Nur an diesem Tag verfügbare Angebote |
max_price | number | Höchstpreis (ab-Preis) in der Angebotswährung |
placement | 1 | Nur Angebote mit fester Aufstellung |
self_pickup | 1 | Nur mit Selbstabholung |
sort | string | newest (Standard), price, distance (nur mit lat/lng) |
page, per_page | int | Seite (ab 1) und Treffer pro Seite (1–50, Standard 20) |
Beispiel
curl "https://hops24.de/api/v1/listings?category=huepfburgen&postal_code=33100&sort=price" \ -H "Authorization: Bearer hk_test_…"
/api/v1/listings/{id}Details eines Angebots inkl. Beschreibung, aller Bilder und technischer Angaben.
Recht: listings:read
Beispiel
curl "https://hops24.de/api/v1/listings/900001" \ -H "Authorization: Bearer hk_test_…"
/api/v1/listings/{id}/availabilityNicht verfügbare Tage eines Angebots ab heute. Hat der Anbieter mehrere gleiche Geräte für das Angebot, ist ein Tag erst belegt, wenn kein Gerät mehr frei ist.
Recht: availability:read
| Parameter | Typ | Beschreibung |
|---|---|---|
months | int | Zeitraum in Monaten (1–12, Standard 3) |
Beispiel
curl "https://hops24.de/api/v1/listings/900001/availability?months=3" \ -H "Authorization: Bearer hk_test_…"
/api/v1/inquiriesKundenanfrage an den Anbieter übermitteln. Landet im HOPS24-Posteingang des Anbieters; der Kunde erhält eine Bestätigung. Antwort 201. Header Idempotency-Key ist Pflicht (auch in der Sandbox): Wiederholungen mit demselben Schlüssel liefern 30 Tage lang dieselbe Antwort.
Recht: inquiries:create
| Parameter | Typ | Beschreibung |
|---|---|---|
listing_id | int | Angebot (Pflicht) |
name, email | string | Name und E-Mail des Kunden (Pflicht) |
event_date | YYYY-MM-DD | Wunschtermin bzw. Aufstellungsbeginn (Pflicht) |
event_end_date | YYYY-MM-DD | Enddatum bei mehrtägigen Events |
request_type | string | event (Standard) oder placement (feste Aufstellung, nur wenn placement_available) |
placement_location | string | Aufstellort (Pflicht bei placement) |
phone, message | string | Optional |
lang | string | Sprache der Bestätigungsmail an den Kunden: de, en, es, fr, nl, it, pt (Standard: Sprache der Instanz) |
consent | bool | Muss true sein: Der Kunde hat der Übermittlung zugestimmt |
review_consent | bool | Optional: Der Kunde willigt ein, nach dem Termin einmal per E-Mail um eine Bewertung gebeten zu werden |
Beispiel
curl -X POST "https://hops24.de/api/v1/inquiries" \
-H "Authorization: Bearer hk_test_…" \
-H "Idempotency-Key: example-request-001" \
-H "Content-Type: application/json" \
-d '{"listing_id":900001,"name":"Erika Muster","email":"erika@example.de","event_date":"2026-11-08","message":"Kindergeburtstag, 15 Kinder","consent":true}'
/api/v1/webhooksEigene Webhooks mit Zustellstatus.
Recht: webhooks
Beispiel
curl "https://hops24.de/api/v1/webhooks" \ -H "Authorization: Bearer hk_live_…"
/api/v1/webhooksWebhook anlegen. Das Secret zur Signaturprüfung wird nur in dieser Antwort angezeigt.
Recht: webhooks
| Parameter | Typ | Beschreibung |
|---|---|---|
url | string | Ziel-URL (nur https, öffentlich erreichbar) |
events | array | inquiry.created, listing.updated, availability.changed, listing.removed (inquiry.replied ist seit 05.10.2026 eingestellt) |
Beispiel
curl -X POST "https://hops24.de/api/v1/webhooks" \
-H "Authorization: Bearer hk_live_…" \
-H "Content-Type: application/json" \
-d '{"url":"https://partner.de/hops24-webhook","events":["inquiry.created","listing.updated"]}'
/api/v1/webhooks/{id}/testTestereignis webhook.test senden.
Recht: webhooks
Beispiel
curl -X POST "https://hops24.de/api/v1/webhooks/7/test" \ -H "Authorization: Bearer hk_live_…"
/api/v1/webhooks/{id}Webhook löschen.
Recht: webhooks
Beispiel
curl -X DELETE "https://hops24.de/api/v1/webhooks/7" \ -H "Authorization: Bearer hk_live_…"
/api/v1/me/listingsAnbieter-Integration: eigene Angebote inkl. inaktiver, mit external_ref (Schlüssel muss mit einem Anbieterkonto verknüpft sein).
Recht: own:listings:write | own:inquiries:read | own:listings:sync
Beispiel
curl "https://hops24.de/api/v1/me/listings" \ -H "Authorization: Bearer hk_live_…"
/api/v1/me/listings/syncEigene Angebote aus deiner Software anlegen und abgleichen (in allen Tarifen kostenlos, ein Aufruf zählt einmal). Zuordnung über external_ref (Artikelnummer): neu anlegen, ändern, mit mode full nicht mehr gelieferte offline nehmen – nie löschen. Nur gelieferte Felder werden geändert. Neue Angebote gehen online, sobald die Mindestangaben erfüllt sind (sonst Entwurf, siehe problems), außer mit active: false. Fotos werden per URL geladen (je Adresse einmal, max. 5 je Angebot, 200 neue je Tag). Header Idempotency-Key ist Pflicht. Mehr als 200 Angebote: mode full in Teilen senden, sync_session aus der ersten Antwort mitschicken und im letzten Teil complete: true setzen.
Recht: own:listings:sync
| Parameter | Typ | Beschreibung |
|---|---|---|
listings | array | 1–200 Angebote: external_ref (Pflicht, max. 100 Zeichen), title (3–150, Pflicht beim Anlegen), description, category (Schlüssel aus /categories), city, prices {from, daily, weekend, delivery, setup, deposit, placement_monthly, hourly}, sale {price, condition (new|used|demo), quantity, shipping (pickup|shipping|both), shipping_price, delivery_time, year, warranty} oder false, details {dimensions, age_group, power_required, setup_duration, turnaround_days, cancellation_policy, weather_guarantee, self_pickup_allowed, deposit_cash_allowed, service_duration}, placement_available, images (Liste von https-Adressen; leere Liste entfernt die Fotos der Quelle), active (bool) |
mode | string | partial (Standard: nur die gesendeten Angebote) oder full (Vollabgleich: fehlende Angebote dieser Verbindung gehen offline; Schutz: liefert ein Vollabgleich weniger als die Hälfte, wird nichts offline genommen) |
sync_session | int | Bei mode full in Teilen: Wert aus meta.sync_session der ersten Antwort (24 Stunden gültig) |
complete | bool | Letzter Teil eines Vollabgleichs (Standard true) |
Beispiel
curl -X POST "https://hops24.de/api/v1/me/listings/sync" \
-H "Authorization: Bearer hk_live_…" \
-H "Idempotency-Key: example-request-001" \
-H "Content-Type: application/json" \
-d '{"mode":"full","listings":[{"external_ref":"HB-001","title":"Piraten-Hüpfburg XXL","category":"huepfburgen","city":"Berlin","description":"Große Piraten-Hüpfburg mit Rutsche und Netzen, ideal für Geburtstage und Sommerfeste.","prices":{"from":199,"weekend":299,"delivery":35},"images":["https://www.example.com/bilder/piraten-1.jpg"],"active":true}]}'
/api/v1/me/listings/by-ref/{external_ref}Ein Angebot über seine Kennung anlegen oder ändern (gleiche Felder wie ein Eintrag von /me/listings/sync). Antwort 201 beim Anlegen, sonst 200, mit ETag. If-Match ist optional; ist er gesetzt und das Angebot inzwischen geändert, folgt 412.
Recht: own:listings:sync
| Parameter | Typ | Beschreibung |
|---|---|---|
title, description, category, city, prices, sale, details, images, active | object | wie bei /me/listings/sync |
Beispiel
curl -X PUT "https://hops24.de/api/v1/me/listings/by-ref/HB-001" \
-H "Authorization: Bearer hk_live_…" \
-H "Content-Type: application/json" \
-d '{"title":"Piraten-Hüpfburg XXL","prices":{"from":189},"active":true}'
/api/v1/me/sync/runsDie letzten 20 Abgleiche dieser Verbindung mit Zählungen und Hinweisen (Codes je external_ref). Berichte werden 90 Tage aufbewahrt.
Recht: own:listings:sync
Beispiel
curl "https://hops24.de/api/v1/me/sync/runs" \ -H "Authorization: Bearer hk_live_…"
/api/v1/me/listings/{id}Eigenes Angebot mit If-Match ändern (version aus GET /me/listings). Anbieterfreigabe erforderlich. Beim Aktivieren gelten dieselben Mindestanforderungen wie im Dashboard.
Recht: own:listings:write
| Parameter | Typ | Beschreibung |
|---|---|---|
title, description | string | Titel (3–150 Zeichen), Beschreibung |
prices | object | from, daily, weekend, delivery, setup, deposit, placement_monthly, hourly (in der Angebotswährung, null = leeren; hourly nur bei Dienstleistungen) |
is_active | bool | Angebot aktivieren/deaktivieren |
Beispiel
curl -X PATCH "https://hops24.de/api/v1/me/listings/123" \
-H "Authorization: Bearer hk_live_…" \
-H 'If-Match: "VERSION_FROM_GET_ME_LISTINGS"' \
-H "Content-Type: application/json" \
-d '{"prices":{"from":99,"weekend":149},"is_active":true}'
/api/v1/me/inquiriesEigene Anfragen mit Status (new, open, booked, closed) und Kundendaten. Seit 05.10.2026 ersetzt open die früheren Werte waiting und answered (als Filter weiter angenommen).
Recht: own:inquiries:read
| Parameter | Typ | Beschreibung |
|---|---|---|
status | string | Filter nach Status |
Beispiel
curl "https://hops24.de/api/v1/me/inquiries" \ -H "Authorization: Bearer hk_live_…"
/api/v1/me/bookingsEigene Aufträge in einem Zeitraum.
Recht: own:inquiries:read
| Parameter | Typ | Beschreibung |
|---|---|---|
from, to | YYYY-MM-DD | Zeitraum (Standard: heute bis +12 Monate) |
Beispiel
curl "https://hops24.de/api/v1/me/bookings" \ -H "Authorization: Bearer hk_live_…"
/api/v1/me/blocked-datesGesperrte Tage ab heute mit Herkunft (manual, calendar_import, api) und deletable.
Recht: own:calendar:write
Beispiel
curl "https://hops24.de/api/v1/me/blocked-dates" \ -H "Authorization: Bearer hk_live_…"
/api/v1/me/blocked-datesTage sperren (für ein Angebot oder alle).
Recht: own:calendar:write
| Parameter | Typ | Beschreibung |
|---|---|---|
dates | array | Liste von Daten YYYY-MM-DD (max. 366) |
listing_id | int | Optional; ohne = alle Angebote |
reason | string | Optionaler Grund |
Beispiel
curl -X POST "https://hops24.de/api/v1/me/blocked-dates" \
-H "Authorization: Bearer hk_live_…" \
-H "Content-Type: application/json" \
-d '{"dates":["2026-10-23"],"listing_id":123,"reason":"Wartung"}'
/api/v1/me/blocked-datesNur die von dieser Verbindung erzeugten API-Sperrtage freigeben; manuelle Sperren und Kalender-Importe bleiben.
Recht: own:calendar:write
| Parameter | Typ | Beschreibung |
|---|---|---|
dates | array | Liste von Daten YYYY-MM-DD |
listing_id | int | Optional |
Beispiel
curl -X DELETE "https://hops24.de/api/v1/me/blocked-dates" \
-H "Authorization: Bearer hk_live_…" \
-H "Content-Type: application/json" \
-d '{"dates":["2026-10-23"],"listing_id":123}'
Software-Partner mit vielen Anbieterkonten: Mehrkonten-Zugang auf Anfrage im Paket Partner.
Webhooks informieren deinen Server sofort über Ereignisse (Paket Business oder höher). Wir senden einen POST mit JSON an deine URL; antworte mit einem 2xx-Status. Fehlgeschlagene Zustellungen wiederholen wir nach 1, 5 und 30 Minuten sowie 2, 6 und 24 Stunden.
| Code | Beschreibung |
|---|---|
listing.updated | Öffentliches Angebot geändert |
availability.changed | Verfügbarkeit geändert |
listing.removed | Angebot aus Partnerfeed entfernen |
inquiry.created | Neue Kundenanfrage an das verknüpfte Anbieterkonto |
inquiry.replied | Eingestellt seit 05.10.2026 – wird nicht mehr ausgelöst (Anbieter antworten direkt per E-Mail) |
webhook.test | Testereignis (manuell ausgelöst) |
Signatur prüfen (Secret aus POST /webhooks)
POST https://partner.de/hops24-webhook
X-HOPS24-Event: inquiry.created
X-HOPS24-Signature: t=1760000000,v1=5f2c…
{ "id": 812, "event": "inquiry.created", "created_at": "2026-10-02T18:00:00+00:00",
"data": { "inquiry_id": 4711, "listing_id": 123, "event_date": "2026-11-01", "source": "website" } }
// PHP: verify signature
[$t, $v1] = sscanf($_SERVER['HTTP_X_HOPS24_SIGNATURE'], 't=%d,v1=%s');
$body = file_get_contents('php://input');
$ok = abs(time() - $t) < 300
&& hash_equals(hash_hmac('sha256', $t . '.' . $body, $secret), $v1);
Zeige zu jedem Angebot einen Link auf die url aus der Antwort. In Free und Starter zusätzlich den Hinweis „via HOPS24“. Daten höchstens 24 Stunden zwischenspeichern und nicht weitergeben. Kontaktdaten der Anbieter gibt es bewusst nicht – Anfragen laufen über HOPS24.