DocVert API

Automate conversions with a simple, job-based API. The recommended flow is the Job Builder endpoint (modeled after FreeConvert’s convert-files flow): create a process job, upload inputs, then poll for a signed download URL.

Base URL: https://api.docvert.com

Authentication

Requests can be authenticated with either a JWT (browser sessions) or an API key (recommended for server-to-server automation).

Create an API key in Dashboard → API Keys.

# Option A: X-API-Key header
curl -H "X-API-Key: dv_sk_..." "https://api.docvert.com/tools"

# Option B: Authorization header (API keys are accepted as Bearer tokens too)
curl -H "Authorization: Bearer dv_sk_..." "https://api.docvert.com/tools"

Anonymous usage is supported for some endpoints; anonymous process jobs return a token that must be passed back when polling.

Job Builder (convert-files)

This is the simplest integration: define a small task graph, upload input files, and poll until the export task contains a signed URL.

# 1) Create a process job (one import, one convert, one export)
curl -sS "https://api.docvert.com/v1/process/jobs" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer dv_sk_..." \
  -d '{
    "tasks": {
      "import-1": { "operation": "import/upload" },
      "convert-1": {
        "operation": "convert",
        "input": "import-1",
        "input_format": "pdf",
        "output_format": "docx",
        "options": {}
      },
      "export-1": { "operation": "export/url", "input": "convert-1" }
    }
  }'

The response contains a list of tasks. For each import/upload task, you’ll get a form with an upload URL and a short-lived upload token.

# 2) Upload the input file using the task form (multipart)
# - form.url: "/v1/process/jobs/<jobId>/tasks/<taskId>/upload"
# - form.parameters.token: "<uploadToken>"
curl -sS "https://api.docvert.com/v1/process/jobs/<jobId>/tasks/<taskId>/upload" \
  -F "file=@./input.pdf" \
  -F "token=<uploadToken>"

Once all inputs are uploaded, DocVert automatically enqueues the conversion. Poll the process job until the export task is finished.

# 3) Poll job status
curl -sS "https://api.docvert.com/v1/process/jobs/<jobId>" \
  -H "Authorization: Bearer dv_sk_..."

When finished, the export task returns a signed URL in tasks[].result.files[0].url.

Tool discovery

Use tools to discover available conversions and supported formats. Conversion tools are generated from the configured engines.

# List enabled tools
curl -sS "https://api.docvert.com/tools"

# Get details for a specific tool (e.g. pdf-to-docx)
curl -sS "https://api.docvert.com/tools/pdf-to-docx"

Looking for a specific conversion? For many converters the tool slug follows the pattern <src>-to-<dst> (example: pdf-to-docx).

Legacy Jobs API

The legacy flow uses presigned uploads and a separate job creation step. It’s still supported, but Job Builder is usually simpler.

# 1) Create a presigned upload (creates a pending input file record)
curl -sS "https://api.docvert.com/files/presign" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer dv_sk_..." \
  -d '{
    "toolSlug": "pdf-to-docx",
    "filename": "input.pdf",
    "mimeType": "application/pdf",
    "sizeBytes": 123456
  }'

# 2) Upload to the returned uploadUrl (PUT to S3/MinIO)
# 3) Mark upload complete (runs malware scanning / readiness checks)
curl -sS "https://api.docvert.com/files/complete" \
  -H "Content-Type: application/json" \
  -d '{ "fileId": "<fileId>" }'

# 4) Create a conversion job
curl -sS "https://api.docvert.com/jobs" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer dv_sk_..." \
  -d '{
    "toolSlug": "pdf-to-docx",
    "inputFileIds": ["<fileId>"],
    "parameters": {}
  }'

# 5) Poll job status
curl -sS "https://api.docvert.com/jobs/<jobId>"

Errors & rate limits

Error responses may include an errorCode and structured details for programmatic handling (for example: file size limits, conversion minute limits, or malware scan failures).

Common HTTP statuses:

  • 400 invalid request / validation error
  • 401 missing or invalid authentication
  • 404 not found
  • 429 rate/plan limit exceeded
  • 503 transient upstream/service failure (retry later)