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

# Managing endpoints

> Call, scale, update, and delete your dedicated endpoints.

All management operations use the API at `https://gateway.omnia-voice.com/v1`
with your workspace API key, or the dashboard. Creating, updating, and deleting
endpoints are **admin-gated**.

## Calling a dedicated endpoint

A running endpoint has a **routing key**. Call it through the normal inference
API by passing `dedicated/<routing-key>` as the model, the same
`/v1/chat/completions` (and other) endpoints you already use:

<CodeGroup>
  ```bash cURL theme={null}
  curl https://gateway.omnia-voice.com/v1/chat/completions \
    -H "Authorization: Bearer $OMNIA_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "model": "dedicated/<your-routing-key>",
      "messages": [{"role": "user", "content": "Hello!"}]
    }'
  ```

  ```python Python theme={null}
  from openai import OpenAI

  client = OpenAI(
      base_url="https://gateway.omnia-voice.com/v1",
      api_key="$OMNIA_API_KEY",
  )

  resp = client.chat.completions.create(
      model="dedicated/<your-routing-key>",
      messages=[{"role": "user", "content": "Hello!"}],
  )
  ```
</CodeGroup>

Requests to a dedicated endpoint are served by your reserved GPUs and are **not**
billed per token; you're paying for the GPU time.

## Listing and inspecting

<CodeGroup>
  ```bash cURL theme={null}
  # List all endpoints
  curl https://gateway.omnia-voice.com/v1/dedicated \
    -H "Authorization: Bearer $OMNIA_API_KEY"

  # Inspect one endpoint
  curl https://gateway.omnia-voice.com/v1/dedicated/{id} \
    -H "Authorization: Bearer $OMNIA_API_KEY"
  ```

  ```python Python theme={null}
  import requests

  BASE = "https://gateway.omnia-voice.com/v1"
  headers = {"Authorization": f"Bearer {OMNIA_API_KEY}"}

  endpoints = requests.get(f"{BASE}/dedicated", headers=headers).json()
  one = requests.get(f"{BASE}/dedicated/{id}", headers=headers).json()
  ```
</CodeGroup>

## Updating and scaling

Update an endpoint with a `PATCH` to `/v1/dedicated/{id}`. Change the replica
range to adjust autoscaling, change the hardware, or toggle `enabled` to
disable/enable the endpoint. The endpoint autoscales between `minReplicas` and
`maxReplicas` based on demand; higher replica counts increase throughput and cost
proportionally.

<CodeGroup>
  ```bash cURL theme={null}
  curl -X PATCH https://gateway.omnia-voice.com/v1/dedicated/{id} \
    -H "Authorization: Bearer $OMNIA_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "minReplicas": 2,
      "maxReplicas": 4
    }'
  ```

  ```python Python theme={null}
  import requests

  BASE = "https://gateway.omnia-voice.com/v1"
  headers = {
      "Authorization": f"Bearer {OMNIA_API_KEY}",
      "Content-Type": "application/json",
  }

  requests.patch(
      f"{BASE}/dedicated/{id}",
      headers=headers,
      json={"minReplicas": 2, "maxReplicas": 4},
  )
  ```
</CodeGroup>

### Updatable fields

Only these fields can be changed via `PATCH`:

| Field         | Description                        |
| ------------- | ---------------------------------- |
| `name`        | Rename the endpoint.               |
| `description` | Update the description.            |
| `enabled`     | Disable or re-enable the endpoint. |
| `minReplicas` | Lower bound for autoscaling.       |
| `maxReplicas` | Upper bound for autoscaling.       |
| `gpuType`     | Change the GPU type.               |
| `gpuCount`    | Change GPUs per replica.           |

<Note>
  The base model (`modelName`), region, and the fine-tuned-weights bindings
  (`customWeightsId` / `fineTuningJobId`) are set at create time and are **not**
  updatable. To change them, create a new endpoint.
</Note>

## Disabling to halt billing

Set `enabled: false` (or disable from the dashboard) to halt GPU billing while
keeping the endpoint's configuration. Re-enable it when you need the capacity
again. Because you're only billed while it runs, disabling is the right move
whenever you don't need the endpoint.

<Tip>
  You don't have to disable manually to avoid runaway spend: if the workspace
  wallet is exhausted, a running endpoint is **automatically stopped**.
</Tip>

## Deleting

Delete an endpoint to remove it entirely. This stops billing and frees the
routing key.

<CodeGroup>
  ```bash cURL theme={null}
  curl -X DELETE https://gateway.omnia-voice.com/v1/dedicated/{id} \
    -H "Authorization: Bearer $OMNIA_API_KEY"
  ```

  ```python Python theme={null}
  import requests

  BASE = "https://gateway.omnia-voice.com/v1"
  headers = {"Authorization": f"Bearer {OMNIA_API_KEY}"}

  requests.delete(f"{BASE}/dedicated/{id}", headers=headers)
  ```
</CodeGroup>

## Monitoring

Each endpoint has an observability page in the dashboard. In addition to the
usual traffic, latency, TTFT, throughput, and error metrics, a dedicated endpoint
adds **capacity/replica metrics** so you can see autoscaling behavior. See
[Observability](/reference/observability).

<Note>
  Create, update, and delete require an owner/admin workspace key. Regular members
  can call a running endpoint but not manage it. See
  [Workspaces & teams](/concepts/workspaces-teams).
</Note>
