# uip ixp projects

> Syntax and options for `uip ixp projects`, which creates and manages IXP training projects — model publishing, metrics, and taxonomy import/export.

`uip ixp projects` creates and manages IXP training projects: the top-level container for a taxonomy, training documents, and trained model versions. See [Concepts](./uip-ixp.md#concepts) on the parent page for the taxonomy model and training-loop overview.

## Synopsis

```text
uip ixp projects list [-l, --limit <n>] [--offset <n>]
uip ixp projects get <project-name>
uip ixp projects delete <project-name> -y
uip ixp projects update-title <project-name> <new-title>
uip ixp projects update-prompt <project-name> --prompt <text>
uip ixp projects get-taxonomy <project-name>
uip ixp projects import-taxonomy <project-name> <file>
uip ixp projects configure-model <project-name> [--model <version>] [--preprocessing <type>]
uip ixp projects get-metrics <project-name> [-m, --model-version <version>]
uip ixp projects publish <project-name> [-m, --model-version <version>] [--tag live|staging] [-d, --description <text>]
uip ixp projects unpublish <project-name> -m, --model-version <version>
uip ixp projects untag <project-name> --tag live|staging
uip ixp projects list-models <project-name>
uip ixp projects create <name> [folder-path] [-d, --description <text>] [--skip-taxonomy]
```

## uip ixp projects list

List all IXP training projects in the tenant.

### Options

| Short | Long | Value | Default | Description |
|---|---|---|---|---|
| `-l` | `--limit <number>` | 1-10000 | 50 | Number of items to return. |
| — | `--offset <number>` | 0-1000000 | 0 | Number of items to skip. |

### Example

```bash
uip ixp projects list
```

### Data shape (--output json)

```json
{
  "Code": "IxpProjectsList",
  "Data": {
    "Projects": [
      {
        "Id": "3d8f1b67-2c5e-4a09-bf3d-9e1a4c7b820f",
        "Name": "my-invoices",
        "Title": "My Invoices",
        "CreatedAt": "2026-04-01T10:00:00Z",
        "ProjectUrl": "https://cloud.uipath.com/acme/DefaultTenant/reinfer_/ixp/my-invoices/my-invoices"
      }
    ],
    "Total": 1,
    "Offset": 0,
    "Limit": 1
  }
}
```

The whole response, including `Data`, is forwarded from the IXP API verbatim — keys keep their native PascalCase here, but see each other verb's note on casing since it varies by endpoint.

## uip ixp projects get

Get an IXP training project by name.

### Arguments

| Name | Required | Purpose |
|---|---|---|
| `<project-name>` | yes | Project name. |

### Example

```bash
uip ixp projects get my-invoices
```

### Data shape (--output json)

```json
{
  "Code": "IxpProjectsGet",
  "Data": {
    "Id": "3d8f1b67-2c5e-4a09-bf3d-9e1a4c7b820f",
    "Name": "my-invoices",
    "Title": "My Invoices",
    "CreatedAt": "2026-04-01T10:00:00Z",
    "ProjectUrl": "https://cloud.uipath.com/acme/DefaultTenant/reinfer_/ixp/my-invoices/my-invoices"
  }
}
```

## uip ixp projects delete

Permanently delete a project — its documents, taxonomy, and trained models. Irreversible; requires `--yes`.

### Arguments

| Name | Required | Purpose |
|---|---|---|
| `<project-name>` | yes | Project name. |

### Options

| Short | Long | Description |
|---|---|---|
| `-y` | `--yes` | Confirm this irreversible operation. Required — the CLI never prompts. |

### Example

```bash
uip ixp projects delete my-invoices --yes
```

### Data shape (--output json)

```json
{ "Code": "IxpProjectsDelete", "Data": { "Status": "ok" } }
```

## uip ixp projects update-title

Update the display title of a project. The proxy keeps the dataset and project titles in sync server-side.

### Arguments

| Name | Required | Purpose |
|---|---|---|
| `<project-name>` | yes | Project name. |
| `<new-title>` | yes | New display title. |

### Example

```bash
uip ixp projects update-title my-invoices "My Invoices"
```

### Data shape (--output json)

```json
{
  "Code": "IxpProjectsUpdateTitle",
  "Data": {
    "Id": "3d8f1b67-2c5e-4a09-bf3d-9e1a4c7b820f",
    "Name": "my-invoices",
    "Title": "My Invoices",
    "CreatedAt": "2026-04-01T10:00:00Z",
    "ProjectUrl": "https://cloud.uipath.com/acme/DefaultTenant/reinfer_/ixp/my-invoices/my-invoices"
  }
}
```

## uip ixp projects update-prompt

Update the project's overall extraction instructions — the taxonomy-wide prompt giving the model context relevant across every field group. Matches the IXP UI's "Overall extraction instructions" field on the Manage Taxonomy page. Distinct from a field group's own prompt ([`taxonomy groups update-prompts`](./uip-ixp-taxonomy.md#uip-ixp-groups-update-prompts)) and per-field prompts ([`taxonomy fields update-prompts`](./uip-ixp-taxonomy.md#uip-ixp-fields-update-prompts)).

### Arguments

| Name | Required | Purpose |
|---|---|---|
| `<project-name>` | yes | Project name. |

### Options

| Long | Value | Required | Description |
|---|---|---|---|
| `--prompt <text>` | string | **yes** | New overall extraction instructions. Replaces the existing value. |

### Example

```bash
uip ixp projects update-prompt my-invoices --prompt "Extract key information from US vendor invoices, including header fields and line items."
```

### Data shape (--output json)

```json
{ "Code": "IxpProjectsUpdatePrompt", "Data": { "Status": "ok" } }
```

## uip ixp projects get-taxonomy

Export the project's raw IXP taxonomy artifact (data types + field groups). This is an IXP-internal format intended for re-import into another project (`import-taxonomy`), not a curated, human-readable view.

### Arguments

| Name | Required | Purpose |
|---|---|---|
| `<project-name>` | yes | Project name. |

### Example

```bash
uip ixp projects get-taxonomy my-invoices --output json
```

### Data shape (--output json)

```json
{
  "Code": "IxpProjectsGetTaxonomy",
  "Data": {
    "status": "ok",
    "dataset": { "entity_defs": [], "label_groups": [] }
  }
}
```

`Data` is forwarded verbatim in the upstream dataset's own snake_case, not PascalCased.

## uip ixp projects import-taxonomy

Import a taxonomy from a local JSON file into an existing project. Accepts two file formats: `{ field_types, label_group }` (the shape `get-taxonomy`/taxonomy-suggestion produce) or `{ entity_defs, label_groups }` (the shape the taxonomy endpoint itself returns) — `entity_defs`/the first `label_groups` entry are passed through as-is when given the second format, to preserve properties like `inherits_from` the API requires.

### Arguments

| Name | Required | Purpose |
|---|---|---|
| `<project-name>` | yes | Project name. |
| `<file>` | yes | Path to taxonomy JSON file. |

### Example

```bash
uip ixp projects import-taxonomy my-invoices ./taxonomy.json
```

### Data shape (--output json)

```json
{
  "Code": "IxpProjectsImportTaxonomy",
  "Data": {
    "ProjectName": "my-invoices",
    "FieldTypes": 4,
    "LabelDefs": 1,
    "Labels": ["Invoice"]
  }
}
```

Fails with an explicit error if the file has neither recognized shape (missing both `field_types` and `label_group` after normalization).

## uip ixp projects configure-model

Configure the extraction model settings for a project. The proxy reads the current config, merges in the supplied model/preprocessing, writes it back, and returns the merged config.

### Arguments

| Name | Required | Purpose |
|---|---|---|
| `<project-name>` | yes | Project name. |

### Options

| Long | Value | Description |
|---|---|---|
| `--model <version>` | string | Extraction model name, validated server-side (e.g. `gemini_2_5_flash`, `gemini_2_5_pro`, `gpt_4o_2024_05_13`). |
| `--preprocessing <type>` | `none`\|`table_mini`\|`table` | Intelligent pre-processing mode. |

At least one of `--model`/`--preprocessing` is required — passing neither fails client-side before any call ("Nothing to configure").

### Example

```bash
uip ixp projects configure-model my-invoices --model gemini_2_5_pro --preprocessing table
```

### Data shape (--output json)

```json
{
  "Code": "IxpProjectsConfigureModel",
  "Data": { "ProjectName": "my-invoices", "Config": {} }
}
```

## uip ixp projects get-metrics

Get validation metrics for an IXP project.

### Arguments

| Name | Required | Purpose |
|---|---|---|
| `<project-name>` | yes | Project name. |

### Options

| Short | Long | Value | Default | Description |
|---|---|---|---|---|
| `-m` | `--model-version <version>` | integer or `latest` | `latest` | Model version to get metrics for. |

### Examples

```bash
uip ixp projects get-metrics my-invoices --output json
```

```bash
uip ixp projects get-metrics my-invoices --model-version 32 --output json
```

### Data shape (--output json)

```json
{
  "Code": "IxpProjectsGetMetrics",
  "Data": {
    "ModelVersion": 35,
    "ValidatedDocuments": 8,
    "ProjectScore": 0.8662574291229248,
    "ProjectScoreQuality": "excellent",
    "FieldGroups": [
      { "FieldGroup": "Invoice", "F1": 0.8939051628112793, "Precision": 0.824999988079071, "Recall": 0.9753694534301758, "ErrorRate": 0.1621621549129486, "Documents": 8 }
    ],
    "Fields": [
      { "FieldGroup": "Invoice", "FieldId": "1e8eadeac608df18", "Name": "Invoice Number", "F1": 0.875, "Precision": 0.875, "Recall": 0.875, "ErrorRate": 0.125, "Documents": 8, "Annotations": 8, "Quality": "good" }
    ]
  }
}
```

A model that exists but hasn't been validated yet returns `{ "Metrics": null }` instead of the flat shape above.

## uip ixp projects publish

Publish a model version, optionally tagging it `live` or `staging`.

### Arguments

| Name | Required | Purpose |
|---|---|---|
| `<project-name>` | yes | Project name. |

### Options

| Short | Long | Value | Description |
|---|---|---|---|
| `-m` | `--model-version <version>` | integer | Model version to publish. Defaults to the latest (highest) trained version. |
| — | `--tag <live\|staging>` | `live`\|`staging` | Optionally tag the published version. |
| `-d` | `--description <text>` | string | Description for the published version. An empty string clears an existing one. |

### Examples

```bash
uip ixp projects publish my-invoices --model-version 4 --tag live --description "Q2 release"
```

```bash
uip ixp projects publish my-invoices --model-version 4
```

```bash
# --model-version defaults to the latest trained version
uip ixp projects publish my-invoices
```

### Data shape (--output json)

```json
{
  "Code": "IxpProjectsPublish",
  "Data": {
    "ProjectName": "my-invoices",
    "ModelVersion": 4,
    "Pinned": true,
    "Tag": { "Name": "live", "Version": 4, "UpdatedAt": "2026-04-29T00:00:00Z" },
    "Description": "Q2 release"
  }
}
```

`Tag` is `null` when `--tag` was omitted.

## uip ixp projects unpublish

Unpublish a model version. The version stays trained and listable; it is only removed from the published set.

### Arguments

| Name | Required | Purpose |
|---|---|---|
| `<project-name>` | yes | Project name. |

### Options

| Short | Long | Value | Required | Description |
|---|---|---|---|---|
| `-m` | `--model-version <version>` | non-negative integer | **yes** | Model version to unpublish. |

### Example

```bash
uip ixp projects unpublish my-invoices --model-version 4
```

### Data shape (--output json)

```json
{
  "Code": "IxpProjectsUnpublish",
  "Data": { "ProjectName": "my-invoices", "ModelVersion": 4, "Pinned": false }
}
```

## uip ixp projects untag

Remove a tag from a model version by name. Tag names are unique within a project, so this is unambiguous even if a version holds several tags. The version stays trained and published; only its tag pointer is cleared.

### Arguments

| Name | Required | Purpose |
|---|---|---|
| `<project-name>` | yes | Project name. |

### Options

| Long | Value | Required | Description |
|---|---|---|---|
| `--tag <live\|staging>` | `live`\|`staging` | **yes** | Tag to remove, by name. |

### Example

```bash
uip ixp projects untag my-invoices --tag live
```

### Data shape (--output json)

```json
{
  "Code": "IxpProjectsUntag",
  "Data": { "ProjectName": "my-invoices", "ModelVersion": 4, "RemovedTags": ["live"] }
}
```

## uip ixp projects list-models

List all model versions and tags for a project.

### Arguments

| Name | Required | Purpose |
|---|---|---|
| `<project-name>` | yes | Project name. |

### Example

```bash
uip ixp projects list-models my-invoices
```

### Data shape (--output json)

```json
{
  "Code": "IxpProjectsListModels",
  "Data": { "Models": [], "Tags": [], "MaxPublished": 5 }
}
```

## uip ixp projects create

Create an IXP project. Given a folder of documents, uploads them and suggests a taxonomy from up to 8 evenly-sampled documents; without a folder, creates an empty project.

### Arguments

| Name | Required | Purpose |
|---|---|---|
| `<name>` | yes | Project name. |
| `[folder-path]` | no | Path to a folder of documents. Omit to create an empty project — no upload, no taxonomy suggestion is possible without documents. |

### Options

| Short | Long | Description |
|---|---|---|
| `-d` | `--description <text>` | Description of what to extract from the documents — used as context for taxonomy suggestion. |
| — | `--skip-taxonomy` | Create the project and upload documents without suggesting a taxonomy. |

Uploads continue on individual file failures (each failure is collected, not fatal) — the command only fails outright if every upload in the folder fails. Taxonomy suggestion retries up to 3 times with a 5-second delay (the backend can intermittently 500 while OCR isn't ready yet for a PDF); if all 3 attempts fail, the project and its documents are still created — the error names the exact `import-taxonomy` command to run afterward.

### Examples

```bash
uip ixp projects create "My Invoices" ./training-set --description "extract invoice header fields"
```

```bash
uip ixp projects create "My Invoices" ./training-set --skip-taxonomy
```

```bash
uip ixp projects create "My Invoices"
```

### Data shape (--output json)

```json
{
  "Code": "IxpProjectsCreate",
  "Data": {
    "ProjectName": "my_invoices-a1b2c3d4-ixp",
    "ProjectUrl": "https://cloud.uipath.com/acme/DefaultTenant/reinfer_/ixp/my_invoices-a1b2c3d4-ixp/my_invoices-a1b2c3d4",
    "DocumentsUploaded": 12,
    "DocumentsFailed": 0
  }
}
```

`FailedFiles` (an array of `{file, error}`) is present only when at least one upload failed. When taxonomy suggestion succeeded, `SuggestedTaxonomy` is added with `FieldTypes` (name/title pairs) and `LabelGroup` (name plus `LabelDefs`). When `--skip-taxonomy` was passed, `TaxonomySkipped: true` is added instead. `<name>` is returned slugified and suffixed with a random id and `-ixp` — it is not the literal string you passed.

## Related

- [uip ixp](./uip-ixp.md) — concepts and the full resource directory.
- [uip ixp taxonomy](./uip-ixp-taxonomy.md) — edit data types, groups, and fields one at a time (vs. this page's whole-taxonomy `get-taxonomy`/`import-taxonomy`).
- [uip ixp documents & labellings](./uip-ixp-documents.md) — upload documents and review predictions.
- [uip ixp deployments](./uip-ixp-deployments.md) — deploy a published model version to Orchestrator.

## See also

- [IXP tool overview](./uip-ixp.md)
- [Global options](./global-options.md)
- [Exit codes](./exit-codes.md)
