

# **AIFITAPP**

**FRONTEND GUIDE FOR AI CODING AGENTS - PART 7 - AiCoach Service**

This document is a part of a REST API guide for the aifitapp project.
It is designed for AI agents that will generate frontend code to consume the project’s backend.

This document provides extensive instruction for the usage of aiCoach

## Service Access

AiCoach service management is handled through service specific base urls.

AiCoach  service may be deployed to the preview server, staging server, or production server. Therefore,it has 3 access URLs.
The frontend application must support all deployment environments during development, and the user should be able to select the target API server on the login page (already handled in first part.).

For the aiCoach service, the base URLs are:

* **Preview:** `https://appaili.prw.mindbricks.com/aicoach-api`
* **Staging:** `https://appaili-stage.mindbricks.co/aicoach-api`
* **Production:** `https://appaili.mindbricks.co/aicoach-api`


## Scope

**AiCoach Service Description**

AI-powered fitness coaching service that generates personalized evidence-based training programs and nutrition plans, manages chatbowt interactions with full validation chains, handles dynamic program modifications via AI tool calls, tracks weaight measurements, enforces moderation and quotas, and provides admin endpoints for moderation history and usage analytics.a

AiCoach service provides apis and business logic for following data objects in aifitapp application. 
Each data object may be either a central domain of the application data structure or a related helper data object for a central concept.
Note that data object concept is equal to table concept in the database, in the service database each data object is represented as a db table scheme and the object instances as table rows.  


**`chatMessage` Data Object**: Individual chat messages in coach conversations. Stores user, assistant, and system messages with content flagging status and tool call metadata.

**`coachConversation` Data Object**: Chat conversation container per user for the AI fitness coach chatbot.

**`mealPlan` Data Object**: Stores AI-generated meal plans per user including calorie targets, macro distribution, and training/rest day differentiation. Created and modified exclusively by AI tool calls.

**`moderationRecord` Data Object**: Tracks user offenses and moderation actions for accurate progressive penalty escalation and admin review.

**`planMeal` Data Object**: Individual meals within a meal plan with food details and macro breakdown. Created and modified exclusively by AI tool calls.

**`programExercise` Data Object**: Individual exercises within a training program with sets, reps, RIR targets, and progression rules. Created and modified exclusively by AI tool calls.

**`quotaConfig` Data Object**: System-wide message quota configuration. Admin-managed single record that defines message limits per period.

**`trainingProgram` Data Object**: Stores AI-generated training programs per user including split type, deload schedule, cardio guidelines, and step targets. Created and modified exclusively by AI tool calls.

**`userQuota` Data Object**: Per-user message quota consumption tracking against the system-wide quota configuration.

**`weightLog` Data Object**: User-reported weight measurements used for weekly average calculations and dynamic calorie adjustments by the AI coach.

**`banAppeals` Data Object**: 

**`additionalQuota` Data Object**: 

**`sys_additionalQuotaPayment` Data Object**: A payment storage object to store the payment life cyle of orders based on additionalQuota object. It is autocreated based on the source object&#39;s checkout config

**`sys_paymentCustomer` Data Object**: A payment storage object to store the customer values of the payment platform

**`sys_paymentMethod` Data Object**: A payment storage object to store the payment methods of the platform customers


## AiCoach Service Frontend Description By The Backend Architect

# AI Coach Service - Frontend UX Guide

## Chatbot Interface
- The chatbot is the primary interaction surface. Users send messages and receive AI-generated responses.
- Every message goes through subscription, ban, and quota validation before processing.
- If a message is flagged as off-topic, the user receives a warning. Progressive penalties apply.
- AI responses may include tool call results (program/meal plan updates) - display these as structured cards.

## Training Programs & Meal Plans
- These are read-only from the user perspective. All modifications happen through the chatbot.
- Display programs with exercises grouped by day label.
- Display meal plans with meals grouped by meal label.

## Weight Tracking
- Users report weight measurements through a simple form or chatbot.
- Display weight history as a chart with weekly averages highlighted.

## Quota Display
- Show remaining message quota to users so they can manage usage.
- When quota is exceeded, display a clear message.

## Moderation
- Suspended users see a message about their suspension with expiry time.
- Banned users cannot log in at all (handled at auth level).

## API Structure

### Object Structure of a Successful Response

When the service processes requests successfully, it wraps the requested resource(s) within a JSON envelope. This envelope includes the data and essential metadata such as configuration details and pagination information, providing context to the client.

**HTTP Status Codes:**

* **200 OK**: Returned for successful GET, LIST, UPDATE, or DELETE operations, indicating that the request was processed successfully.
* **201 Created**: Returned for CREATE operations, indicating that the resource was created successfully.

**Success Response Format:**

For successful operations, the response includes a `"status": "OK"` property, signaling that the request executed successfully. The structure of a successful response is outlined below:

```json
{
  "status":"OK",
  "statusCode": 200,   
  "elapsedMs":126,
  "ssoTime":120,
  "source": "db",
  "cacheKey": "hexCode",
  "userId": "ID",
  "sessionId": "ID",
  "requestId": "ID",
  "dataName":"products",
  "method":"GET",
  "action":"list",
  "appVersion":"Version",
  "rowCount":3,
  "products":[{},{},{}],
  "paging": {
    "pageNumber":1, 
    "pageRowCount":25, 
    "totalRowCount":3,
    "pageCount":1
  },
  "filters": [],
  "uiPermissions": []
}
```
* **`products`**: In this example, this key contains the actual response content, which may be a single object or an array of objects depending on the operation.

### Additional Data

Each API may include additional data besides the main data object, depending on the business logic of the API. These will be provided in each API’s response signature.

### Error Response

If a request encounters an issue—whether due to a logical fault or a technical problem—the service responds with a standardized JSON error structure. The HTTP status code indicates the nature of the error, using commonly recognized codes for clarity:

* **400 Bad Request**: The request was improperly formatted or contained invalid parameters.
* **401 Unauthorized**: The request lacked a valid authentication token; login is required.
* **403 Forbidden**: The current token does not grant access to the requested resource.
* **404 Not Found**: The requested resource was not found on the server.
* **500 Internal Server Error**: The server encountered an unexpected condition.

Each error response is structured to provide meaningful insight into the problem, assisting in efficient diagnosis and resolution.

```js
{
  "result": "ERR",
  "status": 400,
  "message": "errMsg_organizationIdisNotAValidID",
  "errCode": 400,
  "date": "2024-03-19T12:13:54.124Z",
  "detail": "String"
}
```


## ChatMessage Data Object

Individual chat messages in coach conversations. Stores user, assistant, and system messages with content flagging status and tool call metadata.



### ChatMessage Data Object Properties

ChatMessage data object has got following properties that are represented as table fields in the database scheme. 
These properties don't stand just for data storage, but each may have different settings to manage the business logic. 

| Property | Type | IsArray | Required | Secret | Description |
|----------|------|---------|----------|--------|-------------|
| `content` | Text | false | Yes | No | Message content |
| `conversationId` | ID | false | Yes | No | Reference to the parent conversation |
| `flagged` | Boolean | false | No | No | True if the message was detected as off-topic or abusive |
| `role` | Enum | false | Yes | No | Message sender role |
| `toolCallData` | Text | false | No | No | JSON string of tool call metadata from AI processing |
* Required properties are mandatory for creating objects and must be provided in the request body if no default value, formula or session bind is set.



### Enum Properties
Enum properties are defined with a set of allowed values, ensuring that only valid options can be assigned to them. 
The enum options value will be stored as strings in the database, 
but when a data object is created an additional property with the same name plus an idx suffix will be created, which will hold the index of the selected enum option.
You can use the {fieldName_idx} property to sort by the enum value or when your enum options represent a hiyerarchy of values.
In the frontend input components, enum type properties should only accept values from an option component that lists the enum options.

- **role**: [user, assistant, system]


### Relation Properties

`conversationId`

Mindbricks supports relations between data objects, allowing you to define how objects are linked together.
The relations may reference to a data object either in this service or in another service. Id the reference is remote, backend handles the relations through service communication or elastic search.
These relations should be respected in the frontend so that instaead of showing the related objects id, the frontend should list human readable values from other data objects.
If the relation points to another service, frontend should use the referenced service api in case it needs related data.
The relation logic is montly handled in backend so the api responses feeds the frontend about the relational data. 
In mmost cases the api response will provide the relational data as well as the main one.

In frontend, please ensure that, 

1- instaead of these relational ids you show the main human readable field of the related target data (like name),
2- if this data object needs a user input of these relational ids, you should provide a combobox with the list of possible records or (a searchbox) to select with the realted target data object main human readable field.


- **conversationId**: ID
Relation to `coachConversation`.id

The target object is a parent object, meaning that the relation is a one-to-many relationship from target to this object.

Required: Yes


### Filter Properties

`conversationId` `flagged` `role`

Filter properties are used to define parameters that can be used in query filters, allowing for dynamic data retrieval based on user input or predefined criteria.
These properties are automatically mapped as API parameters in the listing API's.

- **conversationId**: ID  has a filter named `conversationId`

- **flagged**: Boolean  has a filter named `flagged`

- **role**: Enum  has a filter named `role`


## CoachConversation Data Object

Chat conversation container per user for the AI fitness coach chatbot.



### CoachConversation Data Object Properties

CoachConversation data object has got following properties that are represented as table fields in the database scheme. 
These properties don't stand just for data storage, but each may have different settings to manage the business logic. 

| Property | Type | IsArray | Required | Secret | Description |
|----------|------|---------|----------|--------|-------------|
| `status` | Enum | false | Yes | No | Conversation status |
| `userId` | ID | false | Yes | No | Reference to the user who owns this conversation |
* Required properties are mandatory for creating objects and must be provided in the request body if no default value, formula or session bind is set.



### Enum Properties
Enum properties are defined with a set of allowed values, ensuring that only valid options can be assigned to them. 
The enum options value will be stored as strings in the database, 
but when a data object is created an additional property with the same name plus an idx suffix will be created, which will hold the index of the selected enum option.
You can use the {fieldName_idx} property to sort by the enum value or when your enum options represent a hiyerarchy of values.
In the frontend input components, enum type properties should only accept values from an option component that lists the enum options.

- **status**: [active, closed]


### Relation Properties

`userId`

Mindbricks supports relations between data objects, allowing you to define how objects are linked together.
The relations may reference to a data object either in this service or in another service. Id the reference is remote, backend handles the relations through service communication or elastic search.
These relations should be respected in the frontend so that instaead of showing the related objects id, the frontend should list human readable values from other data objects.
If the relation points to another service, frontend should use the referenced service api in case it needs related data.
The relation logic is montly handled in backend so the api responses feeds the frontend about the relational data. 
In mmost cases the api response will provide the relational data as well as the main one.

In frontend, please ensure that, 

1- instaead of these relational ids you show the main human readable field of the related target data (like name),
2- if this data object needs a user input of these relational ids, you should provide a combobox with the list of possible records or (a searchbox) to select with the realted target data object main human readable field.


- **userId**: ID
Relation to `user`.id

The target object is a parent object, meaning that the relation is a one-to-many relationship from target to this object.

Required: Yes


### Filter Properties

`status` `userId`

Filter properties are used to define parameters that can be used in query filters, allowing for dynamic data retrieval based on user input or predefined criteria.
These properties are automatically mapped as API parameters in the listing API's.

- **status**: Enum  has a filter named `status`

- **userId**: ID  has a filter named `userId`


## MealPlan Data Object

Stores AI-generated meal plans per user including calorie targets, macro distribution, and training/rest day differentiation. Created and modified exclusively by AI tool calls.



### MealPlan Data Object Properties

MealPlan data object has got following properties that are represented as table fields in the database scheme. 
These properties don't stand just for data storage, but each may have different settings to manage the business logic. 

| Property | Type | IsArray | Required | Secret | Description |
|----------|------|---------|----------|--------|-------------|
| `carbGrams` | Float | false | Yes | No | Daily carbohydrate target in grams |
| `dailyCalorieTarget` | Integer | false | Yes | No | Daily calorie target in kcal |
| `fatGrams` | Float | false | Yes | No | Daily fat target in grams |
| `notes` | Text | false | No | No | Additional AI-generated nutritional guidance |
| `proteinGrams` | Float | false | Yes | No | Daily protein target in grams |
| `restDayCalories` | Integer | false | No | No | Calorie target on rest days |
| `restDayCarbGrams` | Float | false | No | No | Carb target on rest days |
| `status` | Enum | false | Yes | No | Meal plan status |
| `trainingDayCalories` | Integer | false | No | No | Calorie target on training days |
| `trainingDayCarbGrams` | Float | false | No | No | Carb target on training days |
| `userId` | ID | false | Yes | No | Reference to the user who owns this meal plan |
* Required properties are mandatory for creating objects and must be provided in the request body if no default value, formula or session bind is set.



### Enum Properties
Enum properties are defined with a set of allowed values, ensuring that only valid options can be assigned to them. 
The enum options value will be stored as strings in the database, 
but when a data object is created an additional property with the same name plus an idx suffix will be created, which will hold the index of the selected enum option.
You can use the {fieldName_idx} property to sort by the enum value or when your enum options represent a hiyerarchy of values.
In the frontend input components, enum type properties should only accept values from an option component that lists the enum options.

- **status**: [active, archived]


### Relation Properties

`userId`

Mindbricks supports relations between data objects, allowing you to define how objects are linked together.
The relations may reference to a data object either in this service or in another service. Id the reference is remote, backend handles the relations through service communication or elastic search.
These relations should be respected in the frontend so that instaead of showing the related objects id, the frontend should list human readable values from other data objects.
If the relation points to another service, frontend should use the referenced service api in case it needs related data.
The relation logic is montly handled in backend so the api responses feeds the frontend about the relational data. 
In mmost cases the api response will provide the relational data as well as the main one.

In frontend, please ensure that, 

1- instaead of these relational ids you show the main human readable field of the related target data (like name),
2- if this data object needs a user input of these relational ids, you should provide a combobox with the list of possible records or (a searchbox) to select with the realted target data object main human readable field.


- **userId**: ID
Relation to `user`.id

The target object is a parent object, meaning that the relation is a one-to-many relationship from target to this object.

Required: Yes


### Filter Properties

`status` `userId`

Filter properties are used to define parameters that can be used in query filters, allowing for dynamic data retrieval based on user input or predefined criteria.
These properties are automatically mapped as API parameters in the listing API's.

- **status**: Enum  has a filter named `status`

- **userId**: ID  has a filter named `userId`


## ModerationRecord Data Object

Tracks user offenses and moderation actions for accurate progressive penalty escalation and admin review.



### ModerationRecord Data Object Properties

ModerationRecord data object has got following properties that are represented as table fields in the database scheme. 
These properties don't stand just for data storage, but each may have different settings to manage the business logic. 

| Property | Type | IsArray | Required | Secret | Description |
|----------|------|---------|----------|--------|-------------|
| `action` | Enum | false | Yes | No | Moderation action taken |
| `offenseType` | String | false | Yes | No | Description of the violation |
| `reason` | Text | false | No | No | Detailed reason for the moderation action |
| `suspensionExpiresAt` | Date | false | No | No | When a temporary suspension ends (null for lifetime bans and reversals) |
| `userId` | ID | false | Yes | No | Reference to the user who was moderated |
| `content` | String | false | Yes | No |  |
* Required properties are mandatory for creating objects and must be provided in the request body if no default value, formula or session bind is set.



### Enum Properties
Enum properties are defined with a set of allowed values, ensuring that only valid options can be assigned to them. 
The enum options value will be stored as strings in the database, 
but when a data object is created an additional property with the same name plus an idx suffix will be created, which will hold the index of the selected enum option.
You can use the {fieldName_idx} property to sort by the enum value or when your enum options represent a hiyerarchy of values.
In the frontend input components, enum type properties should only accept values from an option component that lists the enum options.

- **action**: [suspension24h, suspension1week, lifetimeBan, banReversal]


### Relation Properties

`userId`

Mindbricks supports relations between data objects, allowing you to define how objects are linked together.
The relations may reference to a data object either in this service or in another service. Id the reference is remote, backend handles the relations through service communication or elastic search.
These relations should be respected in the frontend so that instaead of showing the related objects id, the frontend should list human readable values from other data objects.
If the relation points to another service, frontend should use the referenced service api in case it needs related data.
The relation logic is montly handled in backend so the api responses feeds the frontend about the relational data. 
In mmost cases the api response will provide the relational data as well as the main one.

In frontend, please ensure that, 

1- instaead of these relational ids you show the main human readable field of the related target data (like name),
2- if this data object needs a user input of these relational ids, you should provide a combobox with the list of possible records or (a searchbox) to select with the realted target data object main human readable field.


- **userId**: ID
Relation to `user`.id

The target object is a parent object, meaning that the relation is a one-to-many relationship from target to this object.

Required: Yes


### Filter Properties

`action` `userId`

Filter properties are used to define parameters that can be used in query filters, allowing for dynamic data retrieval based on user input or predefined criteria.
These properties are automatically mapped as API parameters in the listing API's.

- **action**: Enum  has a filter named `action`

- **userId**: ID  has a filter named `userId`


## PlanMeal Data Object

Individual meals within a meal plan with food details and macro breakdown. Created and modified exclusively by AI tool calls.



### PlanMeal Data Object Properties

PlanMeal data object has got following properties that are represented as table fields in the database scheme. 
These properties don't stand just for data storage, but each may have different settings to manage the business logic. 

| Property | Type | IsArray | Required | Secret | Description |
|----------|------|---------|----------|--------|-------------|
| `carbs` | Float | false | Yes | No | Carb grams for this meal |
| `fat` | Float | false | Yes | No | Fat grams for this meal |
| `foods` | Text | false | Yes | No | Food items and quantities description |
| `mealLabel` | String | false | Yes | No | Meal label (e.g. breakfast, lunch, dinner, snack) |
| `mealPlanId` | ID | false | Yes | No | Reference to the parent meal plan |
| `protein` | Float | false | Yes | No | Protein grams for this meal |
| `sortOrder` | Integer | false | Yes | No | Display sort order within the meal plan |
| `totalCalories` | Integer | false | Yes | No | Total calories for this meal |
* Required properties are mandatory for creating objects and must be provided in the request body if no default value, formula or session bind is set.




### Relation Properties

`mealPlanId`

Mindbricks supports relations between data objects, allowing you to define how objects are linked together.
The relations may reference to a data object either in this service or in another service. Id the reference is remote, backend handles the relations through service communication or elastic search.
These relations should be respected in the frontend so that instaead of showing the related objects id, the frontend should list human readable values from other data objects.
If the relation points to another service, frontend should use the referenced service api in case it needs related data.
The relation logic is montly handled in backend so the api responses feeds the frontend about the relational data. 
In mmost cases the api response will provide the relational data as well as the main one.

In frontend, please ensure that, 

1- instaead of these relational ids you show the main human readable field of the related target data (like name),
2- if this data object needs a user input of these relational ids, you should provide a combobox with the list of possible records or (a searchbox) to select with the realted target data object main human readable field.


- **mealPlanId**: ID
Relation to `mealPlan`.id

The target object is a parent object, meaning that the relation is a one-to-many relationship from target to this object.

Required: Yes


### Filter Properties

`mealPlanId`

Filter properties are used to define parameters that can be used in query filters, allowing for dynamic data retrieval based on user input or predefined criteria.
These properties are automatically mapped as API parameters in the listing API's.

- **mealPlanId**: ID  has a filter named `mealPlanId`


## ProgramExercise Data Object

Individual exercises within a training program with sets, reps, RIR targets, and progression rules. Created and modified exclusively by AI tool calls.



### ProgramExercise Data Object Properties

ProgramExercise data object has got following properties that are represented as table fields in the database scheme. 
These properties don't stand just for data storage, but each may have different settings to manage the business logic. 

| Property | Type | IsArray | Required | Secret | Description |
|----------|------|---------|----------|--------|-------------|
| `dayLabel` | String | false | Yes | No | Training day label (e.g. pushDay, upperA, legDay) |
| `exerciseName` | String | false | Yes | No | Name of the exercise |
| `movementType` | Enum | false | Yes | No | Movement type classification |
| `muscleGroup` | String | false | Yes | No | Target muscle group |
| `progressionRule` | Text | false | No | No | Progression instructions (e.g. double progression model) |
| `repMax` | Integer | false | Yes | No | Maximum rep target |
| `repMin` | Integer | false | Yes | No | Minimum rep target |
| `rirTarget` | Integer | false | Yes | No | Reps In Reserve target (0-3) |
| `sets` | Integer | false | Yes | No | Number of working sets |
| `sortOrder` | Integer | false | Yes | No | Display sort order within the training day |
| `trainingProgramId` | ID | false | Yes | No | Reference to the parent training program |
* Required properties are mandatory for creating objects and must be provided in the request body if no default value, formula or session bind is set.



### Enum Properties
Enum properties are defined with a set of allowed values, ensuring that only valid options can be assigned to them. 
The enum options value will be stored as strings in the database, 
but when a data object is created an additional property with the same name plus an idx suffix will be created, which will hold the index of the selected enum option.
You can use the {fieldName_idx} property to sort by the enum value or when your enum options represent a hiyerarchy of values.
In the frontend input components, enum type properties should only accept values from an option component that lists the enum options.

- **movementType**: [lengthened, shortened, compound]


### Relation Properties

`trainingProgramId`

Mindbricks supports relations between data objects, allowing you to define how objects are linked together.
The relations may reference to a data object either in this service or in another service. Id the reference is remote, backend handles the relations through service communication or elastic search.
These relations should be respected in the frontend so that instaead of showing the related objects id, the frontend should list human readable values from other data objects.
If the relation points to another service, frontend should use the referenced service api in case it needs related data.
The relation logic is montly handled in backend so the api responses feeds the frontend about the relational data. 
In mmost cases the api response will provide the relational data as well as the main one.

In frontend, please ensure that, 

1- instaead of these relational ids you show the main human readable field of the related target data (like name),
2- if this data object needs a user input of these relational ids, you should provide a combobox with the list of possible records or (a searchbox) to select with the realted target data object main human readable field.


- **trainingProgramId**: ID
Relation to `trainingProgram`.id

The target object is a parent object, meaning that the relation is a one-to-many relationship from target to this object.

Required: Yes


### Filter Properties

`dayLabel` `muscleGroup` `trainingProgramId`

Filter properties are used to define parameters that can be used in query filters, allowing for dynamic data retrieval based on user input or predefined criteria.
These properties are automatically mapped as API parameters in the listing API's.

- **dayLabel**: String  has a filter named `dayLabel`

- **muscleGroup**: String  has a filter named `muscleGroup`

- **trainingProgramId**: ID  has a filter named `trainingProgramId`


## QuotaConfig Data Object

System-wide message quota configuration. Admin-managed single record that defines message limits per period.



### QuotaConfig Data Object Properties

QuotaConfig data object has got following properties that are represented as table fields in the database scheme. 
These properties don't stand just for data storage, but each may have different settings to manage the business logic. 

| Property | Type | IsArray | Required | Secret | Description |
|----------|------|---------|----------|--------|-------------|
| `quotaLimit` | Integer | false | Yes | No | Maximum messages allowed per period |
| `quotaPeriod` | Enum | false | Yes | No | Period over which the quota is measured |
* Required properties are mandatory for creating objects and must be provided in the request body if no default value, formula or session bind is set.



### Enum Properties
Enum properties are defined with a set of allowed values, ensuring that only valid options can be assigned to them. 
The enum options value will be stored as strings in the database, 
but when a data object is created an additional property with the same name plus an idx suffix will be created, which will hold the index of the selected enum option.
You can use the {fieldName_idx} property to sort by the enum value or when your enum options represent a hiyerarchy of values.
In the frontend input components, enum type properties should only accept values from an option component that lists the enum options.

- **quotaPeriod**: [daily, weekly, monthly]




## TrainingProgram Data Object

Stores AI-generated training programs per user including split type, deload schedule, cardio guidelines, and step targets. Created and modified exclusively by AI tool calls.



### TrainingProgram Data Object Properties

TrainingProgram data object has got following properties that are represented as table fields in the database scheme. 
These properties don't stand just for data storage, but each may have different settings to manage the business logic. 

| Property | Type | IsArray | Required | Secret | Description |
|----------|------|---------|----------|--------|-------------|
| `cardioDurationMinutes` | Integer | false | No | No | Recommended cardio duration in minutes |
| `cardioFrequencyPerWeek` | Integer | false | No | No | Recommended cardio sessions per week |
| `cardioType` | String | false | No | No | Type of cardio recommended (e.g. zone2) |
| `dailyStepTarget` | Integer | false | No | No | Daily step target for NEAT (7000-12000) |
| `deloadIntervalWeeks` | Integer | false | No | No | Weeks between deload periods, typically 6-8 |
| `notes` | Text | false | No | No | Additional AI-generated notes and guidance |
| `splitType` | String | false | Yes | No | Training split type (e.g. fullBody, upperLower, pushPullLegs) |
| `status` | Enum | false | Yes | No | Program status |
| `userId` | ID | false | Yes | No | Reference to the user who owns this training program |
* Required properties are mandatory for creating objects and must be provided in the request body if no default value, formula or session bind is set.



### Enum Properties
Enum properties are defined with a set of allowed values, ensuring that only valid options can be assigned to them. 
The enum options value will be stored as strings in the database, 
but when a data object is created an additional property with the same name plus an idx suffix will be created, which will hold the index of the selected enum option.
You can use the {fieldName_idx} property to sort by the enum value or when your enum options represent a hiyerarchy of values.
In the frontend input components, enum type properties should only accept values from an option component that lists the enum options.

- **status**: [active, archived]


### Relation Properties

`userId`

Mindbricks supports relations between data objects, allowing you to define how objects are linked together.
The relations may reference to a data object either in this service or in another service. Id the reference is remote, backend handles the relations through service communication or elastic search.
These relations should be respected in the frontend so that instaead of showing the related objects id, the frontend should list human readable values from other data objects.
If the relation points to another service, frontend should use the referenced service api in case it needs related data.
The relation logic is montly handled in backend so the api responses feeds the frontend about the relational data. 
In mmost cases the api response will provide the relational data as well as the main one.

In frontend, please ensure that, 

1- instaead of these relational ids you show the main human readable field of the related target data (like name),
2- if this data object needs a user input of these relational ids, you should provide a combobox with the list of possible records or (a searchbox) to select with the realted target data object main human readable field.


- **userId**: ID
Relation to `user`.id

The target object is a parent object, meaning that the relation is a one-to-many relationship from target to this object.

Required: Yes


### Filter Properties

`status` `userId`

Filter properties are used to define parameters that can be used in query filters, allowing for dynamic data retrieval based on user input or predefined criteria.
These properties are automatically mapped as API parameters in the listing API's.

- **status**: Enum  has a filter named `status`

- **userId**: ID  has a filter named `userId`


## UserQuota Data Object

Per-user message quota consumption tracking against the system-wide quota configuration.



### UserQuota Data Object Properties

UserQuota data object has got following properties that are represented as table fields in the database scheme. 
These properties don't stand just for data storage, but each may have different settings to manage the business logic. 

| Property | Type | IsArray | Required | Secret | Description |
|----------|------|---------|----------|--------|-------------|
| `messageCount` | Integer | false | Yes | No | Number of messages consumed in the current period |
| `periodEnd` | Date | false | Yes | No | End of the current quota period |
| `periodStart` | Date | false | Yes | No | Start of the current quota period |
| `userId` | ID | false | Yes | No | Reference to the user whose quota is being tracked |
* Required properties are mandatory for creating objects and must be provided in the request body if no default value, formula or session bind is set.




### Relation Properties

`userId`

Mindbricks supports relations between data objects, allowing you to define how objects are linked together.
The relations may reference to a data object either in this service or in another service. Id the reference is remote, backend handles the relations through service communication or elastic search.
These relations should be respected in the frontend so that instaead of showing the related objects id, the frontend should list human readable values from other data objects.
If the relation points to another service, frontend should use the referenced service api in case it needs related data.
The relation logic is montly handled in backend so the api responses feeds the frontend about the relational data. 
In mmost cases the api response will provide the relational data as well as the main one.

In frontend, please ensure that, 

1- instaead of these relational ids you show the main human readable field of the related target data (like name),
2- if this data object needs a user input of these relational ids, you should provide a combobox with the list of possible records or (a searchbox) to select with the realted target data object main human readable field.


- **userId**: ID
Relation to `user`.id

The target object is a parent object, meaning that the relation is a one-to-many relationship from target to this object.

Required: Yes


### Filter Properties

`userId`

Filter properties are used to define parameters that can be used in query filters, allowing for dynamic data retrieval based on user input or predefined criteria.
These properties are automatically mapped as API parameters in the listing API's.

- **userId**: ID  has a filter named `userId`


## WeightLog Data Object

User-reported weight measurements used for weekly average calculations and dynamic calorie adjustments by the AI coach.



### WeightLog Data Object Properties

WeightLog data object has got following properties that are represented as table fields in the database scheme. 
These properties don't stand just for data storage, but each may have different settings to manage the business logic. 

| Property | Type | IsArray | Required | Secret | Description |
|----------|------|---------|----------|--------|-------------|
| `measuredAt` | Date | false | Yes | No | Date and time of measurement |
| `userId` | ID | false | Yes | No | Reference to the user who recorded this weight |
| `weightKg` | Float | false | Yes | No | Body weight in kilograms |
* Required properties are mandatory for creating objects and must be provided in the request body if no default value, formula or session bind is set.




### Relation Properties

`userId`

Mindbricks supports relations between data objects, allowing you to define how objects are linked together.
The relations may reference to a data object either in this service or in another service. Id the reference is remote, backend handles the relations through service communication or elastic search.
These relations should be respected in the frontend so that instaead of showing the related objects id, the frontend should list human readable values from other data objects.
If the relation points to another service, frontend should use the referenced service api in case it needs related data.
The relation logic is montly handled in backend so the api responses feeds the frontend about the relational data. 
In mmost cases the api response will provide the relational data as well as the main one.

In frontend, please ensure that, 

1- instaead of these relational ids you show the main human readable field of the related target data (like name),
2- if this data object needs a user input of these relational ids, you should provide a combobox with the list of possible records or (a searchbox) to select with the realted target data object main human readable field.


- **userId**: ID
Relation to `user`.id

The target object is a parent object, meaning that the relation is a one-to-many relationship from target to this object.

Required: Yes



## BanAppeals Data Object





### BanAppeals Data Object Properties

BanAppeals data object has got following properties that are represented as table fields in the database scheme. 
These properties don't stand just for data storage, but each may have different settings to manage the business logic. 

| Property | Type | IsArray | Required | Secret | Description |
|----------|------|---------|----------|--------|-------------|
| `moderationRecordId` | ID | false | Yes | No | id of the mod record |
| `userId` | ID | false | Yes | No |  |
| `appealReason` | String | false | Yes | No |  |
| `status` | Enum | false | Yes | No |  |
* Required properties are mandatory for creating objects and must be provided in the request body if no default value, formula or session bind is set.



### Enum Properties
Enum properties are defined with a set of allowed values, ensuring that only valid options can be assigned to them. 
The enum options value will be stored as strings in the database, 
but when a data object is created an additional property with the same name plus an idx suffix will be created, which will hold the index of the selected enum option.
You can use the {fieldName_idx} property to sort by the enum value or when your enum options represent a hiyerarchy of values.
In the frontend input components, enum type properties should only accept values from an option component that lists the enum options.

- **status**: [pending, approved, rejected]


### Relation Properties

`moderationRecordId`

Mindbricks supports relations between data objects, allowing you to define how objects are linked together.
The relations may reference to a data object either in this service or in another service. Id the reference is remote, backend handles the relations through service communication or elastic search.
These relations should be respected in the frontend so that instaead of showing the related objects id, the frontend should list human readable values from other data objects.
If the relation points to another service, frontend should use the referenced service api in case it needs related data.
The relation logic is montly handled in backend so the api responses feeds the frontend about the relational data. 
In mmost cases the api response will provide the relational data as well as the main one.

In frontend, please ensure that, 

1- instaead of these relational ids you show the main human readable field of the related target data (like name),
2- if this data object needs a user input of these relational ids, you should provide a combobox with the list of possible records or (a searchbox) to select with the realted target data object main human readable field.


- **moderationRecordId**: ID
Relation to `moderationRecord`.id

The target object is a parent object, meaning that the relation is a one-to-many relationship from target to this object.

Required: Yes



## AdditionalQuota Data Object





### AdditionalQuota Data Object Properties

AdditionalQuota data object has got following properties that are represented as table fields in the database scheme. 
These properties don't stand just for data storage, but each may have different settings to manage the business logic. 

| Property | Type | IsArray | Required | Secret | Description |
|----------|------|---------|----------|--------|-------------|
| `userId` | String | false | Yes | No |  |
| `additionalMessage` | Integer | false | Yes | No |  |
| `status` | Enum | false | Yes | No |  |
| `currency` | String | false | Yes | No |  |
| `pricePaid` | Integer | false | Yes | No |  |
| `statusUpdatedAt` | Date | false | No | No |  |
| `activatedAt` | Date | false | No | No |  |
| `cancelledAt` | Date | false | No | No |  |
| `periodEnd` | Date | false | No | No |  |
| `periodStart` | Date | false | No | No |  |
| `paymentConfirmation` | Enum | false | Yes | No | An automatic property that is used to check the confirmed status of the payment set by webhooks. |
* Required properties are mandatory for creating objects and must be provided in the request body if no default value, formula or session bind is set.



### Enum Properties
Enum properties are defined with a set of allowed values, ensuring that only valid options can be assigned to them. 
The enum options value will be stored as strings in the database, 
but when a data object is created an additional property with the same name plus an idx suffix will be created, which will hold the index of the selected enum option.
You can use the {fieldName_idx} property to sort by the enum value or when your enum options represent a hiyerarchy of values.
In the frontend input components, enum type properties should only accept values from an option component that lists the enum options.

- **status**: [pending, cancelled, failed, active, expired]

- **paymentConfirmation**: [pending, processing, paid, canceled]



### Filter Properties

`paymentConfirmation`

Filter properties are used to define parameters that can be used in query filters, allowing for dynamic data retrieval based on user input or predefined criteria.
These properties are automatically mapped as API parameters in the listing API's.

- **paymentConfirmation**: Enum  has a filter named `paymentConfirmation`


## Sys_additionalQuotaPayment Data Object

A payment storage object to store the payment life cyle of orders based on additionalQuota object. It is autocreated based on the source object&#39;s checkout config



### Sys_additionalQuotaPayment Data Object Properties

Sys_additionalQuotaPayment data object has got following properties that are represented as table fields in the database scheme. 
These properties don't stand just for data storage, but each may have different settings to manage the business logic. 

| Property | Type | IsArray | Required | Secret | Description |
|----------|------|---------|----------|--------|-------------|
| `ownerId` | ID | false | No | No |  An ID value to represent owner user who created the order |
| `orderId` | ID | false | Yes | No | an ID value to represent the orderId which is the ID parameter of the source additionalQuota object |
| `paymentId` | String | false | Yes | No | A String value to represent the paymentId which is generated on the Stripe gateway. This id may represent different objects due to the payment gateway and the chosen flow type |
| `paymentStatus` | String | false | Yes | No | A string value to represent the payment status which belongs to the lifecyle of a Stripe payment. |
| `statusLiteral` | String | false | Yes | No | A string value to represent the logical payment status which belongs to the application lifecycle itself. |
| `redirectUrl` | String | false | No | No | A string value to represent return page of the frontend to show the result of the payment, this is used when the callback is made to server not the client. |
* Required properties are mandatory for creating objects and must be provided in the request body if no default value, formula or session bind is set.





### Filter Properties

`ownerId` `orderId` `paymentId` `paymentStatus` `statusLiteral` `redirectUrl`

Filter properties are used to define parameters that can be used in query filters, allowing for dynamic data retrieval based on user input or predefined criteria.
These properties are automatically mapped as API parameters in the listing API's.

- **ownerId**: ID  has a filter named `ownerId`

- **orderId**: ID  has a filter named `orderId`

- **paymentId**: String  has a filter named `paymentId`

- **paymentStatus**: String  has a filter named `paymentStatus`

- **statusLiteral**: String  has a filter named `statusLiteral`

- **redirectUrl**: String  has a filter named `redirectUrl`


## Sys_paymentCustomer Data Object

A payment storage object to store the customer values of the payment platform



### Sys_paymentCustomer Data Object Properties

Sys_paymentCustomer data object has got following properties that are represented as table fields in the database scheme. 
These properties don't stand just for data storage, but each may have different settings to manage the business logic. 

| Property | Type | IsArray | Required | Secret | Description |
|----------|------|---------|----------|--------|-------------|
| `userId` | ID | false | No | No |  An ID value to represent the user who is created as a stripe customer |
| `customerId` | String | false | Yes | No | A string value to represent the customer id which is generated on the Stripe gateway. This id is used to represent the customer in the Stripe gateway |
| `platform` | String | false | Yes | No | A String value to represent payment platform which is used to make the payment. It is stripe as default. It will be used to distinguesh the payment gateways in the future. |
* Required properties are mandatory for creating objects and must be provided in the request body if no default value, formula or session bind is set.





### Filter Properties

`userId` `customerId` `platform`

Filter properties are used to define parameters that can be used in query filters, allowing for dynamic data retrieval based on user input or predefined criteria.
These properties are automatically mapped as API parameters in the listing API's.

- **userId**: ID  has a filter named `userId`

- **customerId**: String  has a filter named `customerId`

- **platform**: String  has a filter named `platform`


## Sys_paymentMethod Data Object

A payment storage object to store the payment methods of the platform customers



### Sys_paymentMethod Data Object Properties

Sys_paymentMethod data object has got following properties that are represented as table fields in the database scheme. 
These properties don't stand just for data storage, but each may have different settings to manage the business logic. 

| Property | Type | IsArray | Required | Secret | Description |
|----------|------|---------|----------|--------|-------------|
| `paymentMethodId` | String | false | Yes | No | A string value to represent the id of the payment method on the payment platform. |
| `userId` | ID | false | Yes | No |  An ID value to represent the user who owns the payment method |
| `customerId` | String | false | Yes | No | A string value to represent the customer id which is generated on the payment gateway. |
| `cardHolderName` | String | false | No | No | A string value to represent the name of the card holder. It can be different than the registered customer. |
| `cardHolderZip` | String | false | No | No | A string value to represent the zip code of the card holder. It is used for address verification in specific countries. |
| `platform` | String | false | Yes | No | A String value to represent payment platform which teh paymentMethod belongs. It is stripe as default. It will be used to distinguesh the payment gateways in the future. |
| `cardInfo` | Object | false | Yes | No | A Json value to store the card details of the payment method. |
* Required properties are mandatory for creating objects and must be provided in the request body if no default value, formula or session bind is set.





### Filter Properties

`paymentMethodId` `userId` `customerId` `cardHolderName` `cardHolderZip` `platform` `cardInfo`

Filter properties are used to define parameters that can be used in query filters, allowing for dynamic data retrieval based on user input or predefined criteria.
These properties are automatically mapped as API parameters in the listing API's.

- **paymentMethodId**: String  has a filter named `paymentMethodId`

- **userId**: ID  has a filter named `userId`

- **customerId**: String  has a filter named `customerId`

- **cardHolderName**: String  has a filter named `cardHolderName`

- **cardHolderZip**: String  has a filter named `cardHolderZip`

- **platform**: String  has a filter named `platform`

- **cardInfo**: Object  has a filter named `cardInfo`



## Default CRUD APIs

For each data object, the backend architect may designate **default APIs** for standard operations (create, update, delete, get, list). These are the APIs that frontend CRUD forms and AI agents should use for basic record management. If no default is explicitly set (`isDefaultApi`), the frontend generator auto-discovers the most general API for each operation.

### ChatMessage Default APIs

| Operation | API Name | Route | Explicitly Set |
|-----------|----------|-------|----------------|
| Create | `createChatMessage` | `/v1/chatmessages` | Yes |
| Update | _none_ | - | Auto |
| Delete | _none_ | - | Auto |
| Get | `getChatMessage` | `/v1/chatmessages/:chatMessageId` | Yes |
| List | `listChatMessages` | `/v1/chatmessages` | Yes |
### CoachConversation Default APIs

| Operation | API Name | Route | Explicitly Set |
|-----------|----------|-------|----------------|
| Create | `createCoachConversation` | `/v1/coachconversations` | Yes |
| Update | _none_ | - | Auto |
| Delete | _none_ | - | Auto |
| Get | `getCoachConversation` | `/v1/coachconversations/:coachConversationId` | Yes |
| List | `listCoachConversations` | `/v1/coachconversations` | Yes |
### MealPlan Default APIs

| Operation | API Name | Route | Explicitly Set |
|-----------|----------|-------|----------------|
| Create | _none_ | - | Auto |
| Update | _none_ | - | Auto |
| Delete | `deletemealplan` | `/v1/deletemealplan/:mealPlanId` | Auto |
| Get | `getMealPlan` | `/v1/mealplans/:mealPlanId` | Yes |
| List | `listMealPlans` | `/v1/mealplans` | Yes |
### ModerationRecord Default APIs

| Operation | API Name | Route | Explicitly Set |
|-----------|----------|-------|----------------|
| Create | _none_ | - | Auto |
| Update | `updateModerationRecord` | `/v1/moderationrecords/:moderationRecordId` | Auto |
| Delete | `deleteModerationRecord` | `/v1/moderationrecords/:moderationRecordId` | Auto |
| Get | `getModerationRecord` | `/v1/moderationrecords/:moderationRecordId` | Yes |
| List | `listModerationRecords` | `/v1/moderationrecords` | Yes |
### PlanMeal Default APIs

**Display Label Property:** `mealLabel` — Use this property as the human-readable label when displaying records of this data object (e.g., in dropdowns, references).
| Operation | API Name | Route | Explicitly Set |
|-----------|----------|-------|----------------|
| Create | _none_ | - | Auto |
| Update | _none_ | - | Auto |
| Delete | _none_ | - | Auto |
| Get | `getPlanMeal` | `/v1/planmeals/:planMealId` | Yes |
| List | `listPlanMeals` | `/v1/planmeals` | Yes |
### ProgramExercise Default APIs

**Display Label Property:** `exerciseName` — Use this property as the human-readable label when displaying records of this data object (e.g., in dropdowns, references).
| Operation | API Name | Route | Explicitly Set |
|-----------|----------|-------|----------------|
| Create | _none_ | - | Auto |
| Update | _none_ | - | Auto |
| Delete | _none_ | - | Auto |
| Get | `getProgramExercise` | `/v1/programexercises/:programExerciseId` | Yes |
| List | `listProgramExercises` | `/v1/programexercises` | Yes |
### QuotaConfig Default APIs

| Operation | API Name | Route | Explicitly Set |
|-----------|----------|-------|----------------|
| Create | `createQuotaConfig` | `/v1/quotaconfigs` | Yes |
| Update | `updateQuotaConfig` | `/v1/quotaconfigs/:quotaConfigId` | Yes |
| Delete | _none_ | - | Auto |
| Get | `getQuotaConfig` | `/v1/quotaconfigs/:quotaConfigId` | Yes |
| List | `listQuotaConfigs` | `/v1/quotaconfigs` | Yes |
### TrainingProgram Default APIs

**Display Label Property:** `splitType` — Use this property as the human-readable label when displaying records of this data object (e.g., in dropdowns, references).
| Operation | API Name | Route | Explicitly Set |
|-----------|----------|-------|----------------|
| Create | _none_ | - | Auto |
| Update | _none_ | - | Auto |
| Delete | `deletetrainingprogram` | `/v1/deletetrainingprogram/:trainingProgramId` | Auto |
| Get | `getTrainingProgram` | `/v1/trainingprograms/:trainingProgramId` | Yes |
| List | `listTrainingPrograms` | `/v1/trainingprograms` | Yes |
### UserQuota Default APIs

| Operation | API Name | Route | Explicitly Set |
|-----------|----------|-------|----------------|
| Create | _none_ | - | Auto |
| Update | _none_ | - | Auto |
| Delete | _none_ | - | Auto |
| Get | `getUserQuota` | `/v1/userquotas/:userQuotaId` | Yes |
| List | `listUserQuotas` | `/v1/userquotas` | Yes |
### WeightLog Default APIs

| Operation | API Name | Route | Explicitly Set |
|-----------|----------|-------|----------------|
| Create | `createWeightLog` | `/v1/weightlogs` | Yes |
| Update | _none_ | - | Auto |
| Delete | _none_ | - | Auto |
| Get | `getWeightLog` | `/v1/weightlogs/:weightLogId` | Yes |
| List | `listWeightLogs` | `/v1/weightlogs` | Yes |
### BanAppeals Default APIs

| Operation | API Name | Route | Explicitly Set |
|-----------|----------|-------|----------------|
| Create | `createBanAppeal` | `/v1/banappeal` | Auto |
| Update | `updateBanAppeal` | `/v1/banappeal/:banAppealsId` | Auto |
| Delete | _none_ | - | Auto |
| Get | _none_ | - | Auto |
| List | `listBanAppeals` | `/v1/banappealses` | Auto |
### AdditionalQuota Default APIs

| Operation | API Name | Route | Explicitly Set |
|-----------|----------|-------|----------------|
| Create | `createAdditionalQuota` | `/v1/additionalquotas` | Auto |
| Update | `startAdditionalQuotaPayment` | `/v1/startadditionalquotapayment/:additionalQuotaId` | Auto |
| Delete | _none_ | - | Auto |
| Get | `getMyAdditionalQuota` | `/v1/myadditionalquota` | Auto |
| List | _none_ | - | Auto |
### Sys_additionalQuotaPayment Default APIs

| Operation | API Name | Route | Explicitly Set |
|-----------|----------|-------|----------------|
| Create | `createAdditionalQuotaPayment` | `/v1/additionalquotapayment` | Auto |
| Update | `updateAdditionalQuotaPayment` | `/v1/additionalquotapayment/:sys_additionalQuotaPaymentId` | Auto |
| Delete | `deleteAdditionalQuotaPayment` | `/v1/additionalquotapayment/:sys_additionalQuotaPaymentId` | Auto |
| Get | `getAdditionalQuotaPayment` | `/v1/additionalquotapayment/:sys_additionalQuotaPaymentId` | Auto |
| List | `listAdditionalQuotaPayments` | `/v1/additionalquotapayments` | Auto |
### Sys_paymentCustomer Default APIs

| Operation | API Name | Route | Explicitly Set |
|-----------|----------|-------|----------------|
| Create | _none_ | - | Auto |
| Update | _none_ | - | Auto |
| Delete | _none_ | - | Auto |
| Get | `getPaymentCustomerByUserId` | `/v1/paymentcustomers/:userId` | Auto |
| List | `listPaymentCustomers` | `/v1/paymentcustomers` | Auto |
### Sys_paymentMethod Default APIs

| Operation | API Name | Route | Explicitly Set |
|-----------|----------|-------|----------------|
| Create | _none_ | - | Auto |
| Update | _none_ | - | Auto |
| Delete | _none_ | - | Auto |
| Get | _none_ | - | Auto |
| List | `listPaymentCustomerMethods` | `/v1/paymentcustomermethods/:userId` | Auto |

When building CRUD forms for a data object, use the default create/update APIs listed above. The form fields should correspond to the API's body parameters. For relation fields, render a dropdown loaded from the related object's list API using the display label property.





## API Reference

### `Create Chatmessage` API
**[Default create API]** — This is the designated default `create` API for the `chatMessage` data object. Frontend generators and AI agents should use this API for standard CRUD operations.
Send a message to the AI fitness coach. Enforces the full validation chain: subscription check → ban status check → quota check → content flagging → AI processing → tool call execution → quota increment. Returns both the user message and the AI response.

**API Frontend Description By The Backend Architect**

# Chat Message Creation
- This is the primary interaction endpoint for the AI fitness coach.
- User sends a message and receives an AI response in the same call.
- The response includes the created user message and an aiResponse object containing the AI's reply and any tool calls executed.
- If the message is flagged, aiResponse.flagged will be true.
- Handle quota exceeded (403) and suspension (403) errors gracefully.

**Rest Route**

The `createChatMessage` API REST controller can be triggered via the following route:

`/v1/chatmessages`


**Rest Request Parameters**


The `createChatMessage` api has got 2 regular request parameters  

| Parameter              | Type                   | Required | Population                   |
| ---------------------- | ---------------------- | -------- | ---------------------------- |
| conversationId  | ID  | true | request.body?.["conversationId"] |
| content  | Text  | true | request.body?.["content"] |
**conversationId** : The conversation to send the message to
**content** : The message content



**REST Request**
To access the api you can use the **REST** controller with the path **POST  /v1/chatmessages**
```js
  axios({
    method: 'POST',
    url: '/v1/chatmessages',
    data: {
            conversationId:"ID",  
            content:"Text",  
    
    },
    params: {
    
        }
  });
```   
**REST Response**


```json
{
	"status": "OK",
	"statusCode": "201",
	"elapsedMs": 126,
	"ssoTime": 120,
	"source": "db",
	"cacheKey": "hexCode",
	"userId": "ID",
	"sessionId": "ID",
	"requestId": "ID",
	"dataName": "chatMessage",
	"method": "POST",
	"action": "create",
	"appVersion": "Version",
	"rowCount": 1,
	"chatMessage": {
		"id": "ID",
		"content": "Text",
		"conversationId": "ID",
		"flagged": "Boolean",
		"role": "Enum",
		"role_idx": "Integer",
		"toolCallData": "Text",
		"isActive": true,
		"recordVersion": "Integer",
		"createdAt": "Date",
		"updatedAt": "Date",
		"_owner": "ID"
	}
}
```


### `Create Coachconversation` API
**[Default create API]** — This is the designated default `create` API for the `coachConversation` data object. Frontend generators and AI agents should use this API for standard CRUD operations.
Create a new coach conversation. Requires active subscription and no active ban.


**Rest Route**

The `createCoachConversation` API REST controller can be triggered via the following route:

`/v1/coachconversations`


**Rest Request Parameters**
The `createCoachConversation` api has got no request parameters.    




**REST Request**
To access the api you can use the **REST** controller with the path **POST  /v1/coachconversations**
```js
  axios({
    method: 'POST',
    url: '/v1/coachconversations',
    data: {
    
    },
    params: {
    
        }
  });
```   
**REST Response**


```json
{
	"status": "OK",
	"statusCode": "201",
	"elapsedMs": 126,
	"ssoTime": 120,
	"source": "db",
	"cacheKey": "hexCode",
	"userId": "ID",
	"sessionId": "ID",
	"requestId": "ID",
	"dataName": "coachConversation",
	"method": "POST",
	"action": "create",
	"appVersion": "Version",
	"rowCount": 1,
	"coachConversation": {
		"id": "ID",
		"status": "Enum",
		"status_idx": "Integer",
		"userId": "ID",
		"isActive": true,
		"recordVersion": "Integer",
		"createdAt": "Date",
		"updatedAt": "Date",
		"_owner": "ID"
	},
	"activeSubscriptions": "Object"
}
```


### `Create Quotaconfig` API
**[Default create API]** — This is the designated default `create` API for the `quotaConfig` data object. Frontend generators and AI agents should use this API for standard CRUD operations.
Create a quota configuration record. Admin only.


**Rest Route**

The `createQuotaConfig` API REST controller can be triggered via the following route:

`/v1/quotaconfigs`


**Rest Request Parameters**


The `createQuotaConfig` api has got 2 regular request parameters  

| Parameter              | Type                   | Required | Population                   |
| ---------------------- | ---------------------- | -------- | ---------------------------- |
| quotaLimit  | Integer  | true | request.body?.["quotaLimit"] |
| quotaPeriod  | Enum  | true | request.body?.["quotaPeriod"] |
**quotaLimit** : Maximum messages allowed per period
**quotaPeriod** : Period over which the quota is measured



**REST Request**
To access the api you can use the **REST** controller with the path **POST  /v1/quotaconfigs**
```js
  axios({
    method: 'POST',
    url: '/v1/quotaconfigs',
    data: {
            quotaLimit:"Integer",  
            quotaPeriod:"Enum",  
    
    },
    params: {
    
        }
  });
```   
**REST Response**


```json
{
	"status": "OK",
	"statusCode": "201",
	"elapsedMs": 126,
	"ssoTime": 120,
	"source": "db",
	"cacheKey": "hexCode",
	"userId": "ID",
	"sessionId": "ID",
	"requestId": "ID",
	"dataName": "quotaConfig",
	"method": "POST",
	"action": "create",
	"appVersion": "Version",
	"rowCount": 1,
	"quotaConfig": {
		"id": "ID",
		"quotaLimit": "Integer",
		"quotaPeriod": "Enum",
		"quotaPeriod_idx": "Integer",
		"isActive": true,
		"recordVersion": "Integer",
		"createdAt": "Date",
		"updatedAt": "Date",
		"_owner": "ID"
	}
}
```


### `Create Weightlog` API
**[Default create API]** — This is the designated default `create` API for the `weightLog` data object. Frontend generators and AI agents should use this API for standard CRUD operations.
Report a weight measurement. Requires active subscription and no active ban.


**Rest Route**

The `createWeightLog` API REST controller can be triggered via the following route:

`/v1/weightlogs`


**Rest Request Parameters**


The `createWeightLog` api has got 2 regular request parameters  

| Parameter              | Type                   | Required | Population                   |
| ---------------------- | ---------------------- | -------- | ---------------------------- |
| measuredAt  | Date  | true | request.body?.["measuredAt"] |
| weightKg  | Float  | true | request.body?.["weightKg"] |
**measuredAt** : Date and time of measurement
**weightKg** : Body weight in kilograms



**REST Request**
To access the api you can use the **REST** controller with the path **POST  /v1/weightlogs**
```js
  axios({
    method: 'POST',
    url: '/v1/weightlogs',
    data: {
            measuredAt:"Date",  
            weightKg:"Float",  
    
    },
    params: {
    
        }
  });
```   
**REST Response**


```json
{
	"status": "OK",
	"statusCode": "201",
	"elapsedMs": 126,
	"ssoTime": 120,
	"source": "db",
	"cacheKey": "hexCode",
	"userId": "ID",
	"sessionId": "ID",
	"requestId": "ID",
	"dataName": "weightLog",
	"method": "POST",
	"action": "create",
	"appVersion": "Version",
	"rowCount": 1,
	"weightLog": {
		"id": "ID",
		"measuredAt": "Date",
		"userId": "ID",
		"weightKg": "Float",
		"isActive": true,
		"recordVersion": "Integer",
		"createdAt": "Date",
		"updatedAt": "Date",
		"_owner": "ID"
	}
}
```


### `Get Chatmessage` API
**[Default get API]** — This is the designated default `get` API for the `chatMessage` data object. Frontend generators and AI agents should use this API for standard CRUD operations.
Get a chat message by ID with parent conversation ownership validation.


**Rest Route**

The `getChatMessage` API REST controller can be triggered via the following route:

`/v1/chatmessages/:chatMessageId`


**Rest Request Parameters**


The `getChatMessage` api has got 1 regular request parameter  

| Parameter              | Type                   | Required | Population                   |
| ---------------------- | ---------------------- | -------- | ---------------------------- |
| chatMessageId  | ID  | true | request.params?.["chatMessageId"] |
**chatMessageId** : This id paremeter is used to query the required data object.



**REST Request**
To access the api you can use the **REST** controller with the path **GET  /v1/chatmessages/:chatMessageId**
```js
  axios({
    method: 'GET',
    url: `/v1/chatmessages/${chatMessageId}`,
    data: {
    
    },
    params: {
    
        }
  });
```   
**REST Response**


```json
{
	"status": "OK",
	"statusCode": "200",
	"elapsedMs": 126,
	"ssoTime": 120,
	"source": "db",
	"cacheKey": "hexCode",
	"userId": "ID",
	"sessionId": "ID",
	"requestId": "ID",
	"dataName": "chatMessage",
	"method": "GET",
	"action": "get",
	"appVersion": "Version",
	"rowCount": 1,
	"chatMessage": {
		"id": "ID",
		"content": "Text",
		"conversationId": "ID",
		"flagged": "Boolean",
		"role": "Enum",
		"role_idx": "Integer",
		"toolCallData": "Text",
		"isActive": true,
		"recordVersion": "Integer",
		"createdAt": "Date",
		"updatedAt": "Date",
		"_owner": "ID"
	}
}
```


### `Get Coachconversation` API
**[Default get API]** — This is the designated default `get` API for the `coachConversation` data object. Frontend generators and AI agents should use this API for standard CRUD operations.
Get a conversation by ID. Users see their own, admins can see any.


**Rest Route**

The `getCoachConversation` API REST controller can be triggered via the following route:

`/v1/coachconversations/:coachConversationId`


**Rest Request Parameters**


The `getCoachConversation` api has got 1 regular request parameter  

| Parameter              | Type                   | Required | Population                   |
| ---------------------- | ---------------------- | -------- | ---------------------------- |
| coachConversationId  | ID  | true | request.params?.["coachConversationId"] |
**coachConversationId** : This id paremeter is used to query the required data object.



**REST Request**
To access the api you can use the **REST** controller with the path **GET  /v1/coachconversations/:coachConversationId**
```js
  axios({
    method: 'GET',
    url: `/v1/coachconversations/${coachConversationId}`,
    data: {
    
    },
    params: {
    
        }
  });
```   
**REST Response**


```json
{
	"status": "OK",
	"statusCode": "200",
	"elapsedMs": 126,
	"ssoTime": 120,
	"source": "db",
	"cacheKey": "hexCode",
	"userId": "ID",
	"sessionId": "ID",
	"requestId": "ID",
	"dataName": "coachConversation",
	"method": "GET",
	"action": "get",
	"appVersion": "Version",
	"rowCount": 1,
	"coachConversation": {
		"id": "ID",
		"status": "Enum",
		"status_idx": "Integer",
		"userId": "ID",
		"isActive": true,
		"recordVersion": "Integer",
		"createdAt": "Date",
		"updatedAt": "Date",
		"_owner": "ID"
	}
}
```


### `Get Mealplan` API
**[Default get API]** — This is the designated default `get` API for the `mealPlan` data object. Frontend generators and AI agents should use this API for standard CRUD operations.
Get a meal plan by ID with meals. Users see their own, admins can see any.


**Rest Route**

The `getMealPlan` API REST controller can be triggered via the following route:

`/v1/mealplans/:mealPlanId`


**Rest Request Parameters**


The `getMealPlan` api has got 1 regular request parameter  

| Parameter              | Type                   | Required | Population                   |
| ---------------------- | ---------------------- | -------- | ---------------------------- |
| mealPlanId  | ID  | true | request.params?.["mealPlanId"] |
**mealPlanId** : This id paremeter is used to query the required data object.



**REST Request**
To access the api you can use the **REST** controller with the path **GET  /v1/mealplans/:mealPlanId**
```js
  axios({
    method: 'GET',
    url: `/v1/mealplans/${mealPlanId}`,
    data: {
    
    },
    params: {
    
        }
  });
```   
**REST Response**


```json
{
	"status": "OK",
	"statusCode": "200",
	"elapsedMs": 126,
	"ssoTime": 120,
	"source": "db",
	"cacheKey": "hexCode",
	"userId": "ID",
	"sessionId": "ID",
	"requestId": "ID",
	"dataName": "mealPlan",
	"method": "GET",
	"action": "get",
	"appVersion": "Version",
	"rowCount": 1,
	"mealPlan": {
		"id": "ID",
		"carbGrams": "Float",
		"dailyCalorieTarget": "Integer",
		"fatGrams": "Float",
		"notes": "Text",
		"proteinGrams": "Float",
		"restDayCalories": "Integer",
		"restDayCarbGrams": "Float",
		"status": "Enum",
		"status_idx": "Integer",
		"trainingDayCalories": "Integer",
		"trainingDayCarbGrams": "Float",
		"userId": "ID",
		"isActive": true,
		"recordVersion": "Integer",
		"createdAt": "Date",
		"updatedAt": "Date",
		"_owner": "ID",
		"meals": [
			{
				"id": "ID",
				"carbs": "Float",
				"fat": "Float",
				"foods": "Text",
				"mealLabel": "String",
				"mealPlanId": "ID",
				"protein": "Float",
				"sortOrder": "Integer",
				"totalCalories": "Integer",
				"isActive": true,
				"recordVersion": "Integer",
				"createdAt": "Date",
				"updatedAt": "Date",
				"_owner": "ID"
			},
			{},
			{}
		]
	}
}
```


### `Get Moderationrecord` API
**[Default get API]** — This is the designated default `get` API for the `moderationRecord` data object. Frontend generators and AI agents should use this API for standard CRUD operations.
Get a moderation record by ID. Admin only.


**Rest Route**

The `getModerationRecord` API REST controller can be triggered via the following route:

`/v1/moderationrecords/:moderationRecordId`


**Rest Request Parameters**


The `getModerationRecord` api has got 1 regular request parameter  

| Parameter              | Type                   | Required | Population                   |
| ---------------------- | ---------------------- | -------- | ---------------------------- |
| moderationRecordId  | ID  | true | request.params?.["moderationRecordId"] |
**moderationRecordId** : This id paremeter is used to query the required data object.



**REST Request**
To access the api you can use the **REST** controller with the path **GET  /v1/moderationrecords/:moderationRecordId**
```js
  axios({
    method: 'GET',
    url: `/v1/moderationrecords/${moderationRecordId}`,
    data: {
    
    },
    params: {
    
        }
  });
```   
**REST Response**


```json
{
	"status": "OK",
	"statusCode": "200",
	"elapsedMs": 126,
	"ssoTime": 120,
	"source": "db",
	"cacheKey": "hexCode",
	"userId": "ID",
	"sessionId": "ID",
	"requestId": "ID",
	"dataName": "moderationRecord",
	"method": "GET",
	"action": "get",
	"appVersion": "Version",
	"rowCount": 1,
	"moderationRecord": {
		"id": "ID",
		"action": "Enum",
		"action_idx": "Integer",
		"offenseType": "String",
		"reason": "Text",
		"suspensionExpiresAt": "Date",
		"userId": "ID",
		"content": "String",
		"recordVersion": "Integer",
		"createdAt": "Date",
		"updatedAt": "Date",
		"_owner": "ID",
		"isActive": true
	}
}
```


### `Get Myquota` API
Get the current user's quota usage for the active period.


**Rest Route**

The `getMyQuota` API REST controller can be triggered via the following route:

`/v1/my-quota`


**Rest Request Parameters**
The `getMyQuota` api has got no request parameters.    




**REST Request**
To access the api you can use the **REST** controller with the path **GET  /v1/my-quota**
```js
  axios({
    method: 'GET',
    url: '/v1/my-quota',
    data: {
    
    },
    params: {
    
        }
  });
```   
**REST Response**


```json
{
	"status": "OK",
	"statusCode": "200",
	"elapsedMs": 126,
	"ssoTime": 120,
	"source": "db",
	"cacheKey": "hexCode",
	"userId": "ID",
	"sessionId": "ID",
	"requestId": "ID",
	"dataName": "userQuota",
	"method": "GET",
	"action": "get",
	"appVersion": "Version",
	"rowCount": 1,
	"userQuota": {
		"id": "ID",
		"messageCount": "Integer",
		"periodEnd": "Date",
		"periodStart": "Date",
		"userId": "ID",
		"isActive": true,
		"recordVersion": "Integer",
		"createdAt": "Date",
		"updatedAt": "Date",
		"_owner": "ID"
	}
}
```


### `Get Planmeal` API
**[Default get API]** — This is the designated default `get` API for the `planMeal` data object. Frontend generators and AI agents should use this API for standard CRUD operations.
Get a plan meal by ID with parent ownership validation.


**Rest Route**

The `getPlanMeal` API REST controller can be triggered via the following route:

`/v1/planmeals/:planMealId`


**Rest Request Parameters**


The `getPlanMeal` api has got 1 regular request parameter  

| Parameter              | Type                   | Required | Population                   |
| ---------------------- | ---------------------- | -------- | ---------------------------- |
| planMealId  | ID  | true | request.params?.["planMealId"] |
**planMealId** : This id paremeter is used to query the required data object.



**REST Request**
To access the api you can use the **REST** controller with the path **GET  /v1/planmeals/:planMealId**
```js
  axios({
    method: 'GET',
    url: `/v1/planmeals/${planMealId}`,
    data: {
    
    },
    params: {
    
        }
  });
```   
**REST Response**


```json
{
	"status": "OK",
	"statusCode": "200",
	"elapsedMs": 126,
	"ssoTime": 120,
	"source": "db",
	"cacheKey": "hexCode",
	"userId": "ID",
	"sessionId": "ID",
	"requestId": "ID",
	"dataName": "planMeal",
	"method": "GET",
	"action": "get",
	"appVersion": "Version",
	"rowCount": 1,
	"planMeal": {
		"id": "ID",
		"carbs": "Float",
		"fat": "Float",
		"foods": "Text",
		"mealLabel": "String",
		"mealPlanId": "ID",
		"protein": "Float",
		"sortOrder": "Integer",
		"totalCalories": "Integer",
		"isActive": true,
		"recordVersion": "Integer",
		"createdAt": "Date",
		"updatedAt": "Date",
		"_owner": "ID"
	}
}
```


### `Get Programexercise` API
**[Default get API]** — This is the designated default `get` API for the `programExercise` data object. Frontend generators and AI agents should use this API for standard CRUD operations.
Get a program exercise by ID with parent ownership validation.


**Rest Route**

The `getProgramExercise` API REST controller can be triggered via the following route:

`/v1/programexercises/:programExerciseId`


**Rest Request Parameters**


The `getProgramExercise` api has got 1 regular request parameter  

| Parameter              | Type                   | Required | Population                   |
| ---------------------- | ---------------------- | -------- | ---------------------------- |
| programExerciseId  | ID  | true | request.params?.["programExerciseId"] |
**programExerciseId** : This id paremeter is used to query the required data object.



**REST Request**
To access the api you can use the **REST** controller with the path **GET  /v1/programexercises/:programExerciseId**
```js
  axios({
    method: 'GET',
    url: `/v1/programexercises/${programExerciseId}`,
    data: {
    
    },
    params: {
    
        }
  });
```   
**REST Response**


```json
{
	"status": "OK",
	"statusCode": "200",
	"elapsedMs": 126,
	"ssoTime": 120,
	"source": "db",
	"cacheKey": "hexCode",
	"userId": "ID",
	"sessionId": "ID",
	"requestId": "ID",
	"dataName": "programExercise",
	"method": "GET",
	"action": "get",
	"appVersion": "Version",
	"rowCount": 1,
	"programExercise": {
		"id": "ID",
		"dayLabel": "String",
		"exerciseName": "String",
		"movementType": "Enum",
		"movementType_idx": "Integer",
		"muscleGroup": "String",
		"progressionRule": "Text",
		"repMax": "Integer",
		"repMin": "Integer",
		"rirTarget": "Integer",
		"sets": "Integer",
		"sortOrder": "Integer",
		"trainingProgramId": "ID",
		"isActive": true,
		"recordVersion": "Integer",
		"createdAt": "Date",
		"updatedAt": "Date",
		"_owner": "ID"
	}
}
```


### `Get Quotaconfig` API
**[Default get API]** — This is the designated default `get` API for the `quotaConfig` data object. Frontend generators and AI agents should use this API for standard CRUD operations.
Get a quota configuration record.


**Rest Route**

The `getQuotaConfig` API REST controller can be triggered via the following route:

`/v1/quotaconfigs/:quotaConfigId`


**Rest Request Parameters**


The `getQuotaConfig` api has got 1 regular request parameter  

| Parameter              | Type                   | Required | Population                   |
| ---------------------- | ---------------------- | -------- | ---------------------------- |
| quotaConfigId  | ID  | true | request.params?.["quotaConfigId"] |
**quotaConfigId** : This id paremeter is used to query the required data object.



**REST Request**
To access the api you can use the **REST** controller with the path **GET  /v1/quotaconfigs/:quotaConfigId**
```js
  axios({
    method: 'GET',
    url: `/v1/quotaconfigs/${quotaConfigId}`,
    data: {
    
    },
    params: {
    
        }
  });
```   
**REST Response**


```json
{
	"status": "OK",
	"statusCode": "200",
	"elapsedMs": 126,
	"ssoTime": 120,
	"source": "db",
	"cacheKey": "hexCode",
	"userId": "ID",
	"sessionId": "ID",
	"requestId": "ID",
	"dataName": "quotaConfig",
	"method": "GET",
	"action": "get",
	"appVersion": "Version",
	"rowCount": 1,
	"quotaConfig": {
		"id": "ID",
		"quotaLimit": "Integer",
		"quotaPeriod": "Enum",
		"quotaPeriod_idx": "Integer",
		"isActive": true,
		"recordVersion": "Integer",
		"createdAt": "Date",
		"updatedAt": "Date",
		"_owner": "ID"
	}
}
```


### `Get Trainingprogram` API
**[Default get API]** — This is the designated default `get` API for the `trainingProgram` data object. Frontend generators and AI agents should use this API for standard CRUD operations.
Get a training program by ID. Users see their own programs, admins can see any.


**Rest Route**

The `getTrainingProgram` API REST controller can be triggered via the following route:

`/v1/trainingprograms/:trainingProgramId`


**Rest Request Parameters**


The `getTrainingProgram` api has got 1 regular request parameter  

| Parameter              | Type                   | Required | Population                   |
| ---------------------- | ---------------------- | -------- | ---------------------------- |
| trainingProgramId  | ID  | true | request.params?.["trainingProgramId"] |
**trainingProgramId** : This id paremeter is used to query the required data object.



**REST Request**
To access the api you can use the **REST** controller with the path **GET  /v1/trainingprograms/:trainingProgramId**
```js
  axios({
    method: 'GET',
    url: `/v1/trainingprograms/${trainingProgramId}`,
    data: {
    
    },
    params: {
    
        }
  });
```   
**REST Response**


```json
{
	"status": "OK",
	"statusCode": "200",
	"elapsedMs": 126,
	"ssoTime": 120,
	"source": "db",
	"cacheKey": "hexCode",
	"userId": "ID",
	"sessionId": "ID",
	"requestId": "ID",
	"dataName": "trainingProgram",
	"method": "GET",
	"action": "get",
	"appVersion": "Version",
	"rowCount": 1,
	"trainingProgram": {
		"id": "ID",
		"cardioDurationMinutes": "Integer",
		"cardioFrequencyPerWeek": "Integer",
		"cardioType": "String",
		"dailyStepTarget": "Integer",
		"deloadIntervalWeeks": "Integer",
		"notes": "Text",
		"splitType": "String",
		"status": "Enum",
		"status_idx": "Integer",
		"userId": "ID",
		"isActive": true,
		"recordVersion": "Integer",
		"createdAt": "Date",
		"updatedAt": "Date",
		"_owner": "ID",
		"exercises": [
			{
				"id": "ID",
				"dayLabel": "String",
				"exerciseName": "String",
				"movementType": "Enum",
				"movementType_idx": "Integer",
				"muscleGroup": "String",
				"progressionRule": "Text",
				"repMax": "Integer",
				"repMin": "Integer",
				"rirTarget": "Integer",
				"sets": "Integer",
				"sortOrder": "Integer",
				"trainingProgramId": "ID",
				"isActive": true,
				"recordVersion": "Integer",
				"createdAt": "Date",
				"updatedAt": "Date",
				"_owner": "ID"
			},
			{},
			{}
		]
	}
}
```


### `Get Userquota` API
**[Default get API]** — This is the designated default `get` API for the `userQuota` data object. Frontend generators and AI agents should use this API for standard CRUD operations.
Get a user quota record. Users see their own, admins can see any.


**Rest Route**

The `getUserQuota` API REST controller can be triggered via the following route:

`/v1/userquotas/:userQuotaId`


**Rest Request Parameters**


The `getUserQuota` api has got 1 regular request parameter  

| Parameter              | Type                   | Required | Population                   |
| ---------------------- | ---------------------- | -------- | ---------------------------- |
| userQuotaId  | ID  | true | request.params?.["userQuotaId"] |
**userQuotaId** : This id paremeter is used to query the required data object.



**REST Request**
To access the api you can use the **REST** controller with the path **GET  /v1/userquotas/:userQuotaId**
```js
  axios({
    method: 'GET',
    url: `/v1/userquotas/${userQuotaId}`,
    data: {
    
    },
    params: {
    
        }
  });
```   
**REST Response**


```json
{
	"status": "OK",
	"statusCode": "200",
	"elapsedMs": 126,
	"ssoTime": 120,
	"source": "db",
	"cacheKey": "hexCode",
	"userId": "ID",
	"sessionId": "ID",
	"requestId": "ID",
	"dataName": "userQuota",
	"method": "GET",
	"action": "get",
	"appVersion": "Version",
	"rowCount": 1,
	"userQuota": {
		"id": "ID",
		"messageCount": "Integer",
		"periodEnd": "Date",
		"periodStart": "Date",
		"userId": "ID",
		"isActive": true,
		"recordVersion": "Integer",
		"createdAt": "Date",
		"updatedAt": "Date",
		"_owner": "ID"
	},
	"additionalQuota": "Object"
}
```


### `Get Weightlog` API
**[Default get API]** — This is the designated default `get` API for the `weightLog` data object. Frontend generators and AI agents should use this API for standard CRUD operations.
Get a weight log entry by ID.


**Rest Route**

The `getWeightLog` API REST controller can be triggered via the following route:

`/v1/weightlogs/:weightLogId`


**Rest Request Parameters**


The `getWeightLog` api has got 1 regular request parameter  

| Parameter              | Type                   | Required | Population                   |
| ---------------------- | ---------------------- | -------- | ---------------------------- |
| weightLogId  | ID  | true | request.params?.["weightLogId"] |
**weightLogId** : This id paremeter is used to query the required data object.



**REST Request**
To access the api you can use the **REST** controller with the path **GET  /v1/weightlogs/:weightLogId**
```js
  axios({
    method: 'GET',
    url: `/v1/weightlogs/${weightLogId}`,
    data: {
    
    },
    params: {
    
        }
  });
```   
**REST Response**


```json
{
	"status": "OK",
	"statusCode": "200",
	"elapsedMs": 126,
	"ssoTime": 120,
	"source": "db",
	"cacheKey": "hexCode",
	"userId": "ID",
	"sessionId": "ID",
	"requestId": "ID",
	"dataName": "weightLog",
	"method": "GET",
	"action": "get",
	"appVersion": "Version",
	"rowCount": 1,
	"weightLog": {
		"id": "ID",
		"measuredAt": "Date",
		"userId": "ID",
		"weightKg": "Float",
		"isActive": true,
		"recordVersion": "Integer",
		"createdAt": "Date",
		"updatedAt": "Date",
		"_owner": "ID"
	}
}
```


### `List Chatmessages` API
**[Default list API]** — This is the designated default `list` API for the `chatMessage` data object. Frontend generators and AI agents should use this API for standard CRUD operations.
List chat messages for a conversation with parent ownership validation.


**Rest Route**

The `listChatMessages` API REST controller can be triggered via the following route:

`/v1/chatmessages`


**Rest Request Parameters**


The `listChatMessages` api has got 1 regular request parameter  

| Parameter              | Type                   | Required | Population                   |
| ---------------------- | ---------------------- | -------- | ---------------------------- |
| conversationId  | ID  | true | request.query?.["conversationId"] |
**conversationId** : The conversation to list messages for



**REST Request**
To access the api you can use the **REST** controller with the path **GET  /v1/chatmessages**
```js
  axios({
    method: 'GET',
    url: '/v1/chatmessages',
    data: {
    
    },
    params: {
             conversationId:'"ID"',  
    
        }
  });
```   
**REST Response**


```json
{
	"status": "OK",
	"statusCode": "200",
	"elapsedMs": 126,
	"ssoTime": 120,
	"source": "db",
	"cacheKey": "hexCode",
	"userId": "ID",
	"sessionId": "ID",
	"requestId": "ID",
	"dataName": "chatMessages",
	"method": "GET",
	"action": "list",
	"appVersion": "Version",
	"rowCount": "\"Number\"",
	"chatMessages": [
		{
			"id": "ID",
			"content": "Text",
			"conversationId": "ID",
			"flagged": "Boolean",
			"role": "Enum",
			"role_idx": "Integer",
			"toolCallData": "Text",
			"isActive": true,
			"recordVersion": "Integer",
			"createdAt": "Date",
			"updatedAt": "Date",
			"_owner": "ID"
		},
		{},
		{}
	],
	"paging": {
		"pageNumber": "Number",
		"pageRowCount": "NUmber",
		"totalRowCount": "Number",
		"pageCount": "Number"
	},
	"filters": [],
	"uiPermissions": []
}
```


### `List Coachconversations` API
**[Default list API]** — This is the designated default `list` API for the `coachConversation` data object. Frontend generators and AI agents should use this API for standard CRUD operations.
List conversations. Users see their own, admins can see all.


**Rest Route**

The `listCoachConversations` API REST controller can be triggered via the following route:

`/v1/coachconversations`


**Rest Request Parameters**



**Filter Parameters**

The `listCoachConversations` api supports 2 optional filter parameters for filtering list results:

**status** (`Enum`): Conversation status

- Single: `?status=<value>` (case-insensitive)
- Multiple: `?status=<value1>&status=<value2>`
- Null: `?status=null`


**userId** (`ID`): Reference to the user who owns this conversation

- Single: `?userId=<value>`
- Multiple: `?userId=<value1>&userId=<value2>`
- Null: `?userId=null`



**REST Request**
To access the api you can use the **REST** controller with the path **GET  /v1/coachconversations**
```js
  axios({
    method: 'GET',
    url: '/v1/coachconversations',
    data: {
    
    },
    params: {
    
        // Filter parameters (see Filter Parameters section above)
        // status: '<value>' // Filter by status
        // userId: '<value>' // Filter by userId
            }
  });
```   
**REST Response**


```json
{
	"status": "OK",
	"statusCode": "200",
	"elapsedMs": 126,
	"ssoTime": 120,
	"source": "db",
	"cacheKey": "hexCode",
	"userId": "ID",
	"sessionId": "ID",
	"requestId": "ID",
	"dataName": "coachConversations",
	"method": "GET",
	"action": "list",
	"appVersion": "Version",
	"rowCount": "\"Number\"",
	"coachConversations": [
		{
			"id": "ID",
			"status": "Enum",
			"status_idx": "Integer",
			"userId": "ID",
			"isActive": true,
			"recordVersion": "Integer",
			"createdAt": "Date",
			"updatedAt": "Date",
			"_owner": "ID"
		},
		{},
		{}
	],
	"paging": {
		"pageNumber": "Number",
		"pageRowCount": "NUmber",
		"totalRowCount": "Number",
		"pageCount": "Number"
	},
	"filters": [],
	"uiPermissions": []
}
```


### `List Mealplans` API
**[Default list API]** — This is the designated default `list` API for the `mealPlan` data object. Frontend generators and AI agents should use this API for standard CRUD operations.
List meal plans. Users see their own, admins can see all.


**Rest Route**

The `listMealPlans` API REST controller can be triggered via the following route:

`/v1/mealplans`


**Rest Request Parameters**



**Filter Parameters**

The `listMealPlans` api supports 2 optional filter parameters for filtering list results:

**status** (`Enum`): Meal plan status

- Single: `?status=<value>` (case-insensitive)
- Multiple: `?status=<value1>&status=<value2>`
- Null: `?status=null`


**userId** (`ID`): Reference to the user who owns this meal plan

- Single: `?userId=<value>`
- Multiple: `?userId=<value1>&userId=<value2>`
- Null: `?userId=null`



**REST Request**
To access the api you can use the **REST** controller with the path **GET  /v1/mealplans**
```js
  axios({
    method: 'GET',
    url: '/v1/mealplans',
    data: {
    
    },
    params: {
    
        // Filter parameters (see Filter Parameters section above)
        // status: '<value>' // Filter by status
        // userId: '<value>' // Filter by userId
            }
  });
```   
**REST Response**


```json
{
	"status": "OK",
	"statusCode": "200",
	"elapsedMs": 126,
	"ssoTime": 120,
	"source": "db",
	"cacheKey": "hexCode",
	"userId": "ID",
	"sessionId": "ID",
	"requestId": "ID",
	"dataName": "mealPlans",
	"method": "GET",
	"action": "list",
	"appVersion": "Version",
	"rowCount": "\"Number\"",
	"mealPlans": [
		{
			"id": "ID",
			"carbGrams": "Float",
			"dailyCalorieTarget": "Integer",
			"fatGrams": "Float",
			"notes": "Text",
			"proteinGrams": "Float",
			"restDayCalories": "Integer",
			"restDayCarbGrams": "Float",
			"status": "Enum",
			"status_idx": "Integer",
			"trainingDayCalories": "Integer",
			"trainingDayCarbGrams": "Float",
			"userId": "ID",
			"isActive": true,
			"recordVersion": "Integer",
			"createdAt": "Date",
			"updatedAt": "Date",
			"_owner": "ID"
		},
		{},
		{}
	],
	"paging": {
		"pageNumber": "Number",
		"pageRowCount": "NUmber",
		"totalRowCount": "Number",
		"pageCount": "Number"
	},
	"filters": [],
	"uiPermissions": []
}
```


### `List Moderationrecords` API
**[Default list API]** — This is the designated default `list` API for the `moderationRecord` data object. Frontend generators and AI agents should use this API for standard CRUD operations.
List moderation records. Admin only. Supports filtering by userId and action.


**Rest Route**

The `listModerationRecords` API REST controller can be triggered via the following route:

`/v1/moderationrecords`


**Rest Request Parameters**



**Filter Parameters**

The `listModerationRecords` api supports 2 optional filter parameters for filtering list results:

**action** (`Enum`): Moderation action taken

- Single: `?action=<value>` (case-insensitive)
- Multiple: `?action=<value1>&action=<value2>`
- Null: `?action=null`


**userId** (`ID`): Reference to the user who was moderated

- Single: `?userId=<value>`
- Multiple: `?userId=<value1>&userId=<value2>`
- Null: `?userId=null`



**REST Request**
To access the api you can use the **REST** controller with the path **GET  /v1/moderationrecords**
```js
  axios({
    method: 'GET',
    url: '/v1/moderationrecords',
    data: {
    
    },
    params: {
    
        // Filter parameters (see Filter Parameters section above)
        // action: '<value>' // Filter by action
        // userId: '<value>' // Filter by userId
            }
  });
```   
**REST Response**


```json
{
	"status": "OK",
	"statusCode": "200",
	"elapsedMs": 126,
	"ssoTime": 120,
	"source": "db",
	"cacheKey": "hexCode",
	"userId": "ID",
	"sessionId": "ID",
	"requestId": "ID",
	"dataName": "moderationRecords",
	"method": "GET",
	"action": "list",
	"appVersion": "Version",
	"rowCount": "\"Number\"",
	"moderationRecords": [
		{
			"id": "ID",
			"action": "Enum",
			"action_idx": "Integer",
			"offenseType": "String",
			"reason": "Text",
			"suspensionExpiresAt": "Date",
			"userId": "ID",
			"content": "String",
			"recordVersion": "Integer",
			"createdAt": "Date",
			"updatedAt": "Date",
			"_owner": "ID",
			"isActive": true
		},
		{},
		{}
	],
	"paging": {
		"pageNumber": "Number",
		"pageRowCount": "NUmber",
		"totalRowCount": "Number",
		"pageCount": "Number"
	},
	"filters": [],
	"uiPermissions": []
}
```


### `List Planmeals` API
**[Default list API]** — This is the designated default `list` API for the `planMeal` data object. Frontend generators and AI agents should use this API for standard CRUD operations.
List meals for a meal plan with parent ownership validation.


**Rest Route**

The `listPlanMeals` API REST controller can be triggered via the following route:

`/v1/planmeals`


**Rest Request Parameters**


The `listPlanMeals` api has got 1 regular request parameter  

| Parameter              | Type                   | Required | Population                   |
| ---------------------- | ---------------------- | -------- | ---------------------------- |
| mealPlanId  | ID  | true | request.query?.["mealPlanId"] |
**mealPlanId** : The meal plan ID to list meals for



**REST Request**
To access the api you can use the **REST** controller with the path **GET  /v1/planmeals**
```js
  axios({
    method: 'GET',
    url: '/v1/planmeals',
    data: {
    
    },
    params: {
             mealPlanId:'"ID"',  
    
        }
  });
```   
**REST Response**


```json
{
	"status": "OK",
	"statusCode": "200",
	"elapsedMs": 126,
	"ssoTime": 120,
	"source": "db",
	"cacheKey": "hexCode",
	"userId": "ID",
	"sessionId": "ID",
	"requestId": "ID",
	"dataName": "planMeals",
	"method": "GET",
	"action": "list",
	"appVersion": "Version",
	"rowCount": "\"Number\"",
	"planMeals": [
		{
			"id": "ID",
			"carbs": "Float",
			"fat": "Float",
			"foods": "Text",
			"mealLabel": "String",
			"mealPlanId": "ID",
			"protein": "Float",
			"sortOrder": "Integer",
			"totalCalories": "Integer",
			"isActive": true,
			"recordVersion": "Integer",
			"createdAt": "Date",
			"updatedAt": "Date",
			"_owner": "ID"
		},
		{},
		{}
	],
	"paging": {
		"pageNumber": "Number",
		"pageRowCount": "NUmber",
		"totalRowCount": "Number",
		"pageCount": "Number"
	},
	"filters": [],
	"uiPermissions": []
}
```


### `List Programexercises` API
**[Default list API]** — This is the designated default `list` API for the `programExercise` data object. Frontend generators and AI agents should use this API for standard CRUD operations.
List exercises for a training program. Validates parent program ownership.


**Rest Route**

The `listProgramExercises` API REST controller can be triggered via the following route:

`/v1/programexercises`


**Rest Request Parameters**


The `listProgramExercises` api has got 1 regular request parameter  

| Parameter              | Type                   | Required | Population                   |
| ---------------------- | ---------------------- | -------- | ---------------------------- |
| trainingProgramId  | ID  | true | request.query?.["trainingProgramId"] |
**trainingProgramId** : The training program ID to list exercises for



**REST Request**
To access the api you can use the **REST** controller with the path **GET  /v1/programexercises**
```js
  axios({
    method: 'GET',
    url: '/v1/programexercises',
    data: {
    
    },
    params: {
             trainingProgramId:'"ID"',  
    
        }
  });
```   
**REST Response**


```json
{
	"status": "OK",
	"statusCode": "200",
	"elapsedMs": 126,
	"ssoTime": 120,
	"source": "db",
	"cacheKey": "hexCode",
	"userId": "ID",
	"sessionId": "ID",
	"requestId": "ID",
	"dataName": "programExercises",
	"method": "GET",
	"action": "list",
	"appVersion": "Version",
	"rowCount": "\"Number\"",
	"programExercises": [
		{
			"id": "ID",
			"dayLabel": "String",
			"exerciseName": "String",
			"movementType": "Enum",
			"movementType_idx": "Integer",
			"muscleGroup": "String",
			"progressionRule": "Text",
			"repMax": "Integer",
			"repMin": "Integer",
			"rirTarget": "Integer",
			"sets": "Integer",
			"sortOrder": "Integer",
			"trainingProgramId": "ID",
			"isActive": true,
			"recordVersion": "Integer",
			"createdAt": "Date",
			"updatedAt": "Date",
			"_owner": "ID"
		},
		{},
		{}
	],
	"paging": {
		"pageNumber": "Number",
		"pageRowCount": "NUmber",
		"totalRowCount": "Number",
		"pageCount": "Number"
	},
	"filters": [],
	"uiPermissions": []
}
```


### `List Quotaconfigs` API
**[Default list API]** — This is the designated default `list` API for the `quotaConfig` data object. Frontend generators and AI agents should use this API for standard CRUD operations.
List quota configuration records.


**Rest Route**

The `listQuotaConfigs` API REST controller can be triggered via the following route:

`/v1/quotaconfigs`


**Rest Request Parameters**
The `listQuotaConfigs` api has got no request parameters.    




**REST Request**
To access the api you can use the **REST** controller with the path **GET  /v1/quotaconfigs**
```js
  axios({
    method: 'GET',
    url: '/v1/quotaconfigs',
    data: {
    
    },
    params: {
    
        }
  });
```   
**REST Response**


```json
{
	"status": "OK",
	"statusCode": "200",
	"elapsedMs": 126,
	"ssoTime": 120,
	"source": "db",
	"cacheKey": "hexCode",
	"userId": "ID",
	"sessionId": "ID",
	"requestId": "ID",
	"dataName": "quotaConfigs",
	"method": "GET",
	"action": "list",
	"appVersion": "Version",
	"rowCount": "\"Number\"",
	"quotaConfigs": [
		{
			"id": "ID",
			"quotaLimit": "Integer",
			"quotaPeriod": "Enum",
			"quotaPeriod_idx": "Integer",
			"isActive": true,
			"recordVersion": "Integer",
			"createdAt": "Date",
			"updatedAt": "Date",
			"_owner": "ID"
		},
		{},
		{}
	],
	"paging": {
		"pageNumber": "Number",
		"pageRowCount": "NUmber",
		"totalRowCount": "Number",
		"pageCount": "Number"
	},
	"filters": [],
	"uiPermissions": []
}
```


### `List Trainingprograms` API
**[Default list API]** — This is the designated default `list` API for the `trainingProgram` data object. Frontend generators and AI agents should use this API for standard CRUD operations.
List training programs. Users see their own programs, admins can see all.


**Rest Route**

The `listTrainingPrograms` API REST controller can be triggered via the following route:

`/v1/trainingprograms`


**Rest Request Parameters**



**Filter Parameters**

The `listTrainingPrograms` api supports 2 optional filter parameters for filtering list results:

**status** (`Enum`): Program status

- Single: `?status=<value>` (case-insensitive)
- Multiple: `?status=<value1>&status=<value2>`
- Null: `?status=null`


**userId** (`ID`): Reference to the user who owns this training program

- Single: `?userId=<value>`
- Multiple: `?userId=<value1>&userId=<value2>`
- Null: `?userId=null`



**REST Request**
To access the api you can use the **REST** controller with the path **GET  /v1/trainingprograms**
```js
  axios({
    method: 'GET',
    url: '/v1/trainingprograms',
    data: {
    
    },
    params: {
    
        // Filter parameters (see Filter Parameters section above)
        // status: '<value>' // Filter by status
        // userId: '<value>' // Filter by userId
            }
  });
```   
**REST Response**


```json
{
	"status": "OK",
	"statusCode": "200",
	"elapsedMs": 126,
	"ssoTime": 120,
	"source": "db",
	"cacheKey": "hexCode",
	"userId": "ID",
	"sessionId": "ID",
	"requestId": "ID",
	"dataName": "trainingPrograms",
	"method": "GET",
	"action": "list",
	"appVersion": "Version",
	"rowCount": "\"Number\"",
	"trainingPrograms": [
		{
			"id": "ID",
			"cardioDurationMinutes": "Integer",
			"cardioFrequencyPerWeek": "Integer",
			"cardioType": "String",
			"dailyStepTarget": "Integer",
			"deloadIntervalWeeks": "Integer",
			"notes": "Text",
			"splitType": "String",
			"status": "Enum",
			"status_idx": "Integer",
			"userId": "ID",
			"isActive": true,
			"recordVersion": "Integer",
			"createdAt": "Date",
			"updatedAt": "Date",
			"_owner": "ID"
		},
		{},
		{}
	],
	"paging": {
		"pageNumber": "Number",
		"pageRowCount": "NUmber",
		"totalRowCount": "Number",
		"pageCount": "Number"
	},
	"filters": [],
	"uiPermissions": []
}
```


### `List Userquotas` API
**[Default list API]** — This is the designated default `list` API for the `userQuota` data object. Frontend generators and AI agents should use this API for standard CRUD operations.
List all user quotas. Admin only.


**Rest Route**

The `listUserQuotas` API REST controller can be triggered via the following route:

`/v1/userquotas`


**Rest Request Parameters**



**Filter Parameters**

The `listUserQuotas` api supports 1 optional filter parameter for filtering list results:

**userId** (`ID`): Reference to the user whose quota is being tracked

- Single: `?userId=<value>`
- Multiple: `?userId=<value1>&userId=<value2>`
- Null: `?userId=null`



**REST Request**
To access the api you can use the **REST** controller with the path **GET  /v1/userquotas**
```js
  axios({
    method: 'GET',
    url: '/v1/userquotas',
    data: {
    
    },
    params: {
    
        // Filter parameters (see Filter Parameters section above)
        // userId: '<value>' // Filter by userId
            }
  });
```   
**REST Response**


```json
{
	"status": "OK",
	"statusCode": "200",
	"elapsedMs": 126,
	"ssoTime": 120,
	"source": "db",
	"cacheKey": "hexCode",
	"userId": "ID",
	"sessionId": "ID",
	"requestId": "ID",
	"dataName": "userQuotas",
	"method": "GET",
	"action": "list",
	"appVersion": "Version",
	"rowCount": "\"Number\"",
	"userQuotas": [
		{
			"id": "ID",
			"messageCount": "Integer",
			"periodEnd": "Date",
			"periodStart": "Date",
			"userId": "ID",
			"isActive": true,
			"recordVersion": "Integer",
			"createdAt": "Date",
			"updatedAt": "Date",
			"_owner": "ID"
		},
		{},
		{}
	],
	"paging": {
		"pageNumber": "Number",
		"pageRowCount": "NUmber",
		"totalRowCount": "Number",
		"pageCount": "Number"
	},
	"filters": [],
	"uiPermissions": []
}
```


### `List Weightlogs` API
**[Default list API]** — This is the designated default `list` API for the `weightLog` data object. Frontend generators and AI agents should use this API for standard CRUD operations.
List weight log entries. Users see their own, admins see all.


**Rest Route**

The `listWeightLogs` API REST controller can be triggered via the following route:

`/v1/weightlogs`


**Rest Request Parameters**
The `listWeightLogs` api has got no request parameters.    




**REST Request**
To access the api you can use the **REST** controller with the path **GET  /v1/weightlogs**
```js
  axios({
    method: 'GET',
    url: '/v1/weightlogs',
    data: {
    
    },
    params: {
    
        }
  });
```   
**REST Response**


```json
{
	"status": "OK",
	"statusCode": "200",
	"elapsedMs": 126,
	"ssoTime": 120,
	"source": "db",
	"cacheKey": "hexCode",
	"userId": "ID",
	"sessionId": "ID",
	"requestId": "ID",
	"dataName": "weightLogs",
	"method": "GET",
	"action": "list",
	"appVersion": "Version",
	"rowCount": "\"Number\"",
	"weightLogs": [
		{
			"id": "ID",
			"measuredAt": "Date",
			"userId": "ID",
			"weightKg": "Float",
			"isActive": true,
			"recordVersion": "Integer",
			"createdAt": "Date",
			"updatedAt": "Date",
			"_owner": "ID"
		},
		{},
		{}
	],
	"paging": {
		"pageNumber": "Number",
		"pageRowCount": "NUmber",
		"totalRowCount": "Number",
		"pageCount": "Number"
	},
	"filters": [],
	"uiPermissions": []
}
```


### `Update Quotaconfig` API
**[Default update API]** — This is the designated default `update` API for the `quotaConfig` data object. Frontend generators and AI agents should use this API for standard CRUD operations.
Update a quota configuration record. Admin only.


**Rest Route**

The `updateQuotaConfig` API REST controller can be triggered via the following route:

`/v1/quotaconfigs/:quotaConfigId`


**Rest Request Parameters**


The `updateQuotaConfig` api has got 3 regular request parameters  

| Parameter              | Type                   | Required | Population                   |
| ---------------------- | ---------------------- | -------- | ---------------------------- |
| quotaConfigId  | ID  | true | request.params?.["quotaConfigId"] |
| quotaLimit  | Integer  | false | request.body?.["quotaLimit"] |
| quotaPeriod  | Enum  | false | request.body?.["quotaPeriod"] |
**quotaConfigId** : This id paremeter is used to select the required data object that will be updated
**quotaLimit** : Maximum messages allowed per period
**quotaPeriod** : Period over which the quota is measured



**REST Request**
To access the api you can use the **REST** controller with the path **PATCH  /v1/quotaconfigs/:quotaConfigId**
```js
  axios({
    method: 'PATCH',
    url: `/v1/quotaconfigs/${quotaConfigId}`,
    data: {
            quotaLimit:"Integer",  
            quotaPeriod:"Enum",  
    
    },
    params: {
    
        }
  });
```   
**REST Response**


```json
{
	"status": "OK",
	"statusCode": "200",
	"elapsedMs": 126,
	"ssoTime": 120,
	"source": "db",
	"cacheKey": "hexCode",
	"userId": "ID",
	"sessionId": "ID",
	"requestId": "ID",
	"dataName": "quotaConfig",
	"method": "PATCH",
	"action": "update",
	"appVersion": "Version",
	"rowCount": 1,
	"quotaConfig": {
		"id": "ID",
		"quotaLimit": "Integer",
		"quotaPeriod": "Enum",
		"quotaPeriod_idx": "Integer",
		"isActive": true,
		"recordVersion": "Integer",
		"createdAt": "Date",
		"updatedAt": "Date",
		"_owner": "ID"
	}
}
```


### `Delete Moderationrecord` API



**Rest Route**

The `deleteModerationRecord` API REST controller can be triggered via the following route:

`/v1/moderationrecords/:moderationRecordId`


**Rest Request Parameters**


The `deleteModerationRecord` api has got 1 regular request parameter  

| Parameter              | Type                   | Required | Population                   |
| ---------------------- | ---------------------- | -------- | ---------------------------- |
| moderationRecordId  | ID  | true | request.params?.["moderationRecordId"] |
**moderationRecordId** : This id paremeter is used to select the required data object that will be deleted



**REST Request**
To access the api you can use the **REST** controller with the path **DELETE  /v1/moderationrecords/:moderationRecordId**
```js
  axios({
    method: 'DELETE',
    url: `/v1/moderationrecords/${moderationRecordId}`,
    data: {
    
    },
    params: {
    
        }
  });
```   
**REST Response**


```json
{
	"status": "OK",
	"statusCode": "200",
	"elapsedMs": 126,
	"ssoTime": 120,
	"source": "db",
	"cacheKey": "hexCode",
	"userId": "ID",
	"sessionId": "ID",
	"requestId": "ID",
	"dataName": "moderationRecord",
	"method": "DELETE",
	"action": "delete",
	"appVersion": "Version",
	"rowCount": 1,
	"moderationRecord": {
		"id": "ID",
		"action": "Enum",
		"action_idx": "Integer",
		"offenseType": "String",
		"reason": "Text",
		"suspensionExpiresAt": "Date",
		"userId": "ID",
		"content": "String",
		"recordVersion": "Integer",
		"createdAt": "Date",
		"updatedAt": "Date",
		"_owner": "ID",
		"isActive": false
	}
}
```


### `Do Deletemealplan` API



**Rest Route**

The `deletemealplan` API REST controller can be triggered via the following route:

`/v1/deletemealplan/:mealPlanId`


**Rest Request Parameters**


The `deletemealplan` api has got 1 regular request parameter  

| Parameter              | Type                   | Required | Population                   |
| ---------------------- | ---------------------- | -------- | ---------------------------- |
| mealPlanId  | ID  | true | request.params?.["mealPlanId"] |
**mealPlanId** : This id paremeter is used to select the required data object that will be deleted



**REST Request**
To access the api you can use the **REST** controller with the path **DELETE  /v1/deletemealplan/:mealPlanId**
```js
  axios({
    method: 'DELETE',
    url: `/v1/deletemealplan/${mealPlanId}`,
    data: {
    
    },
    params: {
    
        }
  });
```   
**REST Response**


```json
{
	"status": "OK",
	"statusCode": "200",
	"elapsedMs": 126,
	"ssoTime": 120,
	"source": "db",
	"cacheKey": "hexCode",
	"userId": "ID",
	"sessionId": "ID",
	"requestId": "ID",
	"dataName": "mealPlan",
	"method": "DELETE",
	"action": "delete",
	"appVersion": "Version",
	"rowCount": 1,
	"mealPlan": {
		"id": "ID",
		"carbGrams": "Float",
		"dailyCalorieTarget": "Integer",
		"fatGrams": "Float",
		"notes": "Text",
		"proteinGrams": "Float",
		"restDayCalories": "Integer",
		"restDayCarbGrams": "Float",
		"status": "Enum",
		"status_idx": "Integer",
		"trainingDayCalories": "Integer",
		"trainingDayCarbGrams": "Float",
		"userId": "ID",
		"isActive": false,
		"recordVersion": "Integer",
		"createdAt": "Date",
		"updatedAt": "Date",
		"_owner": "ID"
	}
}
```


### `Do Deletetrainingprogram` API



**Rest Route**

The `deletetrainingprogram` API REST controller can be triggered via the following route:

`/v1/deletetrainingprogram/:trainingProgramId`


**Rest Request Parameters**


The `deletetrainingprogram` api has got 1 regular request parameter  

| Parameter              | Type                   | Required | Population                   |
| ---------------------- | ---------------------- | -------- | ---------------------------- |
| trainingProgramId  | ID  | true | request.params?.["trainingProgramId"] |
**trainingProgramId** : This id paremeter is used to select the required data object that will be deleted



**REST Request**
To access the api you can use the **REST** controller with the path **DELETE  /v1/deletetrainingprogram/:trainingProgramId**
```js
  axios({
    method: 'DELETE',
    url: `/v1/deletetrainingprogram/${trainingProgramId}`,
    data: {
    
    },
    params: {
    
        }
  });
```   
**REST Response**


```json
{
	"status": "OK",
	"statusCode": "200",
	"elapsedMs": 126,
	"ssoTime": 120,
	"source": "db",
	"cacheKey": "hexCode",
	"userId": "ID",
	"sessionId": "ID",
	"requestId": "ID",
	"dataName": "trainingProgram",
	"method": "DELETE",
	"action": "delete",
	"appVersion": "Version",
	"rowCount": 1,
	"trainingProgram": {
		"id": "ID",
		"cardioDurationMinutes": "Integer",
		"cardioFrequencyPerWeek": "Integer",
		"cardioType": "String",
		"dailyStepTarget": "Integer",
		"deloadIntervalWeeks": "Integer",
		"notes": "Text",
		"splitType": "String",
		"status": "Enum",
		"status_idx": "Integer",
		"userId": "ID",
		"isActive": false,
		"recordVersion": "Integer",
		"createdAt": "Date",
		"updatedAt": "Date",
		"_owner": "ID"
	}
}
```


### `Update Moderationrecord` API



**Rest Route**

The `updateModerationRecord` API REST controller can be triggered via the following route:

`/v1/moderationrecords/:moderationRecordId`


**Rest Request Parameters**


The `updateModerationRecord` api has got 3 regular request parameters  

| Parameter              | Type                   | Required | Population                   |
| ---------------------- | ---------------------- | -------- | ---------------------------- |
| moderationRecordId  | ID  | true | request.params?.["moderationRecordId"] |
| action  | String  | true | request.body?.["action"] |
| content  | String  | false | request.body?.["content"] |
**moderationRecordId** : This id paremeter is used to select the required data object that will be updated
**action** : 
**content** : 



**REST Request**
To access the api you can use the **REST** controller with the path **PATCH  /v1/moderationrecords/:moderationRecordId**
```js
  axios({
    method: 'PATCH',
    url: `/v1/moderationrecords/${moderationRecordId}`,
    data: {
            action:"String",  
            content:"String",  
    
    },
    params: {
    
        }
  });
```   
**REST Response**


```json
{
	"status": "OK",
	"statusCode": "200",
	"elapsedMs": 126,
	"ssoTime": 120,
	"source": "db",
	"cacheKey": "hexCode",
	"userId": "ID",
	"sessionId": "ID",
	"requestId": "ID",
	"dataName": "moderationRecord",
	"method": "PATCH",
	"action": "update",
	"appVersion": "Version",
	"rowCount": 1,
	"moderationRecord": {
		"id": "ID",
		"action": "Enum",
		"action_idx": "Integer",
		"offenseType": "String",
		"reason": "Text",
		"suspensionExpiresAt": "Date",
		"userId": "ID",
		"content": "String",
		"recordVersion": "Integer",
		"createdAt": "Date",
		"updatedAt": "Date",
		"_owner": "ID",
		"isActive": true
	}
}
```


### `Do Listmymoderationrecords` API



**Rest Route**

The `listmymoderationrecords` API REST controller can be triggered via the following route:

`/v1/listmymoderationrecords`


**Rest Request Parameters**



**Filter Parameters**

The `listmymoderationrecords` api supports 1 optional filter parameter for filtering list results:

**action** (`Enum`): Moderation action taken

- Single: `?action=<value>` (case-insensitive)
- Multiple: `?action=<value1>&action=<value2>`
- Null: `?action=null`



**REST Request**
To access the api you can use the **REST** controller with the path **GET  /v1/listmymoderationrecords**
```js
  axios({
    method: 'GET',
    url: '/v1/listmymoderationrecords',
    data: {
    
    },
    params: {
    
        // Filter parameters (see Filter Parameters section above)
        // action: '<value>' // Filter by action
            }
  });
```   
**REST Response**


```json
{
	"status": "OK",
	"statusCode": "200",
	"elapsedMs": 126,
	"ssoTime": 120,
	"source": "db",
	"cacheKey": "hexCode",
	"userId": "ID",
	"sessionId": "ID",
	"requestId": "ID",
	"dataName": "moderationRecords",
	"method": "GET",
	"action": "list",
	"appVersion": "Version",
	"rowCount": "\"Number\"",
	"moderationRecords": [
		{
			"id": "ID",
			"action": "Enum",
			"action_idx": "Integer",
			"offenseType": "String",
			"reason": "Text",
			"suspensionExpiresAt": "Date",
			"userId": "ID",
			"content": "String",
			"recordVersion": "Integer",
			"createdAt": "Date",
			"updatedAt": "Date",
			"_owner": "ID",
			"isActive": true
		},
		{},
		{}
	],
	"paging": {
		"pageNumber": "Number",
		"pageRowCount": "NUmber",
		"totalRowCount": "Number",
		"pageCount": "Number"
	},
	"filters": [],
	"uiPermissions": []
}
```


### `List Banappeals` API



**Rest Route**

The `listBanAppeals` API REST controller can be triggered via the following route:

`/v1/banappealses`


**Rest Request Parameters**


The `listBanAppeals` api has got 2 regular request parameters  

| Parameter              | Type                   | Required | Population                   |
| ---------------------- | ---------------------- | -------- | ---------------------------- |
| userId  | ID  | false | request.query?.["userId"] |
| status  | ID  | false | request.query?.["status"] |
**userId** : 
**status** : 



**REST Request**
To access the api you can use the **REST** controller with the path **GET  /v1/banappealses**
```js
  axios({
    method: 'GET',
    url: '/v1/banappealses',
    data: {
    
    },
    params: {
             userId:'"ID"',  
             status:'"ID"',  
    
        }
  });
```   
**REST Response**


```json
{
	"status": "OK",
	"statusCode": "200",
	"elapsedMs": 126,
	"ssoTime": 120,
	"source": "db",
	"cacheKey": "hexCode",
	"userId": "ID",
	"sessionId": "ID",
	"requestId": "ID",
	"dataName": "banAppealses",
	"method": "GET",
	"action": "list",
	"appVersion": "Version",
	"rowCount": "\"Number\"",
	"banAppealses": [
		{
			"id": "ID",
			"moderationRecordId": "ID",
			"userId": "ID",
			"appealReason": "String",
			"status": "Enum",
			"status_idx": "Integer",
			"isActive": true,
			"recordVersion": "Integer",
			"createdAt": "Date",
			"updatedAt": "Date",
			"_owner": "ID",
			"showmoderationRecord": [
				{
					"offenseType": "String",
					"reason": "Text",
					"userId": "ID",
					"content": "String"
				},
				{},
				{}
			]
		},
		{},
		{}
	],
	"paging": {
		"pageNumber": "Number",
		"pageRowCount": "NUmber",
		"totalRowCount": "Number",
		"pageCount": "Number"
	},
	"filters": [],
	"uiPermissions": []
}
```


### `Create Banappeal` API



**Rest Route**

The `createBanAppeal` API REST controller can be triggered via the following route:

`/v1/banappeal`


**Rest Request Parameters**


The `createBanAppeal` api has got 3 regular request parameters  

| Parameter              | Type                   | Required | Population                   |
| ---------------------- | ---------------------- | -------- | ---------------------------- |
| moderationRecordId  | ID  | true | request.body?.["moderationRecordId"] |
| appealReason  | String  | true | request.body?.["appealReason"] |
| status  | Enum  | true | request.body?.["status"] |
**moderationRecordId** : id of the mod record
**appealReason** : 
**status** : 



**REST Request**
To access the api you can use the **REST** controller with the path **POST  /v1/banappeal**
```js
  axios({
    method: 'POST',
    url: '/v1/banappeal',
    data: {
            moderationRecordId:"ID",  
            appealReason:"String",  
            status:"Enum",  
    
    },
    params: {
    
        }
  });
```   
**REST Response**


```json
{
	"status": "OK",
	"statusCode": "201",
	"elapsedMs": 126,
	"ssoTime": 120,
	"source": "db",
	"cacheKey": "hexCode",
	"userId": "ID",
	"sessionId": "ID",
	"requestId": "ID",
	"dataName": "banAppeals",
	"method": "POST",
	"action": "create",
	"appVersion": "Version",
	"rowCount": 1,
	"banAppeals": {
		"id": "ID",
		"moderationRecordId": "ID",
		"userId": "ID",
		"appealReason": "String",
		"status": "Enum",
		"status_idx": "Integer",
		"isActive": true,
		"recordVersion": "Integer",
		"createdAt": "Date",
		"updatedAt": "Date",
		"_owner": "ID"
	}
}
```


### `Update Banappeal` API



**Rest Route**

The `updateBanAppeal` API REST controller can be triggered via the following route:

`/v1/banappeal/:banAppealsId`


**Rest Request Parameters**


The `updateBanAppeal` api has got 4 regular request parameters  

| Parameter              | Type                   | Required | Population                   |
| ---------------------- | ---------------------- | -------- | ---------------------------- |
| banAppealsId  | ID  | true | request.params?.["banAppealsId"] |
| status  | Enum  | true | request.body?.["status"] |
| moderationRecordId  | ID  | false | request.body?.["moderationRecordId"] |
| appealReason  | String  | false | request.body?.["appealReason"] |
**banAppealsId** : This id paremeter is used to select the required data object that will be updated
**status** : 
**moderationRecordId** : id of the mod record
**appealReason** : 



**REST Request**
To access the api you can use the **REST** controller with the path **PATCH  /v1/banappeal/:banAppealsId**
```js
  axios({
    method: 'PATCH',
    url: `/v1/banappeal/${banAppealsId}`,
    data: {
            status:"Enum",  
            moderationRecordId:"ID",  
            appealReason:"String",  
    
    },
    params: {
    
        }
  });
```   
**REST Response**


```json
{
	"status": "OK",
	"statusCode": "200",
	"elapsedMs": 126,
	"ssoTime": 120,
	"source": "db",
	"cacheKey": "hexCode",
	"userId": "ID",
	"sessionId": "ID",
	"requestId": "ID",
	"dataName": "banAppeals",
	"method": "PATCH",
	"action": "update",
	"appVersion": "Version",
	"rowCount": 1,
	"banAppeals": {
		"id": "ID",
		"moderationRecordId": "ID",
		"userId": "ID",
		"appealReason": "String",
		"status": "Enum",
		"status_idx": "Integer",
		"isActive": true,
		"recordVersion": "Integer",
		"createdAt": "Date",
		"updatedAt": "Date",
		"_owner": "ID"
	}
}
```


### `Create Additionalquota` API



**Rest Route**

The `createAdditionalQuota` API REST controller can be triggered via the following route:

`/v1/additionalquotas`


**Rest Request Parameters**


The `createAdditionalQuota` api has got 9 regular request parameters  

| Parameter              | Type                   | Required | Population                   |
| ---------------------- | ---------------------- | -------- | ---------------------------- |
| additionalMessage  | Integer  | true | request.body?.["additionalMessage"] |
| status  | Enum  | true | request.body?.["status"] |
| currency  | String  | true | request.body?.["currency"] |
| pricePaid  | Integer  | true | request.body?.["pricePaid"] |
| statusUpdatedAt  | Date  | false | request.body?.["statusUpdatedAt"] |
| activatedAt  | Date  | false | request.body?.["activatedAt"] |
| cancelledAt  | Date  | false | request.body?.["cancelledAt"] |
| periodEnd  | Date  | false | request.body?.["periodEnd"] |
| periodStart  | Date  | false | request.body?.["periodStart"] |
**additionalMessage** : 
**status** : 
**currency** : 
**pricePaid** : 
**statusUpdatedAt** : 
**activatedAt** : 
**cancelledAt** : 
**periodEnd** : 
**periodStart** : 



**REST Request**
To access the api you can use the **REST** controller with the path **POST  /v1/additionalquotas**
```js
  axios({
    method: 'POST',
    url: '/v1/additionalquotas',
    data: {
            additionalMessage:"Integer",  
            status:"Enum",  
            currency:"String",  
            pricePaid:"Integer",  
            statusUpdatedAt:"Date",  
            activatedAt:"Date",  
            cancelledAt:"Date",  
            periodEnd:"Date",  
            periodStart:"Date",  
    
    },
    params: {
    
        }
  });
```   
**REST Response**


```json
{
	"status": "OK",
	"statusCode": "201",
	"elapsedMs": 126,
	"ssoTime": 120,
	"source": "db",
	"cacheKey": "hexCode",
	"userId": "ID",
	"sessionId": "ID",
	"requestId": "ID",
	"dataName": "additionalQuota",
	"method": "POST",
	"action": "create",
	"appVersion": "Version",
	"rowCount": 1,
	"additionalQuota": {
		"id": "ID",
		"userId": "String",
		"additionalMessage": "Integer",
		"status": "Enum",
		"status_idx": "Integer",
		"currency": "String",
		"pricePaid": "Integer",
		"statusUpdatedAt": "Date",
		"activatedAt": "Date",
		"cancelledAt": "Date",
		"periodEnd": "Date",
		"periodStart": "Date",
		"paymentConfirmation": "Enum",
		"paymentConfirmation_idx": "Integer",
		"isActive": true,
		"recordVersion": "Integer",
		"createdAt": "Date",
		"updatedAt": "Date",
		"_owner": "ID"
	}
}
```


### `Get Myadditionalquota` API



**Rest Route**

The `getMyAdditionalQuota` API REST controller can be triggered via the following route:

`/v1/myadditionalquota`


**Rest Request Parameters**
The `getMyAdditionalQuota` api has got no request parameters.    




**REST Request**
To access the api you can use the **REST** controller with the path **GET  /v1/myadditionalquota**
```js
  axios({
    method: 'GET',
    url: '/v1/myadditionalquota',
    data: {
    
    },
    params: {
    
        }
  });
```   
**REST Response**


```json
{
	"status": "OK",
	"statusCode": "200",
	"elapsedMs": 126,
	"ssoTime": 120,
	"source": "db",
	"cacheKey": "hexCode",
	"userId": "ID",
	"sessionId": "ID",
	"requestId": "ID",
	"dataName": "additionalQuota",
	"method": "GET",
	"action": "get",
	"appVersion": "Version",
	"rowCount": 1,
	"additionalQuota": {
		"id": "ID",
		"userId": "String",
		"additionalMessage": "Integer",
		"status": "Enum",
		"status_idx": "Integer",
		"currency": "String",
		"pricePaid": "Integer",
		"statusUpdatedAt": "Date",
		"activatedAt": "Date",
		"cancelledAt": "Date",
		"periodEnd": "Date",
		"periodStart": "Date",
		"paymentConfirmation": "Enum",
		"paymentConfirmation_idx": "Integer",
		"isActive": true,
		"recordVersion": "Integer",
		"createdAt": "Date",
		"updatedAt": "Date",
		"_owner": "ID"
	},
	"myaddQuota": "Object"
}
```


### `Get Additionalquotapayment` API
This route is used to get the payment information by ID.


**Rest Route**

The `getAdditionalQuotaPayment` API REST controller can be triggered via the following route:

`/v1/additionalquotapayment/:sys_additionalQuotaPaymentId`


**Rest Request Parameters**


The `getAdditionalQuotaPayment` api has got 1 regular request parameter  

| Parameter              | Type                   | Required | Population                   |
| ---------------------- | ---------------------- | -------- | ---------------------------- |
| sys_additionalQuotaPaymentId  | ID  | true | request.params?.["sys_additionalQuotaPaymentId"] |
**sys_additionalQuotaPaymentId** : This id paremeter is used to query the required data object.



**REST Request**
To access the api you can use the **REST** controller with the path **GET  /v1/additionalquotapayment/:sys_additionalQuotaPaymentId**
```js
  axios({
    method: 'GET',
    url: `/v1/additionalquotapayment/${sys_additionalQuotaPaymentId}`,
    data: {
    
    },
    params: {
    
        }
  });
```   
**REST Response**


```json
{
	"status": "OK",
	"statusCode": "200",
	"elapsedMs": 126,
	"ssoTime": 120,
	"source": "db",
	"cacheKey": "hexCode",
	"userId": "ID",
	"sessionId": "ID",
	"requestId": "ID",
	"dataName": "sys_additionalQuotaPayment",
	"method": "GET",
	"action": "get",
	"appVersion": "Version",
	"rowCount": 1,
	"sys_additionalQuotaPayment": {
		"id": "ID",
		"ownerId": "ID",
		"orderId": "ID",
		"paymentId": "String",
		"paymentStatus": "String",
		"statusLiteral": "String",
		"redirectUrl": "String",
		"isActive": true,
		"recordVersion": "Integer",
		"createdAt": "Date",
		"updatedAt": "Date",
		"_owner": "ID"
	}
}
```


### `List Additionalquotapayments` API
This route is used to list all payments.


**Rest Route**

The `listAdditionalQuotaPayments` API REST controller can be triggered via the following route:

`/v1/additionalquotapayments`


**Rest Request Parameters**



**Filter Parameters**

The `listAdditionalQuotaPayments` api supports 6 optional filter parameters for filtering list results:

**ownerId** (`ID`):  An ID value to represent owner user who created the order

- Single: `?ownerId=<value>`
- Multiple: `?ownerId=<value1>&ownerId=<value2>`
- Null: `?ownerId=null`


**orderId** (`ID`): an ID value to represent the orderId which is the ID parameter of the source additionalQuota object

- Single: `?orderId=<value>`
- Multiple: `?orderId=<value1>&orderId=<value2>`
- Null: `?orderId=null`


**paymentId** (`String`): A String value to represent the paymentId which is generated on the Stripe gateway. This id may represent different objects due to the payment gateway and the chosen flow type

- Single (partial match, case-insensitive): `?paymentId=<value>`
- Multiple: `?paymentId=<value1>&paymentId=<value2>`
- Null: `?paymentId=null`


**paymentStatus** (`String`): A string value to represent the payment status which belongs to the lifecyle of a Stripe payment.

- Single (partial match, case-insensitive): `?paymentStatus=<value>`
- Multiple: `?paymentStatus=<value1>&paymentStatus=<value2>`
- Null: `?paymentStatus=null`


**statusLiteral** (`String`): A string value to represent the logical payment status which belongs to the application lifecycle itself.

- Single (partial match, case-insensitive): `?statusLiteral=<value>`
- Multiple: `?statusLiteral=<value1>&statusLiteral=<value2>`
- Null: `?statusLiteral=null`


**redirectUrl** (`String`): A string value to represent return page of the frontend to show the result of the payment, this is used when the callback is made to server not the client.

- Single (partial match, case-insensitive): `?redirectUrl=<value>`
- Multiple: `?redirectUrl=<value1>&redirectUrl=<value2>`
- Null: `?redirectUrl=null`



**REST Request**
To access the api you can use the **REST** controller with the path **GET  /v1/additionalquotapayments**
```js
  axios({
    method: 'GET',
    url: '/v1/additionalquotapayments',
    data: {
    
    },
    params: {
    
        // Filter parameters (see Filter Parameters section above)
        // ownerId: '<value>' // Filter by ownerId
        // orderId: '<value>' // Filter by orderId
        // paymentId: '<value>' // Filter by paymentId
        // paymentStatus: '<value>' // Filter by paymentStatus
        // statusLiteral: '<value>' // Filter by statusLiteral
        // redirectUrl: '<value>' // Filter by redirectUrl
            }
  });
```   
**REST Response**


```json
{
	"status": "OK",
	"statusCode": "200",
	"elapsedMs": 126,
	"ssoTime": 120,
	"source": "db",
	"cacheKey": "hexCode",
	"userId": "ID",
	"sessionId": "ID",
	"requestId": "ID",
	"dataName": "sys_additionalQuotaPayments",
	"method": "GET",
	"action": "list",
	"appVersion": "Version",
	"rowCount": "\"Number\"",
	"sys_additionalQuotaPayments": [
		{
			"id": "ID",
			"ownerId": "ID",
			"orderId": "ID",
			"paymentId": "String",
			"paymentStatus": "String",
			"statusLiteral": "String",
			"redirectUrl": "String",
			"isActive": true,
			"recordVersion": "Integer",
			"createdAt": "Date",
			"updatedAt": "Date",
			"_owner": "ID"
		},
		{},
		{}
	],
	"paging": {
		"pageNumber": "Number",
		"pageRowCount": "NUmber",
		"totalRowCount": "Number",
		"pageCount": "Number"
	},
	"filters": [],
	"uiPermissions": []
}
```


### `Create Additionalquotapayment` API
This route is used to create a new payment.


**Rest Route**

The `createAdditionalQuotaPayment` API REST controller can be triggered via the following route:

`/v1/additionalquotapayment`


**Rest Request Parameters**


The `createAdditionalQuotaPayment` api has got 5 regular request parameters  

| Parameter              | Type                   | Required | Population                   |
| ---------------------- | ---------------------- | -------- | ---------------------------- |
| orderId  | ID  | true | request.body?.["orderId"] |
| paymentId  | String  | true | request.body?.["paymentId"] |
| paymentStatus  | String  | true | request.body?.["paymentStatus"] |
| statusLiteral  | String  | true | request.body?.["statusLiteral"] |
| redirectUrl  | String  | false | request.body?.["redirectUrl"] |
**orderId** : an ID value to represent the orderId which is the ID parameter of the source additionalQuota object
**paymentId** : A String value to represent the paymentId which is generated on the Stripe gateway. This id may represent different objects due to the payment gateway and the chosen flow type
**paymentStatus** : A string value to represent the payment status which belongs to the lifecyle of a Stripe payment.
**statusLiteral** : A string value to represent the logical payment status which belongs to the application lifecycle itself.
**redirectUrl** : A string value to represent return page of the frontend to show the result of the payment, this is used when the callback is made to server not the client.



**REST Request**
To access the api you can use the **REST** controller with the path **POST  /v1/additionalquotapayment**
```js
  axios({
    method: 'POST',
    url: '/v1/additionalquotapayment',
    data: {
            orderId:"ID",  
            paymentId:"String",  
            paymentStatus:"String",  
            statusLiteral:"String",  
            redirectUrl:"String",  
    
    },
    params: {
    
        }
  });
```   
**REST Response**


```json
{
	"status": "OK",
	"statusCode": "201",
	"elapsedMs": 126,
	"ssoTime": 120,
	"source": "db",
	"cacheKey": "hexCode",
	"userId": "ID",
	"sessionId": "ID",
	"requestId": "ID",
	"dataName": "sys_additionalQuotaPayment",
	"method": "POST",
	"action": "create",
	"appVersion": "Version",
	"rowCount": 1,
	"sys_additionalQuotaPayment": {
		"id": "ID",
		"ownerId": "ID",
		"orderId": "ID",
		"paymentId": "String",
		"paymentStatus": "String",
		"statusLiteral": "String",
		"redirectUrl": "String",
		"isActive": true,
		"recordVersion": "Integer",
		"createdAt": "Date",
		"updatedAt": "Date",
		"_owner": "ID"
	}
}
```


### `Update Additionalquotapayment` API
This route is used to update an existing payment.


**Rest Route**

The `updateAdditionalQuotaPayment` API REST controller can be triggered via the following route:

`/v1/additionalquotapayment/:sys_additionalQuotaPaymentId`


**Rest Request Parameters**


The `updateAdditionalQuotaPayment` api has got 5 regular request parameters  

| Parameter              | Type                   | Required | Population                   |
| ---------------------- | ---------------------- | -------- | ---------------------------- |
| sys_additionalQuotaPaymentId  | ID  | true | request.params?.["sys_additionalQuotaPaymentId"] |
| paymentId  | String  | false | request.body?.["paymentId"] |
| paymentStatus  | String  | false | request.body?.["paymentStatus"] |
| statusLiteral  | String  | false | request.body?.["statusLiteral"] |
| redirectUrl  | String  | false | request.body?.["redirectUrl"] |
**sys_additionalQuotaPaymentId** : This id paremeter is used to select the required data object that will be updated
**paymentId** : A String value to represent the paymentId which is generated on the Stripe gateway. This id may represent different objects due to the payment gateway and the chosen flow type
**paymentStatus** : A string value to represent the payment status which belongs to the lifecyle of a Stripe payment.
**statusLiteral** : A string value to represent the logical payment status which belongs to the application lifecycle itself.
**redirectUrl** : A string value to represent return page of the frontend to show the result of the payment, this is used when the callback is made to server not the client.



**REST Request**
To access the api you can use the **REST** controller with the path **PATCH  /v1/additionalquotapayment/:sys_additionalQuotaPaymentId**
```js
  axios({
    method: 'PATCH',
    url: `/v1/additionalquotapayment/${sys_additionalQuotaPaymentId}`,
    data: {
            paymentId:"String",  
            paymentStatus:"String",  
            statusLiteral:"String",  
            redirectUrl:"String",  
    
    },
    params: {
    
        }
  });
```   
**REST Response**


```json
{
	"status": "OK",
	"statusCode": "200",
	"elapsedMs": 126,
	"ssoTime": 120,
	"source": "db",
	"cacheKey": "hexCode",
	"userId": "ID",
	"sessionId": "ID",
	"requestId": "ID",
	"dataName": "sys_additionalQuotaPayment",
	"method": "PATCH",
	"action": "update",
	"appVersion": "Version",
	"rowCount": 1,
	"sys_additionalQuotaPayment": {
		"id": "ID",
		"ownerId": "ID",
		"orderId": "ID",
		"paymentId": "String",
		"paymentStatus": "String",
		"statusLiteral": "String",
		"redirectUrl": "String",
		"isActive": true,
		"recordVersion": "Integer",
		"createdAt": "Date",
		"updatedAt": "Date",
		"_owner": "ID"
	}
}
```


### `Delete Additionalquotapayment` API
This route is used to delete a payment.


**Rest Route**

The `deleteAdditionalQuotaPayment` API REST controller can be triggered via the following route:

`/v1/additionalquotapayment/:sys_additionalQuotaPaymentId`


**Rest Request Parameters**


The `deleteAdditionalQuotaPayment` api has got 1 regular request parameter  

| Parameter              | Type                   | Required | Population                   |
| ---------------------- | ---------------------- | -------- | ---------------------------- |
| sys_additionalQuotaPaymentId  | ID  | true | request.params?.["sys_additionalQuotaPaymentId"] |
**sys_additionalQuotaPaymentId** : This id paremeter is used to select the required data object that will be deleted



**REST Request**
To access the api you can use the **REST** controller with the path **DELETE  /v1/additionalquotapayment/:sys_additionalQuotaPaymentId**
```js
  axios({
    method: 'DELETE',
    url: `/v1/additionalquotapayment/${sys_additionalQuotaPaymentId}`,
    data: {
    
    },
    params: {
    
        }
  });
```   
**REST Response**


```json
{
	"status": "OK",
	"statusCode": "200",
	"elapsedMs": 126,
	"ssoTime": 120,
	"source": "db",
	"cacheKey": "hexCode",
	"userId": "ID",
	"sessionId": "ID",
	"requestId": "ID",
	"dataName": "sys_additionalQuotaPayment",
	"method": "DELETE",
	"action": "delete",
	"appVersion": "Version",
	"rowCount": 1,
	"sys_additionalQuotaPayment": {
		"id": "ID",
		"ownerId": "ID",
		"orderId": "ID",
		"paymentId": "String",
		"paymentStatus": "String",
		"statusLiteral": "String",
		"redirectUrl": "String",
		"isActive": false,
		"recordVersion": "Integer",
		"createdAt": "Date",
		"updatedAt": "Date",
		"_owner": "ID"
	}
}
```


### `Get Additionalquotapaymentbyorderid` API
This route is used to get the payment information by order id.


**Rest Route**

The `getAdditionalQuotaPaymentByOrderId` API REST controller can be triggered via the following route:

`/v1/additionalQuotapaymentbyorderid/:orderId`


**Rest Request Parameters**


The `getAdditionalQuotaPaymentByOrderId` api has got 1 regular request parameter  

| Parameter              | Type                   | Required | Population                   |
| ---------------------- | ---------------------- | -------- | ---------------------------- |
| orderId  | ID  | true | request.params?.["orderId"] |
**orderId** : an ID value to represent the orderId which is the ID parameter of the source additionalQuota object. The parameter is used to query data.



**REST Request**
To access the api you can use the **REST** controller with the path **GET  /v1/additionalQuotapaymentbyorderid/:orderId**
```js
  axios({
    method: 'GET',
    url: `/v1/additionalQuotapaymentbyorderid/${orderId}`,
    data: {
    
    },
    params: {
    
        }
  });
```   
**REST Response**


```json
{
	"status": "OK",
	"statusCode": "200",
	"elapsedMs": 126,
	"ssoTime": 120,
	"source": "db",
	"cacheKey": "hexCode",
	"userId": "ID",
	"sessionId": "ID",
	"requestId": "ID",
	"dataName": "sys_additionalQuotaPayment",
	"method": "GET",
	"action": "get",
	"appVersion": "Version",
	"rowCount": 1,
	"sys_additionalQuotaPayment": {
		"id": "ID",
		"ownerId": "ID",
		"orderId": "ID",
		"paymentId": "String",
		"paymentStatus": "String",
		"statusLiteral": "String",
		"redirectUrl": "String",
		"isActive": true,
		"recordVersion": "Integer",
		"createdAt": "Date",
		"updatedAt": "Date",
		"_owner": "ID"
	}
}
```


### `Get Additionalquotapaymentbypaymentid` API
This route is used to get the payment information by payment id.


**Rest Route**

The `getAdditionalQuotaPaymentByPaymentId` API REST controller can be triggered via the following route:

`/v1/additionalQuotapaymentbypaymentid/:paymentId`


**Rest Request Parameters**


The `getAdditionalQuotaPaymentByPaymentId` api has got 1 regular request parameter  

| Parameter              | Type                   | Required | Population                   |
| ---------------------- | ---------------------- | -------- | ---------------------------- |
| paymentId  | String  | true | request.params?.["paymentId"] |
**paymentId** : A String value to represent the paymentId which is generated on the Stripe gateway. This id may represent different objects due to the payment gateway and the chosen flow type. The parameter is used to query data.



**REST Request**
To access the api you can use the **REST** controller with the path **GET  /v1/additionalQuotapaymentbypaymentid/:paymentId**
```js
  axios({
    method: 'GET',
    url: `/v1/additionalQuotapaymentbypaymentid/${paymentId}`,
    data: {
    
    },
    params: {
    
        }
  });
```   
**REST Response**


```json
{
	"status": "OK",
	"statusCode": "200",
	"elapsedMs": 126,
	"ssoTime": 120,
	"source": "db",
	"cacheKey": "hexCode",
	"userId": "ID",
	"sessionId": "ID",
	"requestId": "ID",
	"dataName": "sys_additionalQuotaPayment",
	"method": "GET",
	"action": "get",
	"appVersion": "Version",
	"rowCount": 1,
	"sys_additionalQuotaPayment": {
		"id": "ID",
		"ownerId": "ID",
		"orderId": "ID",
		"paymentId": "String",
		"paymentStatus": "String",
		"statusLiteral": "String",
		"redirectUrl": "String",
		"isActive": true,
		"recordVersion": "Integer",
		"createdAt": "Date",
		"updatedAt": "Date",
		"_owner": "ID"
	}
}
```


### `Start Additionalquotapayment` API
Start payment for additionalQuota


**Rest Route**

The `startAdditionalQuotaPayment` API REST controller can be triggered via the following route:

`/v1/startadditionalquotapayment/:additionalQuotaId`


**Rest Request Parameters**


The `startAdditionalQuotaPayment` api has got 2 regular request parameters  

| Parameter              | Type                   | Required | Population                   |
| ---------------------- | ---------------------- | -------- | ---------------------------- |
| additionalQuotaId  | ID  | true | request.params?.["additionalQuotaId"] |
| paymentUserParams  | Object  | true | request.body?.["paymentUserParams"] |
**additionalQuotaId** : This id paremeter is used to select the required data object that will be updated
**paymentUserParams** : The user parameters that should be defined to start a stripe payment process. Must include paymentMethodId.



**REST Request**
To access the api you can use the **REST** controller with the path **PATCH  /v1/startadditionalquotapayment/:additionalQuotaId**
```js
  axios({
    method: 'PATCH',
    url: `/v1/startadditionalquotapayment/${additionalQuotaId}`,
    data: {
            paymentUserParams:"Object",  
    
    },
    params: {
    
        }
  });
```   
**REST Response**


```json
{
	"status": "OK",
	"statusCode": "200",
	"elapsedMs": 126,
	"ssoTime": 120,
	"source": "db",
	"cacheKey": "hexCode",
	"userId": "ID",
	"sessionId": "ID",
	"requestId": "ID",
	"dataName": "additionalQuota",
	"method": "PATCH",
	"action": "update",
	"appVersion": "Version",
	"rowCount": 1,
	"additionalQuota": {
		"id": "ID",
		"userId": "String",
		"additionalMessage": "Integer",
		"status": "Enum",
		"status_idx": "Integer",
		"currency": "String",
		"pricePaid": "Integer",
		"statusUpdatedAt": "Date",
		"activatedAt": "Date",
		"cancelledAt": "Date",
		"periodEnd": "Date",
		"periodStart": "Date",
		"paymentConfirmation": "Enum",
		"paymentConfirmation_idx": "Integer",
		"isActive": true,
		"recordVersion": "Integer",
		"createdAt": "Date",
		"updatedAt": "Date",
		"_owner": "ID"
	},
	"paymentResult": {
		"paymentTicketId": "ID",
		"orderId": "ID",
		"paymentId": "String",
		"paymentStatus": "Enum",
		"paymentIntentInfo": "Object",
		"statusLiteral": "String",
		"amount": "Double",
		"currency": "String",
		"success": true,
		"description": "String",
		"metadata": "Object",
		"paymentUserParams": "Object"
	}
}
```


### `Refresh Additionalquotapayment` API
Refresh payment info for additionalQuota from Stripe


**Rest Route**

The `refreshAdditionalQuotaPayment` API REST controller can be triggered via the following route:

`/v1/refreshadditionalquotapayment/:additionalQuotaId`


**Rest Request Parameters**


The `refreshAdditionalQuotaPayment` api has got 2 regular request parameters  

| Parameter              | Type                   | Required | Population                   |
| ---------------------- | ---------------------- | -------- | ---------------------------- |
| additionalQuotaId  | ID  | true | request.params?.["additionalQuotaId"] |
| paymentUserParams  | Object  | false | request.body?.["paymentUserParams"] |
**additionalQuotaId** : This id paremeter is used to select the required data object that will be updated
**paymentUserParams** : The user parameters that should be defined to refresh a stripe payment process



**REST Request**
To access the api you can use the **REST** controller with the path **PATCH  /v1/refreshadditionalquotapayment/:additionalQuotaId**
```js
  axios({
    method: 'PATCH',
    url: `/v1/refreshadditionalquotapayment/${additionalQuotaId}`,
    data: {
            paymentUserParams:"Object",  
    
    },
    params: {
    
        }
  });
```   
**REST Response**


```json
{
	"status": "OK",
	"statusCode": "200",
	"elapsedMs": 126,
	"ssoTime": 120,
	"source": "db",
	"cacheKey": "hexCode",
	"userId": "ID",
	"sessionId": "ID",
	"requestId": "ID",
	"dataName": "additionalQuota",
	"method": "PATCH",
	"action": "update",
	"appVersion": "Version",
	"rowCount": 1,
	"additionalQuota": {
		"id": "ID",
		"userId": "String",
		"additionalMessage": "Integer",
		"status": "Enum",
		"status_idx": "Integer",
		"currency": "String",
		"pricePaid": "Integer",
		"statusUpdatedAt": "Date",
		"activatedAt": "Date",
		"cancelledAt": "Date",
		"periodEnd": "Date",
		"periodStart": "Date",
		"paymentConfirmation": "Enum",
		"paymentConfirmation_idx": "Integer",
		"isActive": true,
		"recordVersion": "Integer",
		"createdAt": "Date",
		"updatedAt": "Date",
		"_owner": "ID"
	},
	"paymentResult": {
		"paymentTicketId": "ID",
		"orderId": "ID",
		"paymentId": "String",
		"paymentStatus": "Enum",
		"paymentIntentInfo": "Object",
		"statusLiteral": "String",
		"amount": "Double",
		"currency": "String",
		"success": true,
		"description": "String",
		"metadata": "Object",
		"paymentUserParams": "Object"
	}
}
```


### `Callback Additionalquotapayment` API
Refresh payment values by gateway webhook call for additionalQuota


**Rest Route**

The `callbackAdditionalQuotaPayment` API REST controller can be triggered via the following route:

`/v1/callbackadditionalquotapayment`


**Rest Request Parameters**


The `callbackAdditionalQuotaPayment` api has got 1 regular request parameter  

| Parameter              | Type                   | Required | Population                   |
| ---------------------- | ---------------------- | -------- | ---------------------------- |
| additionalQuotaId  | ID  | false | request.body?.["additionalQuotaId"] |
**additionalQuotaId** : The order id parameter that will be read from webhook callback params



**REST Request**
To access the api you can use the **REST** controller with the path **POST  /v1/callbackadditionalquotapayment**
```js
  axios({
    method: 'POST',
    url: '/v1/callbackadditionalquotapayment',
    data: {
            additionalQuotaId:"ID",  
    
    },
    params: {
    
        }
  });
```   
**REST Response**


```json
{
	"status": "OK",
	"statusCode": "200",
	"elapsedMs": 126,
	"ssoTime": 120,
	"source": "db",
	"cacheKey": "hexCode",
	"userId": "ID",
	"sessionId": "ID",
	"requestId": "ID",
	"dataName": "additionalQuota",
	"method": "POST",
	"action": "update",
	"appVersion": "Version",
	"rowCount": 1,
	"additionalQuota": {
		"id": "ID",
		"userId": "String",
		"additionalMessage": "Integer",
		"status": "Enum",
		"status_idx": "Integer",
		"currency": "String",
		"pricePaid": "Integer",
		"statusUpdatedAt": "Date",
		"activatedAt": "Date",
		"cancelledAt": "Date",
		"periodEnd": "Date",
		"periodStart": "Date",
		"paymentConfirmation": "Enum",
		"paymentConfirmation_idx": "Integer",
		"isActive": true,
		"recordVersion": "Integer",
		"createdAt": "Date",
		"updatedAt": "Date",
		"_owner": "ID"
	},
	"paymentResult": {
		"paymentTicketId": "ID",
		"orderId": "ID",
		"paymentId": "String",
		"paymentStatus": "Enum",
		"paymentIntentInfo": "Object",
		"statusLiteral": "String",
		"amount": "Double",
		"currency": "String",
		"success": true,
		"description": "String",
		"metadata": "Object",
		"paymentUserParams": "Object"
	}
}
```


### `Get Paymentcustomerbyuserid` API
This route is used to get the payment customer information by user id.


**Rest Route**

The `getPaymentCustomerByUserId` API REST controller can be triggered via the following route:

`/v1/paymentcustomers/:userId`


**Rest Request Parameters**


The `getPaymentCustomerByUserId` api has got 1 regular request parameter  

| Parameter              | Type                   | Required | Population                   |
| ---------------------- | ---------------------- | -------- | ---------------------------- |
| userId  | ID  | true | request.params?.["userId"] |
**userId** :  An ID value to represent the user who is created as a stripe customer. The parameter is used to query data.



**REST Request**
To access the api you can use the **REST** controller with the path **GET  /v1/paymentcustomers/:userId**
```js
  axios({
    method: 'GET',
    url: `/v1/paymentcustomers/${userId}`,
    data: {
    
    },
    params: {
    
        }
  });
```   
**REST Response**


```json
{
	"status": "OK",
	"statusCode": "200",
	"elapsedMs": 126,
	"ssoTime": 120,
	"source": "db",
	"cacheKey": "hexCode",
	"userId": "ID",
	"sessionId": "ID",
	"requestId": "ID",
	"dataName": "sys_paymentCustomer",
	"method": "GET",
	"action": "get",
	"appVersion": "Version",
	"rowCount": 1,
	"sys_paymentCustomer": {
		"id": "ID",
		"userId": "ID",
		"customerId": "String",
		"platform": "String",
		"isActive": true,
		"recordVersion": "Integer",
		"createdAt": "Date",
		"updatedAt": "Date",
		"_owner": "ID"
	}
}
```


### `List Paymentcustomers` API
This route is used to list all payment customers.


**Rest Route**

The `listPaymentCustomers` API REST controller can be triggered via the following route:

`/v1/paymentcustomers`


**Rest Request Parameters**



**Filter Parameters**

The `listPaymentCustomers` api supports 3 optional filter parameters for filtering list results:

**userId** (`ID`):  An ID value to represent the user who is created as a stripe customer

- Single: `?userId=<value>`
- Multiple: `?userId=<value1>&userId=<value2>`
- Null: `?userId=null`


**customerId** (`String`): A string value to represent the customer id which is generated on the Stripe gateway. This id is used to represent the customer in the Stripe gateway

- Single (partial match, case-insensitive): `?customerId=<value>`
- Multiple: `?customerId=<value1>&customerId=<value2>`
- Null: `?customerId=null`


**platform** (`String`): A String value to represent payment platform which is used to make the payment. It is stripe as default. It will be used to distinguesh the payment gateways in the future.

- Single (partial match, case-insensitive): `?platform=<value>`
- Multiple: `?platform=<value1>&platform=<value2>`
- Null: `?platform=null`



**REST Request**
To access the api you can use the **REST** controller with the path **GET  /v1/paymentcustomers**
```js
  axios({
    method: 'GET',
    url: '/v1/paymentcustomers',
    data: {
    
    },
    params: {
    
        // Filter parameters (see Filter Parameters section above)
        // userId: '<value>' // Filter by userId
        // customerId: '<value>' // Filter by customerId
        // platform: '<value>' // Filter by platform
            }
  });
```   
**REST Response**


```json
{
	"status": "OK",
	"statusCode": "200",
	"elapsedMs": 126,
	"ssoTime": 120,
	"source": "db",
	"cacheKey": "hexCode",
	"userId": "ID",
	"sessionId": "ID",
	"requestId": "ID",
	"dataName": "sys_paymentCustomers",
	"method": "GET",
	"action": "list",
	"appVersion": "Version",
	"rowCount": "\"Number\"",
	"sys_paymentCustomers": [
		{
			"id": "ID",
			"userId": "ID",
			"customerId": "String",
			"platform": "String",
			"isActive": true,
			"recordVersion": "Integer",
			"createdAt": "Date",
			"updatedAt": "Date",
			"_owner": "ID"
		},
		{},
		{}
	],
	"paging": {
		"pageNumber": "Number",
		"pageRowCount": "NUmber",
		"totalRowCount": "Number",
		"pageCount": "Number"
	},
	"filters": [],
	"uiPermissions": []
}
```


### `List Paymentcustomermethods` API
This route is used to list all payment customer methods.


**Rest Route**

The `listPaymentCustomerMethods` API REST controller can be triggered via the following route:

`/v1/paymentcustomermethods/:userId`


**Rest Request Parameters**


The `listPaymentCustomerMethods` api has got 1 regular request parameter  

| Parameter              | Type                   | Required | Population                   |
| ---------------------- | ---------------------- | -------- | ---------------------------- |
| userId  | ID  | true | request.params?.["userId"] |
**userId** :  An ID value to represent the user who owns the payment method. The parameter is used to query data.


**Filter Parameters**

The `listPaymentCustomerMethods` api supports 6 optional filter parameters for filtering list results:

**paymentMethodId** (`String`): A string value to represent the id of the payment method on the payment platform.

- Single (partial match, case-insensitive): `?paymentMethodId=<value>`
- Multiple: `?paymentMethodId=<value1>&paymentMethodId=<value2>`
- Null: `?paymentMethodId=null`


**customerId** (`String`): A string value to represent the customer id which is generated on the payment gateway.

- Single (partial match, case-insensitive): `?customerId=<value>`
- Multiple: `?customerId=<value1>&customerId=<value2>`
- Null: `?customerId=null`


**cardHolderName** (`String`): A string value to represent the name of the card holder. It can be different than the registered customer.

- Single (partial match, case-insensitive): `?cardHolderName=<value>`
- Multiple: `?cardHolderName=<value1>&cardHolderName=<value2>`
- Null: `?cardHolderName=null`


**cardHolderZip** (`String`): A string value to represent the zip code of the card holder. It is used for address verification in specific countries.

- Single (partial match, case-insensitive): `?cardHolderZip=<value>`
- Multiple: `?cardHolderZip=<value1>&cardHolderZip=<value2>`
- Null: `?cardHolderZip=null`


**platform** (`String`): A String value to represent payment platform which teh paymentMethod belongs. It is stripe as default. It will be used to distinguesh the payment gateways in the future.

- Single (partial match, case-insensitive): `?platform=<value>`
- Multiple: `?platform=<value1>&platform=<value2>`
- Null: `?platform=null`


**cardInfo** (`Object`): A Json value to store the card details of the payment method.

- Single: `?cardInfo=<value>`
- Multiple: `?cardInfo=<value1>&cardInfo=<value2>`
- Null: `?cardInfo=null`


**REST Request**
To access the api you can use the **REST** controller with the path **GET  /v1/paymentcustomermethods/:userId**
```js
  axios({
    method: 'GET',
    url: `/v1/paymentcustomermethods/${userId}`,
    data: {
    
    },
    params: {
    
        // Filter parameters (see Filter Parameters section above)
        // paymentMethodId: '<value>' // Filter by paymentMethodId
        // customerId: '<value>' // Filter by customerId
        // cardHolderName: '<value>' // Filter by cardHolderName
        // cardHolderZip: '<value>' // Filter by cardHolderZip
        // platform: '<value>' // Filter by platform
        // cardInfo: '<value>' // Filter by cardInfo
            }
  });
```   
**REST Response**


```json
{
	"status": "OK",
	"statusCode": "200",
	"elapsedMs": 126,
	"ssoTime": 120,
	"source": "db",
	"cacheKey": "hexCode",
	"userId": "ID",
	"sessionId": "ID",
	"requestId": "ID",
	"dataName": "sys_paymentMethods",
	"method": "GET",
	"action": "list",
	"appVersion": "Version",
	"rowCount": "\"Number\"",
	"sys_paymentMethods": [
		{
			"id": "ID",
			"paymentMethodId": "String",
			"userId": "ID",
			"customerId": "String",
			"cardHolderName": "String",
			"cardHolderZip": "String",
			"platform": "String",
			"cardInfo": "Object",
			"isActive": true,
			"recordVersion": "Integer",
			"createdAt": "Date",
			"updatedAt": "Date",
			"_owner": "ID"
		},
		{},
		{}
	],
	"paging": {
		"pageNumber": "Number",
		"pageRowCount": "NUmber",
		"totalRowCount": "Number",
		"pageCount": "Number"
	},
	"filters": [],
	"uiPermissions": []
}
```



**After this prompt, the user may give you new instructions to update the output of this prompt or provide subsequent prompts about the project.**


