User guide
Time Tracking
Looking for what it does rather than how to use it? Read the Time Tracking overview .
What it is
Time Tracking records how long people spend on tickets and projects, either by running a timer or by entering minutes after the fact. Logged time is reviewed by an administrator, and only approved billable time can be turned into an invoice.
Concepts
| Concept | What it is |
|---|---|
| Time entry | A recorded block of work: a date, a duration in minutes, a description, and a billable flag. Attached to a ticket or project. |
| Running timer | A live clock owned by one person. Not a time entry until stopped. One per person at a time. |
| Billable | Whether the work can be charged to the client. Internal rework is logged but marked non-billable. |
| Approved | An administrator has reviewed the entry. Approval locks it against editing and makes it eligible for invoicing. |
| Invoiced | The entry has been attached to an invoice. It can no longer be unapproved or deleted. |
| Hourly rate | Copied onto the entry when it is created, from the person’s rate unless one is supplied. Stored per entry, so later rate changes do not rewrite past work. |
The lifecycle
┌──────────────┐
start ───▶│ timer running│──── discard ───▶ (nothing recorded)
└──────┬───────┘
│ stop
▼
┌───────────┐ approve ┌──────────┐ invoice ┌──────────┐
manual entry ▶│ pending │────────────▶│ approved │────────────▶│ invoiced │
└───────────┘◀────────────└──────────┘ └──────────┘
editable, unapprove locked locked,
deletable cannot unapprove
A running timer is deliberately not a zero-duration time entry. If it were, the invoicing queries — which look for billable, approved, un-invoiced rows — could sweep up work that was still in progress.
Roles and permissions
| Action | Customer | Power User | MSP Technician | Org Admin | MSP Admin | Platform Admin |
|---|---|---|---|---|---|---|
| Log time / run a timer | API | ● | ● | ● | ● | ● |
| Edit or delete own pending time | API | ● | ● | ● | ● | ● |
| Approve / unapprove time | — | — | — | ● | ● | ● |
| Invoice ticket time | — | — | ● | ● | ● | ● |
| Invoice project T&M time | — | — | ● | ● | ● | ● |
● = available in the interface · API = permitted by the API but not surfaced in any portal · — = refused
Time tracking is a staff function, surfaced in the MSP and Organization portals. The end-user portal has no time-entry or approval screens.
Approving is a role set, not a rank. Solidlio’s role hierarchy ranks MSP technician above organization administrator, so a simple “minimum role” test would have admitted every technician — the people whose own time is under review. Approval is restricted to an explicit set: platform administrator, MSP administrator, organization administrator.
Administrators can approve their own time. A one-person MSP has nobody else to do it, and blocking it would leave that time permanently un-invoiceable.
Invoicing routes use the standard requireMinRole floor, which is why MSP technician appears there — it outranks organization administrator in the hierarchy.
Walkthroughs
Run a timer on a ticket
- Open the ticket — Tickets → <ticket> → Time (MSP portal) or the Time Entries panel on the ticket (Org portal).
- Optionally type what you are working on, and set Billable.
- Press Start timer. The clock runs server-side, so it survives a page reload, a different browser, a move between the MSP and Org portals, or a switch to the mobile app.
- When you finish, press Stop & log. The elapsed minutes become a time entry, rounded up to at least one minute.
- Press Discard instead if the time should not be recorded at all.
Only one timer runs per person. Starting a second returns a conflict rather than silently replacing the first — the elapsed work is yours, not the system’s to discard. If a timer is running on another ticket, the panel says so and names it.
Run a timer on mobile
- Open the ticket in the Solidlio mobile app and select the Time tab.
- Press Start timer, optionally describing the work and setting Billable.
- Press Stop & log to record it, or Discard to throw it away.
It is the same timer as the web: a clock started at your desk appears here, and one started here can be stopped from the browser. With no connection the clock still runs, stored on the device; when the app reconnects it reconciles using the original start time rather than restarting from zero. If a timer was started offline and never reached the server, stopping it writes the time entry directly instead of trying to stop a timer the server has never heard of.
Log time manually
- Open the ticket and press Log Time.
- Enter the date, the duration in minutes, and a description.
- Set Billable as appropriate.
- Save. The entry appears in the ticket’s time list and in Time Approvals.
Log time against a project
- Open the project — Projects → <project> → Billing.
- Press Log time.
- Enter the date, minutes, description, and whether it is billable.
- Save. It goes to Time Approvals like ticket time.
Approve time
- Go to Operations → Time Approvals (available in both the MSP and Org portals).
- The default filter shows everything awaiting approval. Toggle Billable only to focus on chargeable work.
- Review each row: who, what, how long, and which ticket or project.
- Press Approve on a row, or Approve all N shown to work through the filtered set.
Bulk approval runs one row at a time and stops at the first failure, naming the entry it stopped at — so a partial run never leaves you guessing which ones went through.
- To correct a mistake before approval, press Edit to change the date, minutes, description, or billable flag, or Delete to remove it.
- To reopen an approved entry, press Unapprove. This fails once the entry has been invoiced.
Invoice ticket time
- Go to Clients → <client>.
- The Bill unbilled time panel previews every billable, approved, un-invoiced entry for that organization.
- Raise the invoice. Each entry is billed at its own stored hourly rate, and is stamped with the invoice so it cannot be billed twice.
Invoice project time (T&M)
- Open the project’s Billing tab. The tiles show Hours logged, Ready to invoice, and Awaiting approval.
- Press Invoice unbilled time. This is offered only for
TIME_AND_MATERIALSandHYBRIDprojects; other billing types are rejected. - Enter the bill rate per hour. Unlike ticket invoicing, project T&M uses one agreed rate for the whole invoice rather than each person’s rate.
- Raise the invoice. Only billable, approved, un-invoiced time is included — the dialog warns you when billable time is still awaiting approval.
Configuration
| Setting | Where | Effect if unset |
|---|---|---|
| Person’s hourly rate | The person’s profile | Entries are created with no rate; they still log and approve, but contribute nothing to billable-value totals and to ticket-time invoices. |
| Entry hourly rate | Supplied when creating time | Falls back to the person’s rate at the moment the entry is created. |
| Billable flag | Per entry, per timer | Defaults to billable. |
| Project billing type | Project settings | Only TIME_AND_MATERIALS and HYBRID can invoice logged time. |
| Project bill rate | Entered per invoice run | Required — the T&M invoice is rejected without it. |
Plan tiers
Time tracking carries no plan gate. Every capability described in this guide is available on every plan. Logging, timers, approval and invoicing are not restricted by subscription tier.
Troubleshooting
| Message | Cause |
|---|---|
A timer is already running. Stop it before starting another. | One timer per person. Stop or discard the running one first. |
Either ticketId or projectId is required | A time entry or timer must attach to a ticket or a project. |
Cannot modify approved time entries | Unapprove it first — and it must not be invoiced. |
Cannot delete approved time entries | Same: approval locks the entry. |
Cannot delete invoiced time entries | The entry is on an invoice. Credit the invoice instead. |
Cannot unapprove invoiced time entries | Approval cannot be withdrawn after billing. |
Approving time requires an organization or MSP administrator | The caller is a technician, power user, or customer. Ask an administrator. |
Customer-portal users cannot approve time | Approval is a staff function. |
No billable, approved and un-invoiced time entries found | The project has time, but none of it is simultaneously billable, approved and un-invoiced. Check the Awaiting approval tile. |
Time invoicing is only available for T&M or Hybrid billing projects | Fixed-price projects bill from billing milestones instead. |
Timer not found (404) when stopping | You can only stop your own timer. |
Limits and known behaviour
- One running timer per person. Enforced by a unique constraint, not by convention. There is no way to run two clocks at once.
- Timers round up. A timer stopped after 30 seconds records one minute. Zero-duration entries would be invisible in every total.
- A stopped timer is always unapproved. The timer is not a route around the approval gate.
- Assets cannot be timed. Time entries have no asset link.
- Editing is minutes-based. Durations are entered and stored as whole minutes, not start/end clock times.
- Rates are snapshotted at creation. Changing a person’s hourly rate does not restate time already logged.
- Project T&M invoicing uses one flat rate for the whole run, unlike ticket invoicing which uses each entry’s own rate.
- Approval is per entry. There is no timesheet-period submission or multi-step approval chain.
- Mobile covers the timer, not approval. The mobile app runs and stops timers on tickets; approving and invoicing are web-only.
- Manual project time entry is web-only. Mobile logs time against tickets.
- No plan gating. Time tracking is not restricted by subscription tier.