POST
TeamHours.StartStop
Start or stop the logged-in user employee Time clock (header Start Work). Uses MySQL team_hours, same as dashboard Setting::team_hours_setting. status=1 means running, status=0 means stopped. Distinct from WorkingTime.StartStop which timers work against a customer (time_counter). Alias: TeamHours.Setting.
Permissions
- User must be logged in with a valid bearer token.
- Returned or changed records are limited by the user permissions, team access, folder access, and account settings.
Action
- Updates the requested TeamHours record after validating permissions and input fields.
Push Service
Pushes team_hours.started or team_hours.stopped so open dashboards can refresh the clock.
Automation
Runs team_hours.started or team_hours.stopped after a successful write when automation is configured.
Special Instructions
- Send the bearer token on protected calls with Authorization: Bearer YOUR TOKEN.
- Send parameters as POST body fields exactly as documented.
- Send date/time values in UTC Y-m-d H:i:s format when a date or datetime field is used.
Required Parameters
No body parameters are required for this function.
Optional Parameters
| Name | Type | Sample | What it gives |
|---|---|---|---|
timer_actionpost | string | start | start or stop. Dashboard-compatible alias: val (1=start, 0=stop). One of timer_action or val is required. |
valpost | int | 1 | Dashboard field: 1 starts the clock, 0 stops it. |
team_hours_idpost | int | 55 | Active row id when stopping. Optional; if omitted, the running row for this user is used. Aliases: id, data_id. |
project_idpost | int | 0 | Optional project linked when starting (dashboard team_hours_project_id). |
notepost | string | End of day | Optional note stored when stopping (dashboard stop modal). |
Authentication
Send the bearer token returned by Login in the request header.
Authorization: Bearer YOUR TOKEN
Sample Request
{
"url": "\/app\/TeamHours.StartStop",
"method": "POST",
"headers": {
"Authorization": "Bearer YOUR TOKEN"
},
"body": {
"timer_action": "start",
"project_id": "0"
},
"url_user": "https:\/\/{user}.bull36.com\/app\/TeamHours.StartStop",
"url_domain": "https:\/\/{domain}\/app\/TeamHours.StartStop"
}Endpoint
POST /app/TeamHours.StartStop
POST https://{user}.bull36.com/app/TeamHours.StartStop
POST https://{domain}/app/TeamHours.StartStopSample Output
{
"success": 1,
"message": "Time counter updated.",
"type": "start",
"id": 55,
"team_hours_id": 55,
"data": {
"id": 55,
"status": 1,
"running": true,
"elapsed": "00:00:00"
},
"socket_event": "team_hours.started"
}JavaScript Example
const token = 'YOUR TOKEN';
const body = new URLSearchParams();
body.set('timer_action', 'start');
const res = await fetch('/app/TeamHours.StartStop', { method: 'POST', headers: { Authorization: 'Bearer ' + token }, body });
console.log(await res.json());Error Example
{
"success": 0,
"message": "Timer is already start"
}