ListNRideDevelopers
Partner-API v1

Räder von ListNRide auf deiner Seite vermieten

Durchsuche buchbare Räder in ganz Europa, zeige Preise und Verfügbarkeit live an und schicke deine Kunden zum Buchen in unsere Kasse – Zahlung, Versicherung und Vermieter-Kommunikation inklusive.

37.000+buchbare Räder
2.000Orte in Europa
6Sprachen in der Kasse
Basis-URL
https://api.listnride.com/v1
Einstieg

Anmeldung & Modi

Jede Anfrage braucht deinen Schlüssel im Kopf Authorization: Bearer …. Schlüssel vergeben wir nach einem kurzen Gespräch – es gibt keine Selbstregistrierung.

lnr_test_…

Echte Räder und Preise, Buchungen nur simuliert: Der Link führt auf eine Testseite, es gibt keine Zahlung und keine Nachricht an den Vermieter.

lnr_live_…

Echte Buchungen über die ListNRide-Kasse.

Schlüssel gehören auf deinen Server. Nie im Browser oder in einer App ausliefern – wer ihn hat, kann in deinem Namen buchen.
curl
curl "https://api.listnride.com/v1/rides?lat=52.52&lng=13.40" \
  -H "Authorization: Bearer lnr_test_…"
Einstieg

Ablauf einer Buchung

Du brauchst keine eigene Kasse: der Kunde bucht und bezahlt bei uns und landet danach wieder auf deiner Seite.

  1. Räder finden

    GET /v1/rides nach Ort, Zeitraum und Kategorie.

  2. Kassensitzung anlegen

    POST /v1/checkout/sessions – du bekommst Preis und Link.

  3. Kunden weiterleiten

    Buchen und Bezahlen in der ListNRide-Kasse, dann zurück zu dir.

  4. Status erhalten

    Per Benachrichtigung oder GET /v1/bookings/{id}.

Referenz

Endpunkte

GET/v1/ridesrides:read

Räder in der Nähe eines Ortes oder eines Vermieters. Mit Zeitraum zeigt availability.units_available die freien Einheiten.

ParameterBedeutung
lat, lngMittelpunkt der Suche (oder lister)
radius_km0,1–100, Standard 15
from, toZeitraum, ISO-Datum oder -Zeitpunkt
quantityAnzahl gleicher Räder, Standard 1
categoryz. B. e-bike,cargo-bike
sortrecommended · distance · price_asc · price_desc · rating
limit, cursorBlättern, höchstens 100 je Seite
Antwort (gekürzt)
{
  "object": "list",
  "data": [{
    "id": "ride_oEbNgLPApUJf52PkgHU49A",
    "name": "KRZBERG – Single Speed",
    "category": { "id": "single-speed" },
    "price": { "currency": "EUR", "per_day": 2500 },
    "lister": { "id": "lis_VTknvPc20LBQbXE9p7dt6A" },
    "instant_booking": true,
    "distance_km": 1.46
  }],
  "has_more": true, "next_cursor": "eyJvIjoyMH0"
}
GET/v1/rides/{id}rides:read

Ein Rad mit Beschreibung, allen Bildern, Ausstattung, Kaution und Versicherung.

GET/v1/categoriesrides:read

Alle Kategorien mit deutschem und englischem Namen. Eine Oberkategorie wie e-bike schließt bei der Suche ihre Unterkategorien ein.

POST/v1/checkout/sessionsbookings:write

Legt eine Kassensitzung an. Preis und Verfügbarkeit prüft dabei die ListNRide-Kasse. Der Link ist 24 Stunden gültig.

FeldBedeutung
ride *Rad-ID ride_…
from, to *Abhol- und Rückgabetag, YYYY-MM-DD
pickup_time, return_timeHH:MM, Standard 10:00 / 17:00
quantityAnzahl, 1–50, Standard 1
return_url *Hierhin kommt der Kunde nach der Buchung zurück (https), mit checkout_session, booking und status=success
cancel_urlOptional, für den Abbruch (https)
localede · en · fr · es · it · nl
client_referenceDeine eigene Nummer
curl
curl -X POST https://api.listnride.com/v1/checkout/sessions \
  -H "Authorization: Bearer lnr_test_…" \
  -H "Content-Type: application/json" \
  -d '{
    "ride": "ride_jK6nvpDczET3Adx8AKKn1w",
    "from": "2026-11-17", "to": "2026-11-18",
    "return_url": "https://deine-seite.de/danke",
    "locale": "de"
  }'

# → { "id": "cs_O8t1…", "amount_total": 7800,
#     "url": "https://www.listnride.de/api/go/p/BHTm…" }
GET/v1/checkout/sessions/{id}bookings:read

Status der Sitzung: open, booked (mit booking-ID) oder expired.

GET/v1/bookings/{id}bookings:read
statusBedeutung
awaiting_paymentKunde ist in der Kasse, noch nicht bezahlt
requestedBezahlt bzw. vorgemerkt, Vermieter muss zusagen
acceptedVermieter hat zugesagt, Zahlung läuft
confirmedFest gebucht
completedMiete abgeschlossen
canceled_by_lister · canceled_by_customer · canceledStorniert
expiredNicht bezahlt oder nicht rechtzeitig angenommen
Mehr

Benachrichtigungen

Ändert sich der Status einer Buchung, schicken wir ein POST an deine hinterlegte Adresse, z. B. booking.confirmed. Antworte mit 2xx – sonst versuchen wir es nach 1 Min., 5 Min., 30 Min. und bis zu 24 Std. erneut. Mit ping kannst du die Verbindung testen; die Ereignis-id bleibt bei Wiederholungen gleich.

Prüfe jede Nachricht mit der Kopfzeile LNR-Signature: t=…,v1=…: HMAC-SHA256 über t + "." + body mit deinem Geheimnis whsec_…. Weise Nachrichten ab, deren t älter als 5 Minuten ist.

Node.js – Signatur prüfen
const crypto = require("crypto");

function echt(rawBody, header, secret) {
  const p = Object.fromEntries(header.split(",").map(x => x.split("=")));
  if (Math.abs(Date.now() / 1000 - Number(p.t)) > 300) return false;
  const soll = crypto.createHmac("sha256", secret)
    .update(`${p.t}.${rawBody}`).digest("hex");
  return crypto.timingSafeEqual(Buffer.from(soll), Buffer.from(p.v1));
}
Mehr

Fehler & Limits

Fehler haben immer dieselbe Form. Mit der request_id finden wir deinen Fall schnell.

HTTPcode
400parameter_missing, parameter_invalid, outside_opening_hours, duration_too_short, duration_too_long
401missing_api_key, invalid_api_key
403missing_scope
404resource_missing, route_not_found
409ride_unavailable
429rate_limited, too_many_failed_attempts – X-RateLimit-* und Retry-After
Fehlerantwort
{ "error": {
    "type": "invalid_request_error",
    "code": "ride_unavailable",
    "message": "The ride is not available for this period and quantity.",
    "param": "ride",
    "request_id": "req_UqrIw8P5wzwT" } }
Mehr

Versionen

Die Version steht im Pfad. Innerhalb von /v1 kommen nur Felder dazu – nichts wird entfernt oder umbenannt. Größere Änderungen erscheinen als /v2, und /v1 läuft mindestens 12 Monate weiter. Die maschinenlesbare Beschreibung (OpenAPI 3.1) liegt unter /openapi.json bzw. https://api.listnride.com/v1/openapi.json.

Zugang anfragen

Schreib uns mit deiner Website und was du vorhast. Du bekommst zuerst einen Testschlüssel – live geht es nach einem kurzen Gespräch.

partner@listnride.com