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:
- Custom columns must be enabled for your team.
- 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:
- Premises
- Buildings
- Subjects of Insurance
- Legal Entities
- Vehicles
- Equipment
- Drivers
- Workers' Comp
- Liabilities
- Contacts
- Additional Interests
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.
12500or12.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-DDformat, 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.
Values are stored as sent. To keep values consistent with data entered in Wunderite, send numbers and currency amounts as JSON numbers, and dates as YYYY-MM-DD strings.
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
nullif there is no default. - A column that was cleared with
nullreturnsnull, not its default. - Select columns return option keys, not labels.
- If custom columns are not enabled for your team,
custom_columnsis not included in the response.
Request
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",
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
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",
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 staysnulland 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
hydrateflag to return every custom column value.
Request
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_columnsis 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
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, optionoffice),site_manager(short text) - Buildings:
roof_condition(single select, optiongood),last_inspected(date) - Subjects of Insurance:
valuation_source(single select, optionappraisal),reviewed_by(short text) - Homes:
pool_type(single select, optionin_ground),security_features(multiple select, optionsmonitored_alarmanddeadbolts) - Legal Entities:
entity_status(single select, optionactive),parent_company(short text) - Vehicles:
fleet_id(short text),annual_mileage(number) - Equipment:
asset_tag(short text),condition(single select, optiongood) - Drivers:
mvr_status(single select, optionclear),mvr_last_reviewed(date) - Workers' Comp:
job_category(single select, optionfield),safety_program(single select, optionyes) - Liabilities:
contract_reference(short text),hazard_rating(single select, optionmoderate) - Contacts:
preferred_contact_method(single select, optionemail),assistant_name(short text) - Additional Interests:
loan_number(short text),certificate_required(single select, optionyes)
Vehicles and equipment use the same keys in their commercial and personal examples. Configure each column for the profile type you are sending.