> ## 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.

# Models and resource names

> When to write a bare slug, when to write a full resource name, and what happens when a model retires.

The `model` field is a routing key, not a vendor's product name. It decides which weights
answer your call; it never says who is running them.

## Two ways to write it

<CodeGroup>
  ```json Bare slug theme={null}
  { "model": "deepseek-v4.1-flash" }
  ```

  ```json Full resource name theme={null}
  { "model": "accounts/acme/models/support-classifier-v3" }
  ```
</CodeGroup>

A **bare slug** names a model the platform publishes to everyone. It is the short form of
`accounts/maas/models/<slug>`, and it is what you will use for almost everything.

A **full resource name** names a model that belongs to a specific account — one you
fine-tuned, or one shared with you. Write it out in full, because a bare slug will never
resolve to another account's model no matter what it is called.

Both forms work everywhere `model` is accepted: `/v1/chat/completions`, `/v1/completions`,
`/v1/messages`, and as the path segment of `GET /v1/models/{model}`.

<Note>
  Model names are never an upstream vendor's own product name. If a name you are used to
  elsewhere does not work here, that is the reason — look it up in
  [`GET /v1/models`](/api-reference/list-models) rather than guessing at a translation.
</Note>

## Finding out what you can call

`GET /v1/models` returns exactly the models this key's account may use, in the shape
OpenAI clients expect:

```bash theme={null}
curl https://compute.prentis.ai/v1/models \
  -H "Authorization: Bearer $PRENTIS_API_KEY"
```

```json theme={null}
{
  "object": "list",
  "data": [
    { "id": "deepseek-v4.1-flash", "object": "model", "created": 1789286400, "owned_by": "maas" }
  ]
}
```

`owned_by` is the account the model belongs to. It is deliberately not the name of whoever
runs the hardware — see [Introduction](/introduction) for why.

Richer metadata — context window, capabilities, pricing — lives in the
[console](https://compute.prentis.ai) rather than on this endpoint, which stays at the
OpenAI minimum so that clients written against OpenAI parse it without special cases.

## Not every model accepts every endpoint

Capabilities are a property of the model, not of the API:

| If you call                         | And the model does not support it | You get                        |
| ----------------------------------- | --------------------------------- | ------------------------------ |
| `/v1/completions`                   | text completion                   | `MODEL_CAPABILITY_UNSUPPORTED` |
| any endpoint with `tools`           | tool calling                      | `MODEL_CAPABILITY_UNSUPPORTED` |
| any endpoint with `response_format` | structured output                 | `MODEL_CAPABILITY_UNSUPPORTED` |

The call is rejected rather than answered as though you had not asked. An answer that
silently ignored your schema or your tools would be worse than an error, because you would
ship it.

## When a model retires

Models are retired with notice, not withdrawn:

1. The model is marked deprecated. It **keeps working**, and responses carry a `Warning`
   header saying so.
2. After the notice period it stops being routable, and calls get `MODEL_NOT_FOUND`.

So the way to find out early is to watch for `Warning` on your responses — by the time you
are seeing `404`s, the window has closed.

<Warning>
  Pin a model name in your configuration rather than in your code, so that moving to the
  successor is a deploy and not a release.
</Warning>

## Next

<CardGroup cols={2}>
  <Card title="List models" icon="list" href="/api-reference/list-models">
    The endpoint reference.
  </Card>

  <Card title="Errors" icon="triangle-exclamation" href="/errors">
    `MODEL_NOT_FOUND`, `MODEL_NOT_ALLOWED`, `MODEL_CAPABILITY_UNSUPPORTED` in context.
  </Card>
</CardGroup>
