{"openapi":"3.1.0","info":{"title":"Reluminas API","version":"1.0.0","description":"Reluminas image enhancement and inspection APIs, plus reporting/data endpoints for operational analytics."},"servers":[{"url":"https://reluminas.com"}],"paths":{"/api/enhance":{"post":{"summary":"Enhance a real-estate photo","description":"Uploads a source image and returns an enhanced render with resolved prompt decisions and usage metadata.","requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["image"],"properties":{"image":{"type":"string","format":"binary"},"tier":{"type":"string","enum":["preview","pro"]},"outputResolution":{"type":"string","enum":["2k","4k"]},"mode":{"type":"string","enum":["natural","flambient","hdr","editorial","blackAndWhite"]},"jobId":{"type":"string","description":"Client-generated UUID/idempotency key"},"skyPreference":{"type":"string","enum":["clear_blue","cloudy_blue","keep_original"]},"fixGeometry":{"type":"string","enum":["true","false"]},"isTwilight":{"type":"string","enum":["true","false"]},"contentAction":{"type":"string"},"extras":{"type":"string","description":"JSON array string"}}}}}},"responses":{"200":{"description":"Enhancement completed","content":{"application/json":{"schema":{"type":"object","properties":{"requestId":{"type":"string"},"outputBase64":{"type":"string"},"outputResolution":{"type":"string","enum":["2k","4k"]},"usage":{"type":"object","properties":{"model":{"type":"string"},"latencyMs":{"type":"number"}}}}}}}}}}},"/api/enhance/revise":{"post":{"summary":"Revision (masked or full-image)","description":"Applies either a targeted mask revision or a full-image plain-language revision while preserving original context.","requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["image","instruction"],"properties":{"image":{"type":"string","format":"binary"},"mask":{"type":"string","format":"binary"},"instruction":{"type":"string"},"contextPrompt":{"type":"string"},"outputResolution":{"type":"string","enum":["2k","4k"]}}}}}},"responses":{"200":{"description":"Revision completed","content":{"application/json":{"schema":{"type":"object","properties":{"requestId":{"type":"string"},"outputResolution":{"type":"string","enum":["2k","4k"]},"outputMime":{"type":"string"},"outputBase64":{"type":"string"}}}}}}}}},"/api/enhance/status":{"get":{"summary":"Get enhancement job status","description":"Checks a job by jobId and returns PROCESSING, SUCCESS, or FAILED.","parameters":[{"name":"jobId","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Status response"},"202":{"description":"Job still processing"},"404":{"description":"Job not found"}}}},"/api/enhance/output/{jobId}":{"get":{"summary":"Fetch generated output by jobId","parameters":[{"name":"jobId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"JPEG output image"},"404":{"description":"Output not found"}}}},"/api/inspect":{"post":{"summary":"Run pre-inspector analysis","description":"Analyzes a source image and returns scene/window/material routing hints.","requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["image"],"properties":{"image":{"type":"string","format":"binary"},"visitorId":{"type":"string"}}}}}},"responses":{"200":{"description":"Inspector result","content":{"application/json":{"schema":{"type":"object","properties":{"requestId":{"type":"string"},"analysis":{"type":"object"}}}}}}}}},"/api/data/stats":{"get":{"summary":"Aggregated operational stats (private)","description":"Returns run success/error, duration, and inspector distributions.","security":[{"dataApiKey":[]}],"parameters":[{"name":"from","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"to","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"durationSampleLimit","in":"query","schema":{"type":"integer","default":5000,"maximum":50000},"description":"Max successful runs sampled to compute p50/p95/p99 duration metrics."}],"responses":{"200":{"description":"Stats payload"},"401":{"description":"Invalid or missing API key"}}}},"/api/data/runs":{"get":{"summary":"Paginated run records (private)","description":"Returns paginated enhancement run metadata.","security":[{"dataApiKey":[]}],"parameters":[{"name":"from","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"to","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"status","in":"query","schema":{"type":"string"}},{"name":"mode","in":"query","schema":{"type":"string"}},{"name":"tier","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","default":100,"maximum":500}},{"name":"cursor","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Runs payload"},"401":{"description":"Invalid or missing API key"}}}},"/api/public/reports/lighting":{"get":{"summary":"Public lighting report","description":"Returns aggregate report metrics for the public lighting report page.","parameters":[{"name":"from","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"to","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"sampleLimit","in":"query","schema":{"type":"integer","default":5000,"maximum":20000}}],"responses":{"200":{"description":"Report payload"}}}}},"components":{"securitySchemes":{"dataApiKey":{"type":"apiKey","in":"header","name":"x-data-api-key","description":"Pass the DATA_API_KEY via x-data-api-key or Authorization: Bearer <key>."}}}}