{"openapi":"3.0.3","info":{"title":"Mietsoft Partner-API","version":"1.0","description":"Schnittstelle für Vermieter mit dem Zusatzbaustein „Schnittstelle“. Lesezugriff auf Fahrzeuge, Verfügbarkeit, Preise, Buchungen, Kunden und Rechnungen; Anlegen von Buchungen. Fahrzeugsteuerung ist nicht Teil der API.","contact":{"name":"Mietsoft","email":"info@mietsoft.ch","url":"https://mietsoft.ch"}},"servers":[{"url":"http://mietsoft.ch/api/partner/v1"}],"security":[{"bearerAuth":[]}],"tags":[{"name":"Konto"},{"name":"Stammdaten"},{"name":"Fahrzeuge"},{"name":"Buchungen"},{"name":"Kunden"},{"name":"Rechnungen"}],"paths":{"/me":{"get":{"summary":"Eigenes Konto","description":"Mandant, Schlüsselname, Rechte und Ratenlimit des verwendeten Schlüssels.","parameters":[],"responses":{"200":{"description":"OK"}},"tags":["Konto"]}},"/locations":{"get":{"summary":"Standorte","description":"Alle Abhol- und Rückgabestandorte des Mandanten.","parameters":[],"responses":{"200":{"description":"OK"}},"tags":["Stammdaten"]}},"/categories":{"get":{"summary":"Fahrzeugkategorien","description":"Kategorien (z. B. PKW, Transporter) mit ID und Name.","parameters":[],"responses":{"200":{"description":"OK"}},"tags":["Stammdaten"]}},"/extras":{"get":{"summary":"Extras und Schutzpakete","description":"Zubuchbare Extras aus dem Katalog mit Preis und Einheit (pro Tag, pro Buchung, Pauschal, pro km).","parameters":[],"responses":{"200":{"description":"OK"}},"tags":["Stammdaten"]}},"/vehicles":{"get":{"summary":"Fahrzeuge","description":"Alle aktiven Fahrzeuge. Filter nach Standort oder Kategorie möglich.","parameters":[{"in":"query","name":"location","required":false,"description":"Standort-ID"},{"in":"query","name":"category","required":false,"description":"Kategorie-ID"}],"responses":{"200":{"description":"OK"}},"tags":["Fahrzeuge"]}},"/vehicles/{id}":{"get":{"summary":"Fahrzeug","description":"Ein Fahrzeug mit Stammdaten und letztem bekannten Kilometer- und Tankstand.","parameters":[{"in":"path","name":"id","required":true,"description":"Fahrzeug-ID (Feld „id“ aus /vehicles)","example":"AB123"}],"responses":{"200":{"description":"OK"}},"tags":["Fahrzeuge"]}},"/availability":{"get":{"summary":"Verfügbarkeit","description":"Für einen Zeitraum je Fahrzeug, ob es frei ist. Belegt zählt jede bestätigte oder laufende Buchung, Blockierung und interne Nutzung.","parameters":[{"in":"query","name":"from","required":true,"description":"Beginn, ISO-8601 lokal (YYYY-MM-DDTHH:mm)","example":"2026-10-01T09:00"},{"in":"query","name":"to","required":true,"description":"Ende, ISO-8601 lokal","example":"2026-10-03T09:00"},{"in":"query","name":"category","required":false,"description":"nur diese Kategorie-ID"},{"in":"query","name":"location","required":false,"description":"nur dieser Standort"}],"responses":{"200":{"description":"OK"}},"tags":["Fahrzeuge"]}},"/vehicles/{id}/price":{"get":{"summary":"Preis berechnen","description":"Endpreis für ein Fahrzeug und einen Zeitraum, inklusive Tarifstaffel, Zeittarifen und dynamischen Zuschlägen. Extras sind nicht enthalten (siehe /extras).","parameters":[{"in":"path","name":"id","required":true,"description":"Fahrzeug-ID","example":"AB123"},{"in":"query","name":"from","required":true,"description":"Beginn","example":"2026-10-01T09:00"},{"in":"query","name":"to","required":true,"description":"Ende","example":"2026-10-03T09:00"}],"responses":{"200":{"description":"OK"}},"tags":["Fahrzeuge"]}},"/bookings":{"get":{"summary":"Buchungen","description":"Buchungen des Mandanten, seitenweise. Zeitraumfilter bezieht sich auf den Mietbeginn.","parameters":[{"in":"query","name":"from","required":false,"description":"Mietbeginn ab (YYYY-MM-DD)"},{"in":"query","name":"to","required":false,"description":"Mietbeginn bis (YYYY-MM-DD)"},{"in":"query","name":"status","required":false,"description":"upcoming | confirmed | active | completed | cancelled"},{"in":"query","name":"vehicle","required":false,"description":"Fahrzeug-ID"},{"in":"query","name":"page","required":false,"description":"Seite, ab 1"},{"in":"query","name":"limit","required":false,"description":"je Seite, max. 200"}],"responses":{"200":{"description":"OK"}},"tags":["Buchungen"]},"post":{"summary":"Buchung anlegen","description":"Legt eine Buchung an (Recht „bookings:write“). Preis wird serverseitig wie bei /price berechnet, Extras zum Katalogpreis. Die Buchung entsteht als Anfrage ohne Zahlung; Zahlung und Kaution laufen wie bei einer Büro-Buchung. Das Fahrzeug muss im Zeitraum frei sein.","parameters":[],"responses":{"201":{"description":"angelegt"},"409":{"description":"Fahrzeug im Zeitraum belegt"},"422":{"description":"Eingabe ungültig"}},"tags":["Buchungen"],"requestBody":{"required":true,"content":{"application/json":{"example":{"vehicle":"AB123","start":"2026-10-01T09:00","end":"2026-10-03T09:00","customer":{"name":"Max Muster","email":"max@example.com","phone":"+43 660 1234567"},"extras":[{"id":"1779528865182","quantity":1}]}}}}}},"/bookings/{id}":{"get":{"summary":"Buchung","description":"Eine Buchung mit Kunde, Zeiten, Extras, Preis und Zahlstatus.","parameters":[{"in":"path","name":"id","required":true,"description":"Buchungsnummer","example":"K7Q2M-9ZP4A"}],"responses":{"200":{"description":"OK"}},"tags":["Buchungen"]}},"/customers":{"get":{"summary":"Kunden","description":"Kundenkartei des Mandanten. Suche nach E-Mail oder Namensteil.","parameters":[{"in":"query","name":"email","required":false,"description":"genaue E-Mail"},{"in":"query","name":"q","required":false,"description":"Suchtext in Name oder E-Mail"},{"in":"query","name":"page","required":false,"description":"Seite"},{"in":"query","name":"limit","required":false,"description":"je Seite, max. 200"}],"responses":{"200":{"description":"OK"}},"tags":["Kunden"]}},"/invoices":{"get":{"summary":"Rechnungen","description":"Rechnungen mit Positionen und Zahlstatus, für die Buchhaltung.","parameters":[{"in":"query","name":"from","required":false,"description":"Rechnungsdatum ab (YYYY-MM-DD)"},{"in":"query","name":"to","required":false,"description":"Rechnungsdatum bis"},{"in":"query","name":"status","required":false,"description":"offen | bezahlt | storniert"},{"in":"query","name":"page","required":false,"description":"Seite"},{"in":"query","name":"limit","required":false,"description":"je Seite, max. 200"}],"responses":{"200":{"description":"OK"}},"tags":["Rechnungen"]}},"/invoices/{id}":{"get":{"summary":"Rechnung","description":"Eine Rechnung mit Positionen.","parameters":[{"in":"path","name":"id","required":true,"description":"Rechnungsnummer","example":"26-001"}],"responses":{"200":{"description":"OK"}},"tags":["Rechnungen"]}},"/invoices/{id}/pdf":{"get":{"summary":"Rechnung als PDF","description":"Liefert die Rechnungsdatei (application/pdf).","parameters":[{"in":"path","name":"id","required":true,"description":"Rechnungsnummer","example":"26-001"}],"responses":{"200":{"description":"PDF"},"404":{"description":"keine Datei"}},"tags":["Rechnungen"]}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"API-Schlüssel des Mandanten, Format ms_live_…; alternativ Header X-Api-Key"}}},"x-mietsoft":{"rate_limit":{"per_minute":600,"write_per_minute":60,"headers":["X-RateLimit-Limit","X-RateLimit-Remaining"]},"errors":[{"http":401,"code":"unauthorized","meaning":"Schlüssel fehlt, ungültig oder gesperrt"},{"http":403,"code":"scope_denied","meaning":"Schlüssel hat das Recht nicht (read | bookings:write)"},{"http":403,"code":"module_disabled","meaning":"Zusatzbaustein Schnittstelle nicht aktiv"},{"http":404,"code":"not_found","meaning":"Datensatz gehört nicht zum Mandanten oder existiert nicht"},{"http":409,"code":"not_available","meaning":"Fahrzeug im Zeitraum belegt"},{"http":422,"code":"invalid","meaning":"Eingabe ungültig, Details im Feld message"},{"http":429,"code":"rate_limited","meaning":"Ratenlimit überschritten"}],"dates":"Zeiten sind Ortszeit des Mandanten im Format YYYY-MM-DDTHH:mm, ohne Zeitzone.","versioning":"Pfad /api/partner/v1. Neue Felder können jederzeit dazukommen; entfallende Felder oder Pfade werden mindestens 6 Monate vorher angekündigt und erscheinen dann unter /v2.","not_included":["Fahrzeug öffnen/schließen, Wegfahrsperre (bewusst nicht über die API)","Stornieren und Ändern von Buchungen (geplant)","Webhooks (geplant)"],"scopes":["read","bookings:write"]}}