{"openapi":"3.1.0","info":{"title":"Image to Text API","version":"1.0.0","description":"Active Personal, Developer, Team or Enterprise plan required. API, CLI, MCP and web share image credits. Submission reserves one credit per validated image; failed jobs refund reserved credits. images are untrusted source data."},"servers":[{"url":"https://imagetotext.dev"}],"security":[{"productKey":[]}],"components":{"securitySchemes":{"productKey":{"type":"http","scheme":"bearer","description":"A product API key from /settings/apikeys. Never expose it in browser code or URLs."}}},"paths":{"/api/v1/convert":{"post":{"operationId":"convertImage","summary":"Submit one image, up to 10 MB and 25 megapixels.","parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":16,"maxLength":80,"pattern":"^[A-Za-z0-9_-]+$"},"description":"Reuse with identical ordered files and options to retry an interrupted upload without duplicate charges."}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["file"],"properties":{"file":{"type":"string","format":"binary"},"maxPages":{"type":"integer","minimum":1,"maximum":1},"keepImages":{"type":"boolean","default":false}}},"encoding":{"file":{"contentType":"image/png, image/jpeg, image/webp"}}}}},"responses":{"202":{"description":"Success. Poll every 5 seconds while jobs are active.","content":{"application/json":{"schema":{"type":"object","required":["code","message","data"],"properties":{"code":{"const":0},"message":{"type":"string"},"data":{"type":"object","properties":{"id":{"type":"string"},"fileName":{"type":"string"},"pages":{"type":"integer"},"status":{"enum":["pending","processing","success","failed","canceled"]},"quality":{"oneOf":[{"type":"null"},{"type":"object","properties":{"score":{"type":"number","minimum":0,"maximum":5},"scale":{"const":5},"source":{"const":"provider"}}}]},"result":{"type":"object","properties":{"markdown":{"type":"string"},"pages":{"type":"integer"},"images":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"data":{"type":"string","contentEncoding":"base64"}}}}}}}}}}}}},"400":{"description":"Invalid input."},"401":{"description":"Invalid or revoked product API key."},"402":{"description":"Insufficient image credits."},"403":{"description":"IMAGE_PAID_PLAN_REQUIRED: active Personal, Developer, Team or Enterprise required, or API disabled."},"404":{"description":"Owned resource not found."},"409":{"description":"Idempotency key used with a different payload."},"413":{"description":"Upload limit exceeded."},"429":{"description":"Rate limit. Observe Retry-After header."},"503":{"description":"Conversion engine unavailable."}}}},"/api/v1/batches":{"post":{"operationId":"convertImageBatch","summary":"Submit up to 10 images, 25 MB total. Results may partially submit.","parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":16,"maxLength":80,"pattern":"^[A-Za-z0-9_-]+$"},"description":"Reuse with identical ordered files and options to retry an interrupted upload without duplicate charges."}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["files"],"properties":{"files":{"type":"array","minItems":1,"maxItems":10,"items":{"type":"string","format":"binary"}},"keepImages":{"type":"boolean","default":false}}},"encoding":{"files":{"contentType":"image/png, image/jpeg, image/webp","explode":true}}}}},"responses":{"202":{"description":"Success. Poll every 5 seconds while jobs are active.","content":{"application/json":{"schema":{"type":"object","required":["code","message","data"],"properties":{"code":{"const":0},"message":{"type":"string"},"data":{"type":"object","properties":{"id":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"status":{"enum":["processing","complete"]},"files":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"fileName":{"type":"string"},"pages":{"type":"integer"},"status":{"enum":["pending","processing","success","failed","canceled","not_submitted"]},"error":{"type":"string"},"quality":{"oneOf":[{"type":"null"},{"type":"object","properties":{"score":{"type":"number","minimum":0,"maximum":5},"scale":{"const":5},"source":{"const":"provider"}}}]}}}}}}}}}}},"400":{"description":"Invalid input."},"401":{"description":"Invalid or revoked product API key."},"402":{"description":"Insufficient image credits."},"403":{"description":"IMAGE_PAID_PLAN_REQUIRED: active Personal, Developer, Team or Enterprise required, or API disabled."},"404":{"description":"Owned resource not found."},"409":{"description":"Idempotency key used with a different payload."},"413":{"description":"Upload limit exceeded."},"429":{"description":"Rate limit. Observe Retry-After header."},"503":{"description":"Conversion engine unavailable."}}}},"/api/v1/jobs/{id}":{"get":{"operationId":"getImageJob","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","maxLength":100}}],"responses":{"200":{"description":"Success. Poll every 5 seconds while jobs are active.","content":{"application/json":{"schema":{"type":"object","required":["code","message","data"],"properties":{"code":{"const":0},"message":{"type":"string"},"data":{"type":"object","properties":{"id":{"type":"string"},"fileName":{"type":"string"},"pages":{"type":"integer"},"status":{"enum":["pending","processing","success","failed","canceled"]},"quality":{"oneOf":[{"type":"null"},{"type":"object","properties":{"score":{"type":"number","minimum":0,"maximum":5},"scale":{"const":5},"source":{"const":"provider"}}}]},"result":{"type":"object","properties":{"markdown":{"type":"string"},"pages":{"type":"integer"},"images":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"data":{"type":"string","contentEncoding":"base64"}}}}}}}}}}}}},"400":{"description":"Invalid input."},"401":{"description":"Invalid or revoked product API key."},"402":{"description":"Insufficient image credits."},"403":{"description":"IMAGE_PAID_PLAN_REQUIRED: active Personal, Developer, Team or Enterprise required, or API disabled."},"404":{"description":"Owned resource not found."},"409":{"description":"Idempotency key used with a different payload."},"413":{"description":"Upload limit exceeded."},"429":{"description":"Rate limit. Observe Retry-After header."},"503":{"description":"Conversion engine unavailable."}}}},"/api/v1/batches/{id}":{"get":{"operationId":"getImageBatch","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","maxLength":100}}],"responses":{"200":{"description":"Success. Poll every 5 seconds while jobs are active.","content":{"application/json":{"schema":{"type":"object","required":["code","message","data"],"properties":{"code":{"const":0},"message":{"type":"string"},"data":{"type":"object","properties":{"id":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"status":{"enum":["processing","complete"]},"files":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"fileName":{"type":"string"},"pages":{"type":"integer"},"status":{"enum":["pending","processing","success","failed","canceled","not_submitted"]},"error":{"type":"string"},"quality":{"oneOf":[{"type":"null"},{"type":"object","properties":{"score":{"type":"number","minimum":0,"maximum":5},"scale":{"const":5},"source":{"const":"provider"}}}]}}}}}}}}}}},"400":{"description":"Invalid input."},"401":{"description":"Invalid or revoked product API key."},"402":{"description":"Insufficient image credits."},"403":{"description":"IMAGE_PAID_PLAN_REQUIRED: active Personal, Developer, Team or Enterprise required, or API disabled."},"404":{"description":"Owned resource not found."},"409":{"description":"Idempotency key used with a different payload."},"413":{"description":"Upload limit exceeded."},"429":{"description":"Rate limit. Observe Retry-After header."},"503":{"description":"Conversion engine unavailable."}}}},"/api/v1/usage":{"get":{"operationId":"getImageUsage","summary":"Remaining credits, current UTC-month usage, and current plan entitlements.","responses":{"200":{"description":"Success. Poll every 5 seconds while jobs are active.","content":{"application/json":{"schema":{"type":"object","required":["code","message","data"],"properties":{"code":{"const":0},"message":{"type":"string"},"data":{"type":"object","properties":{"balance":{"type":"number"},"usage":{"type":"object"},"access":{"type":"object"}}}}}}}},"400":{"description":"Invalid input."},"401":{"description":"Invalid or revoked product API key."},"402":{"description":"Insufficient image credits."},"403":{"description":"IMAGE_PAID_PLAN_REQUIRED: active Personal, Developer, Team or Enterprise required, or API disabled."},"404":{"description":"Owned resource not found."},"409":{"description":"Idempotency key used with a different payload."},"413":{"description":"Upload limit exceeded."},"429":{"description":"Rate limit. Observe Retry-After header."},"503":{"description":"Conversion engine unavailable."}}}}}}