GET /api/v1/status
Checks the key and shows plan, scopes and usage for the current month.
Voorbeeld
curl "https://hops24.de/api/v1/status" \ -H "Authorization: Bearer hk_test_…"
Alles wat je nodig hebt voor de integratie. Versie 1 · Basis-URL: https://hops24.de/api/v1
OpenAPI-bestand downloaden Nog geen sleutel? Gratis registreren
Stuur je sleutel bij elke aanvraag mee in de header. Zet sleutels nooit in URL’s of openbare code – domeinen voor browseraanroepen voeg je zelf toe in je API-account.
Authorization: Bearer hk_live_… # or X-API-Key: hk_live_…
Sleutels met hk_test_ geven vaste voorbeeldgegevens (aanbod 900001–900004), zodat je kunt integreren voordat je live gaat. Live-sleutels beginnen met hk_live_ en leveren echt aanbod vanaf 20-10-2026.
Succesvolle antwoorden bevatten data (en meta met paginering bij lijsten); fouten bevatten error met code en message. Prijzen als getal in de valuta uit currency (EUR, in Zwitserland CHF, in het Verenigd Koninkrijk GBP); ontbreekt een prijs, dan is 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 |
Elke aanvraag telt mee voor het maandquotum. De headers X-Quota-Limit en X-Quota-Remaining tonen de stand. Is het quotum op, dan antwoordt de API met 429 – zonder extra kosten.
| Pakket | Verzoeken / maand | Verzoeken / seconde |
|---|---|---|
| Free | 1.000 | 2 |
| Starter | 25.000 | 10 |
| Business | 250.000 | 30 |
| Partner | in overleg | 50 |
/api/v1/statusChecks the key and shows plan, scopes and usage for the current month.
Voorbeeld
curl "https://hops24.de/api/v1/status" \ -H "Authorization: Bearer hk_test_…"
/api/v1/categoriesAll categories with translations (de, en, es, fr, nl, it, pt).
Recht: listings:read
Voorbeeld
curl "https://hops24.de/api/v1/categories" \ -H "Authorization: Bearer hk_test_…"
/api/v1/changesPublic changes and removals after a cursor. Poll about every 60 seconds; reload details. Events are kept for 90 days – if your cursor is older, meta.resync_required asks for a full resync.
Recht: listings:read
| Parameter | Type | Beschrijving |
|---|---|---|
after | int | Last processed change ID, initially 0 |
limit | int | Up to 200 changes |
Voorbeeld
curl "https://hops24.de/api/v1/changes" \ -H "Authorization: Bearer hk_test_…"
/api/v1/listingsSearch public listings. Same logic as the search on hops24.de.
Recht: listings:read
| Parameter | Type | Beschrijving |
|---|---|---|
q | string | Free text (title, city, description) |
country | string | Country (DE, AT, CH, FR, BE, LU, NL, ES, IT, GB, IE); default DE. Returns listings of providers in or serving this country |
postal_code | string | Postcode or city; respects delivery areas (venues: location of the venue) |
lat, lng | number | Coordinates; finds providers whose delivery radius covers the point and venues within 25 km |
category | string | Category key from /categories |
date | YYYY-MM-DD | Only listings available on this day |
max_price | number | Maximum “from” price in the listing currency |
placement | 1 | Only listings offering long-term placement |
self_pickup | 1 | Only with self pickup |
sort | string | newest (default), price, distance (requires lat/lng) |
page, per_page | int | Page (from 1) and results per page (1–50, default 20) |
Voorbeeld
curl "https://hops24.de/api/v1/listings?category=huepfburgen&postal_code=33100&sort=price" \ -H "Authorization: Bearer hk_test_…"
/api/v1/listings/{id}Listing details incl. description, all images and technical details.
Recht: listings:read
Voorbeeld
curl "https://hops24.de/api/v1/listings/900001" \ -H "Authorization: Bearer hk_test_…"
/api/v1/listings/{id}/availabilityUnavailable days of a listing from today. If the provider has several identical units for the listing, a day is only unavailable once no unit is free.
Recht: availability:read
| Parameter | Type | Beschrijving |
|---|---|---|
months | int | Period in months (1–12, default 3) |
Voorbeeld
curl "https://hops24.de/api/v1/listings/900001/availability?months=3" \ -H "Authorization: Bearer hk_test_…"
/api/v1/inquiriesSubmit a customer enquiry to the provider. It arrives in the provider’s HOPS24 inbox; the customer receives a confirmation. Returns 201. The Idempotency-Key header is required (also in the sandbox): retries with the same key return the same response for 30 days.
Recht: inquiries:create
| Parameter | Type | Beschrijving |
|---|---|---|
listing_id | int | Listing (required) |
name, email | string | Customer name and email (required) |
event_date | YYYY-MM-DD | Requested date or placement start (required) |
event_end_date | YYYY-MM-DD | End date for multi-day events |
request_type | string | event (default) or placement (only if placement_available) |
placement_location | string | Placement location (required for placement) |
phone, message | string | Optional |
lang | string | Language of the confirmation email to the customer: de, en, es, fr, nl, it, pt (default: language of the instance) |
consent | bool | Must be true: the customer agreed to the submission |
review_consent | bool | Optional: the customer agrees to be asked once by email for a review after the date |
Voorbeeld
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/webhooksYour webhooks with delivery status.
Recht: webhooks
Voorbeeld
curl "https://hops24.de/api/v1/webhooks" \ -H "Authorization: Bearer hk_live_…"
/api/v1/webhooksCreate a webhook. The signing secret is only shown in this response.
Recht: webhooks
| Parameter | Type | Beschrijving |
|---|---|---|
url | string | Target URL (https only, publicly reachable) |
events | array | inquiry.created, listing.updated, availability.changed, listing.removed (inquiry.replied discontinued since 2026-10-05) |
Voorbeeld
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}/testSend a webhook.test event.
Recht: webhooks
Voorbeeld
curl -X POST "https://hops24.de/api/v1/webhooks/7/test" \ -H "Authorization: Bearer hk_live_…"
/api/v1/webhooks/{id}Delete a webhook.
Recht: webhooks
Voorbeeld
curl -X DELETE "https://hops24.de/api/v1/webhooks/7" \ -H "Authorization: Bearer hk_live_…"
/api/v1/me/listingsProvider integration: your own listings incl. inactive ones, with external_ref (key must be linked to a provider account).
Recht: own:listings:write | own:inquiries:read | own:listings:sync
Voorbeeld
curl "https://hops24.de/api/v1/me/listings" \ -H "Authorization: Bearer hk_live_…"
/api/v1/me/listings/syncCreate and sync your own listings from your software (free on all plans, one call counts once). Matched by external_ref (SKU): create, update, and with mode full take listings no longer sent offline – never deleted. Only fields you send are changed. New listings go online once the minimum details are met (otherwise draft, see problems), unless active: false. Photos are loaded by URL (once per address, max. 5 per listing, 200 new per day). The Idempotency-Key header is required. More than 200 listings: send mode full in parts, pass sync_session from the first response and set complete: true in the last part.
Recht: own:listings:sync
| Parameter | Type | Beschrijving |
|---|---|---|
listings | array | 1–200 listings: external_ref (required, max. 100 chars), title (3–150, required to create), description, category (key from /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} or 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 (list of https URLs; an empty list removes the source’s photos), active (bool) |
mode | string | partial (default: only the listings sent) or full (full sync: missing listings of this connection go offline; safeguard: if a full sync delivers less than half, nothing is taken offline) |
sync_session | int | For mode full in parts: value of meta.sync_session from the first response (valid for 24 hours) |
complete | bool | Last part of a full sync (default true) |
Voorbeeld
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}Create or update one listing by its reference (same fields as an entry of /me/listings/sync). Returns 201 when created, otherwise 200, with ETag. If-Match is optional; when set and the listing has changed meanwhile, 412 follows.
Recht: own:listings:sync
| Parameter | Type | Beschrijving |
|---|---|---|
title, description, category, city, prices, sale, details, images, active | object | as for /me/listings/sync |
Voorbeeld
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/runsThe last 20 syncs of this connection with counts and notes (codes per external_ref). Reports are kept for 90 days.
Recht: own:listings:sync
Voorbeeld
curl "https://hops24.de/api/v1/me/sync/runs" \ -H "Authorization: Bearer hk_live_…"
/api/v1/me/listings/{id}Update your own listing using If-Match (version from GET /me/listings). Provider approval required. Activation requires the same minimum details as in the dashboard.
Recht: own:listings:write
| Parameter | Type | Beschrijving |
|---|---|---|
title, description | string | Title (3–150 chars), description |
prices | object | from, daily, weekend, delivery, setup, deposit, placement_monthly, hourly (in the listing currency, null clears; hourly only for services) |
is_active | bool | Activate/deactivate the listing |
Voorbeeld
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/inquiriesYour enquiries with status (new, open, booked, closed) and customer details. Since 2026-10-05 open replaces the former values waiting and answered (still accepted as filters).
Recht: own:inquiries:read
| Parameter | Type | Beschrijving |
|---|---|---|
status | string | Filter by status |
Voorbeeld
curl "https://hops24.de/api/v1/me/inquiries" \ -H "Authorization: Bearer hk_live_…"
/api/v1/me/bookingsYour orders within a period.
Recht: own:inquiries:read
| Parameter | Type | Beschrijving |
|---|---|---|
from, to | YYYY-MM-DD | Period (default: today to +12 months) |
Voorbeeld
curl "https://hops24.de/api/v1/me/bookings" \ -H "Authorization: Bearer hk_live_…"
/api/v1/me/blocked-datesBlocked days from today with source (manual, calendar_import, api) and deletable.
Recht: own:calendar:write
Voorbeeld
curl "https://hops24.de/api/v1/me/blocked-dates" \ -H "Authorization: Bearer hk_live_…"
/api/v1/me/blocked-datesBlock days (for one listing or all).
Recht: own:calendar:write
| Parameter | Type | Beschrijving |
|---|---|---|
dates | array | List of dates YYYY-MM-DD (max. 366) |
listing_id | int | Optional; omitted = all listings |
reason | string | Optional reason |
Voorbeeld
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-datesRelease only API blocks created by this connection; manual and imported blocks stay.
Recht: own:calendar:write
| Parameter | Type | Beschrijving |
|---|---|---|
dates | array | List of dates YYYY-MM-DD |
listing_id | int | Optional |
Voorbeeld
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}'
Softwarepartners met veel aanbiedersaccounts: multi-accounttoegang op aanvraag in het pakket Partner.
Webhooks melden gebeurtenissen direct aan je server (pakket Business of hoger). We sturen een POST met JSON naar je URL; antwoord met een 2xx-status. Mislukte leveringen herhalen we na 1, 5 en 30 minuten en 2, 6 en 24 uur.
| Code | Beschrijving |
|---|---|
listing.updated | Public listing changed |
availability.changed | Availability changed |
listing.removed | Remove listing from partner feed |
inquiry.created | New customer enquiry for the linked provider account |
inquiry.replied | Discontinued since 2026-10-05 – no longer sent (providers reply directly by email) |
webhook.test | Test event (triggered manually) |
Handtekening controleren (secret uit 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);
Toon bij elk aanbod een link naar de url uit het antwoord. Bij Free en Starter ook ‘via HOPS24’. Gegevens maximaal 24 uur cachen en niet doorgeven. Contactgegevens van aanbieders worden bewust niet geleverd – aanvragen lopen via HOPS24.