Partner-API · v1

Documentación de la API

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

Descargar archivo OpenAPI ¿Aún sin clave? Solicitar acceso

Autenticación

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

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

Sandbox

Las claves hk_test_ devuelven datos de ejemplo fijos (ofertas 900001–900003) para integrar antes de pasar a producción. Las claves reales empiezan por hk_live_.

Formato de respuesta

Las respuestas correctas contienen data (y meta con paginación en listas); los errores contienen error con code y message. Precios en euros como número; si falta, 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 · origin_not_allowed · client_suspended
404not_found
429rate_limited · quota_exceeded
500server_error

Límites y cuotas

Cada llamada cuenta para la cuota mensual. Las cabeceras X-Quota-Limit y X-Quota-Remaining muestran el estado. Si se agota, la API responde 429, sin costes 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.de/api/v1/status" \
  -H "Authorization: Bearer hk_test_…"

GET /api/v1/categories

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

Permiso: listings:read

Ejemplo

curl "https://hops24.de/api/v1/categories" \
  -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)
postal_codestringPostcode or city; respects delivery areas
lat, lngnumberCoordinates; finds providers whose delivery radius covers the point
categorystringCategory key from /categories
dateYYYY-MM-DDOnly listings available on this day
max_pricenumberMaximum “from” price in euros
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.de/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.de/api/v1/listings/900001" \
  -H "Authorization: Bearer hk_test_…"

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

Unavailable days of a listing from today.

Permiso: availability:read

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

Ejemplo

curl "https://hops24.de/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.

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
consentboolMust be true: the customer agreed to the submission

Ejemplo

curl -X POST "https://hops24.de/api/v1/inquiries" \
  -H "Authorization: Bearer hk_test_…" \
  -H "Content-Type: application/json" \
  -d '{"listing_id":900001,"name":"Erika Muster","email":"erika@example.de","event_date":"2026-11-02","message":"Kindergeburtstag, 15 Kinder","consent":true}'

GET /api/v1/webhooks

Your webhooks with delivery status.

Permiso: webhooks

Ejemplo

curl "https://hops24.de/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, inquiry.replied

Ejemplo

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","inquiry.replied"]}'

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

Send a webhook.test event.

Permiso: webhooks

Ejemplo

curl -X POST "https://hops24.de/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.de/api/v1/webhooks/7" \
  -H "Authorization: Bearer hk_live_…"

GET /api/v1/me/listings

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

Permiso: own:inquiries:read

Ejemplo

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

PATCH /api/v1/me/listings/{id}

Update your own listing. 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 (euros, null clears)
is_activeboolActivate/deactivate the listing

Ejemplo

curl -X PATCH "https://hops24.de/api/v1/me/listings/123" \
  -H "Authorization: Bearer hk_live_…" \
  -H "Content-Type: application/json" \
  -d '{"prices":{"from":99,"weekend":149},"is_active":true}'

GET /api/v1/me/inquiries

Your enquiries with status (new, waiting, answered, booked, closed) and customer details.

Permiso: own:inquiries:read

ParámetroTipoDescripción
statusstringFilter by status

Ejemplo

curl "https://hops24.de/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.de/api/v1/me/bookings" \
  -H "Authorization: Bearer hk_live_…"

GET /api/v1/me/blocked-dates

Blocked days from today (manual and calendar import).

Permiso: own:calendar:write

Ejemplo

curl "https://hops24.de/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.de/api/v1/me/blocked-dates" \
  -H "Authorization: Bearer hk_live_…" \
  -H "Content-Type: application/json" \
  -d '{"dates":["2026-10-17"],"listing_id":123,"reason":"Wartung"}'

DELETE /api/v1/me/blocked-dates

Release manually blocked days (calendar imports stay).

Permiso: own:calendar:write

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

Ejemplo

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-17"],"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
inquiry.createdNew customer enquiry for the linked provider account
inquiry.repliedProvider replied to an enquiry you submitted (without content)
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: Signatur prüfen
[$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 en cada oferta un enlace a la url de la respuesta. En Free y Starter añade «via HOPS24». Guarda los datos como máximo 24 horas y no los cedas. No se facilitan datos de contacto de proveedores: las solicitudes pasan por HOPS24.

Se aplican las condiciones de uso de la API (en alemán).

Contacto