# Resolve encrypted model

> Resolve an encrypted model to its native model ID and an exact offer before your SDK encrypts the request.

`POST https://api.numes.ai/api/v1/e2ee/resolve`

Source: https://0.0.0.0:3000/docs/api-reference/encrypted-inference/resolve-encrypted-model
Authorization: Bearer inference key

Send a discovered `:e2ee` model ID with an inference key. The response names the native model to put inside the encrypted request, the offer to bind with the `X-Inference-*` headers, and the encryption `transport`, `protocol` and `security_policy` your client must check before sending. It never contains an encryption key or provider credential. Resolution sends no prompt and costs nothing. Guide: [Encrypted inference](/docs/inference/encrypted#direct-sdk-setup).

Resolution doesn't reserve capacity or authorize a later request: availability, access and balance are checked again when you send it. Resolve again after a route becomes unavailable.

A model ID without the `:e2ee` qualifier returns `400`. When no provider can serve the model, including unknown, unpublished, other-currency and inaccessible shared models, the response is `503 provider_unavailable`; it doesn't reveal whether an inaccessible model exists. See [Errors](/docs/api-reference/errors#503-unavailable).

```request
{
  "method": "POST",
  "path": "/e2ee/resolve",
  "body": { "model": "openai/gpt-6-luna:e2ee" }
}
```

```json title="Response 200"
{
  "model": "openai/gpt-6-luna:e2ee",
  "native_model": "example-native-model",
  "offer_id": "3b7c1f0e-8a2d-4e5f-9c6b-1d0a2e3f4b5c",
  "offer_revision_id": "9e8d7c6b-5a4f-4e3d-8c2b-1a0f9e8d7c6b",
  "transport": "tinfoil-ehbp",
  "protocol": "ehbp-v1",
  "security_policy": "attested-enclave",
  "context_length": 131072,
  "maximum_output_tokens": 16384
}
```

## Request body (application/json)

- `model` (string; required; Length 1–512)

## Response 200 (application/json)

- `model` (string; required)
- `native_model` (string; required)
- `offer_id` (string<uuid>; required)
- `offer_revision_id` (string<uuid>; required)
- `transport` (enum<string>; required; one of tinfoil-ehbp, synthetic-ehbp, synthetic-fields-v1, venice-ecies-v1): Encryption profile the client must use for this offer. Tinfoil uses enclave attestation; Venice uses provider-managed key discovery with weaker independent verification (see the encrypted inference guide).
- `protocol` (enum<string>; required; one of ehbp-v1, encrypted-json-v1, venice-ecies-v1)
- `security_policy` (enum<string>; required; one of attested-enclave, development, provider-managed)
- `usage_meter` (enum<string>; required; one of provider-native-e2ee-v1)
- `context_length` (integer<int64>; required; Range ≥ 1)
- `maximum_output_tokens` (integer<int64>; required; Range ≥ 1)

## Response 503 (application/json)

- `error` (object; required)
  - `code` (integer; required)
  - `message` (string; required)
  - `metadata` (object)
- `openrouter_metadata` (object)

## Response default (application/json)

- `error` (object; required)
  - `code` (integer; required)
  - `message` (string; required)
  - `metadata` (object)
- `openrouter_metadata` (object)
