Custom Columns

Custom columns let your agency track extra data on risk data schedules, beyond the standard Wunderite fields. In this guide, we will look at how to read and write custom column values on risk data with the Wunderite API.


Before you start

Before you can send custom column values through the Wunderite API:

  1. Custom columns must be enabled for your team.
  2. An administrator must configure each custom column in Wunderite, and choose which risk data types it applies to.

Each custom column has a key, such as property_manager or roof_condition. Use the key, not the display name, when you read or write values. The Wunderite API only accepts columns that are configured for your team and for the risk data type in the request. For example, a column configured only for vehicles cannot be set on a building.


Supported risk data

The following risk data objects support the custom_columns property:

Commercial risk profiles:

Personal risk profiles:

Commercial and personal risk data are configured separately. For example, a column configured for commercial vehicles does not apply to personal vehicles.


The custom_columns property

custom_columns is an object on the risk data's data property. Each property name is a custom column key, and each value is the value for that column.

{
  "custom_columns": {
    "property_manager": "Jane Smith",
    "roof_condition": "good"
  }
}

Value formats

The accepted value depends on the column type configured in Wunderite. Any value can be null, unless the column is required.

  • Name
    Short text
    Type
    string
    Description

    A single line of text, e.g. "Jane Smith".

  • Name
    Paragraph
    Type
    string
    Description

    Text that may span multiple lines, e.g. "Roof inspected in spring.\nNo issues found.".

  • Name
    Number
    Type
    number
    Description

    A numeric value, e.g. 12500 or 12.5.

  • Name
    Currency
    Type
    number
    Description

    A dollar amount as a number, without currency symbols or separators, e.g. 250000.5.

  • Name
    Date
    Type
    string
    Description

    A date in YYYY-MM-DD format, e.g. "2025-03-14".

  • Name
    Single select
    Type
    string
    Description

    One option key, e.g. "good". Option labels, such as "Good", are not accepted.

  • Name
    Multiple select
    Type
    string[]
    Description

    An array of option keys, e.g. ["sprinklers", "cameras"]. Send an array even when selecting one option.

If an administrator allows custom options on a select column, values that don't match an existing option key are also accepted.


Reading custom column values

When custom columns are enabled for your team, GET list and POST lookup responses include custom_columns for every supported object.

  • Every column configured for the object's risk data type is included, even if it has no value.
  • A column that has never been set returns its configured default, or null if there is no default.
  • A column that was cleared with null returns null, not its default.
  • Select columns return option keys, not labels.
  • If custom columns are not enabled for your team, custom_columns is not included in the response.

Request

GET
/api/v1/risks/{risk}/data/buildings
curl -G https://app.wunderite.com/api/v1/risks/{risk}/data/buildings \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json" \
-d filter[search]=Warehouse \
-d per_page=10

Response

{ "data": [ { "object": "building", "uuid": "686296ba-9f86-41f2-aa65-12e0524f69bb", "data": { "premise": "a27deef4-2f2a-47c1-a49b-37e52054e5f8", "owning_entity": null, "number": 6, "description": "Warehouse",
"year_built": null, "number_stories": null, "basements": null, "floor_area": null, "construction": null, "occupancy": null, "protection_class": null, "sprinkler": null, "fire_alarm": null, "dist_to_fire_hydrant": null, "dist_to_fire_dept": null, "flood_zone": null, "roof_year": null, "roof_type": null, "plumbing_year": null, "electrical_year": null, "heating_year": null, "security_alarm": null, "building_status": null, "itv": null, "assessor": null, "appraisal": null, "notes": null, "image": null, "custom_columns": { "inspection_notes": null, "last_inspected": "2025-09-02", "leased_square_feet": 12500, "property_manager": "Jane Smith", "replacement_budget": 250000.5, "roof_condition": "needs_repair", "safety_features": [ "monitored_alarm", "sprinklers" ] } }, "meta": { "created": "2026-09-30T17:26:17+00:00", "updated": "2026-09-30T17:26:17+00:00", "has_property_data": false }, "relations": { "premise": "a27deef4-2f2a-47c1-a49b-37e52054e5f8", "owning_entity": null, "subjects_of_insurance": [] } } ], "path": "https://app.wunderite.com/api/v1/risks/{risk}/data/buildings", "per_page": 10, "next_cursor": null, "next_page_url": null, "prev_cursor": null, "prev_page_url": null }

Creating risk data with custom column values

When creating risk data with a POST request, include custom_columns in the data property of each object you create. You only need to send the columns you want to set. Columns you leave out are set to their configured default, if there is one. Required columns must be included.

Request

POST
/api/v1/risks/{risk}/data/buildings
curl -X POST https://app.wunderite.com/api/v1/risks/{risk}/data/buildings \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
  "data": [
    {
      "object": "building",
      "data": {
        "premise": "a27deef4-2f2a-47c1-a49b-37e52054e5f8",
        "description": "Warehouse",
        "custom_columns": {
          "property_manager": "Jane Smith",
          "inspection_notes": "Roof inspected in spring.\nNo issues found.",
          "leased_square_feet": 12500,
          "replacement_budget": 250000.5,
          "last_inspected": "2025-03-14",
          "roof_condition": "good",
          "safety_features": ["sprinklers", "cameras"]
        }
      }
    }
  ]
}'

Response

{ "data": [ { "object": "building", "uuid": "686296ba-9f86-41f2-aa65-12e0524f69bb", "data": { "premise": "a27deef4-2f2a-47c1-a49b-37e52054e5f8", "owning_entity": null, "number": 6, "description": "Warehouse",
"year_built": null, "number_stories": null, "basements": null, "floor_area": null, "construction": null, "occupancy": null, "protection_class": null, "sprinkler": null, "fire_alarm": null, "dist_to_fire_hydrant": null, "dist_to_fire_dept": null, "flood_zone": null, "roof_year": null, "roof_type": null, "plumbing_year": null, "electrical_year": null, "heating_year": null, "security_alarm": null, "building_status": null, "itv": null, "assessor": null, "appraisal": null, "notes": null, "image": null, "custom_columns": { "inspection_notes": "Roof inspected in spring.\nNo issues found.", "last_inspected": "2025-03-14", "leased_square_feet": 12500, "property_manager": "Jane Smith", "replacement_budget": 250000.5, "roof_condition": "good", "safety_features": [ "cameras", "sprinklers" ] } }, "meta": { "created": "2026-09-30T17:26:17+00:00", "updated": "2026-09-30T17:26:17+00:00", "has_property_data": false }, "relations": { "premise": "a27deef4-2f2a-47c1-a49b-37e52054e5f8", "owning_entity": null, "subjects_of_insurance": [] } } ] }

Updating custom column values

In a PATCH request, send custom_columns with only the columns you want to change. Columns you leave out keep their current values.

  • To clear a value, send null. A cleared value stays null and does not fall back to the default. Required columns cannot be cleared.
  • A multiple select value replaces the whole selection. To add an option, send the full array of option keys you want selected.
  • By default, the response only includes the columns you sent. Use the hydrate flag to return every custom column value.

Request

PATCH
/api/v1/risks/{risk}/data
curl -X PATCH https://app.wunderite.com/api/v1/risks/{risk}/data \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
  "data": [
    {
      "object": "building",
      "uuid": "686296ba-9f86-41f2-aa65-12e0524f69bb",
      "data": {
        "custom_columns": {
          "roof_condition": "needs_repair",
          "safety_features": ["sprinklers", "monitored_alarm"],
          "last_inspected": "2025-09-02",
          "inspection_notes": null
        }
      }
    }
  ]
}'

Response

{
    "data": [
        {
            "object": "building",
            "uuid": "686296ba-9f86-41f2-aa65-12e0524f69bb",
            "data": {
                "custom_columns": {
                    "roof_condition": "needs_repair",
                    "safety_features": [
                        "sprinklers",
                        "monitored_alarm"
                    ],
                    "last_inspected": "2025-09-02",
                    "inspection_notes": null
                }
            },
            "profile_type": "commercial"
        }
    ]
}

Validation errors

Invalid custom column values return a 422 validation response, the same as other risk data properties. Error messages use the custom column's display name.

  • Custom columns are not enabled for your team: The custom columns field is prohibited.
  • custom_columns is not an object: The custom columns must be an array.
  • The key doesn't exist on your team: No custom column with key floor_color found for risk_buildings on your team.
  • The column doesn't apply to this risk data type: No custom column with key fleet_id found for risk_buildings on your team.
  • A text value is not a string: The Property Manager must be a string.
  • A number or currency value is not numeric: The Leased Square Feet must be a number.
  • A date value is not a valid date: The Last Inspected is not a valid date.
  • A single select value is not a valid option key: The selected Roof Condition is invalid.
  • A multiple select value is not an array: Safety Features must have at least one valid selection.
  • A multiple select value contains an invalid option key: The selected Safety Features option is invalid.
  • A required column is missing on create, or null: The Property Manager field is required.

Errors for a key that doesn't exist, or doesn't apply to the risk data type, are reported on custom_columns. Errors for a value are reported on custom_columns.{key}. For multiple select columns, an invalid option is reported on custom_columns.{key}.{index}.

Example

In this example, fleet_id is configured only for vehicles, leased_square_feet is a number column, "Good" is an option label instead of the option key good, and fire_escape is not an option for safety_features.

Request

POST
/api/v1/risks/{risk}/data/buildings
curl -X POST https://app.wunderite.com/api/v1/risks/{risk}/data/buildings \
-H "Authorization: Bearer {token}" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
  "data": [
    {
      "object": "building",
      "data": {
        "premise": "a27deef4-2f2a-47c1-a49b-37e52054e5f8",
        "description": "Garage",
        "custom_columns": {
          "fleet_id": "FL-102",
          "leased_square_feet": "twelve thousand",
          "roof_condition": "Good",
          "safety_features": ["sprinklers", "fire_escape"]
        }
      }
    }
  ]
}'

Response

{
    "message": {
        "data.0.data.custom_columns": [
            "No custom column with key fleet_id found for risk_buildings on your team."
        ],
        "data.0.data.custom_columns.leased_square_feet": [
            "The Leased Square Feet must be a number."
        ],
        "data.0.data.custom_columns.roof_condition": [
            "The selected Roof Condition is invalid."
        ],
        "data.0.data.custom_columns.safety_features.1": [
            "The selected Safety Features option is invalid."
        ]
    },
    "status": 422,
    "validation": true
}

Example keys

The custom_columns values in the request and response examples on each risk data page use placeholder keys. They are not configured for your team by default. To send an example as written, configure columns with the keys, types, and option keys below for the matching risk data type, or replace the keys with your own.

  • Premises: location_type (single select, option office), site_manager (short text)
  • Buildings: roof_condition (single select, option good), last_inspected (date)
  • Subjects of Insurance: valuation_source (single select, option appraisal), reviewed_by (short text)
  • Homes: pool_type (single select, option in_ground), security_features (multiple select, options monitored_alarm and deadbolts)
  • Legal Entities: entity_status (single select, option active), parent_company (short text)
  • Vehicles: fleet_id (short text), annual_mileage (number)
  • Equipment: asset_tag (short text), condition (single select, option good)
  • Drivers: mvr_status (single select, option clear), mvr_last_reviewed (date)
  • Workers' Comp: job_category (single select, option field), safety_program (single select, option yes)
  • Liabilities: contract_reference (short text), hazard_rating (single select, option moderate)
  • Contacts: preferred_contact_method (single select, option email), assistant_name (short text)
  • Additional Interests: loan_number (short text), certificate_required (single select, option yes)

Vehicles and equipment use the same keys in their commercial and personal examples. Configure each column for the profile type you are sending.