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

# Models and privacy tiers

> List the models, choose one by its privacy tier, and learn what each tier protects and what it doesn't.

Each model in Morse runs at one of four privacy tiers: `anon`, `private`, `tee`, or `e2ee`. You choose the tier by choosing the model.

## List the models

`GET /v1/models` lists every model with its `id`, `tier`, `type` (such as `chat` or `image`), display `label`, and `retention`. Chat and image models also list their `price` in micros, and 10,000 micros are one credit. The list is free, and it has its own [rate limit](/rate-limits) of 60 calls a minute, apart from your plan's.

```bash theme={null}
curl https://api.trymorse.ai/v1/models \
  -H "Authorization: Bearer $MORSE_API_KEY"
```

The same model at two tiers has two ids. For example, GLM 5.3 is `glm-5.3` at `private`, `glm-5.3-tee` at `tee`, and `z-ai/glm-5.3` at `e2ee`.

## What each tier protects

| Tier | What it protects | What it doesn't |
| - | - | - |
| `anon` | Morse sends the request to the model's vendor from its own account, so the vendor doesn't see your account. | The vendor reads your prompt and keeps it under the vendor's own terms (`retention: "vendor"`). |
| `private` | The vendor runs the model under zero-data-retention terms (`retention: "zdr"`). | The vendor still reads your prompt. Nothing proves that the vendor keeps to its terms. |
| `tee` | The model runs in a hardware enclave. Morse checks the enclave's attestation before it forwards a request. | Morse reads your prompt on its way to the enclave. |
| `e2ee` | Your client encrypts each message to a key that only the attested enclave holds. Morse relays the ciphertext. | Morse sees the fields you send in the clear, such as `model` and `max_tokens`, and the size of the ciphertext. |

If Morse can't verify an enclave's attestation, requests to its `tee` and `e2ee` models get `503` with the code `upstream_unattested` until a check passes.

## Call an e2ee model

An `e2ee` model needs a client that encrypts messages before it sends them. The OpenAI SDKs don't, and these docs don't yet describe the encryption protocol for API keys. From your own code, use a `tee` model for now. The Morse app encrypts its `e2ee` chats itself.

Morse promises that it doesn't see your plaintext, not that it can't. The encryption doesn't bind your client's public key into the ciphertext, so a relay in the path, Morse included, could swap that key. You trust Morse not to.

## Fields Morse forwards

On models outside `e2ee`, Morse builds the request it sends to the vendor from these fields alone: `model`, `messages`, `max_tokens` or `max_completion_tokens`, `stream`, `stream_options`, `reasoning_effort`, `tools`, `tool_choice`, and `parallel_tool_calls`. It drops every other field without an error, including `temperature`, `top_p`, `stop`, `seed`, `response_format`, and `user`.

Images and other media go in a message as `data:` URIs, encoded in base64. A media link to a URL gets `400` with the code `remote_media`.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.