Custom Fields
Read your custom field definitions, and choose which items a booking or participant question is asked for.
Endpointโ
GET /v1/settings/custom-fields
Authenticationโ
Requires an API key with the settings:read scope.
Query Parametersโ
| Parameter | Type | Default | Description |
|---|---|---|---|
model | string | - | Filter by model type: booking, booking_participant, product, experience, staff, customer, quote |
product_ids[] | integer[] | - | Only return the booking and booking_participant fields asked for a booking holding these rentals. Other models are returned unfiltered. |
experience_ids[] | integer[] | - | Same, for experiences. Pass both to match a booking that holds rentals and experiences. |
Responseโ
Success (200 OK)โ
{
"data": [
{
"id": 1,
"model": "booking",
"label": "License Number",
"field_type": "text",
"is_required": true,
"show_in_pos": true,
"show_for": "product-category",
"show_for_ids": [4, 7],
"sort_order": 1,
"created_at": "2025-01-01T00:00:00+00:00",
"updated_at": "2025-01-01T00:00:00+00:00"
},
{
"id": 2,
"model": "product",
"label": "Serial Number",
"field_type": "text",
"is_required": false,
"show_in_pos": true,
"show_for": null,
"show_for_ids": null,
"sort_order": 1,
"created_at": "2025-01-01T00:00:00+00:00",
"updated_at": "2025-01-01T00:00:00+00:00"
},
{
"id": 3,
"model": "customer",
"label": "Member Since",
"field_type": "date",
"is_required": false,
"sort_order": 1,
"created_at": "2025-01-01T00:00:00+00:00",
"updated_at": "2025-01-01T00:00:00+00:00"
}
],
"meta": {
"request_id": "req_abc123",
"timestamp": "2026-01-15T12:00:00+00:00"
}
}
Response Fieldsโ
| Field | Type | Description |
|---|---|---|
id | integer | Unique identifier |
model | string | Model type this field applies to |
label | string | Display label for the field |
field_type | string | Field input type |
is_required | boolean | Whether the field is required |
show_in_pos | boolean | For booking and booking_participant fields: when false, the field is collected only on the customer-facing booking widget and is hidden from staff-facing surfaces (POS and the mobile app). Always true for other models. |
show_for | string or null | For booking and booking_participant fields: which items the question is asked for (see Show for). null for other models, which are always asked. |
show_for_ids | integer[] or null | The rentals, experiences or categories picked when show_for is a specific choice. Empty for the all choices. |
sort_order | integer | Display order |
created_at | string | ISO 8601 datetime |
updated_at | string | ISO 8601 datetime |
Model Typesโ
| Model | Description |
|---|---|
booking | Fields for bookings |
booking_participant | Per-participant fields (e.g. t-shirt size, age confirmation) |
product | Fields for products |
experience | Fields for experiences |
staff | Fields for staff members |
customer | Fields for customers |
Field Typesโ
| Type | Description |
|---|---|
text | Single-line text input |
textarea | Multi-line text input |
number | Numeric input |
date | Date picker |
datetime | Date and time picker |
Show forโ
A booking or booking_participant field is asked only when the booking holds at least one item it covers. Fields created before this setting existed are all.
| Value | Asked when the booking has |
|---|---|
all | Anything, including store-only and service bookings |
all-products | Any rental |
all-experiences | Any experience |
product-category | A rental in one of the show_for_ids categories, or in a subcategory of one |
product | One of the show_for_ids rentals |
experience-category | An experience in one of the show_for_ids categories, or in a subcategory of one |
experience | One of the show_for_ids experiences |
A required field is only required on bookings it is asked for. A booking keeps showing any answer it already holds, even if its items change later.
Update Show forโ
PATCH /v1/settings/custom-fields/{id}
Requires an API key with the settings:write scope. Only booking and booking_participant fields accept it.
| Field | Type | Description |
|---|---|---|
show_for | string | One of the Show for values. Left out, the current choice is kept. |
show_for_ids | integer[] | The items picked for a specific choice. Required, with at least one of your own ids, when show_for is a specific choice. |
curl -X PATCH "https://app.equipdash.com/api/v1/settings/custom-fields/1" \
-H "Authorization: Bearer eqd_live_abc123xyz789..." \
-H "Content-Type: application/json" \
-d '{"show_for": "product-category", "show_for_ids": [4, 7]}'
Returns the updated field in the same shape as the list above. A specific choice with no valid ids returns 422 and changes nothing.
Custom Field Valuesโ
Custom field values are included in the response when retrieving individual resources (products, experiences, bookings, customers, staff). See the respective endpoint documentation for details.
Errorsโ
| Status | Code | Description |
|---|---|---|
| 401 | authentication_required | No API key provided |
| 401 | invalid_api_key | Invalid API key |
| 403 | insufficient_scope | API key lacks settings:read (or settings:write for PATCH) scope |
| 404 | not_found | PATCH on a field that is not yours |
| 422 | validation_error | Unknown show_for, a non-booking field, or a specific choice with nothing picked |
Example Requestsโ
Get all custom fields:
curl -X GET "https://app.equipdash.com/api/v1/settings/custom-fields" \
-H "Authorization: Bearer eqd_live_abc123xyz789..."
Get the booking questions for a booking with rental 12 and experience 3:
curl -X GET "https://app.equipdash.com/api/v1/settings/custom-fields?model=booking&product_ids[]=12&experience_ids[]=3" \
-H "Authorization: Bearer eqd_live_abc123xyz789..."
Get custom fields for products only:
curl -X GET "https://app.equipdash.com/api/v1/settings/custom-fields?model=product" \
-H "Authorization: Bearer eqd_live_abc123xyz789..."