{"openapi":"3.1.0","info":{"title":"Device Frame API","description":"Minimal FastAPI wrapper around device_frames_core","version":"1.0.0"},"paths":{"/":{"get":{"summary":"Root","description":"Basic API root endpoint.","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/apply_frame":{"post":{"summary":"Apply Frame","description":"Apply a device frame to an uploaded screenshot.","operationId":"apply_frame_apply_frame_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_apply_frame_apply_frame_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/list_devices":{"get":{"summary":"List Devices","description":"List available devices from device_frames_core. Both filters are optional; pass none to list everything.","operationId":"list_devices_list_devices_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional category filter ('apple-iphone' | 'apple-ipad' | 'android-phone' | 'android-tablet'). Omit to list devices from every category.","examples":["apple-iphone"],"title":"Category"},"description":"Optional category filter ('apple-iphone' | 'apple-ipad' | 'android-phone' | 'android-tablet'). Omit to list devices from every category."},{"name":"device","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional device filter (e.g., '17-pro-max'). When provided, only that device's variations are returned.","examples":["17-pro-max"],"title":"Device"},"description":"Optional device filter (e.g., '17-pro-max'). When provided, only that device's variations are returned."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/find_template":{"get":{"summary":"Find Template","description":"Find the template path for a specific device variation.","operationId":"find_template_find_template_get","parameters":[{"name":"device","in":"query","required":true,"schema":{"type":"string","description":"Device slug (e.g., '17-pro-max', 'pixel-8-pro').","examples":["17-pro-max"],"title":"Device"},"description":"Device slug (e.g., '17-pro-max', 'pixel-8-pro')."},{"name":"variation","in":"query","required":true,"schema":{"type":"string","description":"Variation slug, typically a color (e.g., 'cosmic-orange', 'black').","examples":["cosmic-orange"],"title":"Variation"},"description":"Variation slug, typically a color (e.g., 'cosmic-orange', 'black')."},{"name":"category","in":"query","required":true,"schema":{"type":"string","description":"Category ('apple-iphone' | 'apple-ipad' | 'android-phone' | 'android-tablet').","examples":["apple-iphone"],"title":"Category"},"description":"Category ('apple-iphone' | 'apple-ipad' | 'android-phone' | 'android-tablet')."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sentry-debug":{"get":{"summary":"Trigger Error","operationId":"trigger_error_sentry_debug_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"Body_apply_frame_apply_frame_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File","description":"Screenshot image file (PNG, JPEG, or WebP)"},"device":{"type":"string","title":"Device","description":"Device (e.g., '17-pro-max', 'pixel-8-pro')"},"variation":{"type":"string","title":"Variation","description":"Variation (typically color, e.g., 'cosmic-orange', 'black')"},"category":{"type":"string","title":"Category","description":"Category ('apple-iphone' | 'apple-ipad' | 'android-phone' | 'android-tablet')."}},"type":"object","required":["file","device","variation","category"],"title":"Body_apply_frame_apply_frame_post"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}