{"openapi":"3.1.0","info":{"title":"FileHealth API","version":"0.1.0","description":"File-format decision reference, an extension-to-MIME-type lookup table, and a rough file-size estimator — all local.\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://filehealth.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"hr@unifydynamics.com","url":"https://connectorbay.com/filehealth/docs"},"termsOfService":"https://connectorbay.com/filehealth/terms"},"servers":[{"url":"https://filehealth.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/filehealth/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/recommend_format":{"post":{"operationId":"recommend_format","summary":"Recommend a file format for an image, video, or document, with the real tradeoffs — not just a name.","description":"Recommend a file format for an image, video, or document, with the real tradeoffs — not just a name.\n    Use for \"PNG or JPEG for a logo\", \"what video format for streaming\", \"PDF or DOCX for this report\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"asset_type":{"description":"image | video | document","title":"Asset Type","type":"string"},"has_transparency":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"image: needs an alpha/transparent background.","title":"Has Transparency"},"is_photo":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"image: true for a photo/continuous-tone image, false for a flat graphic.","title":"Is Photo"},"needs_animation":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"image: true if it must animate.","title":"Needs Animation"},"is_flat_graphic":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"image: true for a logo/icon/line-art made of flat shapes.","title":"Is Flat Graphic"},"priority":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"image: balanced | quality | file_size | compatibility | editability","title":"Priority"},"use_case":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"video: web_streaming | editing_archival | apple_ecosystem | max_compatibility","title":"Use Case"},"needs_transparency":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"video: needs an alpha channel.","title":"Needs Transparency"},"needs_editing":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"document: will be edited further, not just read.","title":"Needs Editing"},"needs_fixed_layout":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"document: must look identical on every device/printer.","title":"Needs Fixed Layout"},"needs_signature_or_archival":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"document: needs a digital signature or long-term archival.","title":"Needs Signature Or Archival"},"has_complex_formatting":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"document: has rich formatting (styles, tables, track changes).","title":"Has Complex Formatting"}},"required":["asset_type"],"title":"recommend_formatArguments","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/mime_lookup":{"post":{"operationId":"mime_lookup","summary":"Look up a file extension's MIME type, or the extensions that map to a given MIME type, from a bundled","description":"Look up a file extension's MIME type, or the extensions that map to a given MIME type, from a bundled\n    table of common formats. Use for \"what's the MIME type for .webp\", \"which extensions use image/tiff\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"extension":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A file extension, with or without the leading dot (e.g. 'webp').","title":"Extension"},"mime_type":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A MIME type to find matching extensions for (e.g. 'image/tiff').","title":"Mime Type"}},"title":"mime_lookupArguments","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/estimate_file_size":{"post":{"operationId":"estimate_file_size","summary":"A rough file-size estimate: real bitrate x duration for video/audio, or pixel-count x compression-ratio","description":"A rough file-size estimate: real bitrate x duration for video/audio, or pixel-count x compression-ratio\n    for images. Clearly a labeled estimate, not a measurement. Use for \"how big will a 10-minute 1080p video\n    be\", \"how big will this photo be as a JPEG\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"kind":{"description":"video | audio | image","title":"Kind","type":"string"},"resolution":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"video: 480p | 720p | 1080p | 1440p | 4k | 8k","title":"Resolution"},"duration_sec":{"anyOf":[{"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"video/audio: length in seconds.","title":"Duration Sec"},"quality":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"low | medium | high (for image/PNG, reflects content compressibility instead).","title":"Quality"},"custom_bitrate_mbps":{"anyOf":[{"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"video: override the table with your own bitrate in Mbps.","title":"Custom Bitrate Mbps"},"custom_bitrate_kbps":{"anyOf":[{"exclusiveMinimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"audio: override the table with your own bitrate in kbps.","title":"Custom Bitrate Kbps"},"width_px":{"anyOf":[{"exclusiveMinimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"image: width in pixels.","title":"Width Px"},"height_px":{"anyOf":[{"exclusiveMinimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"image: height in pixels.","title":"Height Px"},"image_format":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"image: jpeg | webp | png","title":"Image Format"},"has_alpha":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"image: has a transparency channel.","title":"Has Alpha"}},"required":["kind"],"title":"estimate_file_sizeArguments","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}}}}