{"openapi":"3.1.0","info":{"title":"Lightsetup API","version":"0.1.0","description":"A fully local, hand-curated portrait/product lighting reference (named lighting patterns, 1/2/3-point setups, modifiers, reflectors, product lightbox technique, color-temperature mixing) plus a computed lighting-ratio calculator (stops-to-ratio and inverse-square-law distance math).\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://lightsetup.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"hr@unifydynamics.com","url":"https://connectorbay.com/lightsetup/docs"},"termsOfService":"https://connectorbay.com/lightsetup/terms"},"servers":[{"url":"https://lightsetup.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/lightsetup/docs"},"security":[{},{"bearer":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/lighting_pattern_info":{"post":{"operationId":"lighting_pattern_info","summary":"Full detail for one named face-lighting pattern: key light position, look, who it flatters, common","description":"Full detail for one named face-lighting pattern: key light position, look, who it flatters, common\n    mistakes. Use for \"what's Rembrandt lighting\", \"how do I set up butterfly lighting\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"pattern":{"description":"A lighting pattern.","examples":["rembrandt","butterfly","loop"],"minLength":1,"title":"Pattern","type":"string"}},"required":["pattern"],"title":"lighting_pattern_infoArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/lighting_pattern_list":{"post":{"operationId":"lighting_pattern_list","summary":"All seven named lighting patterns with a one-line look description. Use for \"what lighting patterns do you","description":"All seven named lighting patterns with a one-line look description. Use for \"what lighting patterns do you\n    cover\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"lighting_pattern_listArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/setup_by_light_count":{"post":{"operationId":"setup_by_light_count","summary":"Explains a 1-point (key only), 2-point (key + fill), or 3-point (key + fill + rim/hair or background)","description":"Explains a 1-point (key only), 2-point (key + fill), or 3-point (key + fill + rim/hair or background)\n    lighting setup. Use for \"what's a 3-point lighting setup\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"count":{"description":"1, 2, or 3.","maximum":3,"minimum":1,"title":"Count","type":"integer"}},"required":["count"],"title":"setup_by_light_countArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/light_ratio_calculator":{"post":{"operationId":"light_ratio_calculator","summary":"Real computed photographic lighting math. mode='stops': converts a key/fill stop difference to an exposure","description":"Real computed photographic lighting math. mode='stops': converts a key/fill stop difference to an exposure\n    ratio (2^stops : 1). mode='distance': applies the inverse-square law to two light-to-subject distances.\n    mode='ratio': converts a ratio like '4:1' back to an equivalent stop difference. Use for \"what's the lighting\n    ratio for a 2-stop difference\", \"inverse square law ratio for a fill light twice as far as the key\", \"what\n    stop difference is a 4:1 ratio\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"mode":{"description":"stops | distance | ratio","title":"Mode","type":"string"},"stops_difference":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Key/fill stop difference, for mode='stops'.","title":"Stops Difference"},"key_distance":{"anyOf":[{"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Key light-to-subject distance (any consistent unit), for mode='distance'.","title":"Key Distance"},"fill_distance":{"anyOf":[{"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Fill light-to-subject distance (same unit as key_distance), for mode='distance'.","title":"Fill Distance"},"ratio":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A ratio like '4:1', for mode='ratio'.","title":"Ratio"}},"required":["mode"],"title":"light_ratio_calculatorArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/product_photography_tips":{"post":{"operationId":"product_photography_tips","summary":"Tips for lightbox/tent diffusion, reflector fill, or tabletop product setup. Use for \"how do I light a","description":"Tips for lightbox/tent diffusion, reflector fill, or tabletop product setup. Use for \"how do I light a\n    small product in a lightbox\", \"tips for a tabletop product shoot\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"setup":{"default":"lightbox","description":"lightbox | reflector | tabletop","title":"Setup","type":"string"}},"title":"product_photography_tipsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/reflector_type_guide":{"post":{"operationId":"reflector_type_guide","summary":"Explains what a white, silver, gold, or black (negative fill) reflector each does to the light. Use for","description":"Explains what a white, silver, gold, or black (negative fill) reflector each does to the light. Use for\n    \"what does a gold reflector do\", \"when should I use a black flag instead of a reflector\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"color":{"description":"white | silver | gold | black","title":"Color","type":"string"}},"required":["color"],"title":"reflector_type_guideArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/modifier_guide":{"post":{"operationId":"modifier_guide","summary":"Explains the light quality (soft/hard, spread) and typical use of a light modifier. Use for \"what kind of","description":"Explains the light quality (soft/hard, spread) and typical use of a light modifier. Use for \"what kind of\n    light does a beauty dish produce\", \"softbox vs umbrella\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"modifier":{"description":"softbox | umbrella_shoot_through | umbrella_reflective | beauty_dish | ring_light | snoot | grid","title":"Modifier","type":"string"}},"required":["modifier"],"title":"modifier_guideArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/recommend_pattern_for_goal":{"post":{"operationId":"recommend_pattern_for_goal","summary":"Suggests a lighting pattern or setup for a stated goal: slimming a round face, dramatic mood, even beauty","description":"Suggests a lighting pattern or setup for a stated goal: slimming a round face, dramatic mood, even beauty\n    light, minimizing skin texture, an all-purpose default, or a clean product shot. Use for \"how do I slim a\n    round face with lighting\", \"what lighting works for a moody portrait\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"goal":{"description":"A stated goal, in plain language.","examples":["slim a round face","dramatic moody portrait","clean white-background product shot"],"minLength":1,"title":"Goal","type":"string"}},"required":["goal"],"title":"recommend_pattern_for_goalArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/color_temperature_mixing_tips":{"post":{"operationId":"color_temperature_mixing_tips","summary":"Tips for mixing daylight and tungsten light sources: color clash, gels (CTO/CTB), white balance, and","description":"Tips for mixing daylight and tungsten light sources: color clash, gels (CTO/CTB), white balance, and\n    window-light drift through the day. Use for \"how do I mix daylight and tungsten lighting\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"color_temperature_mixing_tipsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/lighting_glossary":{"post":{"operationId":"lighting_glossary","summary":"Defines lighting terms: catchlight, falloff, specular vs diffuse, key/fill/rim light, flag, gobo, inverse","description":"Defines lighting terms: catchlight, falloff, specular vs diffuse, key/fill/rim light, flag, gobo, inverse\n    square law, color temperature. Use for \"what's a catchlight\", \"what's the inverse square law\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"term":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A specific term to look up; omit to list all.","title":"Term"}},"title":"lighting_glossaryArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}