---
title: "overlane model add"
description: "Add a model the dispatcher can run by alias, with a cap per run"
---

> Documentation Index
> Fetch the complete documentation index at: https://docs.overlane.app/llms.txt
> Use this file to discover all available pages before exploring further.

# overlane model add

{/* Generated by apps/docs/scripts/generate.mjs (CLI pages from the command registry in packages/cli). Do not edit; run `pnpm --filter @overlane/docs gen`. */}

Three kinds: an OpenAI-compatible endpoint (--base-url, https and a public address only), a major provider's API key (--provider), or a Workers AI model (no key). The key is read from the variable named by --key-env, or from standard input, sent once and stored encrypted; it is never an argument, never printed and never shown again. Set --max-tokens, --max-dollars or both: a run stops when it reaches either. A dollar cap needs the model's prices per million tokens.

## Usage

```sh
overlane model add [alias] [--kind KIND] [--base-url URL] [--provider PROVIDER] --model NAME [--key-env NAME] [--max-tokens N] [--max-dollars USD] [--price-in USD] [--price-out USD] [--dry-run]
```

## Arguments

| Argument | Required | Description |
| --- | --- | --- |
| `alias` | no | Lowercase letters, digits and hyphens (required) |

## Flags

| Flag | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `--kind` | one of `openai-compatible`, `workers-ai`, `provider` | no | `openai-compatible` | openai-compatible (default), provider or workers-ai |
| `--base-url` | string | no |  | The endpoint's https base URL, for openai-compatible |
| `--provider` | one of `anthropic`, `openai`, `google`, `mistral`, `xai` | no |  | anthropic, openai, google, mistral or xai, for provider |
| `--model` | string | yes |  | The model name the endpoint expects |
| `--key-env` | string | no |  | Name of the environment variable holding the key (default: read standard input) |
| `--max-tokens` | string | no |  | Token cap per run (input and output together) |
| `--max-dollars` | string | no |  | Dollar cap per run, for example 0.50 |
| `--price-in` | string | no |  | Dollars per million input tokens |
| `--price-out` | string | no |  | Dollars per million output tokens |
| `--dry-run` | boolean | no |  | Print the requests and file changes this command would make, then stop. Needs no credentials. |

## Examples

```sh
overlane model add free-llama --kind openai-compatible --base-url https://integrate.api.nvidia.com/v1 --model meta/llama-3.3-70b-instruct --key-env NVIDIA_API_KEY --max-tokens 200000
overlane model add mistral --kind provider --provider mistral --model mistral-small-latest --key-env MISTRAL_KEY --max-dollars 0.50 --price-in 0.1 --price-out 0.3
overlane model add cf-llama --kind workers-ai --model @cf/meta/llama-3.1-8b-instruct --max-tokens 50000
```

## Behavior

- Effect: `write` (changes local or hosted state).
- Needs credentials: yes. Uses the network: yes.
- Supports `--dry-run`: yes. Accepts `--force`: no.
- Machine-readable description: `overlane schema model add`.

## Result

With `--json` (the default when stdout is not a terminal) the command prints this JSON Schema's shape on stdout.

```json
{
  "anyOf": [
    {
      "type": "object",
      "properties": {
        "executor": {
          "type": "object",
          "properties": {
            "tenantId": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]*$",
              "description": "tenant identifier"
            },
            "alias": {
              "type": "string",
              "minLength": 1,
              "maxLength": 60,
              "pattern": "^[a-z0-9][a-z0-9-]*$"
            },
            "ref": {
              "type": "string",
              "pattern": "^model:"
            },
            "kind": {
              "type": "string",
              "enum": [
                "openai-compatible",
                "workers-ai",
                "provider"
              ]
            },
            "provider": {
              "anyOf": [
                {
                  "type": "string",
                  "enum": [
                    "anthropic",
                    "openai",
                    "google",
                    "mistral",
                    "xai"
                  ]
                },
                {
                  "type": "null"
                }
              ]
            },
            "baseUrl": {
              "anyOf": [
                {
                  "type": "string",
                  "format": "uri"
                },
                {
                  "type": "null"
                }
              ]
            },
            "model": {
              "type": "string",
              "minLength": 1,
              "maxLength": 200,
              "pattern": "^[A-Za-z0-9@._:/-]+$"
            },
            "keyStatus": {
              "anyOf": [
                {
                  "type": "string",
                  "enum": [
                    "untested",
                    "active",
                    "failed",
                    "revoked"
                  ]
                },
                {
                  "type": "null"
                }
              ]
            },
            "budget": {
              "type": "object",
              "properties": {
                "maxTokensPerRun": {
                  "default": null,
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 100,
                      "maximum": 100000000
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "maxCostMicrosPerRun": {
                  "default": null,
                  "anyOf": [
                    {
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 10000000000
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "required": [
                "maxTokensPerRun",
                "maxCostMicrosPerRun"
              ],
              "additionalProperties": false
            },
            "prices": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "inputMicrosPerM": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 1000000000
                    },
                    "outputMicrosPerM": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 1000000000
                    }
                  },
                  "required": [
                    "inputMicrosPerM",
                    "outputMicrosPerM"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            },
            "createdAt": {
              "type": "string",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
            }
          },
          "required": [
            "tenantId",
            "alias",
            "ref",
            "kind",
            "provider",
            "baseUrl",
            "model",
            "keyStatus",
            "budget",
            "prices",
            "createdAt"
          ],
          "additionalProperties": false
        }
      },
      "required": [
        "executor"
      ],
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "dryRun": {
          "type": "boolean",
          "const": true
        },
        "service": {
          "type": "string"
        },
        "requests": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "method": {
                "type": "string"
              },
              "path": {
                "type": "string"
              },
              "body": {},
              "note": {
                "type": "string"
              }
            },
            "required": [
              "method",
              "path"
            ],
            "additionalProperties": false
          }
        },
        "commands": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "writes": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "path": {
                "type": "string"
              },
              "action": {
                "type": "string",
                "enum": [
                  "write",
                  "append",
                  "delete"
                ]
              },
              "description": {
                "type": "string"
              }
            },
            "required": [
              "path",
              "action",
              "description"
            ],
            "additionalProperties": false
          }
        },
        "notes": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "required": [
        "dryRun",
        "requests",
        "commands",
        "writes",
        "notes"
      ],
      "additionalProperties": false
    }
  ]
}
```

See [exit codes](/cli/#exit-codes) for the status the process returns.

Source: https://docs.overlane.app/cli/model-add/index.mdx
