Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
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.
All 92 tools →
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/superdocs-app:superdocs-app-uploads-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API 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: 'Typebar API: Universal Document AI Uploads API'
description: 'Typebar (formerly SuperDocs): AI-powered document editing with multi-tenant organization support'
version: 2.0.0
servers:
- url: https://api.superdocs.app
tags:
- name: Uploads
paths:
/v1/uploads:
post:
tags:
- Uploads
summary: Get a pre-signed URL to upload large files (.docx/PDF/HTML/MD/RTF) without…
description: 'Returns a short-lived (5-minute) PUT URL plus a ready-to-run `curl_example`. An agent with shell access can run the `curl_example` directly to push the file to cloud storage, so the bytes never pass through its context window; clients without shell execution can surface the command or URL for the caller to run. After upload completes, call process_uploaded_document with the upload_id to trigger parsing. For files <100KB where token cost is trivial, upload_document_base64 still works inline. Max file size: 100 MB. Supported formats: .pdf, .docx, .txt, .rtf, .md, .html, .htm, .tex (plus .zip LaTeX project archives).'
operationId: request_upload_url
security:
- HTTPBearer: []
parameters:
- name: authorization
in: header
required: false
schema:
anyOf:
- type: string
- type: 'null'
title: Authorization
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UploadUrlRequest'
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/UploadUrlResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/v1/uploads/{upload_id}/process:
post:
tags:
- Uploads
summary: Parse an uploaded file into structured HTML with chunk IDs for targeted AI…
description: 'Fetches the file uploaded via request_upload_url and runs the same parsing pipeline as upload_document_base64: every paragraph, heading, table, row, and cell gets a unique chunk ID, enabling targeted structural edits via chat ("remove row 3 of the pricing table" works), with tables, borders, shading, alternating row colors, fonts, and inline styling preserved on edit and export. By default the response is compact (metadata only, no document body) to keep your context small — the document is loaded into the session and you edit it via chat; pass return_html=true if you need the parsed HTML inline. Uploading and parsing is NOT itself a billable operation — you are charged only when the AI edits the document. Specify parse_mode=''document'' to load as the active editable document, or parse_mode=''attachment'' to load as a read-only AI-searchable reference.'
operationId: process_uploaded_document
security:
- HTTPBearer: []
parameters:
- name: upload_id
in: path
required: true
schema:
type: string
description: The upload_id returned by request_upload_url.
title: Upload Id
description: The upload_id returned by request_upload_url.
- name: authorization
in: header
required: false
schema:
anyOf:
- type: string
- type: 'null'
title: Authorization
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ProcessUploadRequest'
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/ProcessDocumentResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/v1/downloads:
post:
tags:
- Uploads
summary: Get a pre-signed URL to download an exported document without proxying through…
description: Returns a short-lived (15-minute) GET URL plus a ready-to-run `curl_example`. An agent with shell access can run the `curl_example` directly to save the exported file to the working directory, so the bytes never pass through its context window; clients without shell execution (or callers who only want the link) can use the signed URL directly. Generates the document in the requested format and returns a time-limited signed download URL. Specify format as 'pdf', 'docx', 'html', 'markdown', or 'txt' (legacy 'doc' also accepted).
operationId: request_download_url
security:
- HTTPBearer: []
parameters:
- name: authorization
in: header
required: false
schema:
anyOf:
- type: string
- type: 'null'
title: Authorization
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/DownloadUrlRequest'
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/DownloadUrlResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
components:
schemas:
HTTPValidationError:
properties:
detail:
items:
$ref: '#/components/schemas/ValidationError'
type: array
title: Detail
type: object
title: HTTPValidationError
ProcessUploadRequest:
properties:
session_id:
type: string
maxLength: 256
pattern: ^[a-zA-Z0-9_\-\.]+$
title: Session Id
description: Session ID to load this document/attachment into. Must match the chat/async session-id format — letters, digits, '_', '-', '.' only (no ':'); max 256 chars.
filename:
type: string
maxLength: 255
title: Filename
description: Same filename passed to request_upload_url.
parse_mode:
type: string
enum:
- document
- attachment
title: Parse Mode
description: '''document'' = parse and load as the active editable doc; ''attachment'' = process asynchronously as AI-searchable reference (returns job_id to poll).'
default: document
return_html:
type: boolean
title: Return Html
description: When false (default), the response is compact — metadata only (chunks_count, version_id, page_setup), no document body — to keep your context small; the document is loaded into the session and you edit it via chat. Set true only if you actually need the parsed HTML returned inline.
default: false
open_mode:
type: string
enum:
- replace
- new_tab
- new_focused
- background
title: Open Mode
description: 'parse_mode=''document'' only. ''replace'' (default): the document replaces the session''s focused document. ''new_tab'' / ''new_focused'': it opens as an additional document and becomes the focused one. ''background'': it opens as an additional document without changing which document is focused.'
default: replace
type: object
required:
- session_id
- filename
title: ProcessUploadRequest
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
DownloadUrlRequest:
properties:
session_id:
type: string
maxLength: 256
title: Session Id
description: Session ID whose current document should be exported and packaged for download.
format:
type: string
enum:
- docx
- pdf
- html
- markdown
- txt
- doc
title: Format
description: Export format (docx, pdf, html, markdown, txt).
default: docx
filename:
anyOf:
- type: string
maxLength: 200
- type: 'null'
title: Filename
description: Optional Content-Disposition filename for the download (without extension). Auto-detected from the document's first heading if not provided.
options:
$ref: '#/components/schemas/ExportOptions'
description: Customization (paper, margins, filename, watermark, etc.). Mirrors ExportRequest.options.
type: object
required:
- session_id
title: DownloadUrlRequest
UploadUrlRequest:
properties:
filename:
type: string
maxLength: 255
title: Filename
description: Original filename including extension (e.g. 'contract.docx'). Used downstream for file-type detection.
content_type:
type: string
maxLength: 200
title: Content Type
description: MIME type the agent will PUT with (e.g. 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' for .docx).
size_bytes:
type: integer
maximum: 104857600.0
exclusiveMinimum: 0.0
title: Size Bytes
description: File size in bytes. Must be > 0 and <= 104857600 (100 MB).
purpose:
type: string
enum:
- document
- attachment
- export-html
title: Purpose
description: What this file will be used for. 'document' = the active editable doc; 'attachment' = read-only AI-searchable reference; 'export-html' = HTML payload destined for /v1/documents/export (large-export upload flow, for documents above ~25 MB).
default: document
type: object
required:
- filename
- content_type
- size_bytes
title: UploadUrlRequest
DownloadUrlResponse:
properties:
download_url:
type: string
title: Download Url
expires_at:
type: string
title: Expires At
expires_in_seconds:
type: integer
title: Expires In Seconds
curl_example:
type: string
title: Curl Example
filename:
type: string
title: Filename
format:
type: string
title: Format
type: object
required:
- download_url
- expires_at
- expires_in_seconds
- curl_example
- filename
- format
title: DownloadUrlResponse
ProcessDocumentResponse:
properties:
document_id:
anyOf:
- type: string
- type: 'null'
title: Document Id
description: 'parse_mode=''document'': the id of the open document the file was loaded as (use it with document_id on chat, focus and close).'
html:
anyOf:
- type: string
- type: 'null'
title: Html
session_id:
type: string
title: Session Id
filename:
type: string
title: Filename
chunks_count:
anyOf:
- type: integer
- type: 'null'
title: Chunks Count
version_id:
anyOf:
- type: string
- type: 'null'
title: Version Id
job_id:
anyOf:
- type: string
- type: 'null'
title: Job Id
status:
type: string
title: Status
parse_mode:
type: string
title: Parse Mode
page_setup:
anyOf:
- additionalProperties: true
type: object
- type: 'null'
title: Page Setup
warnings:
anyOf:
- items:
additionalProperties: true
type: object
type: array
- type: 'null'
title: Warnings
type: object
required:
- session_id
- filename
- status
- parse_mode
title: ProcessDocumentResponse
UploadUrlResponse:
properties:
upload_id:
type: string
title: Upload Id
upload_url:
type: string
title: Upload Url
expires_at:
type: string
title: Expires At
expires_in_seconds:
type: integer
title: Expires In Seconds
max_size_bytes:
type: integer
title: Max Size Bytes
curl_example:
type: string
title: Curl Example
type: object
required:
- upload_id
- upload_url
- expires_at
- expires_in_seconds
- max_size_bytes
- curl_example
title: UploadUrlResponse
ExportOptions:
properties:
paper_size:
type: string
enum:
- A4
- Letter
- A3
- Legal
title: Paper Size
description: Page size for DOCX/PDF/legacy .doc. HTML/MD/TXT exports ignore.
default: Letter
orientation:
type: string
enum:
- portrait
- landscape
title: Orientation
description: Page orientation for DOCX/PDF/legacy .doc.
default: portrait
margins:
type: string
enum:
- narrow
- normal
- wide
- custom
title: Margins
description: Page margins preset. 'narrow' = 0.5in, 'normal' = 1.0in, 'wide' = 1.5in. 'custom' uses custom_margins_inches.
default: normal
custom_margins_inches:
anyOf:
- additionalProperties:
type: number
propertyNames:
enum:
- top
- right
- bottom
- left
type: object
- type: 'null'
title: Custom Margins Inches
description: Required when margins='custom'. Each value 0.25-3.0 inches.
filename:
anyOf:
- type: string
maxLength: 255
- type: 'null'
title: Filename
description: Custom filename (no extension). Auto-detected from first <h1> if unset.
embed_images:
type: boolean
title: Embed Images
description: HTML export only. When True, images are base64-embedded for offline portability (raises size cap to 150 MB). When False, images are referenced by URL (smaller file, online-only).
default: false
watermark_text:
anyOf:
- type: string
maxLength: 64
- type: 'null'
title: Watermark Text
description: PDF only. Optional text watermark overlaid on every page.
watermark_opacity:
type: number
maximum: 1.0
minimum: 0.05
title: Watermark Opacity
description: PDF watermark opacity, 0.05-1.0.
default: 0.3
fidelity:
anyOf:
- type: string
enum:
- strict
- compat
- type: 'null'
title: Fidelity
description: Export fidelity. 'strict' (server default) renders only the formatting the document carries — no imposed table widths/borders (except visual defaults on fully unstyled tables), overflow-only clamping, highlight colors honored. 'compat' reproduces the legacy normalized output.
type: object
title: ExportOptions
description: 'User-facing export customisation (page size, orientation, margins,
filename, watermark). Sent on every export request.'
securitySchemes:
HTTPBearer:
type: http
scheme: bearer