DocumentationAPI Reference

Core

Conversions

List, wait on, stream, retry, and delete v1 conversions, and how conversion and file statuses behave.

List and get

GEThttps://api.markitdown.ai/v1/conversionsList conversions
GEThttps://api.markitdown.ai/v1/conversions/{id}Get a conversion; ?wait=N long-polls up to 100 seconds

GET /v1/conversions pages with the opaque next_cursor it returns (pass it back as cursor). Each item is the same envelope POST /v1/convert/{name} returns, without the files list.

Files and content

GEThttps://api.markitdown.ai/v1/conversions/{id}/filesList every source file and its outputs, optionally filtered by status

Page through this when a conversion has more than the 100 source files inlined in GET /v1/conversions/{id}. Read a finished output with GET /v1/conversions/{id}/files/{file_id}/content, which streams the raw bytes by the file's own MIME type — no JSON envelope to unwrap.

Live progress (SSE)

GEThttps://api.markitdown.ai/v1/conversions/{id}/eventsServer-sent events for one conversion

The stream sends event: file with { file_id, status } as each source file changes state, event: conversion with the summary envelope when the overall status or counts change, then a final event: conversion and event: end once the conversion reaches a terminal status. It replays the current snapshot on connect, so a late subscriber never misses the outcome.

Delete and retry

DELETEhttps://api.markitdown.ai/v1/conversions/{id}Delete a conversion and every file it holds
POSThttps://api.markitdown.ai/v1/conversions/{id}/files/{file_id}/retryRe-run one failed source file — always 202

Deleting removes the conversion record and its stored files. It does not interrupt a source file that is already parsing, but any file that has not started yet is settled as failed and refunded instead of running. Retry only accepts a failed source file; it re-reserves that file's credits and moves the conversion back to running.

What statuses can a conversion report?

A conversion is queued, then running while at least one source file is still working, and then a terminal status: completed (every file succeeded), completed_with_errors (some succeeded, some failed), or failed (none succeeded) — checking status alone never hides a partial failure. A source file's own error is a problem object with a stable code such as document_unprocessable or parser_unavailable; a failed file is not charged. Results are deleted after 24 hours by default; send store: true on the submission to keep them in your library for your plan's retention window.

Should I poll, stream, or use webhooks?

Long polling with GET /v1/conversions/{id}?wait=100 is the simplest: one request returns as soon as the conversion settles or the wait ends. Use the SSE stream when you show progress to a person, especially for a submission with several source files. Use webhooks for server-side pipelines that should not hold connections open — send many files in one POST /v1/convert/{name} call instead of starting many separate conversions.

On this page