{"openapi":"3.1.0","info":{"title":"Hyraparkering API","version":"1.0.0","description":"Agent-first API för sök, annonser och bokningsförfrågningar. Ingen betalning eller deposition. Fixtures är märkta isFixture=true och får inte presenteras som live-utbud.","contact":{"name":"Hyraparkering","url":"https://hyraparkering.se"}},"servers":[{"url":"https://hyraparkering.se/api/v1","description":"Produktion"}],"tags":[{"name":"search"},{"name":"listings"},{"name":"booking-requests"},{"name":"meta"}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Scopes: public:read, listings:read, listings:write, booking-requests:read, booking-requests:write. Skrivskyddade anrop utan token avvisas i produktion."}},"schemas":{"Listing":{"type":"object","required":["id","slug","title","type","isFixture","price","charger"],"properties":{"id":{"type":"string"},"slug":{"type":"string"},"title":{"type":"string"},"type":{"type":"string","enum":["garage","carport","markparkering","p-hus","gata","stallplats","laddplats"]},"isFixture":{"type":"boolean","description":"true = utvecklingsdata, inte en liveannons"},"overnightAllowed":{"type":"boolean"},"campingAllowed":{"type":"boolean"},"price":{"type":"object","properties":{"currency":{"const":"SEK"},"hourly":{"type":["number","null"]},"daily":{"type":["number","null"]},"overnight":{"type":["number","null"]},"monthly":{"type":["number","null"]},"campingNight":{"type":["number","null"]}}}}},"BookingRequest":{"type":"object","required":["listingId","requesterName","requesterEmail","vehicleClass","startAt","endAt"],"properties":{"listingId":{"type":"string"},"requesterName":{"type":"string"},"requesterEmail":{"type":"string","format":"email"},"vehicleClass":{"type":"string"},"startAt":{"type":"string","format":"date-time"},"endAt":{"type":"string","format":"date-time"},"message":{"type":"string"}}},"Error":{"type":"object","properties":{"error":{"type":"string"},"detail":{"type":"string"}}}}},"paths":{"/search":{"get":{"tags":["search"],"summary":"Sök annonser","security":[{"bearerAuth":["public:read"]},{}],"parameters":[{"name":"q","in":"query","schema":{"type":"string"}},{"name":"city","in":"query","schema":{"type":"string"}},{"name":"type","in":"query","schema":{"type":"string"}},{"name":"vehicle","in":"query","schema":{"type":"string"}},{"name":"charger","in":"query","schema":{"type":"boolean"}},{"name":"overnight","in":"query","schema":{"type":"boolean"}},{"name":"camping","in":"query","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Träffar. Fixtures har isFixture=true.","content":{"application/json":{"schema":{"type":"object","properties":{"results":{"type":"array","items":{"$ref":"#/components/schemas/Listing"}},"inventory":{"type":"string","enum":["dev_fixtures","mixed","live"]}}}}}}}}},"/listings":{"get":{"tags":["listings"],"summary":"Lista annonser","security":[{"bearerAuth":["listings:read"]},{}],"responses":{"200":{"description":"Lista"}}},"post":{"tags":["listings"],"summary":"Skapa utkast (hyr-ut)","security":[{"bearerAuth":["listings:write"]}],"responses":{"201":{"description":"Utkast skapat"},"400":{"description":"Validering"}}}},"/listings/{id}":{"get":{"tags":["listings"],"summary":"Hämta annons","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Annons"},"404":{"description":"Saknas"}}}},"/booking-requests":{"post":{"tags":["booking-requests"],"summary":"Skicka förfrågan — inte betalning","security":[{"bearerAuth":["booking-requests:write"]},{}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingRequest"}}}},"responses":{"201":{"description":"Förfrågan mottagen"}}}},"/openapi.json":{"get":{"tags":["meta"],"summary":"Denna specifikation","responses":{"200":{"description":"OpenAPI 3.1"}}}}}}