> For the complete documentation index, see [llms.txt](https://developer.harness.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developer.harness.io/internal-developer-portal/3.0/admin-and-customization/custom-entity-kinds/create-custom-kind.md).

# Create a Custom Entity Kind

{% hint style="info" %}
Custom Entity Kinds are managed from the **Configure** section by the Admin. Navigate to **Configure** → **Custom Kinds** in the left sidebar.
{% endhint %}

### Navigate to custom entity kinds <a href="#navigate-to-custom-entity-kinds" id="navigate-to-custom-entity-kinds"></a>

1. In Harness, open the **Internal Developer Portal**.
2. From the left sidebar, click **Configure**.
3. In the left navigation menu, click **Custom Kinds**.

   ![](/files/F3TnfKOr5na3xFndDNbO)

   Figure 1: The Custom Entity Kinds page

   The **Custom Entity Kinds** page opens showing built-in and custom kinds (if any).
4. Click **Create Kind** at the top right.

***

### Configure the kind <a href="#configure-the-kind" id="configure-the-kind"></a>

The **Configuration** section captures the kind's identity.

![](/files/VBHWSrd1XLQJt0VO1g2w)

Figure 2: Create Entity Kind - Configuration section

1. Enter a name in the **Entity Kind Name** field. Use PascalCase (e.g., `CustomerProfile`, `MLModel`, `ETLJob`). This value becomes the `kind` field in catalog YAML.

   <div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p>If required, you can change the kind name after creation, but not its identifier.</p></div>
2. Enter a **Description**. This appears on the kind's card on the Custom Entity Kinds page.
3. Under **Icon**, a default icon is pre-selected. Click **Change Icon** to open the icon picker and select a different one.

#### Define the schema <a href="#define-the-schema" id="define-the-schema"></a>

The **Schema** section defines the structure and validation rules for entities of this kind. It uses [JSON Schema (Draft-07)](https://json-schema.org/specification-links#draft-7).

![](/files/Lx8Pr0Y0XgFEmLnI17IP)

Figure 3: Create Entity Kind - Schema editor with the default schema

A base schema is pre-filled in the editor. It contains the standard IDP entity fields (`apiVersion`, `kind`, `identifier`, `name`, `type`, `owner`, `spec`, and `metadata`) that every entity needs. Leave these as they are.

{% hint style="warning" %}
Your custom fields must always go inside `spec` or `metadata` in the base schema. Adding or removing fields at the root level of the entity YAML is not supported.
{% endhint %}

For example, to add a `tier` property to `metadata` and make it mandatory, update the `metadata` block in the schema like this:

```json
    "metadata": {
      "type": "object",
      "description": "Metadata of the entity",
      "additionalProperties": true,
      "required": ["tier"],
      "properties": {
        "tier": {
          "type": "string",
          "description": "Service tier, e.g. gold, silver, bronze"
        },
        "validity": {
          "type": "string",
          "description": "Validity of tier in months"
        }
      }
    }
```

***

### Validate and create <a href="#validate-and-create" id="validate-and-create"></a>

1. Once you have configured the schema, click **Validate Schema**.

   ![](/files/Hm6mUTichY9FXaOLoVsZ)

   Figure 4: The green 'Schema is valid' banner confirming a valid schema

   If the schema is valid, a green success banner appears at the top of the page. If there are errors, fix them and click **Validate Schema** again before proceeding.
2. Click **Create**. Your new kind now appears in the list of Custom Entity Kinds.

***

### Next steps <a href="#next-steps" id="next-steps"></a>

* [Configure a layout or update the schema](/internal-developer-portal/admin-and-customization/custom-entity-kinds/manage-custom-kind.md)
* [Create entities of your new custom kind](/internal-developer-portal/admin-and-customization/custom-entity-kinds/create-entities.md)
