{"openapi":"3.1.0","info":{"title":"Framewise API","version":"0.1.0","description":"A fully local social-media image/video size & aspect-ratio reference and fit calculator: exact pixel dimensions, aspect ratios, safe zones and file-size/format recommendations for Instagram, TikTok, YouTube, LinkedIn, Facebook, X and Pinterest, plus crop-to-fill/letterbox-to-fit fit math.\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://framewise.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"hr@unifydynamics.com","url":"https://connectorbay.com/framewise/docs"},"termsOfService":"https://connectorbay.com/framewise/terms"},"servers":[{"url":"https://framewise.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/framewise/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/platform_spec":{"post":{"operationId":"platform_spec","summary":"Exact pixel dimensions, aspect ratio, safe-zone guidance and file-size/format recommendations for one","description":"Exact pixel dimensions, aspect ratio, safe-zone guidance and file-size/format recommendations for one\n    platform + content-type combination. Use for \"what size should my Instagram Story be\", \"YouTube thumbnail\n    dimensions\", \"TikTok video file size limit\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"platform":{"description":"A platform name.","examples":["Instagram","TikTok","YouTube","LinkedIn","Facebook","X","Pinterest"],"minLength":1,"title":"Platform","type":"string"},"content_type":{"description":"A content type on that platform.","examples":["Story","Reel","Shorts","thumbnail","feed post"],"minLength":1,"title":"Content Type","type":"string"}},"required":["platform","content_type"],"title":"platform_specArguments","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_content_types":{"post":{"operationId":"list_content_types","summary":"Every content type Framewise covers for one platform, with its aspect ratio and pixel size. Use for","description":"Every content type Framewise covers for one platform, with its aspect ratio and pixel size. Use for\n    \"what Instagram formats do you cover\", \"list all TikTok specs\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"platform":{"description":"A platform name.","examples":["Instagram"],"minLength":1,"title":"Platform","type":"string"}},"required":["platform"],"title":"list_content_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/list_platforms":{"post":{"operationId":"list_platforms","summary":"Every platform Framewise covers, with how many content types each has. Use for \"what platforms do you","description":"Every platform Framewise covers, with how many content types each has. Use for \"what platforms do you\n    support\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_platformsArguments","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/safe_zone_guidance":{"post":{"operationId":"safe_zone_guidance","summary":"Just the safe-zone note for one platform + content type — the area guaranteed not to be covered by the","description":"Just the safe-zone note for one platform + content type — the area guaranteed not to be covered by the\n    platform's own UI (captions, profile info, buttons) or cropped on some device/placement. Use for \"TikTok\n    safe zone for captions\", \"where can I put text on an Instagram Story\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"platform":{"description":"A platform name.","minLength":1,"title":"Platform","type":"string"},"content_type":{"description":"A content type on that platform.","minLength":1,"title":"Content Type","type":"string"}},"required":["platform","content_type"],"title":"safe_zone_guidanceArguments","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/fit_dimensions":{"post":{"operationId":"fit_dimensions","summary":"Computes both a centered crop-to-fill (scales up, crops the overhang — no bars, loses some area) and a","description":"Computes both a centered crop-to-fill (scales up, crops the overhang — no bars, loses some area) and a\n    letterbox/pillarbox-to-fit (keeps the whole source, adds bars) to take an arbitrary source size to an exact\n    target platform + content-type's pixel dimensions. Use for \"fit my 4000x3000 photo to a Pinterest pin\",\n    \"crop 1920x1080 footage to a TikTok video\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"source_width":{"description":"Source image/video width in pixels.","examples":[4000],"exclusiveMinimum":0,"title":"Source Width","type":"number"},"source_height":{"description":"Source image/video height in pixels.","examples":[3000],"exclusiveMinimum":0,"title":"Source Height","type":"number"},"platform":{"description":"Target platform.","examples":["Pinterest"],"minLength":1,"title":"Platform","type":"string"},"content_type":{"description":"Target content type on that platform.","examples":["Standard Pin"],"minLength":1,"title":"Content Type","type":"string"}},"required":["source_width","source_height","platform","content_type"],"title":"fit_dimensionsArguments","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/compare_across_platforms":{"post":{"operationId":"compare_across_platforms","summary":"Lines up every content type across every platform that shares a requested shape, side by side. Use for","description":"Lines up every content type across every platform that shares a requested shape, side by side. Use for\n    \"compare all vertical full-screen video formats\", \"every platform's square post size\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"shape":{"description":"'square', 'vertical'/'portrait'/'story', 'landscape'/'horizontal', or a literal ratio like '9:16'.","examples":["vertical"],"minLength":1,"title":"Shape","type":"string"}},"required":["shape"],"title":"compare_across_platformsArguments","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_content_type":{"post":{"operationId":"recommend_content_type","summary":"Suggests 2-4 fitting platform + content-type combinations for a stated goal. Use for \"best format for a","description":"Suggests 2-4 fitting platform + content-type combinations for a stated goal. Use for \"best format for a\n    quick tutorial\", \"what should I post a job announcement as\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"purpose":{"description":"A goal, in plain language.","examples":["a quick how-to video","a professional announcement","a product photo"],"minLength":1,"title":"Purpose","type":"string"}},"required":["purpose"],"title":"recommend_content_typeArguments","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_specs":{"post":{"operationId":"search_specs","summary":"Keyword search across every platform, content type and note. Use for \"anything about safe zones\", \"which","description":"Keyword search across every platform, content type and note. Use for \"anything about safe zones\", \"which\n    formats are 4:5\".","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_specsArguments","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/aspect_ratio_glossary":{"post":{"operationId":"aspect_ratio_glossary","summary":"Definitions of core sizing terms: aspect ratio, safe zone, letterboxing, pillarboxing, crop to fill,","description":"Definitions of core sizing terms: aspect ratio, safe zone, letterboxing, pillarboxing, crop to fill,\n    resolution, bitrate, native resolution, content-aware crop, grid preview. Use for \"what's letterboxing\",\n    \"difference between resolution and aspect ratio\".","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":"aspect_ratio_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}}}}