Skip to main content
Filum
Operational

Developer API

Reliable file conversion in a single HTTP call. Every format pair Filum supports is available via the API. Same engine, same fidelity, same 60-minute deletion guarantee.

Base URLhttps://filum.se/api/v1

Quick Start

All requests are multipart/form-data POST requests. Include your API key in the Authorization header and the file as the file field. The response is the same structure on every endpoint.

const form = new FormData();
form.append('file', fileInput.files[0]);
form.append('output_format', 'pdf');

const response = await fetch('https://filum.se/api/v1/convert', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
  },
  body: form,
});

const result = await response.json();

if (result.success) {
  const { download_url, expires_at } = result.data;
  // download_url is a signed URL valid until expires_at
  window.location.assign(download_url);
} else {
  throw new Error(result.error.human_readable_message);
}

Authentication

Every request requires an API key passed as a Bearer token. API keys are created and revoked in your account settings. A revoked key stops working immediately with no grace period.

Authorization: Bearer YOUR_API_KEY

Playground

Sends a real conversion request with no quota consumed. The playground bypasses rate limiting via an internal header. Production calls require an API key and return the full JSON response shown below.

API Reference

POST/v1/convert

Convert a file to another format. Returns the converted file with metadata headers. All request fields are sent as multipart/form-data.

Request fields

FieldTypeRequiredDescription
fileFileYesThe file to convert. Maximum 25 MB on free tier, 100 MB on Pro.
output_formatstringYesTarget format. One of: pdf docx xlsx pptx txt png jpg webp

Response headers

HeaderValue
X-Processing-Time-MsConversion duration in milliseconds
X-Engine-VersionGotenberg version used for conversion
X-File-Size-InInput file size in bytes
X-RateLimit-LimitYour tier's hourly conversion limit
X-RateLimit-RemainingConversions remaining in current window
X-RateLimit-ResetUnix timestamp when the current window resets

Supported Formats

InputOutput
DOCX, DOC, RTF, ODTPDF
XLSX, XLS, ODS, CSVPDF
PPTX, PPT, ODPPDF
PDFDOCX
PDFXLSX
PDFPPTX
PDFTXT
PDFPNG, JPG
PNG, JPG, WEBPPDF

Rate Limits

Rate limits are applied per API key on a sliding hourly window. Every response includes X-RateLimit-* headers so you can track consumption without a separate call. Requests exceeding the limit receive a 429 with a rate_limit_exceeded error code and the exact reset timestamp.

TierLimitX-RateLimit-Limit header
Free10 / hour10
Pro1,000 / hour1000
Teams10,000 / hour10000

Error Codes

Every error response follows the same structure. The code field is machine-readable and stable across API versions. human_readable_message is safe to surface directly to end users.

HTTPcodeDescriptionRecovery
400missing_fileNo file included in request.Add a 'file' field to your multipart/form-data body.
400invalid_requestRequest body is not multipart/form-data.Set Content-Type: multipart/form-data.
400invalid_output_formatoutput_format is missing or not a supported value.Use one of: pdf, docx, xlsx, pptx, txt, png, jpg, webp.
429rate_limit_exceededHourly conversion limit reached.Wait for the window to reset or upgrade to a higher tier.
422conversion_errorFile could not be converted.Verify the file is not corrupted and the format pair is supported.
502service_unreachableConversion service could not be reached.Retry with exponential backoff. Check status.filum.se.
503service_unavailableConversion service is temporarily unavailable.Retry after a short delay. Check status.filum.se.

SDKs

Official JavaScript and Python SDKs are available. Both follow semver and are tested against the API on every deployment.

JavaScript / TypeScript

npm install @filum/sdk

Node.js 18+ and browser

Python

pip install filum

Python 3.9+

SDK documentation and source code are linked from your account settings.