Katto Uploads API
The Uploads API from Katto — 2 operation(s) for uploads.
The Uploads API from Katto — 2 operation(s) for uploads.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/katto-tech:katto-tech-uploads-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Katto Tech Uploads API
version: 1.7.1
contact:
name: Katto
url: https://katto.tech/docs/api
license:
name: Proprietary
description: 'Operations tagged Uploads across 2 of this provider''s published API definitions: openapi.json, katto-tech-openapi.json. Each path carries the servers of the definition it was published in.'
servers:
- url: https://katto.tech/api/v1
security:
- bearerAuth: []
tags:
- name: Uploads
paths:
/uploads:
post:
operationId: createUpload
summary: Reserve an upload (clip a local file)
description: Step 1 of clipping a local file. Reserves a job and returns a presigned R2 PUT url. PUT the file bytes to `upload_url` with the given Content-Type, then call POST /v1/uploads/{job_id}/complete. No quota is charged until the complete step. Requires write scope.
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- filename
- content_type
- size
properties:
filename:
type: string
maxLength: 200
example: podcast.mp4
content_type:
type: string
enum:
- video/mp4
- video/quicktime
- video/webm
- video/x-matroska
size:
type: integer
description: 'File size in bytes. Cap: 3 GB Free, 5 GB Solo and Creator.'
responses:
'201':
description: Upload reserved
content:
application/json:
schema:
type: object
properties:
job_id:
type: string
format: uuid
upload_url:
type: string
format: uri
description: Presigned R2 PUT url (2h expiry).
method:
type: string
example: PUT
headers:
type: object
description: Headers to send with the PUT (Content-Type).
expires_in:
type: integer
example: 7200
complete_url:
type: string
format: uri
'400':
$ref: '#/components/responses/Error'
'401':
$ref: '#/components/responses/Error'
'403':
$ref: '#/components/responses/Error'
'429':
$ref: '#/components/responses/Error'
tags:
- Uploads
servers:
- url: https://katto.tech/api/v1
/uploads/{id}/complete:
post:
operationId: completeUpload
summary: Finish an upload and start clipping
description: Step 2 of clipping a local file. Call after PUTting the file to `upload_url`. Verifies the file landed, charges one video of quota, and queues processing. Requires write scope.
parameters:
- name: id
in: path
required: true
schema:
type: string
format: uuid
description: The job_id from POST /v1/uploads.
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
config:
type: object
description: Optional pre-clip settings (same as POST /v1/jobs).
properties:
genre:
type: string
clipLength:
type: string
enum:
- lt30
- '30_60'
- '60_90'
- '90_180'
customPrompt:
type: string
maxLength: 1000
topics:
type: string
maxLength: 500
responses:
'201':
description: Queued for processing
content:
application/json:
schema:
type: object
properties:
id:
type: string
format: uuid
status:
type: string
example: queued
status_url:
type: string
format: uri
'400':
$ref: '#/components/responses/Error'
'401':
$ref: '#/components/responses/Error'
'403':
$ref: '#/components/responses/Error'
'404':
$ref: '#/components/responses/Error'
'409':
$ref: '#/components/responses/Error'
'429':
$ref: '#/components/responses/Error'
tags:
- Uploads
servers:
- url: https://katto.tech/api/v1
components:
responses:
Error:
description: Error
content:
application/json:
schema:
type: object
properties:
error:
type: string
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: 'API key created at https://katto.tech/dashboard/api-keys, sent as `Authorization: Bearer sk_live_...`.'
x-refined-from:
- openapi.json
- katto-tech-openapi.json
x-provenance:
method: harvested
publisher: Katto
source: https://katto.tech/openapi.json
note: split by refine-openapis from the provider's own published document, verified by fetch (openapi/_original/*.fetch.json);
stamped by stamp-openapi-provenance.py (roadmap#793)