Retrieve an activity

Operation ID: getActivity

Group: PSA › Activities

Open in the interactive reference

GET /psa/activities/{id}

Read-only: Reads and returns; changes nothing.

Retrieves an activity. The response does not include who is assigned to the activity, and no endpoint returns activity assignments.

Parameters

Name In Type Required Description
Api-Version header string · v1 yes The API version this request targets, named by its public identifier. Required on every request; omitting it, or naming a version this company does not have, is answered with 400. This document describes version v1.
id path string yes The unique identifier of the activity you want to retrieve. Example: "c4a91b07-6e52-4d38-9a1f-83b7de20c5f6".

Response

200 Success

Under data (getActivityOutput):

Field Type Required Description
id string yes The unique identifier for the activity. Example: "c4a91b07-6e52-4d38-9a1f-83b7de20c5f6".
name string yes The display name of the activity. Example: "Discovery workshop".
description string no A free-form description of the activity. Absent when none was set. Example: "Two-day onsite requirements workshop.".
hoursBudget decimal no The budgeted hours for this activity, as a count of hours. It is not a monetary amount. Example: "40.00".
billable boolean no Whether the activity is billable to a customer. Derived from category being 'ClientBillable'. Example: true.
invoiced boolean no Whether the activity has been invoiced. Example: false.
startDate date no The activity's start date. Format YYYY-MM-DD. It is within the owning project's date range when the project's enforceActivityDateRange setting is on. Example: "2026-09-01".
endDate date no The activity's end date. Format YYYY-MM-DD. Example: "2026-09-02".
billingType string yes The activity's billing type. Possible values: 'Hours', 'Milestone', 'FixedFee'. Example: "Hours".
category string no The activity's category. Possible values: 'ClientBillable', 'NonBillable', 'NonValuable', 'Valuable'. Example: "ClientBillable".
milestoneId number no The id of the milestone this activity is billed against. Absent unless billingType is 'Milestone'. It is a numeric key, not the UUID that GET psa/milestones/:id takes.
fixedFeeId number no The id of the fixed fee this activity is billed against. Absent unless billingType is 'FixedFee'. It is a numeric key, not the UUID that GET psa/fixed-fees/:id takes.
activityStatusId number no The id of the activity's progress status. Absent when no status is set. Status values are tenant-configured, and there is no endpoint that lists them. Use statusName for the label. Example: 3.
statusName string no The name of the activity's progress status, for example 'In progress'. Absent when no status is set. Example: "In progress".
parentActivityId number no The id of the parent activity when this is a sub-task. Absent when the activity is top-level. It is a numeric key, not the UUID that GET psa/activities/:id takes.
psaProjectId number no The id of the PSA project that owns this activity. Absent for a timetracking project with no PSA layer. It is a numeric key you can filter on here, but not the UUID that GET psa/projects/:id takes. Example: 32341.
lastModifiedDate date-time yes The date and time this activity last changed, in UTC. Format YYYY-MM-DDTHH:mm:ss.sssZ. Example: "2026-08-14T11:20:31.004Z".
{
  "data": {
    "id": "c4a91b07-6e52-4d38-9a1f-83b7de20c5f6",
    "name": "Discovery workshop",
    "description": "Two-day onsite requirements workshop.",
    "hoursBudget": "40.00",
    "billable": true,
    "invoiced": false,
    "startDate": "2026-09-01",
    "endDate": "2026-09-02",
    "billingType": "Hours",
    "category": "ClientBillable",
    "milestoneId": 0,
    "fixedFeeId": 0,
    "activityStatusId": 3,
    "statusName": "In progress",
    "parentActivityId": 0,
    "psaProjectId": 32341,
    "lastModifiedDate": "2026-08-14T11:20:31.004Z"
  },
  "diagnostics": [
    {
      "code": "<code>",
      "message": "<message>",
      "severity": "error",
      "path": [
        "<path>"
      ],
      "details": "<details>"
    }
  ]
}

Errors

Code Status
NOT_FOUND 400

Statuses