ConnectWise Manage Time Entries

SkillAI & models

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.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the ConnectWise Manage Time Entries skill

What this skill tells your AI

The instructions your AI receives, as published by wyre-ai/msp-claude-plugins in msp-claude-plugins/connectwise/manage/skills/time-entries/SKILL.md and read by ahel’s review.

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.

API Endpoint

Base: /time/entries

Time Entry Types

Time can be logged against different record types:

Charge To TypeDescription
ServiceTicketTime against service tickets
ProjectTicketTime against project tickets
ChargeCodeTime against charge codes (internal)
ActivityTime against activities

See references/fields.md for the complete time entry field reference.

Work Types

Work types categorize the nature of work performed.

TypeDescriptionTypical Billing
RegularNormal work hoursBillable
OvertimeAfter-hours work1.5x rate
TrainingTraining timeNon-billable
TravelTravel timeVaries
RemoteRemote supportBillable
On-siteOn-site workBillable
AdministrativeAdmin tasksNon-billable

Query GET /time/workTypes for the configured list.

Work Roles

Work roles determine billing rates based on skill level.

RoleDescriptionTypical Rate
Level 1 TechHelp desk$75-100/hr
Level 2 TechDesktop support$100-125/hr
Level 3 TechSystems admin$125-150/hr
EngineerSenior engineer$150-200/hr
ConsultantExpert consultant$200-250/hr
Project ManagerPM work$125-175/hr

Query GET /time/workRoles for the configured list.

Billing Options

OptionDescription
BillableTime is billable at standard rate
DoNotBillTime excluded from billing
NoChargeTime shows on invoice at $0
NoDefaultUse 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 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.

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.

CodeDescriptionBillable
MTNGInternal meetingsNo
TRNGTrainingNo
ADMINAdministrativeNo
PTOPaid time offNo
PROJProject workYes
ONCALLOn-call timeVaries

Gotchas

  • Billed time entries cannot be deleted. DELETE /time/entries/{id} fails once status is Billed; you must adjust the invoice instead.
  • company is required for ChargeCode entries only. ServiceTicket/ProjectTicket entries infer the company from the ticket.
  • billableOption on the time entry wins over ticket/agreement defaults — see billing precedence above. A blank or NoDefault value falls through to the ticket, then the agreement, then the company.
  • Time sheets and time entries use different status vocabularies. Time sheets go Open -> Submitted -> Approved/Rejected; time entries go Open -> Approved/Rejected -> Billed (no Submitted state). Approving a time sheet does not retroactively change the status of every entry inside it. See references/api.md for both status tables.

Best Practices

  1. Be specific in notes - Document what was done for invoice clarity
  2. Use correct work type - Important for accurate billing rates
  3. Set appropriate work role - Affects billing rate
  4. Mark non-billable correctly - Don't inflate billable hours
  5. Use charge codes - For internal time tracking

See references/errors.md for the complete error reference.

Related Skills

Signals

GitHub stars
45
Forks
24
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
connectwise-manage-time-entries
Source
github.com/wyre-ai/msp-claude-plugins