---
title: "Create a custom rule set"
method: POST
path: "/api/v1/rule-sets"
tags: ["Rule sets"]
---

# Create a custom rule set

`POST /api/v1/rule-sets`

## Request

- Base URL: `https://overwing.ai`
- URL: `https://overwing.ai/api/v1/rule-sets`
- Auth: HTTP bearer

## Request body

- RuleSetCreate
  - `name` string, required
  - `slug` string, required
  - `description` string, nullable
  - `rules` Rule[], required
    - `id` string, uuid
    - `name` string, required
    - `description` string, nullable
    - `question_type` 'choice' | 'score' | 'noul', required
    - `question_config` union, required
      - object
        - `options` string[], required
        - `instructions` string, required
      - object
        - `levels` string[], required: Ordered from lowest to highest
        - `instructions` string, required
      - object
        - `question` string, required: A yes/no question
    - `fail_condition` union, required
      - object
        - `failOn` string[], required: Options that fail
      - object
        - `failOn` boolean, required
      - object
        - `failAbove` number, required: Fail when the score is at or above this level index
    - `review_condition` object, nullable
      - `confidenceBelow` number
    - `action` 'block' | 'redact' | 'review': What a caller should do when this rule fails. Echoed on every result and folded into recommended_action.
    - `weight` number
    - `sort_order` integer
    - `is_active` boolean

## Response `201`

Created

- RuleSet
  - `id` string, uuid
  - `name` string
  - `slug` string
  - `description` string, nullable
  - `is_system_prebuilt` boolean
  - `is_active` boolean
  - `created_at` string, date-time
  - `rules` Rule[]
    - `id` string, uuid
    - `name` string, required
    - `description` string, nullable
    - `question_type` 'choice' | 'score' | 'noul', required
    - `question_config` union, required
      - object
        - `options` string[], required
        - `instructions` string, required
      - object
        - `levels` string[], required: Ordered from lowest to highest
        - `instructions` string, required
      - object
        - `question` string, required: A yes/no question
    - `fail_condition` union, required
      - object
        - `failOn` string[], required: Options that fail
      - object
        - `failOn` boolean, required
      - object
        - `failAbove` number, required: Fail when the score is at or above this level index
    - `review_condition` object, nullable
      - `confidenceBelow` number
    - `action` 'block' | 'redact' | 'review': What a caller should do when this rule fails. Echoed on every result and folded into recommended_action.
    - `weight` number
    - `sort_order` integer
    - `is_active` boolean

## Other responses

- `400`: Validation error; the message names the offending field
- `401`: Missing or invalid API key
- `409`: Slug already taken

---

[API](https://skmtc.dev/overwing/apis/overwing-api.md) · [All operations](https://skmtc.dev/overwing/apis/overwing-api/llms.txt) · [OpenAPI document](https://skmtc.dev/overwing/apis/overwing-api/revisions/ff1282d31438?raw)
