Menu

FileMorf Docs

Public API v1

Public API
Core Jobs

AI Jobs

Run AI image upscaling, voice isolation, stem separation, and speech-to-text through the same job lifecycle — with per-job credit costs on top of the monthly job quota.

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.

Same lifecycle

AI jobs use the standard job endpoints

image-upscale, audio-enhance, and audio-transcribe go through POST /jobs → upload → start → poll like every other job type. The differences are the options schema, per-job AI credits, and multi-file results.

Job typeOptionsCredit cost
image-upscaleengine: "crisp" | "clarity" (default crisp) · scale: 2 | 4 · creativity: 0–1 (clarity) · fitToLimit: boolean (clarity) · outputFormat: "png" | "jpg" | "webp"crisp: 1 credit per image · clarity: max(2, ceil(output megapixels / 2.5)) — priced from the planned output size
audio-enhanceoperation: "isolate-voice" | "separate-stems" (default isolate-voice) · prompt: string ≤200 chars (stems only; defaults to "vocals")isolate-voice: 2 credits per started minute · separate-stems: 3 credits per started minute
audio-transcribelanguage: 2–3 letter ISO code (optional; auto-detected when omitted)1 credit per started minute

Behavior

Credits, capacity, and result shapes

AI jobs run on managed inference (fal.ai) behind the same queue, with credit metering resolved from the real input.

  • AI jobs consume AI credits (separate monthly meters for image and audio) in addition to counting against the server-job quota. Credits are reserved when the job starts and finalized from the actual input duration or output size.
  • Jobs are rejected with 503 when the AI backend is not configured, and with 429 when the monthly AI credit balance cannot cover the job's minimum cost.
  • separate-stems returns TWO result files: the target stem matching your prompt and the residual (everything else). Use result.files[] rather than assuming a single output.
  • audio-transcribe returns the transcript as TXT plus SRT and VTT caption files and a word-level timestamp JSON — all listed in result.files[].
  • Inputs are processed by the AI provider (fal.ai) over TLS and are automatically deleted after processing; outputs land in retained artifacts like any other job.

Examples

Create an AI job

Options are validated strictly at creation — unknown keys or out-of-range values fail with a 400 before any upload happens.

Speech-to-text (audio-transcribe)
curl -X POST https://api.filemorf.com/api/public/jobs \
  -H "Authorization: Bearer $FILEMORF_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: podcast-ep42-transcript-v1" \
  -d '{
    "type": "audio-transcribe",
    "filename": "episode-42.mp3",
    "fileSize": 38115942,
    "contentType": "audio/mpeg",
    "options": {
      "language": "en"
    }
  }'
AI upscale (image-upscale)
curl -X POST https://api.filemorf.com/api/public/jobs \
  -H "Authorization: Bearer $FILEMORF_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "image-upscale",
    "filename": "product-shot.png",
    "fileSize": 2411520,
    "contentType": "image/png",
    "options": {
      "engine": "clarity",
      "scale": 2,
      "fitToLimit": true,
      "outputFormat": "png"
    }
  }'

Next steps

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

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