> ## Documentation Index
> Fetch the complete documentation index at: https://docs.compute.prentis.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Introduction

> One inference API. An OpenAI client and an Anthropic client reach the same models.

Prentis serves open models behind one inference API. The API is OpenAI-compatible, so the
client library you already use works by changing two lines:

```python theme={null}
client = OpenAI(
    base_url="https://compute.prentis.ai/v1",   # was https://api.openai.com/v1
    api_key=os.environ["PRENTIS_API_KEY"],      # was your OpenAI key
)
```

Anthropic clients are served by the same host at `/v1/messages`, with `x-api-key` accepted
as well as `Authorization: Bearer`. Claude Code and the Anthropic SDKs work by changing
`base_url` alone.

<CardGroup cols={2}>
  <Card title="Quickstart" icon="play" href="/quickstart">
    A key, an environment variable, and a working call. About two minutes.
  </Card>

  <Card title="API reference" icon="code" href="/api-reference/introduction">
    Every endpoint, parameter and status code, with a runnable example each.
  </Card>
</CardGroup>

## What you get

<CardGroup cols={2}>
  <Card title="One key, every model" icon="key">
    Models are named by slug (`deepseek-v4.1-flash`), never by whoever runs the hardware.
    Switching models is a string change, not an integration.
  </Card>

  <Card title="Usage you can audit" icon="calculator">
    The `usage` object in every response is the number you are billed on, not an estimate
    of it. The console shows the same figures per request.
  </Card>

  <Card title="A handle on every call" icon="fingerprint">
    Every response carries `x-request-id`, successes and failures alike. It reaches the
    whole path the request took.
  </Card>

  <Card title="Failures that cost nothing" icon="shield">
    Of the 28 errors this API can return, 26 are free. The two that are not are the ones
    where the model had already produced output.
  </Card>
</CardGroup>

## What this API is not

Being straight about the edges saves you an afternoon:

* **It is not a proxy to a specific vendor.** Model names are ours. Responses never name
  who served them, and `x-provider-class` tells you only whether you got the first choice
  or a standby.
* **There is no `claude-*` aliasing on `/v1/messages`.** The endpoint speaks Anthropic's
  wire format; the model names stay ours.
* **Parameters we do not implement are ignored, not rejected** — except the handful marked
  **not supported** in the reference, which return `INVALID_REQUEST` rather than quietly
  giving you an answer that ignored what you asked for.

## Where to go next

<CardGroup cols={2}>
  <Card title="Authentication" icon="lock" href="/authentication">
    Bearer keys, the `x-api-key` alias, and what happens when a key is revoked.
  </Card>

  <Card title="Models and resource names" icon="boxes" href="/models-and-resource-names">
    When to write a bare slug and when to write a full resource name.
  </Card>

  <Card title="Rate limits and quotas" icon="gauge" href="/rate-limits-and-quotas">
    What throttles you, and which of the three 429s you are looking at.
  </Card>

  <Card title="Errors" icon="triangle-exclamation" href="/errors">
    Every code, whether to retry it, and whether it is billed.
  </Card>
</CardGroup>
