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 work on tickets, projects, direct customers and escalation assignments, 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.
A daily workflow that survives interruptions
Open My time in Platform, MSP or Organization. The timer bar stays visible while you navigate.
- Choose the ticket, project, customer or escalation and start a timer. A short note is enough. Only one timer runs per person, across tabs and portals.
- When attention moves, choose the next issue and Save current & switch. The previous session is saved and the next starts in one transaction. A failed switch retains the current timer.
- Use the optional 15, 30 or 60 minute check-in. Browser inactivity is a reminder to review, not evidence that someone stopped working. A timer over two hours requires explicit worked minutes before saving, including through the API. Stop and review before breaks; resume from the week’s list when returning.
- If funding or another issue blocks saving, enter worked minutes and a note, then Keep in review inbox. The clock is freed for your next task. The saved capture retains its original client, owner, start time and rate. It cannot be invoiced until the issue is resolved and it becomes pending time. Your inbox remains visible across weeks. If work will not be charged, choose Record as non-billable when saving it; keep the actual work record instead of discarding it.
- I forgot to track earlier records a date, minutes and a short explanation. Only enter work you can reasonably account for. Unfinished form contents survive navigation/reload in the same browser tab. Retried captures use a stable identifier to avoid duplicate entries.
- Before finishing the day, check your week, saved captures and gaps. Administrators review pending work, correct missing rates/currencies, then approve it. Recover unbilled time lists old pending and approved work across customers, with pages for the whole backlog. Create draft invoices from eligible approved entries, then review/send those invoices separately.
Timers and catch-up entries never charge a customer automatically. Internal organizations and non-billable projects remain non-billable. The employing MSP remains the owner when its technician enters a delegated client workspace. Platform and MSP branding do not create a second legal seller.
Escalation completion waits for running timers and saved captures to be resolved. Escalation captures stay on the assignment’s billing path: provider membership, assigned technician, agreed rates, funding and authorized effort remain enforced. The recovery page links to escalation completion and billing; it does not bill those minutes again as ordinary customer labour.
The mobile ticket timer accepts reviewed worked minutes and updated notes. Offline starts retain their original time until explicitly stopped; reconnecting does not replace them with a new clock. Offline captures are queued durably before the local timer is removed and carry a retry identifier. Offline entries resolve their billing owner and rate when synchronized, so review them before approval if the account context or rates changed while offline. The full daily workspace and saved-capture inbox are web surfaces.
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, project or customer; escalation time follows its assignment ledger. |
| 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. - Use the stored entry rates, or explicitly supply the agreed project rate for this invoice. An effective project resource allocation rate is captured when work is recorded; otherwise the person rate is captured.
- 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 remain reviewable, but invoicing is held until an agreed rate is entered. Missing rates are identified in the review and recovery screens. |
| 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 | Optional explicit override; without it, stored entry rates are used and missing rates hold invoicing. |
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 and owner/currency are snapshotted. Timers capture their rate at start; manual project entries use the allocation effective on the work date. Changing a person rate does not reprice saved history. Missing rates and currency conflicts hold invoicing.
- Project T&M invoicing uses stored entry rates, with an optional explicit agreed-rate override. Only the selected approved entries are consumed when billing from recovery.
- 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.
Accounting evidence and boundaries
A saved timer retains original start/end timestamps and confirmed minutes. Its work date uses the start timezone (one session belongs to its starting calendar day). Elapsed minutes round up to whole minutes; short sessions are at least one minute. Review before approval when rounding or interruptions affect the claim. One minute at $150/hour produces $2.50 before tax, without rounding to 0.02 hours. Services revenue classification, seller tax configuration and payment terms carry through to draft invoices.
Approved commercial facts are locked at the database boundary. Unapprove unbilled time before correcting it; invoiced entries cannot be unapproved, reassigned or edited. Ticket merges retain approved/invoiced time on the original ticket and keep the merge relation as history. Concurrent invoice requests claim the entries atomically; a losing request cannot leave a duplicate draft.
Historical entries without an ownership snapshot remain visible under the existing tenant scope. Historical missing rates require explicit review; the system does not silently replace them with a technician’s current rate. Browser check-ins require an open page and are optional; they are not background push reminders or automatic activity surveillance.