Developer API

Queue document renders from your agent without building the PDF pipeline yourself.

justmd exposes an async conversion API for agent workflows that start in Markdown and end as downloadable artifacts. Submit the document, poll the job, then fetch the file.

Discovery

Start with the public entrypoint.

{
  "name": "justmd",
  "version": "0.1.0",
  "authentication": {
    "type": "bearer",
    "header": "Authorization",
    "example": "Bearer YOUR_API_KEY"
  },
  "openapi_url": "/v1/openapi.json",
  "supported_formats": ["pdf", "docx"]
}

Capabilities

Bearer token or `x-api-key` authentication

Async conversion workflow built for agent orchestration

Machine-readable OpenAPI contract at `/v1/openapi.json`

Current render targets: PDF and Docx

Workflow

Three predictable steps for agent orchestration.

Submit one job per document

Agents can post raw Markdown and choose `pdf` or `docx` without assembling browser print CSS.

Poll until completion

The API is asynchronous by design, so long renders do not block your worker loop.

Download once ready

Completed jobs expose a file response you can store, attach, or forward to the next tool.

Endpoint reference

Everything the page promises maps to a real route.

GET/v1

Discovery endpoint

Returns the supported formats, authentication rules, and the machine-readable OpenAPI URL.

POST/v1/convert

Submit a conversion job

Send Markdown plus the target format. The API responds with a job id and polling URLs.

GET/v1/jobs/{jobId}

Poll job status

Check whether the render is still queued, running, completed, or failed.

GET/v1/jobs/{jobId}/download

Download the artifact

Fetch the generated PDF or Docx after the job reaches the completed state.

GET/v1/openapi.json

OpenAPI contract

Machine-readable schema for SDK generation, typed clients, and internal tooling.

Authentication

One key for submit, status, and download.

The API accepts either an `Authorization: Bearer ...` header or `x-api-key`. For the website examples, bearer auth is the default because it fits agent SDKs and server actions cleanly.

Queued response

{
  "job_id": "job_7c7b1f",
  "status": "queued",
  "poll_url": "/v1/jobs/job_7c7b1f",
  "download_url": "/v1/jobs/job_7c7b1f/download"
}