Custom Fields
The Custom Fields API allows you to define and manage custom data fields for your loyalty program.
Endpoints
List Custom Fields
Get all custom field definitions for your organization.
Endpoint: GET /custom-fields
Query Parameters:
type
string
No
Filter by field type
status
string
No
Filter by status (active, deleted)
Example Request:
curl -X GET "https://api.monterosa.cloud/loyalty/v1/custom-fields" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "X-Monterosa-Org-ID: YOUR_ORG_UUID"Example Response:
{
"success": true,
"data": {
"customFields": [
{
"fieldId": "field_38de5a92-fa93-47ac-a33c-84ee4fd85b97",
"orgId": "550e8400-e29b-41d4-a716-446655440000",
"name": "Favorite Team",
"key": "favorite_team",
"type": "select",
"description": "User's favorite team",
"required": true,
"options": ["Lakers", "Warriors", "Celtics", "Heat"],
"validation": null,
"defaultValue": null,
"status": "active",
"metadata": {},
"createdAt": "2025-10-05T17:41:55.745Z",
"updatedAt": "2025-10-05T17:41:55.745Z",
"createdBy": "Admin"
}
],
"count": 1
}
}Create Custom Field
Define a new custom field.
Endpoint: POST /custom-fields
Request Body:
name
string
Yes
Display name for the field
key
string
Yes
Unique key (alphanumeric with underscores)
type
string
Yes
Field type: string, number, boolean, date, select, multi-select
description
string
No
Field description
required
boolean
No
Whether the field is required (default: false)
options
array
Conditional
Required for select and multi-select types
validation
object
No
Validation rules
defaultValue
any
No
Default value for the field
status
string
No
Field status (default: active)
metadata
object
No
Additional metadata
Example Request:
curl -X POST "https://api.monterosa.cloud/loyalty/v1/custom-fields" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "X-Monterosa-Org-ID: YOUR_ORG_UUID" \
-H "Content-Type: application/json" \
-d '{
"name": "Favorite Team",
"key": "favorite_team",
"type": "select",
"description": "User favorite sports team",
"required": true,
"options": ["Lakers", "Warriors", "Celtics", "Heat"]
}'Example Response:
{
"success": true,
"data": {
"fieldId": "field_38de5a92-fa93-47ac-a33c-84ee4fd85b97",
"orgId": "550e8400-e29b-41d4-a716-446655440000",
"name": "Favorite Team",
"key": "favorite_team",
"type": "select",
"description": "User favorite sports team",
"required": true,
"options": ["Lakers", "Warriors", "Celtics", "Heat"],
"validation": null,
"defaultValue": null,
"status": "active",
"metadata": {},
"createdAt": "2025-10-05T17:41:55.745Z",
"updatedAt": "2025-10-05T17:41:55.745Z",
"createdBy": "Admin"
}
}Get Custom Field
Retrieve a specific custom field by ID.
Endpoint: GET /custom-fields/{fieldId}
Example Request:
curl -X GET "https://api.monterosa.cloud/loyalty/v1/custom-fields/field_38de5a92-fa93-47ac-a33c-84ee4fd85b97" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "X-Monterosa-Org-ID: YOUR_ORG_UUID"Example Response:
{
"success": true,
"data": {
"fieldId": "field_38de5a92-fa93-47ac-a33c-84ee4fd85b97",
"name": "Favorite Team",
"key": "favorite_team",
"type": "select",
"options": ["Lakers", "Warriors", "Celtics", "Heat"],
"status": "active"
}
}Update Custom Field
Update an existing custom field.
Endpoint: PUT /custom-fields/{fieldId}
Request Body: Same fields as Create, all optional
Example Request:
curl -X PUT "https://api.monterosa.cloud/loyalty/v1/custom-fields/field_38de5a92-fa93-47ac-a33c-84ee4fd85b97" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "X-Monterosa-Org-ID: YOUR_ORG_UUID" \
-H "Content-Type: application/json" \
-d '{
"options": ["Lakers", "Warriors", "Celtics", "Heat", "Bulls"]
}'Example Response:
{
"success": true,
"data": {
"fieldId": "field_38de5a92-fa93-47ac-a33c-84ee4fd85b97",
"name": "Favorite Team",
"options": ["Lakers", "Warriors", "Celtics", "Heat", "Bulls"],
"updatedAt": "2025-10-05T18:00:00.000Z",
"updatedBy": "Admin"
}
}Delete Custom Field
Soft delete a custom field. The field is marked as deleted but not removed from the database.
Endpoint: DELETE /custom-fields/{fieldId}
Example Request:
curl -X DELETE "https://api.monterosa.cloud/loyalty/v1/custom-fields/field_38de5a92-fa93-47ac-a33c-84ee4fd85b97" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "X-Monterosa-Org-ID: YOUR_ORG_UUID"Example Response:
{
"success": true,
"data": {
"message": "Custom field deleted successfully"
}
}Field Types
string
Text values of any length.
number
Numeric values (integers or decimals).
boolean
True/false values.
date
ISO 8601 formatted date strings.
select
Single selection from predefined options. Requires options array.
multi-select
Multiple selections from predefined options. Requires options array.
Validation Rules
Custom validation rules can be defined in the validation object:
{
"validation": {
"min": 0,
"max": 100,
"pattern": "^[A-Z]{2}$",
"minLength": 2,
"maxLength": 50
}
}Error Responses
400 Bad Request:
{
"success": false,
"error": {
"message": "Validation failed",
"details": {
"errors": [
"key is required and must be alphanumeric with underscores only",
"options array is required for select and multi-select types"
]
}
}
}404 Not Found:
{
"success": false,
"error": {
"message": "Custom field not found"
}
}Best Practices
Key Naming: Use lowercase with underscores (e.g.,
favorite_team,birth_date)Required Fields: Carefully consider which fields to mark as required
Validation: Define validation rules to ensure data quality
Soft Deletes: Deleted fields are preserved for data integrity
Options: Keep select option lists manageable (< 50 options)
Last updated

