Elegir país

Verás los anuncios del país que elijas. El idioma se adapta a tu navegador.

API para socios · v1

Documentación de la API

Todo lo que necesitas para integrar. Versión 1 · URL base: https://hops24.net/api/v1

Descargar archivo OpenAPI ¿Aún sin clave? Regístrate gratis

Autenticación

Envía tu clave en la cabecera en cada llamada. Nunca pongas claves en URLs ni en código público; los dominios para llamadas desde el navegador los agregas tú en tu cuenta API.

Authorization: Bearer hk_live_…
# or
X-API-Key: hk_live_…

Sandbox

Las claves que empiezan con hk_test_ devuelven datos de ejemplo fijos (anuncios 900001–900004), para que puedas hacer la integración antes del lanzamiento. Las claves live empiezan con hk_live_ y devuelven anuncios reales a partir del 20 de octubre de 2026.

Formato de respuesta

Las respuestas correctas contienen data (y meta con paginación en las listas); los errores contienen error con code y message. Los precios son números en la moneda indicada en currency (USD); si faltan, price_on_request es true.

{ "data": [ … ], "meta": { "page": 1, "per_page": 20, "total": 14, "pages": 1 } }

{ "error": { "code": "quota_exceeded", "message": "…" } }

Códigos de error

HTTPCódigo
400invalid_parameter
401unauthorized
403insufficient_scope · no_provider_account · provider_approval_required · origin_not_allowed · client_suspended
404not_found
409idempotency_conflict
412version_conflict
428precondition_required
429rate_limited · quota_exceeded
503temporarily_unavailable
500server_error

Límites y cuotas

Cada solicitud cuenta para la cuota mensual. Los encabezados X-Quota-Limit y X-Quota-Remaining muestran tu estado. Cuando se agota la cuota, la API responde con 429, sin cargos adicionales.

PlanSolicitudes / mesSolicitudes / segundo
Free 1.000 2
Starter 25.000 10
Business 250.000 30
Partner según acuerdo 50

Endpoints

GET /api/v1/status

Checks the key and shows plan, scopes and usage for the current month.

Ejemplo

curl "https://hops24.net/api/v1/status" \
  -H "Authorization: Bearer hk_test_…"

GET /api/v1/categories

All categories with translations (de, en, es, fr, nl, it, pt).

Permiso: listings:read

Ejemplo

curl "https://hops24.net/api/v1/categories" \
  -H "Authorization: Bearer hk_test_…"

GET /api/v1/changes

Public 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.

Permiso: listings:read

ParámetroTipoDescripción
afterintLast processed change ID, initially 0
limitintUp to 200 changes

Ejemplo

curl "https://hops24.net/api/v1/changes" \
  -H "Authorization: Bearer hk_test_…"

GET /api/v1/listings

Search public listings. Same logic as the search on hops24.de.

Permiso: listings:read

ParámetroTipoDescripción
qstringFree text (title, city, description)
countrystringCountry (US, MX, BR, AR); default US. Returns listings of providers in or serving this country
postal_codestringPostcode or city; respects delivery areas (venues: location of the venue)
lat, lngnumberCoordinates; finds providers whose delivery radius covers the point and venues within 25 km
categorystringCategory key from /categories
dateYYYY-MM-DDOnly listings available on this day
max_pricenumberMaximum “from” price in the listing currency
placement1Only listings offering long-term placement
self_pickup1Only with self pickup
sortstringnewest (default), price, distance (requires lat/lng)
page, per_pageintPage (from 1) and results per page (1–50, default 20)

Ejemplo

curl "https://hops24.net/api/v1/listings?category=huepfburgen&postal_code=33100&sort=price" \
  -H "Authorization: Bearer hk_test_…"

GET /api/v1/listings/{id}

Listing details incl. description, all images and technical details.

Permiso: listings:read

Ejemplo

curl "https://hops24.net/api/v1/listings/900001" \
  -H "Authorization: Bearer hk_test_…"

GET /api/v1/listings/{id}/availability

Unavailable 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.

Permiso: availability:read

ParámetroTipoDescripción
monthsintPeriod in months (1–12, default 3)

Ejemplo

curl "https://hops24.net/api/v1/listings/900001/availability?months=3" \
  -H "Authorization: Bearer hk_test_…"

POST /api/v1/inquiries

Submit 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.

Permiso: inquiries:create

ParámetroTipoDescripción
listing_idintListing (required)
name, emailstringCustomer name and email (required)
event_dateYYYY-MM-DDRequested date or placement start (required)
event_end_dateYYYY-MM-DDEnd date for multi-day events
request_typestringevent (default) or placement (only if placement_available)
placement_locationstringPlacement location (required for placement)
phone, messagestringOptional
langstringLanguage of the confirmation email to the customer: de, en, es, fr, nl, it, pt (default: language of the instance)
consentboolMust be true: the customer agreed to the submission
review_consentboolOptional: the customer agrees to be asked once by email for a review after the date

Ejemplo

curl -X POST "https://hops24.net/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}'

GET /api/v1/webhooks

Your webhooks with delivery status.

Permiso: webhooks

Ejemplo

curl "https://hops24.net/api/v1/webhooks" \
  -H "Authorization: Bearer hk_live_…"

POST /api/v1/webhooks

Create a webhook. The signing secret is only shown in this response.

Permiso: webhooks

ParámetroTipoDescripción
urlstringTarget URL (https only, publicly reachable)
eventsarrayinquiry.created, listing.updated, availability.changed, listing.removed (inquiry.replied discontinued since 2026-10-05)

Ejemplo

curl -X POST "https://hops24.net/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"]}'

POST /api/v1/webhooks/{id}/test

Send a webhook.test event.

Permiso: webhooks

Ejemplo

curl -X POST "https://hops24.net/api/v1/webhooks/7/test" \
  -H "Authorization: Bearer hk_live_…"

DELETE /api/v1/webhooks/{id}

Delete a webhook.

Permiso: webhooks

Ejemplo

curl -X DELETE "https://hops24.net/api/v1/webhooks/7" \
  -H "Authorization: Bearer hk_live_…"

GET /api/v1/me/listings

Provider integration: your own listings incl. inactive ones, with external_ref (key must be linked to a provider account).

Permiso: own:listings:write | own:inquiries:read | own:listings:sync

Ejemplo

curl "https://hops24.net/api/v1/me/listings" \
  -H "Authorization: Bearer hk_live_…"

POST /api/v1/me/listings/sync

Create 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.

Permiso: own:listings:sync

ParámetroTipoDescripción
listingsarray1–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)
modestringpartial (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_sessionintFor mode full in parts: value of meta.sync_session from the first response (valid for 24 hours)
completeboolLast part of a full sync (default true)

Ejemplo

curl -X POST "https://hops24.net/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}]}'

PUT /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.

Permiso: own:listings:sync

ParámetroTipoDescripción
title, description, category, city, prices, sale, details, images, activeobjectas for /me/listings/sync

Ejemplo

curl -X PUT "https://hops24.net/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}'

GET /api/v1/me/sync/runs

The last 20 syncs of this connection with counts and notes (codes per external_ref). Reports are kept for 90 days.

Permiso: own:listings:sync

Ejemplo

curl "https://hops24.net/api/v1/me/sync/runs" \
  -H "Authorization: Bearer hk_live_…"

PATCH /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.

Permiso: own:listings:write

ParámetroTipoDescripción
title, descriptionstringTitle (3–150 chars), description
pricesobjectfrom, daily, weekend, delivery, setup, deposit, placement_monthly, hourly (in the listing currency, null clears; hourly only for services)
is_activeboolActivate/deactivate the listing

Ejemplo

curl -X PATCH "https://hops24.net/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}'

GET /api/v1/me/inquiries

Your 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).

Permiso: own:inquiries:read

ParámetroTipoDescripción
statusstringFilter by status

Ejemplo

curl "https://hops24.net/api/v1/me/inquiries" \
  -H "Authorization: Bearer hk_live_…"

GET /api/v1/me/bookings

Your orders within a period.

Permiso: own:inquiries:read

ParámetroTipoDescripción
from, toYYYY-MM-DDPeriod (default: today to +12 months)

Ejemplo

curl "https://hops24.net/api/v1/me/bookings" \
  -H "Authorization: Bearer hk_live_…"

GET /api/v1/me/blocked-dates

Blocked days from today with source (manual, calendar_import, api) and deletable.

Permiso: own:calendar:write

Ejemplo

curl "https://hops24.net/api/v1/me/blocked-dates" \
  -H "Authorization: Bearer hk_live_…"

POST /api/v1/me/blocked-dates

Block days (for one listing or all).

Permiso: own:calendar:write

ParámetroTipoDescripción
datesarrayList of dates YYYY-MM-DD (max. 366)
listing_idintOptional; omitted = all listings
reasonstringOptional reason

Ejemplo

curl -X POST "https://hops24.net/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"}'

DELETE /api/v1/me/blocked-dates

Release only API blocks created by this connection; manual and imported blocks stay.

Permiso: own:calendar:write

ParámetroTipoDescripción
datesarrayList of dates YYYY-MM-DD
listing_idintOptional

Ejemplo

curl -X DELETE "https://hops24.net/api/v1/me/blocked-dates" \
  -H "Authorization: Bearer hk_live_…" \
  -H "Content-Type: application/json" \
  -d '{"dates":["2026-10-23"],"listing_id":123}'

Socios de software con muchas cuentas de proveedor: acceso multicuenta bajo consulta en el plan Partner.

Webhooks

Los webhooks avisan a tu servidor al instante (plan Business o superior). Enviamos un POST con JSON a tu URL; responde con un estado 2xx. Los envíos fallidos se repiten tras 1, 5 y 30 minutos y 2, 6 y 24 horas.

CódigoDescripción
listing.updatedPublic listing changed
availability.changedAvailability changed
listing.removedRemove listing from partner feed
inquiry.createdNew customer enquiry for the linked provider account
inquiry.repliedDiscontinued since 2026-10-05 – no longer sent (providers reply directly by email)
webhook.testTest event (triggered manually)

Verificar la firma (secreto de 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);

Reglas de presentación

Muestra un enlace a la url de la respuesta en cada anuncio. En Free y Starter muestra además “via HOPS24”. Guarda los datos en caché como máximo 24 horas y no los compartas. Los datos de contacto de los proveedores no se entregan a propósito: las solicitudes pasan por HOPS24.

Aplican las condiciones de uso de la API.

Contacto