# update_scoring_model (/reference/update-scoring-model)



Send any of `name`, `criteria` and `archived`. Changing its criteria doesn't change the questions it has. Free. See [Scoring models](/concepts/scoring-models).

## PATCH https://api.finic.ai/v1/scoring_models/{model_id}

Renames a scoring model, changes its criteria, or archives or unarchives it: send any of `name`, `criteria` and `archived`. Its criteria is what Finic writes its questions with at its first calibration, and weighs your questions by until then; changing it doesn't change the questions it has. An archived scoring model can't [score](/reference/score) or be [calibrated](/reference/calibrate) until it's unarchived. Free.

Authorization: `Bearer <API key>` (see [Authentication](/authentication)).
- Path parameter `model_id`: The scoring model's `model_id`.

### Request body (application/json)

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | string |  | A new name: a few words for people to recognize it by. |
| `criteria` | string |  | New criteria: what the decision is and what a bad outcome means. It can be emptied only once the scoring model is calibrated. |
| `archived` | boolean |  | `true` to archive it, `false` to unarchive it. |

Example:

```json
{
  "name": "Card-not-present payment fraud (EU)"
}
```

### Responses

- **200**: The scoring model, as [get_scoring_model](/reference/get-scoring-model) returns it.

| Field | Type | Always | Description |
| --- | --- | --- | --- |
| `model_id` | string | yes | The scoring model's id, `scm_…`. |
| `name` | string | yes | A few words saying what it predicts: the `name` it was created with, or the one it was given since. Empty for scoring models created before names, until someone names it. |
| `status` | `training`, `ready`, `failed` | yes | `training` while it's being created, `ready` to score records, `failed` if creating it failed (create it again). |
| `criteria` | string | yes | Its `criteria`, as created or as changed since. Empty if none was given. |
| `created_at` | string | yes | When the scoring model was created. |
| `calibrated_at` | string or null | yes | When it was last [calibrated](/reference/calibrate), or `null` if it isn't calibrated. One created from labeled records is calibrated from the start; one created from its criteria alone has only your questions, weighed by Finic's estimates, until you calibrate it. |
| `archived_at` | string or null | yes | When it was archived, or `null`. Calls to score with or calibrate an archived scoring model fail with `scoring_model_archived` until it's unarchived, with [update_scoring_model](/reference/update-scoring-model) or in the Finic Portal. |
| `examples` | integer | yes | The number of labeled records its latest calibration used (creating from them is one); 0 until it's calibrated. |
| `bad_rate` | number | yes | The share of those records with `is_bad` true, 0 to 1; 0 until it's calibrated. |
| `scored` | integer | yes | The number of records [scored](/reference/score) with it. |
| `questions` | array of object | yes | The questions it uses, the strongest first. Your own questions it doesn't use are listed on its page in the Finic Portal. |
| `questions[].id` | string | yes | The question's id, such as `q007`, for [remove_question](/reference/remove-question) or `remove_questions`. |
| `questions[].text` | string | yes | The question |
| `questions[].source` | `finic`, `user` | yes | `finic` for a question Finic wrote, `user` for one you added. |
| `questions[].weight` | number | yes | How much it moves the score, from the latest calibration, or Finic's estimate if the scoring model isn't calibrated yet. Positive when a likely yes raises the score, negative when it lowers it; the larger, the more it counts. |

```json
{
  "model_id": "scm_01M4XRC000RT2GZSKYPD8J86G9",
  "name": "Card-not-present payment fraud (EU)",
  "status": "ready",
  "criteria": "Card-not-present payments. is_bad: the payment was charged back as fraud within 90 days.",
  "created_at": "2026-10-20T17:04:11Z",
  "calibrated_at": "2026-10-24T09:30:52Z",
  "archived_at": null,
  "examples": 1800,
  "bad_rate": 0.062,
  "scored": 41250,
  "questions": [
    {
      "id": "q004",
      "text": "This record is a card payment. Is the IP address in a different country from the billing address?",
      "source": "finic",
      "weight": 0.91
    },
    {
      "id": "q051",
      "text": "Was the account opened less than a week before the payment?",
      "source": "user",
      "weight": 0.38
    }
  ]
}
```

- **400**: `invalid_request`: none of `name`, `criteria` and `archived` was sent; `name` is blank or over 100 characters; `criteria` is over 4,000 characters, or empty before the scoring model is calibrated.

- **401**: `authentication_error`: the API key is missing, unknown, revoked or expired.

- **404**: `scoring_model_not_found`: no scoring model with this `model_id` in your organization.

- **409**: `scoring_model_not_ready`: the scoring model is still being created, or creating it failed.

- **429**: `rate_limited`: over the organization's [request rate](/reference#rate-limits). Retry with backoff.
