Skip to main content

Authentication

Every request to the API is authenticated with a API key in the x-api-key header.
There is no OAuth, JWT or sessions: it is simple authentication by API key, intended for server-to-server calls from your backend or from an agent, not to be exposed directly in a public web client.

Example

Python

Where does the key go on each endpoint

The x-api-key header is the same on all endpoints (/convert, /convert/raw, /convert/from-url, /pdf/index, GET /jobs/{id}). The key is not accepted as a query param or inside the JSON body: it always goes in the header.

Good practices

  • Save the API key in an environment variable or secrets manager, never in the code or in the repository.
  • Do not include it in URLs or logs (query params are usually registered in proxies and CDNs).
  • Use a different key per environment (development, staging, production) to be able to revoke one without affecting the others.
  • If a key leaks (for example in a log, a public repository or a frontend client), rotate it immediately.
  • If your application calls API from the browser, do not expose the key directly: proxy the request from your own backend.

Authentication errors

A request without vavalid x-api-key responds 401.
If you integrate the API into an AI agent (for example with function calling), do not give the API key to the model as free text at the prompt: inject it into the code that executes the HTTP call, outside the context of the LLM.

Frequently asked questions

  • Does the API key expire? It depends on your plan; consult the panel where you generated it. Rotating it manually is the recommended way to invavalidate it early.
  • Can I have several active keys at the same time? Yes, it is the recommended way to separate different environments or applications.
  • What happens if I send the x-api-key header twice? Only one value is evaluated; avoid this by configuring the HTTP client correctly.