# Autopilot

> Keep an endpoint's models and prices in line with its upstream at the upstream cost plus your markup, with a cost guard that holds underpriced models.

Source: https://0.0.0.0:3000/docs/providers/autopilot
Documentation index: https://0.0.0.0:3000/docs/llms.txt

Autopilot keeps an endpoint's models and prices in line with its upstream, such as OpenRouter. While it's on, the endpoint checks the upstream's list prices regularly and prices each model at the upstream cost plus your markup. When the result differs from what's published, it submits a new model list revision, which goes through price review and verification like any revision you publish yourself.

Autopilot works the same way for [hosted](/docs/providers/hosted) and self-hosted endpoints, and the dashboard, desktop app and CLI show and change the same settings. Autopilot is off until you turn it on. The [cost guard](#cost-guard) is on from the start and also protects prices you set yourself.

## How it works

:::steps
### Prices and models are checked

The endpoint refreshes the upstream's model list and prices, and prices each model at the upstream cost plus your markup. Models the upstream no longer lists, or that are no longer [eligible](#eligible-models), are removed. When you serve all eligible models and allow new ones, new upstream models are added.

### Changes are submitted

When the computed model list differs from the published one, the endpoint submits it as an ordinary revision. Nothing is submitted when prices and models already match.

### Prices are reviewed

Each submission goes through [price protection](/docs/providers/pricing#price-protection) like any other price change. Self-hosted revisions are also verified.
:::

A self-hosted endpoint checks only while its `numes` agent is running and connected. For a hosted endpoint, the platform runs the checks for you.

Each submission acts as the person who turned autopilot on, and their provider role is checked every time. If they can no longer manage the provider, autopilot stops submitting until someone turns it on again.

## Settings

| Setting | Starts as | What it does |
| --- | --- | --- |
| Pricing | Manual | **Manual** keeps the prices you publish. **Autopilot** prices each model from the upstream. |
| Markup | 0% | Added to every upstream rate. An exact percentage from 0% to 1,000%. |
| Models | Current models | **Current models** reprices the models the endpoint already serves. **All eligible models** also follows the upstream's model list. **Models you chose** reprices only the models you put on autopilot one by one. |
| Add new upstream models automatically | Off | With **All eligible models**, adds every eligible model the upstream lists. The dashboard turns it on when you choose all models; you can untick it. |
| Excluded models | None | Native model IDs that **All eligible models** never adds or keeps. Up to 1,000. |
| Currencies | USD | USD, Bitcoin or both. Bitcoin prices follow the USD price at the live rate; autopilot doesn't set fixed prices in sats. |
| Cost guard | On | Holds a model from customers while its upstream cost is above its live price. See [Cost guard](#cost-guard). |

Each rate is the upstream rate multiplied by `1 + markup / 100`, in exact decimals. With a 10% markup, an upstream input price of $3.00 per 1M tokens becomes $3.30 per 1M. A 0% markup prices a model at exactly the upstream cost. Customers pay your price; see [What customers pay](/docs/providers/pricing#what-customers-pay).

- **Current models** keeps the models you chose and reprices them. Exclusions apply only to **All eligible models**.
- **All eligible models** with new models turned off keeps the current list, minus exclusions, and adds nothing.
- **Models you chose** reprices only the models you put on autopilot, and removes one when the upstream stops listing or pricing it. Autopilot never changes, removes or adds any other model, and the platform rejects an update that would. The dashboard shows this choice only when it's the saved setting.

Models shared free with your organization keep their settings; autopilot doesn't price them.

Published models keep their context and output limits unless the upstream reports smaller ones. Autopilot doesn't replace them with new catalogue suggestions when it updates prices; catalogue suggestions fill missing limits during setup.

## Eligible models

Autopilot publishes only models it can price from the upstream's own list prices:

- chat models with text output and upstream list prices for input and output tokens;
- not router models or models with variable prices, such as OpenRouter's `openrouter/*` models;
- not models for which the upstream lists other charges, such as per-request, image, web search or reasoning fees.

Autopilot publishes text input and output only, without hosted tools. Cache reads are priced from the upstream's cache-read price. A model whose upstream charges a premium for cache writes is offered without explicit cache control, so the premium never applies.

Models priced from a market reference, and sources without list prices such as Ollama, vLLM and llama.cpp, have no upstream price to follow. Autopilot removes published models that aren't eligible at its next check.

## Check now

While autopilot is on, **Check now** in the dashboard or desktop app, or `numes provider autopilot refresh`, asks the endpoint for a full price and model check, usually within a minute. Turning autopilot on or saving its settings also requests a check. With autopilot off there's nothing to check on demand: the cost guard already follows every model check the endpoint makes.

## Price review still applies

Autopilot submits ordinary revisions, so [price protection](/docs/providers/pricing#price-protection) applies unchanged. While a change waits for review or verification, the previously approved price keeps serving, and the new price is never shown or charged before approval. If a change is returned or rejected, the endpoint reports it and your approved prices stay in effect.

An upstream price can rise above your approved price while the matching increase waits for review. The cost guard covers that gap.

## Cost guard

The cost guard holds a model from customer discovery and routing while its upstream cost is above its live selling price. It compares each token rate (input, output, cache read and cache write) in USD and in USD-indexed Bitcoin. Fixed prices in sats aren't compared.

- It works in manual mode too, so it also protects prices you set yourself.
- Free models, including models shared free with your organization, are never held.
- A held model is paused for customers until its upstream cost is at or below its live price again, for example after a higher price is approved. Another provider can keep the model available meanwhile, and platform checks can still reach it.
- Turning the guard off releases its holds. A pause you set yourself stays in place.
- Held models show in your endpoint's management view, worded as held because the upstream price rose above yours, and in `numes provider autopilot status`.

The guard sees a price rise at the endpoint's next successful check. If a check fails, the endpoint keeps its last known prices and existing holds until a later check succeeds. Requests served before a rise is detected are charged at your live price.

## Last result

Retired token-capacity entries in accepted history alone don't cause a new
submission. An unchanged model list and prices leave pending reviews in place.
When other terms change, the new submission omits retired capacity.

The endpoint reports the outcome of its last check:

| Result | Meaning |
| --- | --- |
| Prices and models already match upstream | Nothing to submit. |
| Submitted new prices or models for review | A new revision was submitted. |
| The last update was rejected | The platform rejected the submitted model list. Review the endpoint's models. |
| Settings changed during the check | The next check uses the new settings. |
| The person who turned autopilot on can no longer manage this provider | Turn autopilot on again. |
| No model could be priced from upstream | No eligible model remained, so nothing was published. |
| Couldn't reach the upstream | The upstream's model list was unavailable; the next check tries again. |

## In the dashboard

Each endpoint on your provider page has an **Autopilot** row showing whether autopilot is on, its markup, models and currencies, the cost guard, the last price check, the last published revision, the last result and any held models.

:::steps
### Open the settings

Open [Provider](/dashboard/provider), choose your provider, and choose **Autopilot settings** on the endpoint.

### Choose your settings

Choose **Manual** or **Autopilot**, then set the markup, models, whether to add new models, exclusions and currencies. The cost guard can be turned on or off in either mode.

### Save

Choose **Save**. Turning autopilot on for an endpoint that already serves models asks you to confirm first: those models are repriced at the upstream cost plus your markup, prices you set yourself are replaced, and ineligible models are removed at the next check.
:::

If someone changed the settings after you opened them, the dashboard shows the latest settings and asks you to review them and save again.

Account owners, administrators and provider operators can change autopilot. Other members see its settings and status read-only.

### Start a hosted endpoint with autopilot

When you [choose models](/docs/providers/hosted#choose-models-and-prices) for a hosted endpoint, **Offer and pricing** shows the endpoint's saved autopilot settings and lets you change them as you publish:

1. Under **How prices are set**, choose **Autopilot**. Every model you serve follows the upstream's price, and its price fields become read-only. **Serve new OpenRouter models automatically** (it names your upstream) is ticked; untick it to keep only your selection. Selected models without upstream input and output list prices are left out.
2. Or keep **I set the prices** and, in a model's editor, tick **Autopilot for this model**. Only those models follow the upstream (**Models you chose**); every other model keeps your price. Models without an upstream price say why they can't follow it.
3. Publish as usual. The autopilot settings are saved once the publication is accepted, with the page's markup and currencies. Eligible models you left unselected are excluded. With **I set the prices** and no model on autopilot, publishing turns a saved autopilot off. If only the autopilot settings changed, they're saved without a new publication.

## In the terminal and the desktop app

When you [set up a source](/docs/providers/terminal-ui) in the terminal interface (`numes provider tui`) whose upstream reports list prices, the Review step offers **Pricing mode**: **Manual prices**, **Autopilot · these models** or **Autopilot · all models, add new**. The markup on upstream prices on the same step becomes the autopilot markup. Autopilot is turned on after the source is published. If that fails, the source stays published and the terminal tells you to run `numes provider autopilot enable`.

The desktop app has an **Autopilot** tab on each published source with the same settings, the last result, held models and **Check now**. Turning autopilot on, or changing its markup, models, exclusions or currencies while it's on, first previews every model's price before and after, plus the models that can't follow the upstream, and applies only after you confirm.

## Command line

Manage autopilot for a self-hosted profile's endpoint with `numes provider autopilot`:

```bash
numes provider autopilot status --profile NAME
numes provider autopilot preview --profile NAME [OPTIONS]
numes provider autopilot enable --profile NAME [OPTIONS] [--yes]
numes provider autopilot set --profile NAME [OPTIONS]
numes provider autopilot disable --profile NAME
numes provider autopilot refresh --profile NAME
```

| Command | Effect |
| --- | --- |
| `status` | Prints the settings, the last check, the last published revision, the last result and held models. |
| `preview` | Shows the model list autopilot would publish with the given options: each model's price before and after, and every ineligible model with its reason. Publishes nothing. |
| `enable` | Shows the same preview. With `--yes`, publishes that model list and turns autopilot on. With `--models all`, the first list includes every eligible model. |
| `set` | Changes settings without turning autopilot on or off. While autopilot is on, a change to the markup, models, exclusions or currencies shows the preview first and needs `--yes`. |
| `disable` | Turns autopilot off. Published prices stay as they are. |
| `refresh` | Asks for a check now, like **Check now**. Autopilot must be on. |

If the settings changed after a command read them, for example in the dashboard, the command publishes nothing and fails with a conflict; run it again.

:::fields Options
- `--markup-percent` `decimal` — The markup, such as `10` or `12.5`. Defaults to the current markup, or 0% before autopilot was first saved.
- `--models` `string` — `selected` (current models) or `all` (all eligible models). Models you put on autopilot one by one show as `listed` with their IDs in `managed_models`; other options keep that choice, and `--models` replaces it.
- `--add-new-models` `flag` — With `all`, add new upstream models automatically.
- `--no-add-new-models` `flag` — Stop adding new upstream models.
- `--exclude` `list` — Comma-separated native model IDs to exclude. Replaces the current exclusions.
- `--currency` `string` — `USD`, `BTC` or `both`. Bitcoin prices follow the USD price.
- `--cost-guard` `string` — `on` or `off`.
- `--yes` `flag` — With `enable`, or `set` while autopilot is on, publish the previewed model list and save the settings.
:::

Options you leave out keep their current values. The command uses the named profile's endpoint and your saved sign-in. See the [CLI reference](/docs/providers/cli#autopilot).

## Next steps

:::cards
- {coins} [Pricing your models](/docs/providers/pricing) Markups, price protection and what customers pay.
- {badge} [Review and lifecycle](/docs/providers/lifecycle) What "In review", "Update in review" and "Checking" mean.
- {drive} [Hosted sources](/docs/providers/hosted) Sell through your own cloud account without running a machine.
- {console} [CLI reference](/docs/providers/cli) Every provider command and flag.
:::
