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

# Conditionals

> Conditional validation based on field values and presence.

Use conditional keywords when required fields depend on other values.

## Supported keywords

| Keyword                | What it does                                     |
| ---------------------- | ------------------------------------------------ |
| `if` / `then` / `else` | Apply different schemas based on a condition     |
| `dependentRequired`    | Require companion fields when a field is present |

## `if` / `then` / `else`

Validate one branch when a condition matches, and another branch otherwise.

<Danger>
  Pydantic and Zod examples are omitted for this example because there is no direct keyword mapping for JSON Schema `if`/`then`/`else`.
</Danger>

```json JSON Schema theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
{
  "type": "object",
  "properties": {
    "delivery_method": { "type": "string", "enum": ["shipping", "pickup"] },
    "address": { "type": "string", "minLength": 10 },
    "pickup_location": { "type": "string", "enum": ["warehouse-a", "warehouse-b"] }
  },
  "required": ["delivery_method"],
  "if": {
    "properties": { "delivery_method": { "enum": ["shipping"] } },
    "required": ["delivery_method"]
  },
  "then": {
    "required": ["address"]
  },
  "else": {
    "required": ["pickup_location"]
  },
  "additionalProperties": false
}
```

In the JSON Schema above, if the value of the property `delivery_method` is "shipping", then the property `address` is required. Otherwise, it's the property `pickup_location` that is required.

## Multiple independent conditions

Use `allOf` with multiple `if`/`then` blocks when separate rules should all apply.

```json JSON Schema theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
{
  "type": "object",
  "properties": {
    "account_type": { "type": "string", "enum": ["business", "personal"] },
    "country": { "type": "string", "enum": ["US", "CA"] },
    "company_name": { "type": "string" },
    "state": { "type": "string" }
  },
  "required": ["account_type", "country"],
  "allOf": [
    {
      "if": {
        "properties": { "account_type": { "enum": ["business"] } },
        "required": ["account_type"]
      },
      "then": {
        "required": ["company_name"]
      }
    },
    {
      "if": {
        "properties": { "country": { "enum": ["US"] } },
        "required": ["country"]
      },
      "then": {
        "required": ["state"]
      }
    }
  ],
  "additionalProperties": false
}
```

In the JSON Schema above, there are two different conditionals that both apply. If the property `account_type` is equal to "business" then the property `company_name` is required and, independently of it, if the property `country` is equal to "US", then the property `state` is required. Thus, if both conditions evaluate to `true`, then both properties `company_name` and `state` are required.

## `dependentRequired`

Require companion fields when a field is present.

```json JSON Schema theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
{
  "type": "object",
  "properties": {
    "email": { "type": "string", "format": "email" },
    "email_verified": { "type": "boolean" },
    "phone": { "type": "string" },
    "phone_verified": { "type": "boolean" }
  },
  "dependentRequired": {
    "email": ["email_verified"],
    "phone": ["phone_verified"]
  },
  "additionalProperties": false
}
```

In the JSON Schema above, if the property `email` is present, then the property `email_verified` must also be present. Similarly, if the property `phone` is present, then the property `phone_verified` must also be present.

Use `dependentRequired` for presence-based dependencies, and `if`/`then`/`else` for value-based dependencies.

## Related

* [Composition reference](/json-schema/reference/composition)
* [Field Dependencies cookbook](/json-schema/field-dependencies)
* [Conditional Requirements cookbook](/json-schema/conditional-requirements)
