{"components":{"securitySchemes":{"ApiKeyAuth":{"description":"An API key from your dashboard. Paid plans only.","in":"header","name":"X-API-Key","type":"apiKey"},"BearerAuth":{"bearerFormat":"JWT","description":"A session token, for calls made on behalf of a signed-in user.","scheme":"bearer","type":"http"}}},"info":{"contact":{"name":"API support","url":"https://www.1-converter.com/contact"},"description":"Convert, compress and read files programmatically.\n\nAn API key is required for programmatic access and is available on paid plans; creating one on the Free plan is refused. Requests are rate limited per minute.\n\nUploads are subject to the same per-plan size limits as the web app: 50 MB Free, 200 MB Starter, 1 GB Pro, unlimited on Business. Results are deleted automatically — 24 hours on Free, 7 days on paid plans.","termsOfService":"https://www.1-converter.com/terms","title":"1converter API","version":"2.0.0"},"openapi":"3.1.0","paths":{"/api/v1/api-keys":{"get":{"description":"","operationId":"getApiKeys","responses":{"200":{"description":"Success"},"400":{"description":"The request was rejected — see `error` in the body"},"401":{"description":"Missing or invalid credentials"},"403":{"description":"Not permitted on this plan, or not yours"},"429":{"description":"Rate limit or plan quota exceeded"}},"security":[{"BearerAuth":[]}],"summary":"List your API keys","tags":["API keys"]},"post":{"description":"Refused on the Free plan — API access requires a paid plan. The secret is returned once.","operationId":"postApiKeys","responses":{"200":{"description":"Success"},"400":{"description":"The request was rejected — see `error` in the body"},"401":{"description":"Missing or invalid credentials"},"403":{"description":"Not permitted on this plan, or not yours"},"429":{"description":"Rate limit or plan quota exceeded"}},"security":[{"BearerAuth":[]}],"summary":"Create an API key","tags":["API keys"]}},"/api/v1/api-keys/{id}":{"delete":{"description":"","operationId":"deleteApiKeysById","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"400":{"description":"The request was rejected — see `error` in the body"},"401":{"description":"Missing or invalid credentials"},"403":{"description":"Not permitted on this plan, or not yours"},"429":{"description":"Rate limit or plan quota exceeded"}},"security":[{"BearerAuth":[]}],"summary":"Delete an API key","tags":["API keys"]}},"/api/v1/batch/upload":{"post":{"description":"Files per batch depend on the plan: 1 free, 5 Starter, 10 Pro, 50 Business.","operationId":"postBatchUpload","responses":{"200":{"description":"Success"},"400":{"description":"The request was rejected — see `error` in the body"},"403":{"description":"Not yours"},"429":{"description":"Rate limit or plan quota exceeded"}},"security":[{},{"ApiKeyAuth":[]},{"BearerAuth":[]}],"summary":"Convert several files at once","tags":["Batch"]}},"/api/v1/batch/{batchId}/download":{"get":{"description":"","operationId":"getBatchByBatchIdDownload","parameters":[{"in":"path","name":"batchId","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"400":{"description":"The request was rejected — see `error` in the body"},"403":{"description":"Not yours"},"429":{"description":"Rate limit or plan quota exceeded"}},"security":[{},{"ApiKeyAuth":[]},{"BearerAuth":[]}],"summary":"Download a batch as a ZIP","tags":["Batch"]}},"/api/v1/batch/{batchId}/status":{"get":{"description":"","operationId":"getBatchByBatchIdStatus","parameters":[{"in":"path","name":"batchId","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"400":{"description":"The request was rejected — see `error` in the body"},"403":{"description":"Not yours"},"429":{"description":"Rate limit or plan quota exceeded"}},"security":[{},{"ApiKeyAuth":[]},{"BearerAuth":[]}],"summary":"Get batch status","tags":["Batch"]}},"/api/v1/cloud/status":{"get":{"description":"","operationId":"getCloudStatus","responses":{"200":{"description":"Success"},"400":{"description":"The request was rejected — see `error` in the body"},"401":{"description":"Missing or invalid credentials"},"403":{"description":"Not permitted on this plan, or not yours"},"429":{"description":"Rate limit or plan quota exceeded"}},"security":[{"BearerAuth":[]}],"summary":"Which cloud providers are configured","tags":["Cloud storage"]}},"/api/v1/compress/upload":{"post":{"description":"Reduces size in place rather than changing format. Status and download use the conversion endpoints.","operationId":"postCompressUpload","responses":{"200":{"description":"Success"},"400":{"description":"The request was rejected — see `error` in the body"},"403":{"description":"Not yours"},"429":{"description":"Rate limit or plan quota exceeded"}},"security":[{},{"ApiKeyAuth":[]},{"BearerAuth":[]}],"summary":"Compress a file","tags":["Compression"]}},"/api/v1/conversions/{id}":{"delete":{"description":"","operationId":"deleteConversionsById","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"400":{"description":"The request was rejected — see `error` in the body"},"403":{"description":"Not yours"},"429":{"description":"Rate limit or plan quota exceeded"}},"security":[{},{"ApiKeyAuth":[]},{"BearerAuth":[]}],"summary":"Delete a conversion and its files","tags":["Conversion"]}},"/api/v1/conversions/{id}/cancel":{"post":{"description":"","operationId":"postConversionsByIdCancel","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"400":{"description":"The request was rejected — see `error` in the body"},"403":{"description":"Not yours"},"429":{"description":"Rate limit or plan quota exceeded"}},"security":[{},{"ApiKeyAuth":[]},{"BearerAuth":[]}],"summary":"Cancel a conversion","tags":["Conversion"]}},"/api/v1/conversions/{id}/progress":{"get":{"description":"text/event-stream. Emits progress events until the conversion completes or fails.","operationId":"getConversionsByIdProgress","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"400":{"description":"The request was rejected — see `error` in the body"},"403":{"description":"Not yours"},"429":{"description":"Rate limit or plan quota exceeded"}},"security":[{},{"ApiKeyAuth":[]},{"BearerAuth":[]}],"summary":"Stream conversion progress (SSE)","tags":["Conversion"]}},"/api/v1/conversions/{id}/share":{"post":{"description":"Optionally password-protected, with an expiry and an access limit.","operationId":"postConversionsByIdShare","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"400":{"description":"The request was rejected — see `error` in the body"},"403":{"description":"Not yours"},"429":{"description":"Rate limit or plan quota exceeded"}},"security":[{},{"ApiKeyAuth":[]},{"BearerAuth":[]}],"summary":"Create a share link","tags":["Sharing"]}},"/api/v1/conversions/{id}/shares":{"get":{"description":"Only the owner of the conversion can list these — the response contains working download tokens.","operationId":"getConversionsByIdShares","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"400":{"description":"The request was rejected — see `error` in the body"},"403":{"description":"Not yours"},"429":{"description":"Rate limit or plan quota exceeded"}},"security":[{},{"ApiKeyAuth":[]},{"BearerAuth":[]}],"summary":"List a conversion's share links","tags":["Sharing"]}},"/api/v1/convert/download/{id}":{"get":{"description":"Streams the result. Add `?redirect=true` to be redirected to a presigned URL instead, which avoids proxying the bytes.","operationId":"getConvertDownloadById","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"400":{"description":"The request was rejected — see `error` in the body"},"403":{"description":"Not yours"},"429":{"description":"Rate limit or plan quota exceeded"}},"security":[{},{"ApiKeyAuth":[]},{"BearerAuth":[]}],"summary":"Download the converted file","tags":["Conversion"]}},"/api/v1/convert/from-cloud":{"post":{"description":"Redeems the single-use token returned by the cloud download endpoints. Same plan limits, quota and retention as a direct upload.","operationId":"postConvertFromCloud","responses":{"200":{"description":"Success"},"400":{"description":"The request was rejected — see `error` in the body"},"403":{"description":"Not yours"},"429":{"description":"Rate limit or plan quota exceeded"}},"security":[{},{"ApiKeyAuth":[]},{"BearerAuth":[]}],"summary":"Convert a file imported from cloud storage","tags":["Conversion"]}},"/api/v1/convert/presigned-url/{id}":{"get":{"description":"A short-lived direct link to the stored result.","operationId":"getConvertPresignedUrlById","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"400":{"description":"The request was rejected — see `error` in the body"},"403":{"description":"Not yours"},"429":{"description":"Rate limit or plan quota exceeded"}},"security":[{},{"ApiKeyAuth":[]},{"BearerAuth":[]}],"summary":"Get a presigned download URL","tags":["Conversion"]}},"/api/v1/convert/status/{id}":{"get":{"description":"Returns `{conversion: {...}, error?: string}`. Poll this, or use the SSE progress stream.","operationId":"getConvertStatusById","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"400":{"description":"The request was rejected — see `error` in the body"},"403":{"description":"Not yours"},"429":{"description":"Rate limit or plan quota exceeded"}},"security":[{},{"ApiKeyAuth":[]},{"BearerAuth":[]}],"summary":"Get conversion status","tags":["Conversion"]}},"/api/v1/convert/upload":{"post":{"description":"Upload a file and start a conversion. multipart/form-data with `file` and `target_format`. Works without an account; plan limits apply either way.","operationId":"postConvertUpload","responses":{"200":{"description":"Success"},"400":{"description":"The request was rejected — see `error` in the body"},"403":{"description":"Not yours"},"429":{"description":"Rate limit or plan quota exceeded"}},"security":[{},{"ApiKeyAuth":[]},{"BearerAuth":[]}],"summary":"Convert an uploaded file","tags":["Conversion"]}},"/api/v1/convert/upload-url":{"post":{"description":"Fetch a file over HTTP(S) and convert it. The URL is resolved and dialled through an allow-list that refuses private and link-local addresses.","operationId":"postConvertUploadUrl","responses":{"200":{"description":"Success"},"400":{"description":"The request was rejected — see `error` in the body"},"403":{"description":"Not yours"},"429":{"description":"Rate limit or plan quota exceeded"}},"security":[{},{"ApiKeyAuth":[]},{"BearerAuth":[]}],"summary":"Convert a file from a URL","tags":["Conversion"]}},"/api/v1/formats":{"get":{"description":"","operationId":"getFormats","responses":{"200":{"description":"Success"},"400":{"description":"The request was rejected — see `error` in the body"},"429":{"description":"Rate limit or plan quota exceeded"}},"security":[],"summary":"List supported formats","tags":["Formats"]}},"/api/v1/health":{"get":{"description":"","operationId":"getHealth","responses":{"200":{"description":"Success"},"400":{"description":"The request was rejected — see `error` in the body"},"429":{"description":"Rate limit or plan quota exceeded"}},"security":[],"summary":"Health check","tags":["Service"]}},"/api/v1/share/{token}":{"get":{"description":"","operationId":"getShareByToken","parameters":[{"in":"path","name":"token","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"400":{"description":"The request was rejected — see `error` in the body"},"429":{"description":"Rate limit or plan quota exceeded"}},"security":[],"summary":"Resolve a share link","tags":["Sharing"]}},"/api/v1/share/{token}/download":{"get":{"description":"","operationId":"getShareByTokenDownload","parameters":[{"in":"path","name":"token","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"400":{"description":"The request was rejected — see `error` in the body"},"429":{"description":"Rate limit or plan quota exceeded"}},"security":[],"summary":"Download a shared file","tags":["Sharing"]}},"/api/v1/stats":{"get":{"description":"","operationId":"getStats","responses":{"200":{"description":"Success"},"400":{"description":"The request was rejected — see `error` in the body"},"429":{"description":"Rate limit or plan quota exceeded"}},"security":[],"summary":"Public product statistics","tags":["Service"]}},"/api/v1/subscriptions/me":{"get":{"description":"","operationId":"getSubscriptionsMe","responses":{"200":{"description":"Success"},"400":{"description":"The request was rejected — see `error` in the body"},"401":{"description":"Missing or invalid credentials"},"403":{"description":"Not permitted on this plan, or not yours"},"429":{"description":"Rate limit or plan quota exceeded"}},"security":[{"BearerAuth":[]}],"summary":"Your current subscription","tags":["Account"]}},"/api/v1/subscriptions/plans":{"get":{"description":"","operationId":"getSubscriptionsPlans","responses":{"200":{"description":"Success"},"400":{"description":"The request was rejected — see `error` in the body"},"429":{"description":"Rate limit or plan quota exceeded"}},"security":[],"summary":"List subscription plans","tags":["Account"]}},"/api/v1/team":{"get":{"description":"A team shares the plan and the daily allowance. It does not share files — a member's conversions stay private to them.","operationId":"getTeam","responses":{"200":{"description":"Success"},"400":{"description":"The request was rejected — see `error` in the body"},"401":{"description":"Missing or invalid credentials"},"403":{"description":"Not permitted on this plan, or not yours"},"429":{"description":"Rate limit or plan quota exceeded"}},"security":[{"BearerAuth":[]}],"summary":"Your team, its members and open invitations","tags":["Teams"]},"post":{"description":"Available on Pro (3 people) and Business (10), owner included.","operationId":"postTeam","responses":{"200":{"description":"Success"},"400":{"description":"The request was rejected — see `error` in the body"},"401":{"description":"Missing or invalid credentials"},"403":{"description":"Not permitted on this plan, or not yours"},"429":{"description":"Rate limit or plan quota exceeded"}},"security":[{"BearerAuth":[]}],"summary":"Create a team","tags":["Teams"]}},"/api/v1/team/invites":{"post":{"description":"The token is returned once and never stored in a readable form. Valid for 7 days, single use, and only redeemable by an account with that address.","operationId":"postTeamInvites","responses":{"200":{"description":"Success"},"400":{"description":"The request was rejected — see `error` in the body"},"401":{"description":"Missing or invalid credentials"},"403":{"description":"Not permitted on this plan, or not yours"},"429":{"description":"Rate limit or plan quota exceeded"}},"security":[{"BearerAuth":[]}],"summary":"Invite someone by email","tags":["Teams"]}},"/api/v1/team/invites/{id}":{"delete":{"description":"","operationId":"deleteTeamInvitesById","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"400":{"description":"The request was rejected — see `error` in the body"},"401":{"description":"Missing or invalid credentials"},"403":{"description":"Not permitted on this plan, or not yours"},"429":{"description":"Rate limit or plan quota exceeded"}},"security":[{"BearerAuth":[]}],"summary":"Withdraw an invitation","tags":["Teams"]}},"/api/v1/team/join":{"post":{"description":"","operationId":"postTeamJoin","responses":{"200":{"description":"Success"},"400":{"description":"The request was rejected — see `error` in the body"},"401":{"description":"Missing or invalid credentials"},"403":{"description":"Not permitted on this plan, or not yours"},"429":{"description":"Rate limit or plan quota exceeded"}},"security":[{"BearerAuth":[]}],"summary":"Accept an invitation","tags":["Teams"]}},"/api/v1/team/members/{id}":{"delete":{"description":"Leaving returns the person to the free plan.","operationId":"deleteTeamMembersById","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"400":{"description":"The request was rejected — see `error` in the body"},"401":{"description":"Missing or invalid credentials"},"403":{"description":"Not permitted on this plan, or not yours"},"429":{"description":"Rate limit or plan quota exceeded"}},"security":[{"BearerAuth":[]}],"summary":"Remove a member, or leave","tags":["Teams"]}},"/api/v1/tools/ocr":{"post":{"description":"multipart/form-data with `file`, `language` and `output` (`txt` or `pdf`). `pdf` returns a searchable PDF: the original pages with an invisible text layer.","operationId":"postToolsOcr","responses":{"200":{"description":"Success"},"400":{"description":"The request was rejected — see `error` in the body"},"403":{"description":"Not yours"},"429":{"description":"Rate limit or plan quota exceeded"}},"security":[{},{"ApiKeyAuth":[]},{"BearerAuth":[]}],"summary":"Read text from a scan or photo","tags":["OCR"]}},"/api/v1/tools/ocr/languages":{"get":{"description":"The language packs the server can actually load. Requesting one outside this list would not fail — it would return nonsense — so pick from here.","operationId":"getToolsOcrLanguages","responses":{"200":{"description":"Success"},"400":{"description":"The request was rejected — see `error` in the body"},"429":{"description":"Rate limit or plan quota exceeded"}},"security":[],"summary":"List installed OCR languages","tags":["OCR"]}},"/api/v1/uploads/init":{"post":{"description":"For files large enough that losing the connection matters. Declare `file_name`, `file_size` and `target_format`; the response fixes the part size. The declared size is checked against your plan before any byte is accepted.","operationId":"postUploadsInit","responses":{"200":{"description":"Success"},"400":{"description":"The request was rejected — see `error` in the body"},"403":{"description":"Not yours"},"429":{"description":"Rate limit or plan quota exceeded"}},"security":[{},{"ApiKeyAuth":[]},{"BearerAuth":[]}],"summary":"Open a resumable upload","tags":["Resumable upload"]}},"/api/v1/uploads/{token}":{"delete":{"description":"","operationId":"deleteUploadsByToken","parameters":[{"in":"path","name":"token","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"400":{"description":"The request was rejected — see `error` in the body"},"403":{"description":"Not yours"},"429":{"description":"Rate limit or plan quota exceeded"}},"security":[{},{"ApiKeyAuth":[]},{"BearerAuth":[]}],"summary":"Abandon an upload","tags":["Resumable upload"]},"get":{"description":"Returns the part numbers already stored, so an interrupted upload can send only what is missing.","operationId":"getUploadsByToken","parameters":[{"in":"path","name":"token","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"400":{"description":"The request was rejected — see `error` in the body"},"403":{"description":"Not yours"},"429":{"description":"Rate limit or plan quota exceeded"}},"security":[{},{"ApiKeyAuth":[]},{"BearerAuth":[]}],"summary":"What has arrived so far","tags":["Resumable upload"]}},"/api/v1/uploads/{token}/complete":{"post":{"description":"Returns the same 201 and the same conversion object as a direct upload. Safe to retry: a repeated call returns the conversion already created rather than starting another.","operationId":"postUploadsByTokenComplete","parameters":[{"in":"path","name":"token","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"400":{"description":"The request was rejected — see `error` in the body"},"403":{"description":"Not yours"},"429":{"description":"Rate limit or plan quota exceeded"}},"security":[{},{"ApiKeyAuth":[]},{"BearerAuth":[]}],"summary":"Assemble the parts and convert","tags":["Resumable upload"]}},"/api/v1/uploads/{token}/parts/{number}":{"put":{"description":"The raw bytes of one part as the request body. Parts are numbered from 1 and may be sent in any order or retried; each is acknowledged on its own.","operationId":"putUploadsByTokenPartsByNumber","parameters":[{"in":"path","name":"token","required":true,"schema":{"type":"string"}},{"in":"path","name":"number","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"400":{"description":"The request was rejected — see `error` in the body"},"403":{"description":"Not yours"},"429":{"description":"Rate limit or plan quota exceeded"}},"security":[{},{"ApiKeyAuth":[]},{"BearerAuth":[]}],"summary":"Upload one part","tags":["Resumable upload"]}},"/api/v1/user/profile":{"get":{"description":"","operationId":"getUserProfile","responses":{"200":{"description":"Success"},"400":{"description":"The request was rejected — see `error` in the body"},"401":{"description":"Missing or invalid credentials"},"403":{"description":"Not permitted on this plan, or not yours"},"429":{"description":"Rate limit or plan quota exceeded"}},"security":[{"BearerAuth":[]}],"summary":"Your profile","tags":["Account"]}},"/api/v1/webhooks-mgmt":{"get":{"description":"","operationId":"getWebhooksMgmt","responses":{"200":{"description":"Success"},"400":{"description":"The request was rejected — see `error` in the body"},"401":{"description":"Missing or invalid credentials"},"403":{"description":"Not permitted on this plan, or not yours"},"429":{"description":"Rate limit or plan quota exceeded"}},"security":[{"BearerAuth":[]}],"summary":"List your webhooks","tags":["Webhooks"]},"post":{"description":"Deliveries are signed. The target must be a public address: private and link-local destinations are refused at connect time, including via redirects.","operationId":"postWebhooksMgmt","responses":{"200":{"description":"Success"},"400":{"description":"The request was rejected — see `error` in the body"},"401":{"description":"Missing or invalid credentials"},"403":{"description":"Not permitted on this plan, or not yours"},"429":{"description":"Rate limit or plan quota exceeded"}},"security":[{"BearerAuth":[]}],"summary":"Register a webhook","tags":["Webhooks"]}},"/api/v1/webhooks-mgmt/{id}/deliveries":{"get":{"description":"","operationId":"getWebhooksMgmtByIdDeliveries","parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Success"},"400":{"description":"The request was rejected — see `error` in the body"},"401":{"description":"Missing or invalid credentials"},"403":{"description":"Not permitted on this plan, or not yours"},"429":{"description":"Rate limit or plan quota exceeded"}},"security":[{"BearerAuth":[]}],"summary":"Recent delivery attempts","tags":["Webhooks"]}}},"servers":[{"description":"Production","url":"https://api.1-converter.com"}]}