FileMorf Docs

Public API v1

Public API
Getting Started

Quickstart

Create a key, hit the base route, create a job, upload a file, start processing, and poll until completion.

Base route

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

Auth

Bearer API key created from the workspace.

Delivery model

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

Step 1

Create an API key from the workspace

API keys are issued from Workspace → Workflows. Store the raw key once; FileMorf only keeps the hashed secret server-side.

  • Create the key in the workspace using an account plan that includes API access.
  • Store it as FILEMORF_API_KEY in your runtime or secret manager.
  • Treat the key like a password: rotate it if it appears in logs, chat history, or screenshots.

Step 2

Validate the base route

The base route returns the live endpoint map and confirms that the key is accepted.

Base route
curl https://api.filemorf.com/api/public \
  -H "Authorization: Bearer $FILEMORF_API_KEY"

Step 3

Create, upload, start, and poll a job

The single-job flow is always the same: create the job, upload the input to the signed URL, start it, then poll until it reaches a terminal state.

Create job
curl -X POST https://api.filemorf.com/api/public/jobs \
  -H "Authorization: Bearer $FILEMORF_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: quickstart-contract-001" \
  -d '{
    "type": "document-convert",
    "filename": "contract.pdf",
    "fileSize": 842134,
    "contentType": "application/pdf",
    "options": {
      "targetFormat": "txt"
    }
  }'
Upload input
curl -X PUT "$UPLOAD_URL" \
  -H "Content-Type: application/pdf" \
  --upload-file ./contract.pdf
Start job
curl -X POST https://api.filemorf.com/api/public/jobs/$JOB_ID/start \
  -H "Authorization: Bearer $FILEMORF_API_KEY"
Poll status
curl https://api.filemorf.com/api/public/jobs/$JOB_ID \
  -H "Authorization: Bearer $FILEMORF_API_KEY"

Next steps

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

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