---
title: "Create (upsert) system"
method: POST
path: "/projects/{projectId}/systems"
---

# Create (upsert) system

`POST /projects/{projectId}/systems`

Create a new system. If one with the same name in the project exists, it updates it instead.

## Path parameters

- `projectId` string, required

## Request body

- object
  - `description` string — The description of the system.
  - `name` string — The name of the system. Should be unique within the project. Default is "Default system"
  - `config` object, required — The configuration of the system.

## Response `201`

System created successfully

- System — A System Under Test (SUT). Systems are templates - to run evaluations, pair them with a SystemVersion that provides specific parameter values.
  - `id` string, uuid, required — The ID of the system.
  - `name` string, required — The name of the system. Unique within the project.
  - `description` string, required — The description of the system.
  - `productionVersion` SystemVersion, required — A SystemVersion defines the specific settings for a System Under Test. System versions contain parameter values that determine system behavior during evaluation. They are immutable snapshots - once created, they never change. When running evaluations, you reference a specific systemVersionId to establish which system version to test.
    - `id` string, uuid, required — The ID of the system version.
    - `systemId` string, uuid, required — The ID of the system the system version belongs to.
    - `name` string, required — The name of the system version.
    - `config` object, required — The configuration of the system version.
  - `versions` object[], required — The versions of the system.
    - `id` string, uuid, required — The ID of the system version.
    - `name` string, required — The name of the system version.

## Other responses

- `401` — Error indicating that the request is not authenticated.
- `500` — An internal service error indicating an issue with the Scorecard service.

## Changes

- **2025-06-27** `013895a80cfe` — 4 breaking, 3 warning, 8 info
  - added the new required request property `config`
  - removed the required property `configSchema` from the response with the `201` status
  - removed the required property `inputSchema` from the response with the `201` status
  - removed the required property `outputSchema` from the response with the `201` status
  - …11 more

[Change history](https://skmtc.dev/scorecard-ai/apis/scorecard-api/changes/projects/:projectId/systems/post.md)

---

[API](https://skmtc.dev/scorecard-ai/apis/scorecard-api.md) · [All operations](https://skmtc.dev/scorecard-ai/apis/scorecard-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/scorecard-ai/scorecard-api/revisions/121aaa257802/schema)
