FileMorf Docs

Public API v1

Public API
Core Jobs

Jobs

Create single-input jobs, start them, list them, fetch status, and refresh signed result URLs when needed.

Base route

https://api.filemorf.com/api/public

Auth

Bearer API key from a Developer or Enterprise workspace.

Delivery model

Signed uploads, queued jobs, retained artifacts, refreshable URLs.

Endpoints

Single-input jobs are the core execution primitive

Use the jobs endpoints for any workflow that starts from one input file. The returned result object includes metadata and one or more signed download URLs.

POST

/jobs

Create a single-input job and receive one upload URL.

GET

/jobs

List API-created jobs for the authenticated key owner.

GET

/jobs/:id

Fetch job status, result metadata, and download URLs.

POST

/jobs/:id/start

Idempotently queue a pending job after upload completes.

POST

/jobs/:id/refresh-url

Refresh signed output URLs for completed jobs.

Supported job types

Choose the job type that matches the input and output behavior

The public API validates content types before creating work. The job type and input content type must line up.

Job typeValid inputsNotes
image-convertPNG, JPEG, WebP, AVIF, GIF, BMP, SVG, TIFF, HEICConverts one image to another supported image target.
image-compressPNG, JPEG, WebP, AVIF, GIFOptimizes one image while keeping the same general media class.
image-resizePNG, JPEG, WebP, AVIF, GIF, SVG, TIFFResizes a single image with width and height controls.
pdf-splitPDFMulti-output; use result.files[] and retained artifacts for downstream automation.
pdf-extractPDFExtracts specific pages into one new PDF.
pdf-rotatePDFRotates selected pages in a PDF.
pdf-removePDFRemoves selected pages and returns a new PDF.
pdf-mergePDF (multiple files)Use the dedicated POST /merge endpoint instead of POST /jobs.
pdf-compressPDFCompresses a PDF with quality presets while keeping it viewable everywhere.
pdf-protectPDFPassword-protects a PDF (options carry the password; send over TLS only).
pdf-unlockPDFRemoves a password from a PDF you can already open (password required in options).
document-convertPDF, DOCX, TXT, MD, HTML, XLSX, ODS, JSON, CSV, TSV, XML, YAMLSupports document, spreadsheet, and structured-data conversion targets.
ocrPDF, PNG, JPEG, WebP, TIFFOCR is a server-side job type and a valid terminal recipe step.
image-upscalePNG, JPEG, WebPAI upscaling (fal-backed). See AI Jobs for engines, options, and credit pricing.
audio-enhanceMP3, WAV, FLACAI voice isolation or prompt-driven stem separation. See AI Jobs.
audio-transcribeMP3, WAV, M4A, WebMAI speech-to-text with TXT, SRT, VTT, and word-timestamp JSON outputs. See AI Jobs.

States

Poll until a terminal state

Job status drives the rest of the lifecycle. A job only exposes stable outputs once it is completed, and failed jobs expose machine-readable failure metadata instead of internal diagnostics.

StateMeaning
pendingJob exists and is waiting for file upload or start.
queuedUpload is complete and the job is waiting in the worker queue.
processingA worker is actively executing the job.
completedThe job finished successfully and result metadata is available.
failedThe job ended unsuccessfully. The response exposes a stable failure code and diagnostic id, never raw provider or document-derived error text.

Safe retries

Starting a job is idempotent

After every required upload succeeds, retry POST /jobs/:id/start when a response is lost or a connection fails. A job already queued, processing, or completed returns success with reused: true and does not create a second dispatch.

Retry-safe start response
{
  "success": true,
  "status": "queued",
  "reused": true
}
  • Only pending jobs are dispatched.
  • Queued, processing, and completed jobs return their durable status with reused: true.
  • Failed or still-uploading jobs return HTTP 409 with code job_not_startable.
  • After an ambiguous start response, read the job state or safely retry start; never create a replacement job by default.

Next steps

Build against the live API, not the idea of it.

Create or rotate keys from a Developer or Enterprise workspace, test against the base route, and use the same lifecycle documented here in production and local environments.