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

# Create a deployment

> Create a dedicated inference endpoint via the console or API

<Warning>
  Self-serve deployment is still a work in progress and will be available soon. The steps below describe the target workflow but are not yet available for general use. To discuss early access, [sign up at console.modular.com/signup](https://console.modular.com/signup).
</Warning>

Inference is served through two kinds of endpoints:

* **Shared endpoints** are serverless and pay-as-you-go, running on
  multi-tenant infrastructure Modular manages for you. A curated set of models
  is available this way with no setup — see the [supported
  models](/models) page.
* **Dedicated endpoints** are created through a deployment: infrastructure
  provisioned exclusively for your organization, running a model of your
  choice from the broader model catalog, with configurable scaling.

This page covers creating a dedicated endpoint via a deployment. You can
create deployments via the console or the API.

## Deploy a model from the console

The console walks you through model selection, region and scaling options, a
pricing estimator, and a final deploy step.

#### Go to the Models page

Open the [Models page](https://console.modular.com/models) in the
console and select a model to open its detail page.

#### Open the deploy dialog

Select **Deploy** in the top right corner of the model detail page.

#### Configure and deploy

Choose your region and scaling options, review the pricing estimate, then
complete the deploy step to create the endpoint.

## Deploy a model with the API

Send a `POST` request to `/v1/deployments` to create a deployment
programmatically:

```http theme={null}
POST https://api.modular.com/v1/deployments
Authorization: Bearer $MODULAR_API_KEY
Content-Type: application/json

{
  "name": "my-gemma-deployment",
  "model_id": "google/gemma-4-31B-it",
  "region_group": "us",
  "scaling": {
    "min_replicas": 1,
    "max_replicas": 3
  },
  "configuration": {
    "model_path": "google/gemma-4-31B-it",
    "engine": "max"
  }
}
```

**Field notes:**

* `name`: URL-safe slug, max 50 characters. Immutable after creation.
* `model_id`: the model identifier from the
  [console Models page](https://console.modular.com/models). Immutable
  after creation.
* `region_group`: one of `"us"`, `"eu"`, or `"global"`.
* `scaling.min_replicas` / `scaling.max_replicas`: replica count bounds for
  autoscaling.
* `configuration.engine`: set to `"max"` to use the MAX inference engine.

A successful request returns HTTP 200 with the deployment object:

```json theme={null}
{
  "name": "my-gemma-deployment",
  "model_id": "google/gemma-4-31B-it",
  "status": "deploying",
  "endpoint_url": null,
  "region_group": "us",
  "scaling": {
    "min_replicas": 1,
    "max_replicas": 3
  },
  "configuration": {
    "model_path": "google/gemma-4-31B-it",
    "engine": "max"
  },
  "created_at": "2026-04-24T00:00:00Z",
  "created_by": "user@example.com"
}
```

The `endpoint_url` is `null` while the deployment is provisioning. Poll
`GET /v1/deployments/{name}` until `status` is `"running"` before sending
inference requests.

For advanced configuration options (worker sets, scaling behavior, auth), see
the [API reference](/api-reference/deployments/create-deployment).
