# v3.1 render engine

> The original mnml look, for projects started on it. Engine id v3.1, $0.099 a render.

Source: https://developers.mnml.ai/docs/models/v3-1

- **Render:** $0.099 (per image)
- **Edit:** $0.099 (per edit)
- **References:** Up to 1 (Images per render)
- **Account:** After a top-up (Otherwise 403 PLAN_REQUIRED)

> [!WARNING]
> A legacy engine, kept so a series started on it stays consistent. It is still sold at its listed price. For new work, start on [v4.6](https://developers.mnml.ai/docs/models/v4-6-ultra).

## Render with it

Name it in `engine`, by id (`"v3.1"`) or by name (`"v3.1"`), on [POST /v2/renders](https://developers.mnml.ai/docs/renders). The call answers `202` with a job; poll [GET /v2/jobs/{id}](https://developers.mnml.ai/docs/jobs) for the image.

**curl**

```bash
curl -X POST https://api.mnml.ai/v2/renders \
  -H "Authorization: Bearer $MNML_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "engine": "v3.1",
    "mode": "exterior",
    "image": "https://example.com/massing.png",
    "prompt": "Timber facade, late afternoon, olive trees"
  }'
```

**TypeScript**

```ts
const res = await fetch("https://api.mnml.ai/v2/renders", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.MNML_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "engine": "v3.1",
    "mode": "exterior",
    "image": "https://example.com/massing.png",
    "prompt": "Timber facade, late afternoon, olive trees"
  }),
});

const data = await res.json();
```

**Python**

```python
import os, requests

res = requests.post(
    "https://api.mnml.ai/v2/renders",
    headers={"Authorization": f"Bearer {os.environ['MNML_API_KEY']}"},
    json={
      "engine": "v3.1",
      "mode": "exterior",
      "image": "https://example.com/massing.png",
      "prompt": "Timber facade, late afternoon, olive trees"
    },
)

data = res.json()
```

## What it takes

| Feature | v3.1 |
| --- | --- |
| Render from a prompt alone (`mode: "text-to-render"`) | No |
| Reference images on a render | Up to 1 |
| Edits of the whole image | Run on mnml’s shared edit engine |
| Edits of an area (`region` or `mask`) | Run on mnml’s shared edit engine |
| Reference images on an edit | No |
| Studio’s `settings` | No |

`mode` is one of `exterior`, `interior`, `masterplan`, `landscape`, `plan` or `product`.

## Price

| Call | Price |
| --- | --- |
| A render (`POST /v2/renders`) | $0.099 |
| An edit (`POST /v2/edits`) | $0.099 |

`count` makes variations of one brief: each is its own job and its own charge. A job that fails, or that you cancel before it delivers, is refunded.

| Top-up | Renders on v3.1 |
| --- | --- |
| $10 | 101 renders |
| $25 | 252 renders |
| $50 | 505 renders |
| $100 | 1,010 renders |

## Settings by mode

v3.1 takes no `settings`: it renders from the image, the mode and the prompt. A call that sends any is refused with `400` before anything is charged.

## Related

- [Create a render](https://developers.mnml.ai/docs/renders): every field of the call.
- [Edit an image](https://developers.mnml.ai/docs/edits): change one thing and keep the rest.
- [List engines](https://developers.mnml.ai/docs/engines): these facts, live, for your account.
- [Pricing](https://developers.mnml.ai/docs/pricing): the wallet and every price.
