{"openapi":"3.1.0","info":{"title":"Color Companion","version":"1.0.0","summary":"Convert any colour, and find the ones that go with it.","description":"Convert a colour between hex, RGB, HSL, OKLCH, CMYK, and CSS names, then get the colours that pair with it: complementary, analogous, triadic, and split-complementary. Harmonies are computed in OKLCH rather than HSL, so the results hold their perceived lightness instead of drifting darker or lighter as the hue rotates. Also reports WCAG contrast against white and black.\n\n**Not for:** Does not match colours to a specific paint, thread, or Pantone catalogue — those are licensed systems and a conversion without the real spot-colour data would be a guess. CMYK output is a plain untagged conversion, not a colour-managed one for a particular press.\n\nFree tier: 250 calls per UTC day per caller. Past that, endpoints return 402 with x402 payment requirements. An MCP server exposing the same capabilities is available at https://color-companion.gumballtools.com/api/mcp.","contact":{"url":"https://github.com/bwalvoord/gumball"}},"servers":[{"url":"https://color-companion.gumballtools.com","description":"Production"}],"externalDocs":{"url":"https://color-companion.gumballtools.com/llms-full.txt","description":"Full documentation for agents"},"paths":{"/api/v1/analyse":{"get":{"operationId":"analyseColor","summary":"Convert any colour, and find the ones that go with it.","description":"Returns every format, numeric values, harmonies computed in OKLCH, and WCAG contrast.","parameters":[{"name":"color","in":"query","required":true,"description":"Hex, rgb(), hsl(), oklch(), or a CSS colour name.","schema":{"type":"string"}}],"responses":{"200":{"description":"The result.","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Invalid input. The body names the field and how to fix it.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","fix_hint","docs"],"properties":{"code":{"type":"string","description":"Stable machine-readable error code."},"message":{"type":"string"},"fix_hint":{"type":"string","description":"What to change before retrying."},"field":{"type":"string"},"token":{"type":"string"},"examples":{"type":"array","items":{"type":"string"}},"docs":{"type":"string","format":"uri"}}}}}}}},"402":{"description":"Free quota of 250 calls per UTC day exhausted. Body is an x402 v1 payment requirement ($0.001 per call). While settlement is disabled the body carries payment_enabled: false and the call cannot be unblocked by paying — wait for quota.resetsAt.","content":{"application/json":{"schema":{"type":"object"}}}}}}}}}