Skip to content
Development
Skill

/time-entries

ConnectWise PSA time entry management: charge-to types (tickets, projects, charge codes), billable vs non-billable time, work types and work roles, time sheets, and the time entry approval workflow.

From plugin
msp-claude-plugins
52200 skills146 agents200 commands4 MCP

Claude Code

$ npx -y skills add wyre-ai/msp-claude-plugins --skill time-entries --agent claude-code

SKILL.md

time-entries.SKILL.md
name: "ConnectWise Manage Time Entries"
description: >
  ConnectWise PSA time entry management: charge-to types (tickets, projects,
  charge codes), billable vs non-billable time, work types and work roles,
  time sheets, and the time entry approval workflow.
when_to_use: >-
  When creating, updating, searching, or managing time tracking. Use when: connectwise time entry,
  time tracking connectwise, log time connectwise, billable time, non-billable time, work type,
  work role, time sheet, time approval, or hours logged.

ConnectWise PSA Time Entry Management

Overview

Time entries in ConnectWise PSA track time spent on tickets, projects, and other activities. Accurate time tracking is essential for billing, resource management, and profitability analysis. This skill covers time entry CRUD operations, work types, work roles, billing settings, and approval workflows.

Anti-triggers

  • **Writing up what happened on a ticket** — narrative goes in a ticket

note (`cw_add_ticket_note`); only billable duration belongs in a time entry. Use `connectwise-psa-tickets`.

  • **Project time** — project hours charge to a `ProjectTicket`, so the

ticket has to be located first; use `connectwise-psa-projects`.

MCP Tools

| Tool | Tier | Purpose | |------|------|---------| | `cw_search_time_entries` / `cw_get_time_entry` | read | Find and read time entries | | `cw_create_time_entry` | write | Log time against a ticket, project ticket or activity | | `cw_update_time_entry` | write | Correct hours, notes, work type or billable option on an existing entry | | `cw_delete_time_entry` | write | Remove a mistaken entry. Check it has not been invoiced first: deleting billed time leaves the invoice and the ticket disagreeing | | `cw_update_invoice` | write | Edit an invoice record (for example after time corrections), when the operator asks for it |

Prefer `cw_update_time_entry` over delete-and-recreate, so the entry keeps its ID and audit history.

API Endpoint

Base: /time/entries

Time Entry Types

Time can be logged against different record types:

| Charge To Type | Description | |----------------|-------------| | `ServiceTicket` | Time against service tickets | | `ProjectTicket` | Time against project tickets | | `ChargeCode` | Time against charge codes (internal) | | `Activity` | Time against activities |

See [references/fields.md](references/fields.md) for the complete time entry field reference.

Work Types

Work types categorize the nature of work performed.

| Type | Description | Typical Billing | |------|-------------|-----------------| | Regular | Normal work hours | Billable | | Overtime | After-hours work | 1.5x rate | | Training | Training time | Non-billable | | Travel | Travel time | Varies | | Remote | Remote support | Billable | | On-site | On-site work | Billable | | Administrative | Admin tasks | Non-billable |

Query `GET /time/workTypes` for the configured list.

Work Roles

Work roles determine billing rates based on skill level.

| Role | Description | Typical Rate | |------|-------------|--------------| | Level 1 Tech | Help desk | $75-100/hr | | Level 2 Tech | Desktop support | $100-125/hr | | Level 3 Tech | Systems admin | $125-150/hr | | Engineer | Senior engineer | $150-200/hr | | Consultant | Expert consultant | $200-250/hr | | Project Manager | PM work | $125-175/hr |

Query `GET /time/workRoles` for the configured list.

Billing Options

| Option | Description | |--------|-------------| | `Billable` | Time is billable at standard rate | | `DoNotBill` | Time excluded from billing | | `NoCharge` | Time shows on invoice at $0 | | `NoDefault` | Use ticket/agreement default |

How Billing Is Determined

Precedence order, first match wins:

1. Time entry `billableOption` (if set) 2. Ticket `billTime` setting 3. Agreement billing rules 4. Company default

Common Workflows

Log time against a ticket

POST /time/entries
Content-Type: application/json

{
  "chargeToId": 54321,
  "chargeToType": "ServiceTicket",
  "member": {"id": 123},
  "timeStart": "2024-02-15T09:00:00Z",
  "timeEnd": "2024-02-15T10:30:00Z",
  "workType": {"id": 1},
  "workRole": {"id": 2},
  "billableOption": "Billable",
  "notes": "Diagnosed email delivery issue. Identified blocked sender.",
  "addToDetailDescriptionFlag": true
}

`actualHours` can be used instead of `timeStart`/`timeEnd`. Logging against a `ChargeCode` requires the `company` field explicitly, since there's no ticket to infer it from. See [references/api.md](references/api.md) for the actual-hours and charge-code variants plus get/update/delete/search examples.

Approval workflow

1. Time entry created — `Open` 2. Time sheet submitted — `Submitted` 3. Manager approves or rejects — `Approved` or `Rejected` (with `internalNotes` explaining what to fix) 4. Approved time is invoiced — `Billed`

Approve/reject and bulk-approval requests, plus time sheet get/submit requests, are in [references/api.md](references/api.md).

API Patterns

Common query conditions for time entries:

**Time entries for a ticket:**

conditions=chargeToId=54321 and chargeToType="ServiceTicket"

**Time entries by member:**

conditions=member/id=123

**Time entries by date range:**

conditions=timeStart>=[2024-02-01] and timeStart<[2024-03-01]

**Unbilled time entries:**

conditions=status="Open" and billableOption="Billable"

**Approved time waiting for billing:**

conditions=status="Approved" and billableOption="Billable"

Charge Codes

Charge codes are used for non-ticket time (meetings, training, etc.). Query `GET /time/chargeCodes` for the configured list.

| Code | Description | Billable | |------|-------------|----------| | MTNG | Internal meetings | No | | TRNG | Training | No | | ADMIN | Administrative | No | | PTO | Paid time off | No | | PROJ | Project work | Yes | | ONCALL | On-call time | Varies |

Gotchas

  • **Billed time entries cannot be deleted.** `
Read more
@wyre-technology
Ships withmsp-claude-plugins

One command to supercharge Claude Code for MSP workflows. Then restart Claude Code. That's it. Documentation: mcp.wyre.ai

52200 skills146 agents4 MCP
Get the whole plugin

Stars on GitHub

Momentum

stars in total
52
Star history of wyre-technology/msp-claude-plugins on GitHub, a chart by star-history.com

Other skills on msp-claude-plugins.

More skills from other plugins.

brainstorming
Auto-invoked

brainstorming

You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…

@obra@obraInstall Skill
ask-matt

ask-matt

Ask which skill or flow fits your situation. A router over the skills in this repo.

skills12d309k
@mattpocock@mattpocockInstall Skill
accessibility
Auto-invoked

accessibility

Design, implement, and audit accessible UI to WCAG 2.2 Level AA across Web, iOS, and Android — semantic ARIA roles and labels,…

ecc2w293k
@affaan-m@affaan-mInstall Skill
compiler-commit

compiler-commit

Use when you want to verify compiler changes and commit with the correct convention. Runs tests, lint, and format, then commits…

react3d252k
@facebook@facebookInstall Skill

Questions about time-entries.

Which coding agents can use time-entries?
time-entries installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.