{"openapi":"3.1.0","info":{"title":"Vectorize API","summary":"Logo to SVG vectorization API","description":"Free, anonymous REST API that turns PNG, JPG and WebP logos into clean, editable SVG and exports a brand kit. No account or API key is needed. Jobs are temporary and expire after two hours. Guides, quickstart and sandbox: https://vectorize.stemonte.io/developers/\n\n**Versioning.** The API version is a date sent in the optional `Vectorize-Version` request header (current: `2026-10-14`; omitted means current). **Deprecation.** Breaking changes ship only under a new dated Vectorize-Version. A deprecated version or endpoint is announced on the developer portal and answers with Deprecation (RFC 9745), Sunset (RFC 8594) and Link rel=\"deprecation\" headers at least 90 days before it is removed. Nothing is deprecated today. **Idempotency.** Write operations accept an optional `Idempotency-Key` header so retries never create duplicate jobs. Details: https://vectorize.stemonte.io/developers/#versioning","contact":{"name":"Vectorize support","url":"https://vectorize.stemonte.io/support/"},"version":"2026-10-14","x-api-versioning":{"header":"Vectorize-Version","current":"2026-10-14","supported":["2026-10-14"],"deprecation_policy":"Breaking changes ship only under a new dated Vectorize-Version. A deprecated version or endpoint is announced on the developer portal and answers with Deprecation (RFC 9745), Sunset (RFC 8594) and Link rel=\"deprecation\" headers at least 90 days before it is removed. Nothing is deprecated today."}},"servers":[{"url":"https://vectorize.stemonte.io"}],"paths":{"/api/health":{"get":{"tags":["Service"],"summary":"Health check","description":"Returns `{\"status\":\"ok\"}` when the service is up.","operationId":"health_api_health_get","parameters":[{"name":"Vectorize-Version","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional date-based API version. Defaults to the current version, `2026-10-14`. Unknown versions return 400. Every /api response echoes the version in `Vectorize-Version`.","title":"Vectorize-Version"},"description":"Optional date-based API version. Defaults to the current version, `2026-10-14`. Unknown versions return 400. Every /api response echoes the version in `Vectorize-Version`."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api":{"get":{"tags":["Service"],"summary":"API index","description":"Machine-readable entry point: documentation, OpenAPI and MCP URLs, authentication, limits and main endpoints.","operationId":"api_index_api_get","parameters":[{"name":"Vectorize-Version","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional date-based API version. Defaults to the current version, `2026-10-14`. Unknown versions return 400. Every /api response echoes the version in `Vectorize-Version`.","title":"Vectorize-Version"},"description":"Optional date-based API version. Defaults to the current version, `2026-10-14`. Unknown versions return 400. Every /api response echoes the version in `Vectorize-Version`."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiIndex"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sponsors":{"get":{"tags":["Site"],"summary":"Featured sponsor","description":"Current and past featured sponsors shown on the site.","operationId":"sponsors_api_sponsors_get","parameters":[{"name":"Vectorize-Version","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional date-based API version. Defaults to the current version, `2026-10-14`. Unknown versions return 400. Every /api response echoes the version in `Vectorize-Version`.","title":"Vectorize-Version"},"description":"Optional date-based API version. Defaults to the current version, `2026-10-14`. Unknown versions return 400. Every /api response echoes the version in `Vectorize-Version`."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/sponsors/{sponsor_id}/logo.png":{"get":{"tags":["Site"],"summary":"Sponsor logo","operationId":"sponsor_logo_api_sponsors__sponsor_id__logo_png_get","parameters":[{"name":"sponsor_id","in":"path","required":true,"schema":{"type":"string","title":"Sponsor Id"}},{"name":"Vectorize-Version","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional date-based API version. Defaults to the current version, `2026-10-14`. Unknown versions return 400. Every /api response echoes the version in `Vectorize-Version`.","title":"Vectorize-Version"},"description":"Optional date-based API version. Defaults to the current version, `2026-10-14`. Unknown versions return 400. Every /api response echoes the version in `Vectorize-Version`."}],"responses":{"200":{"description":"Sponsor logo PNG.","content":{"image/png":{"schema":{"type":"string","format":"binary"}}}},"404":{"description":"The job does not exist or has expired.","content":{"image/png":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/stats":{"get":{"tags":["Site"],"summary":"Live visitor counts","description":"Aggregated visitor counts shown on the homepage. Returns 503 when unavailable.","operationId":"stats_api_stats_get","parameters":[{"name":"Vectorize-Version","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional date-based API version. Defaults to the current version, `2026-10-14`. Unknown versions return 400. Every /api response echoes the version in `Vectorize-Version`.","title":"Vectorize-Version"},"description":"Optional date-based API version. Defaults to the current version, `2026-10-14`. Unknown versions return 400. Every /api response echoes the version in `Vectorize-Version`."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"503":{"description":"Live stats are temporarily unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/vectorize":{"post":{"tags":["Vectorize"],"summary":"Vectorize an uploaded logo","description":"Upload a PNG, JPG or WebP (multipart/form-data, field `file`, up to 10 MB). Returns a job whose SVG is at `svg`. Optional form fields: `colors` (0 for automatic, or 1, 2, 3, 4, 6, 8), `smoothing` (0-100, default 20), `transparent` (default true), `trim` (default true). Jobs expire after two hours. Returns 429 while another job is processing.","operationId":"vectorize_api_vectorize_post","parameters":[{"name":"Vectorize-Version","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional date-based API version. Defaults to the current version, `2026-10-14`. Unknown versions return 400. Every /api response echoes the version in `Vectorize-Version`.","title":"Vectorize-Version"},"description":"Optional date-based API version. Defaults to the current version, `2026-10-14`. Unknown versions return 400. Every /api response echoes the version in `Vectorize-Version`."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional. 1-255 printable ASCII characters, ideally a random UUID. Repeating a request with the same key and the same parameters returns the first successful response with `Idempotent-Replayed: true` instead of creating another job. The same key with different parameters returns 422; the same key while the first request is still running returns 409 with `Retry-After`. Errors are never stored, and keys expire with the job after two hours.","title":"Idempotency-Key"},"description":"Optional. 1-255 printable ASCII characters, ideally a random UUID. Repeating a request with the same key and the same parameters returns the first successful response with `Idempotent-Replayed: true` instead of creating another job. The same key with different parameters returns 422; the same key while the first request is still running returns 409 with `Retry-After`. Errors are never stored, and keys expire with the job after two hours."}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_vectorize_api_vectorize_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VectorizeResult"}}}},"400":{"description":"The Idempotency-Key is not 1 to 255 printable ASCII characters, or the Vectorize-Version is unknown.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Another request with the same Idempotency-Key is still running. Retry after the `Retry-After` delay.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"413":{"description":"The image is larger than 10 MB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request could not be processed, or the Idempotency-Key was reused with different parameters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Another job is processing; retry shortly. The service runs one job at a time.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/mcp/uploads":{"post":{"tags":["MCP"],"summary":"Temporary upload for MCP clients","description":"Stores a local image for 15 minutes and returns an `upload_id` that the MCP `vectorize_logo` tool accepts.","operationId":"mcp_upload_api_mcp_uploads_post","parameters":[{"name":"Vectorize-Version","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional date-based API version. Defaults to the current version, `2026-10-14`. Unknown versions return 400. Every /api response echoes the version in `Vectorize-Version`.","title":"Vectorize-Version"},"description":"Optional date-based API version. Defaults to the current version, `2026-10-14`. Unknown versions return 400. Every /api response echoes the version in `Vectorize-Version`."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional. 1-255 printable ASCII characters, ideally a random UUID. Repeating a request with the same key and the same parameters returns the first successful response with `Idempotent-Replayed: true` instead of creating another job. The same key with different parameters returns 422; the same key while the first request is still running returns 409 with `Retry-After`. Errors are never stored, and keys expire with the job after two hours.","title":"Idempotency-Key"},"description":"Optional. 1-255 printable ASCII characters, ideally a random UUID. Repeating a request with the same key and the same parameters returns the first successful response with `Idempotent-Replayed: true` instead of creating another job. The same key with different parameters returns 422; the same key while the first request is still running returns 409 with `Retry-After`. Errors are never stored, and keys expire with the job after two hours."}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_mcp_upload_api_mcp_uploads_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"400":{"description":"The Idempotency-Key is not 1 to 255 printable ASCII characters, or the Vectorize-Version is unknown.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Another request with the same Idempotency-Key is still running. Retry after the `Retry-After` delay.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"413":{"description":"The image is larger than 10 MB.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request could not be processed, or the Idempotency-Key was reused with different parameters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Temporary upload limit reached.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/sample":{"post":{"tags":["Vectorize"],"summary":"Create a sandbox sample job","description":"Sandbox: creates a demo job from a built-in logo without uploading anything. The job works with every `/api/jobs/{token}/...` endpoint and expires after two hours. Optional form field `trim` (default true).","operationId":"sample_api_sample_post","parameters":[{"name":"Vectorize-Version","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional date-based API version. Defaults to the current version, `2026-10-14`. Unknown versions return 400. Every /api response echoes the version in `Vectorize-Version`.","title":"Vectorize-Version"},"description":"Optional date-based API version. Defaults to the current version, `2026-10-14`. Unknown versions return 400. Every /api response echoes the version in `Vectorize-Version`."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional. 1-255 printable ASCII characters, ideally a random UUID. Repeating a request with the same key and the same parameters returns the first successful response with `Idempotent-Replayed: true` instead of creating another job. The same key with different parameters returns 422; the same key while the first request is still running returns 409 with `Retry-After`. Errors are never stored, and keys expire with the job after two hours.","title":"Idempotency-Key"},"description":"Optional. 1-255 printable ASCII characters, ideally a random UUID. Repeating a request with the same key and the same parameters returns the first successful response with `Idempotent-Replayed: true` instead of creating another job. The same key with different parameters returns 422; the same key while the first request is still running returns 409 with `Retry-After`. Errors are never stored, and keys expire with the job after two hours."}],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_sample_api_sample_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SampleResult"}}}},"400":{"description":"The Idempotency-Key is not 1 to 255 printable ASCII characters, or the Vectorize-Version is unknown.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Another request with the same Idempotency-Key is still running. Retry after the `Retry-After` delay.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request could not be processed, or the Idempotency-Key was reused with different parameters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/jobs/{token}/visibility":{"post":{"tags":["Editing"],"summary":"Hide colors in a job","description":"Creates a new job with the listed palette colors hidden. At least one color must stay visible. The source job is unchanged; use the returned `id` for later requests.","operationId":"visibility_api_jobs__token__visibility_post","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}},{"name":"Vectorize-Version","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional date-based API version. Defaults to the current version, `2026-10-14`. Unknown versions return 400. Every /api response echoes the version in `Vectorize-Version`.","title":"Vectorize-Version"},"description":"Optional date-based API version. Defaults to the current version, `2026-10-14`. Unknown versions return 400. Every /api response echoes the version in `Vectorize-Version`."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional. 1-255 printable ASCII characters, ideally a random UUID. Repeating a request with the same key and the same parameters returns the first successful response with `Idempotent-Replayed: true` instead of creating another job. The same key with different parameters returns 422; the same key while the first request is still running returns 409 with `Retry-After`. Errors are never stored, and keys expire with the job after two hours.","title":"Idempotency-Key"},"description":"Optional. 1-255 printable ASCII characters, ideally a random UUID. Repeating a request with the same key and the same parameters returns the first successful response with `Idempotent-Replayed: true` instead of creating another job. The same key with different parameters returns 422; the same key while the first request is still running returns 409 with `Retry-After`. Errors are never stored, and keys expire with the job after two hours."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VisibilityRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VisibilityResult"}}}},"400":{"description":"The Idempotency-Key is not 1 to 255 printable ASCII characters, or the Vectorize-Version is unknown.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Another request with the same Idempotency-Key is still running. Retry after the `Retry-After` delay.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The job does not exist or has expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request could not be processed, or the Idempotency-Key was reused with different parameters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Another job is processing; retry shortly. The service runs one job at a time.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/jobs/{token}/editor/settings":{"post":{"tags":["Editing"],"summary":"Re-trace an MCP revision with new settings","description":"Changes `colors`, `smoothing`, `transparent` or `trim` on a revision created through the hosted MCP server and returns a new revision. Revisions created with `POST /api/vectorize` do not support this endpoint; upload again with new form fields instead.","operationId":"editor_settings_api_jobs__token__editor_settings_post","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}},{"name":"Vectorize-Version","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional date-based API version. Defaults to the current version, `2026-10-14`. Unknown versions return 400. Every /api response echoes the version in `Vectorize-Version`.","title":"Vectorize-Version"},"description":"Optional date-based API version. Defaults to the current version, `2026-10-14`. Unknown versions return 400. Every /api response echoes the version in `Vectorize-Version`."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional. 1-255 printable ASCII characters, ideally a random UUID. Repeating a request with the same key and the same parameters returns the first successful response with `Idempotent-Replayed: true` instead of creating another job. The same key with different parameters returns 422; the same key while the first request is still running returns 409 with `Retry-After`. Errors are never stored, and keys expire with the job after two hours.","title":"Idempotency-Key"},"description":"Optional. 1-255 printable ASCII characters, ideally a random UUID. Repeating a request with the same key and the same parameters returns the first successful response with `Idempotent-Replayed: true` instead of creating another job. The same key with different parameters returns 422; the same key while the first request is still running returns 409 with `Retry-After`. Errors are never stored, and keys expire with the job after two hours."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EditorSettingsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RevisionResult"}}}},"400":{"description":"The Idempotency-Key is not 1 to 255 printable ASCII characters, or the Vectorize-Version is unknown.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Another request with the same Idempotency-Key is still running. Retry after the `Retry-After` delay.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The revision does not exist or has expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request could not be processed, or the Idempotency-Key was reused with different parameters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Another job is processing; retry shortly. The service runs one job at a time.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/jobs/{token}/editor/visibility":{"post":{"tags":["Editing"],"summary":"Hide colors in an MCP revision","description":"Hides or restores palette colors on a revision created through the hosted MCP server and returns a new revision.","operationId":"editor_visibility_api_jobs__token__editor_visibility_post","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}},{"name":"Vectorize-Version","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional date-based API version. Defaults to the current version, `2026-10-14`. Unknown versions return 400. Every /api response echoes the version in `Vectorize-Version`.","title":"Vectorize-Version"},"description":"Optional date-based API version. Defaults to the current version, `2026-10-14`. Unknown versions return 400. Every /api response echoes the version in `Vectorize-Version`."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional. 1-255 printable ASCII characters, ideally a random UUID. Repeating a request with the same key and the same parameters returns the first successful response with `Idempotent-Replayed: true` instead of creating another job. The same key with different parameters returns 422; the same key while the first request is still running returns 409 with `Retry-After`. Errors are never stored, and keys expire with the job after two hours.","title":"Idempotency-Key"},"description":"Optional. 1-255 printable ASCII characters, ideally a random UUID. Repeating a request with the same key and the same parameters returns the first successful response with `Idempotent-Replayed: true` instead of creating another job. The same key with different parameters returns 422; the same key while the first request is still running returns 409 with `Retry-After`. Errors are never stored, and keys expire with the job after two hours."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VisibilityRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RevisionResult"}}}},"400":{"description":"The Idempotency-Key is not 1 to 255 printable ASCII characters, or the Vectorize-Version is unknown.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Another request with the same Idempotency-Key is still running. Retry after the `Retry-After` delay.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The revision does not exist or has expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request could not be processed, or the Idempotency-Key was reused with different parameters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Another job is processing; retry shortly. The service runs one job at a time.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/jobs/{token}/logo.svg":{"get":{"tags":["Exports"],"summary":"Download the SVG","description":"Returns the SVG. Add `?download=true` to get a `Content-Disposition: attachment` response.","operationId":"logo_api_jobs__token__logo_svg_get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}},{"name":"download","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Download"}},{"name":"Vectorize-Version","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional date-based API version. Defaults to the current version, `2026-10-14`. Unknown versions return 400. Every /api response echoes the version in `Vectorize-Version`.","title":"Vectorize-Version"},"description":"Optional date-based API version. Defaults to the current version, `2026-10-14`. Unknown versions return 400. Every /api response echoes the version in `Vectorize-Version`."}],"responses":{"200":{"description":"The SVG file.","content":{"image/svg+xml":{"schema":{"type":"string","format":"binary"}}}},"404":{"description":"The job does not exist or has expired.","content":{"image/svg+xml":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/jobs/{token}/preview.png":{"get":{"tags":["Exports"],"summary":"Download a PNG preview","description":"Returns a PNG rendering of the SVG.","operationId":"preview_api_jobs__token__preview_png_get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}},{"name":"Vectorize-Version","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional date-based API version. Defaults to the current version, `2026-10-14`. Unknown versions return 400. Every /api response echoes the version in `Vectorize-Version`.","title":"Vectorize-Version"},"description":"Optional date-based API version. Defaults to the current version, `2026-10-14`. Unknown versions return 400. Every /api response echoes the version in `Vectorize-Version`."}],"responses":{"200":{"description":"The PNG preview.","content":{"image/png":{"schema":{"type":"string","format":"binary"}}}},"404":{"description":"The job does not exist or has expired.","content":{"image/png":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/jobs/{token}/kit":{"post":{"tags":["Exports"],"summary":"Build and download the brand kit","description":"Builds the brand kit ZIP (SVG and PNG variants, brand guide, favicons, app icons, social images and mockups) and returns it. JSON body: `name` (up to 80 characters) and `background_color` (hex such as `#ffffff`). Naturally idempotent: it changes nothing, so repeating it returns an equivalent archive. An `Idempotency-Key` header is accepted and validated for consistency but nothing is stored.","operationId":"kit_api_jobs__token__kit_post","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}},{"name":"Vectorize-Version","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional date-based API version. Defaults to the current version, `2026-10-14`. Unknown versions return 400. Every /api response echoes the version in `Vectorize-Version`.","title":"Vectorize-Version"},"description":"Optional date-based API version. Defaults to the current version, `2026-10-14`. Unknown versions return 400. Every /api response echoes the version in `Vectorize-Version`."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional. 1-255 printable ASCII characters, ideally a random UUID. Repeating a request with the same key and the same parameters returns the first successful response with `Idempotent-Replayed: true` instead of creating another job. The same key with different parameters returns 422; the same key while the first request is still running returns 409 with `Retry-After`. Errors are never stored, and keys expire with the job after two hours.","title":"Idempotency-Key"},"description":"Optional. 1-255 printable ASCII characters, ideally a random UUID. Repeating a request with the same key and the same parameters returns the first successful response with `Idempotent-Replayed: true` instead of creating another job. The same key with different parameters returns 422; the same key while the first request is still running returns 409 with `Retry-After`. Errors are never stored, and keys expire with the job after two hours."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KitRequest"}}}},"responses":{"200":{"description":"The brand-kit ZIP archive.","content":{"application/zip":{"schema":{"type":"string","format":"binary"}}}},"404":{"description":"The job does not exist or has expired.","content":{"application/zip":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"400":{"description":"The Idempotency-Key is not 1 to 255 printable ASCII characters, or the Vectorize-Version is unknown.","content":{"application/zip":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"The request could not be processed, or the Idempotency-Key was reused with different parameters.","content":{"application/zip":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Another job is processing; retry shortly. The service runs one job at a time.","content":{"application/zip":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/api/jobs/{token}/brand-kit.zip":{"get":{"tags":["Exports"],"summary":"Download a brand kit exported through MCP","description":"Returns the ZIP created by the hosted MCP `export_brand_kit` tool for this revision. Returns 404 until it has been exported. REST clients get the ZIP directly from `POST /api/jobs/{token}/kit`.","operationId":"exported_kit_api_jobs__token__brand_kit_zip_get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}},{"name":"Vectorize-Version","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional date-based API version. Defaults to the current version, `2026-10-14`. Unknown versions return 400. Every /api response echoes the version in `Vectorize-Version`.","title":"Vectorize-Version"},"description":"Optional date-based API version. Defaults to the current version, `2026-10-14`. Unknown versions return 400. Every /api response echoes the version in `Vectorize-Version`."}],"responses":{"200":{"description":"The brand-kit ZIP archive.","content":{"application/zip":{"schema":{"type":"string","format":"binary"}}}},"404":{"description":"The job does not exist or has expired.","content":{"application/zip":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/jobs/{token}/mockup/{kind}.png":{"get":{"tags":["Exports"],"summary":"Download a mockup","description":"Renders the logo on a mockup. `kind` is `cap` or `tshirt`.","operationId":"mockup_api_jobs__token__mockup__kind__png_get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}},{"name":"kind","in":"path","required":true,"schema":{"type":"string","title":"Kind"}},{"name":"Vectorize-Version","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional date-based API version. Defaults to the current version, `2026-10-14`. Unknown versions return 400. Every /api response echoes the version in `Vectorize-Version`.","title":"Vectorize-Version"},"description":"Optional date-based API version. Defaults to the current version, `2026-10-14`. Unknown versions return 400. Every /api response echoes the version in `Vectorize-Version`."}],"responses":{"200":{"description":"The mockup PNG.","content":{"image/png":{"schema":{"type":"string","format":"binary"}}}},"404":{"description":"The job does not exist or has expired.","content":{"image/png":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"ApiEndpoint":{"properties":{"method":{"type":"string","title":"Method"},"path":{"type":"string","title":"Path"},"summary":{"type":"string","title":"Summary"}},"type":"object","required":["method","path","summary"],"title":"ApiEndpoint"},"ApiIndex":{"properties":{"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"version":{"type":"string","title":"Version"},"documentation":{"type":"string","title":"Documentation","description":"Developer portal with quickstart and examples."},"openapi":{"type":"string","title":"Openapi","description":"OpenAPI 3 specification."},"mcp":{"type":"string","title":"Mcp","description":"Hosted MCP server URL."},"discovery":{"additionalProperties":{"type":"string"},"type":"object","title":"Discovery","description":"Agent discovery documents: RFC 9727 API catalog, MCP server card, ARD catalog, Agent Skills index and llms.txt."},"authentication":{"type":"string","const":"none","title":"Authentication"},"versioning":{"additionalProperties":true,"type":"object","title":"Versioning","description":"Date-based API versioning and deprecation policy."},"idempotency":{"additionalProperties":true,"type":"object","title":"Idempotency","description":"Idempotency-Key support on write operations."},"limits":{"additionalProperties":true,"type":"object","title":"Limits"},"sandbox":{"additionalProperties":{"type":"string"},"type":"object","title":"Sandbox"},"endpoints":{"items":{"$ref":"#/components/schemas/ApiEndpoint"},"type":"array","title":"Endpoints"}},"type":"object","required":["name","description","version","documentation","openapi","mcp","discovery","authentication","versioning","idempotency","limits","sandbox","endpoints"],"title":"ApiIndex"},"Body_mcp_upload_api_mcp_uploads_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_mcp_upload_api_mcp_uploads_post"},"Body_sample_api_sample_post":{"properties":{"trim":{"type":"boolean","title":"Trim","default":true}},"type":"object","title":"Body_sample_api_sample_post"},"Body_vectorize_api_vectorize_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"},"colors":{"type":"integer","title":"Colors","default":0},"smoothing":{"type":"integer","title":"Smoothing","default":20},"transparent":{"type":"boolean","title":"Transparent","default":true},"trim":{"type":"boolean","title":"Trim","default":true},"upload_session_id":{"type":"string","title":"Upload Session Id","default":""}},"type":"object","required":["file"],"title":"Body_vectorize_api_vectorize_post"},"EditorSettingsRequest":{"properties":{"colors":{"anyOf":[{"type":"integer","enum":[0,1,2,3,4,6,8]},{"type":"null"}],"title":"Colors"},"smoothing":{"anyOf":[{"type":"integer","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Smoothing"},"transparent":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Transparent"},"trim":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Trim"}},"type":"object","title":"EditorSettingsRequest"},"ErrorResponse":{"properties":{"detail":{"anyOf":[{"type":"string"},{"items":{"additionalProperties":true,"type":"object"},"type":"array"}],"title":"Detail","description":"Human-readable message. A list of problems when the request fields fail validation."}},"type":"object","required":["detail"],"title":"ErrorResponse"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HealthResponse":{"properties":{"status":{"type":"string","const":"ok","title":"Status"}},"type":"object","required":["status"],"title":"HealthResponse"},"KitRequest":{"properties":{"name":{"type":"string","maxLength":80,"title":"Name","default":"Your brand"},"background_color":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$","title":"Background Color","default":"#ffffff"}},"type":"object","title":"KitRequest"},"RevisionResult":{"properties":{"revision_id":{"type":"string","title":"Revision Id"},"svg_url":{"type":"string","title":"Svg Url"},"preview_url":{"type":"string","title":"Preview Url"},"preview_markdown":{"type":"string","title":"Preview Markdown"},"palette":{"items":{"type":"string"},"type":"array","title":"Palette"},"hidden_colors":{"items":{"type":"string"},"type":"array","title":"Hidden Colors"},"width":{"type":"integer","title":"Width"},"height":{"type":"integer","title":"Height"},"bytes":{"type":"integer","title":"Bytes"},"warning":{"type":"string","title":"Warning"},"settings":{"$ref":"#/components/schemas/RevisionSettings"},"expires_in_seconds":{"type":"integer","title":"Expires In Seconds"}},"type":"object","required":["revision_id","svg_url","preview_url","preview_markdown","palette","hidden_colors","width","height","bytes","warning","settings","expires_in_seconds"],"title":"RevisionResult"},"RevisionSettings":{"properties":{"colors":{"type":"integer","title":"Colors"},"smoothing":{"type":"integer","title":"Smoothing"},"transparent":{"type":"boolean","title":"Transparent"},"trim":{"type":"boolean","title":"Trim"}},"type":"object","required":["colors","smoothing","transparent","trim"],"title":"RevisionSettings"},"SampleResult":{"properties":{"id":{"type":"string","title":"Id","description":"Job token. Use it in /api/jobs/{token}/... URLs."},"svg":{"type":"string","title":"Svg","description":"Relative URL of the SVG for this job."},"palette":{"items":{"type":"string"},"type":"array","title":"Palette","description":"Hex colors present in the SVG."},"bytes":{"type":"integer","title":"Bytes","description":"Size of the SVG in bytes."},"width":{"type":"integer","title":"Width","description":"SVG width in pixels."},"height":{"type":"integer","title":"Height","description":"SVG height in pixels."}},"type":"object","required":["id","svg","palette","bytes","width","height"],"title":"SampleResult"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"VectorizeResult":{"properties":{"id":{"type":"string","title":"Id","description":"Job token. Use it in /api/jobs/{token}/... URLs."},"svg":{"type":"string","title":"Svg","description":"Relative URL of the SVG for this job."},"palette":{"items":{"type":"string"},"type":"array","title":"Palette","description":"Hex colors present in the SVG."},"bytes":{"type":"integer","title":"Bytes","description":"Size of the SVG in bytes."},"width":{"type":"integer","title":"Width","description":"SVG width in pixels."},"height":{"type":"integer","title":"Height","description":"SVG height in pixels."},"warning":{"type":"string","title":"Warning","description":"Notes about automatic adjustments, such as background removal or resizing.","default":""}},"type":"object","required":["id","svg","palette","bytes","width","height"],"title":"VectorizeResult"},"VisibilityRequest":{"properties":{"hidden_colors":{"items":{"type":"string"},"type":"array","maxItems":32,"title":"Hidden Colors"}},"type":"object","title":"VisibilityRequest"},"VisibilityResult":{"properties":{"id":{"type":"string","title":"Id","description":"Job token. Use it in /api/jobs/{token}/... URLs."},"svg":{"type":"string","title":"Svg","description":"Relative URL of the SVG for this job."},"palette":{"items":{"type":"string"},"type":"array","title":"Palette","description":"Hex colors present in the SVG."},"bytes":{"type":"integer","title":"Bytes","description":"Size of the SVG in bytes."},"width":{"type":"integer","title":"Width","description":"SVG width in pixels."},"height":{"type":"integer","title":"Height","description":"SVG height in pixels."},"warning":{"type":"string","title":"Warning","description":"Notes about automatic adjustments, such as background removal or resizing.","default":""},"original_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original Id","description":"Token of the job the colors were hidden from."},"hidden_colors":{"items":{"type":"string"},"type":"array","title":"Hidden Colors","description":"Colors hidden in this job."}},"type":"object","required":["id","svg","palette","bytes","width","height"],"title":"VisibilityResult"}}},"tags":[{"name":"Service","description":"API index and health check."},{"name":"Vectorize","description":"Create a vectorized logo job from an upload, or from the built-in sandbox sample."},{"name":"Editing","description":"Change colors on an existing job."},{"name":"Exports","description":"Download the SVG, PNG preview, brand kit and mockups of a job."},{"name":"MCP","description":"Hosted Model Context Protocol server and its temporary upload endpoint."},{"name":"Site","description":"Public site data."}]}