{"openapi":"3.1.0","info":{"title":"Clipzi","version":"1.1.0","summary":"AI video clipping tool: long videos in, short vertical clips out.","description":"Public HTTP surface of clipzi.app. Clipzi turns long videos (podcasts, interviews, streams, lectures) into short vertical clips for TikTok, Instagram Reels, and YouTube Shorts.\n\nThe product API (upload, analyze, clip export) currently requires an authenticated browser session and is not yet available for programmatic use; it is therefore not documented here. If you need API access, say so via POST /api/v1/contact.\n\n## Versioning and deprecation\n\nThe API is versioned by URL path: /api/v1/... is the current version. Unversioned paths (e.g. /api/contact) are aliases of the current version. Breaking changes only ship in a new path version (/api/v2/); v1 behavior never changes. Before an endpoint is removed, its responses carry `Deprecation` and `Sunset` headers (RFC 8594) for at least 90 days, and this document is updated with the replacement.\n\n## Rate limiting\n\nAPI responses carry IETF RateLimit headers (RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset in seconds, RateLimit-Policy as `limit;w=windowSeconds`). Exceeding a limit returns HTTP 429 with a Retry-After header and the JSON error envelope. Current limits: contact 10/min per IP, MCP 60/min per IP, other /api/* paths 120/min per IP.\n\n## MCP server\n\nA read-only MCP (Model Context Protocol) server runs at https://clipzi.app/api/mcp (Streamable HTTP transport, stateless, no auth) with tools for product info, pricing, and developer docs. Discovery manifest: https://clipzi.app/mcp.json.\n\nMachine-readable resources (plain GETs, not listed as API operations): /llms.txt (site overview, text/plain), /pricing.md (pricing, text/markdown), /sitemap.xml (application/xml). Human-readable developer docs: https://clipzi.app/en/developers. The homepage also serves a markdown variant via content negotiation: request it with `Accept: text/markdown`.\n\nUnknown /api/* paths return HTTP 404 with the JSON error envelope described in components. All API errors are JSON, never HTML.","contact":{"name":"Clipzi support","email":"g@clipzi.app","url":"https://clipzi.app/en/contact"},"termsOfService":"https://clipzi.app/en/terms"},"servers":[{"url":"https://clipzi.app"}],"paths":{"/api/v1/contact":{"post":{"operationId":"sendContactMessage","summary":"Send a message to the Clipzi team","description":"Delivers a message to the founder's inbox. Use it for support, partnership, or API access requests. Obvious spam is dropped. Rate limit: 10 requests per minute per IP, signaled via RateLimit headers.","tags":["contact"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactRequest"}}}},"responses":{"200":{"description":"Message accepted","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Missing or invalid fields","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SimpleError"}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"description":"Delivery failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SimpleError"}}}}}}},"/api/contact":{"post":{"operationId":"sendContactMessageUnversioned","summary":"Alias of POST /api/v1/contact","description":"Unversioned alias of the current version. Prefer /api/v1/contact for new integrations.","tags":["contact"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactRequest"}}}},"responses":{"200":{"description":"Message accepted","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Missing or invalid fields","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SimpleError"}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"description":"Delivery failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SimpleError"}}}}}}},"/openapi.json":{"get":{"operationId":"getOpenApiSpec","summary":"This document","description":"The OpenAPI 3.1 description of Clipzi's public HTTP surface.","tags":["machine-readable"],"responses":{"200":{"description":"OpenAPI 3.1 specification","content":{"application/json":{"schema":{"type":"object","properties":{"openapi":{"type":"string"},"info":{"type":"object"},"servers":{"type":"array","items":{"type":"object"}},"paths":{"type":"object"},"components":{"type":"object"}},"required":["openapi","info","paths"]}}}}}}},"/mcp.json":{"get":{"operationId":"getMcpManifest","summary":"MCP server manifest","description":"Discovery manifest for the Clipzi MCP server (read-only tools over Streamable HTTP at /api/mcp).","tags":["machine-readable"],"responses":{"200":{"description":"MCP manifest","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"protocolVersion":{"type":"string"},"endpoint":{"type":"string","format":"uri"},"transport":{"type":"object","properties":{"type":{"type":"string"},"url":{"type":"string","format":"uri"}},"required":["type","url"]},"tools":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"}},"required":["name","description"]}}},"required":["name","endpoint","transport"]}}}}}}}},"externalDocs":{"description":"Clipzi developer resources (human-readable)","url":"https://clipzi.app/en/developers"},"components":{"schemas":{"ContactRequest":{"type":"object","properties":{"name":{"type":"string","maxLength":100},"email":{"type":"string","format":"email","maxLength":254},"reason":{"type":"string","maxLength":100,"description":"Short reason, e.g. Support, Billing, Partnership, API access"},"message":{"type":"string","minLength":5,"maxLength":5000}},"required":["name","email","reason","message"]},"SuccessResponse":{"type":"object","properties":{"success":{"type":"boolean","const":true}},"required":["success"]},"SimpleError":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]},"ErrorEnvelope":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"Stable machine-readable error code"},"message":{"type":"string","description":"Human-readable description"},"hint":{"type":"string","description":"What to try next"}},"required":["code","message"]}},"required":["error"]}},"headers":{"RateLimit-Limit":{"description":"Requests allowed in the current window","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests remaining in the current window","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the current window resets","schema":{"type":"integer"}},"Retry-After":{"description":"Seconds to wait before retrying (on 429)","schema":{"type":"integer"}}},"responses":{"NotFound":{"description":"Unknown API path","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"TooManyRequests":{"description":"Rate limit exceeded; self-throttle using the headers","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"Retry-After":{"$ref":"#/components/headers/Retry-After"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}}},"tags":[{"name":"contact","description":"Reach the Clipzi team"},{"name":"machine-readable","description":"Static resources for agents and crawlers"}]}