{"openapi":"3.1.0","info":{"title":"Gradelut API","version":"0.1.0","description":"A fully local color-grading and LUT reference: grading terminology, common creative looks with the color-theory reasoning behind each, how LUT types work, a color-temperature reference, a standard grading workflow, and a look-by-mood decision guide.\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://gradelut.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"hr@unifydynamics.com","url":"https://connectorbay.com/gradelut/docs"},"termsOfService":"https://connectorbay.com/gradelut/terms"},"servers":[{"url":"https://gradelut.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/gradelut/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/term_definition":{"post":{"operationId":"term_definition","summary":"Definition and a concrete example for one color-grading term. Use for \"what does lift gamma gain mean\",","description":"Definition and a concrete example for one color-grading term. Use for \"what does lift gamma gain mean\",\n    \"what's a vectorscope for\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"term":{"description":"A grading term.","examples":["lift gamma gain","vectorscope","log footage"],"minLength":1,"title":"Term","type":"string"}},"required":["term"],"title":"term_definitionArguments","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/list_terms":{"post":{"operationId":"list_terms","summary":"Every grading term Gradelut defines. Use for \"what terms do you cover\".","description":"Every grading term Gradelut defines. Use for \"what terms do you cover\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_termsArguments","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/look_info":{"post":{"operationId":"look_info","summary":"What a common creative look looks like, the color-theory reason it works, and how to approximate it. Use","description":"What a common creative look looks like, the color-theory reason it works, and how to approximate it. Use\n    for \"what's the teal-orange look and why does it work\", \"explain the bleach bypass look\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"look":{"description":"A look name.","examples":["teal and orange","bleach bypass","cyberpunk neon"],"minLength":1,"title":"Look","type":"string"}},"required":["look"],"title":"look_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/list_looks":{"post":{"operationId":"list_looks","summary":"Every creative look Gradelut covers, with its typical moods/genres. Use for \"what looks do you cover\".","description":"Every creative look Gradelut covers, with its typical moods/genres. Use for \"what looks do you cover\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_looksArguments","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_look":{"post":{"operationId":"recommend_look","summary":"Suggests 2-3 fitting creative looks for a stated mood or genre. Use for \"what look fits a horror scene\",","description":"Suggests 2-3 fitting creative looks for a stated mood or genre. Use for \"what look fits a horror scene\",\n    \"best grade for a coming-of-age summer film\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"mood_or_genre":{"description":"A mood or genre, in plain language.","examples":["horror","romantic comedy","sci-fi thriller"],"minLength":1,"title":"Mood Or Genre","type":"string"}},"required":["mood_or_genre"],"title":"recommend_lookArguments","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/lut_explainer":{"post":{"operationId":"lut_explainer","summary":"Explains how a specific LUT type works and when to use it. Use for \"how does a 3D LUT differ from a 1D","description":"Explains how a specific LUT type works and when to use it. Use for \"how does a 3D LUT differ from a 1D\n    LUT\", \"what's a technical LUT for\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"lut_type":{"description":"A LUT type.","examples":["3D LUT","technical LUT","creative LUT"],"minLength":1,"title":"Lut Type","type":"string"}},"required":["lut_type"],"title":"lut_explainerArguments","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/list_lut_types":{"post":{"operationId":"list_lut_types","summary":"Every LUT type Gradelut explains. Use for \"what kinds of LUTs are there\".","description":"Every LUT type Gradelut explains. Use for \"what kinds of LUTs are there\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_lut_typesArguments","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_reference":{"post":{"operationId":"color_temperature_reference","summary":"The standard Kelvin color temperature for a named light source — the physical basis for white balance","description":"The standard Kelvin color temperature for a named light source — the physical basis for white balance\n    and color casts. Use for \"what color temperature is tungsten light\", \"Kelvin value of overcast sky\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"light_source":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A light source name; omit to list all.","title":"Light Source"}},"title":"color_temperature_referenceArguments","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/grading_workflow_steps":{"post":{"operationId":"grading_workflow_steps","summary":"The standard node-based color-grading workflow order, from balancing exposure through finishing touches.","description":"The standard node-based color-grading workflow order, from balancing exposure through finishing touches.\n    Use for \"what order should I grade a project in\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"grading_workflow_stepsArguments","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/search_reference":{"post":{"operationId":"search_reference","summary":"Keyword search across every term and look. Use for \"anything about complementary colors\", \"which looks","description":"Keyword search across every term and look. Use for \"anything about complementary colors\", \"which looks\n    use desaturation\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"query":{"description":"Keyword to search for.","minLength":1,"title":"Query","type":"string"}},"required":["query"],"title":"search_referenceArguments","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}}}}