Compile from a link

Open a link, get the PDF. The LaTeX source travels in the address, or the address points at a .tex file, and the answer is the PDF itself. No key, nothing to install.

Quick start

Put the URL-encoded source in text= and open the address in a browser, or fetch it from a script:

Terminal
$ curl -o hello.pdf "https://api.pressa.dev/compile?text=%5Cdocumentclass%7Barticle%7D%5Cbegin%7Bdocument%7DHello%5Cend%7Bdocument%7D"

Or point it at a .tex file that is online, for example the raw address of a file on GitHub:

Terminal
$ curl -o paper.pdf "https://api.pressa.dev/compile?url=https://raw.githubusercontent.com/user/repo/main/paper.tex"

Parameters

ParameterMeaning
textThe LaTeX source, URL-encoded. Every special character must be encoded: a browser drops everything after a raw # (write %23), a raw & starts a new parameter (%26), a raw + becomes a space (%2B), and % must be %25. encodeURIComponent in JavaScript and urllib.parse.quote in Python encode all of them. A link whose source stops before \end{document} is refused with that explanation. The whole address can be about 9 KB, which is roughly 4 to 6 KB of LaTeX, since every backslash and brace takes three characters once encoded. Use url= or POST for anything longer.
urlThe http or https address of one .tex file on the public internet. Up to 30 KB without a key. Files it \input or \includegraphics are not fetched.
commandpdflatex (default) or xelatex, which also covers Chinese, Japanese, Persian and fontspec.
forceAccepted and ignored: the result depends only on the source, so there is nothing stale to force past.

Give exactly one of text or url.

What comes back

  • 200, application/pdf: the PDF itself, not a link to it, so curl -o works without following redirects. X-Pressa-Pages says how many pages it has.
  • 4xx, text/plain: what went wrong, in plain words. When the LaTeX does not compile, the first lines name the error and the fix, and the TeX log follows.
  • 429: the daily allowance without a key is used up; the text says how to get more.

Without a key

  • The same source is compiled once and then served to everyone who opens the link for about a day, without using anyone's allowance. A new source is a compile and counts toward 3 PDFs a day per address.
  • A document longer than 3 pages comes back as its first pages, so the link keeps working; X-Pressa-Total-Pages and X-Pressa-Note say how long the whole document is.
  • A small "Made with Pressa" line is added at the foot of each page.
  • Anything in the address is not private: it ends up in browser history and in the logs of every service between you and us. Send private documents with POST /api/v1/compile instead.

With a free key sent as an Authorization: Bearer header, the same link compiles on your account: more pages, no line, your monthly allowance. A key never goes in the address.

Moving from latexonline.cc

The parameters are the ones latexonline.cc uses, so a script or link that works there needs only a new host:

Before and after
https://latexonline.cc/compile?text=...&command=xelatex
https://api.pressa.dev/compile?text=...&command=xelatex
  • Pressa compiles with TeX Live 2025 and answers in about a second for a short document.
  • Errors come with a diagnosis and a suggested fix, not only the TeX log.
  • Building a whole git repository (git=) is not supported yet. For a single file use url=; for a project with several files use the CLI or the API with assets.
  • Without a key there is a daily allowance; latexonline.cc publishes none.

A PDF link in a README

Point url= at the raw address of the .tex file. Everyone who clicks gets the current PDF, built from the file as it is now:

README.md
[Download the PDF](https://api.pressa.dev/compile?url=https://raw.githubusercontent.com/user/repo/main/cv.tex)

For AI assistants

An assistant that can open addresses but cannot send a request body, as in many chat apps, can still make a PDF: build the link and give it to the user, who opens it. An assistant that can send requests should use POST /api/v1/compile or the MCP server, which take longer documents and keep the source out of the address.