# Returns a list of activities.

`GET /psa/activities`

Group: PSA › Activities · Operation ID: `activities`

Each row is one activity, so counting rows counts activities. Who is assigned to an activity is not published here. There is no endpoint to match activities by name or description.

[Open in the interactive reference](https://docs.api.lensing.ai/?op=activities)

## Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `Api-Version` | header | `"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`. |

## Query surface

- `id` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- `billable` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- `invoiced` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- `startDate` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- `endDate` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- `billingType` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- `category` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- `psaProjectId` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- `lastModifiedDate` — filter by eq, ne, gt, gte, lt, lte, in, notIn, between, like
- Orderable: id, name, startDate, endDate, hoursBudget, billingType, category, psaProjectId, lastModifiedDate
- Selectable: id, name, description, hoursBudget, billable, invoiced, startDate, endDate, billingType, category, milestoneId, fixedFeeId, activityStatusId, statusName, parentActivityId, psaProjectId, lastModifiedDate

## Response

`200` Success

Under `data`, an array of activitiesRow:

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | string | no | The unique identifier for the activity. |
| `name` | string | no | The display name of the activity. |
| `description` | string or null | no | A free-form description of the activity. Absent when none was set. |
| `hoursBudget` | string (decimal) or null | no | The budgeted hours for this activity, as a count of hours. It is not a monetary amount. |
| `billable` | boolean or null | no | Whether the activity is billable to a customer. Derived from category being 'ClientBillable'. |
| `invoiced` | boolean or null | no | Whether the activity has been invoiced. |
| `startDate` | string (date) or null | 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. |
| `endDate` | string (date) or null | no | The activity's end date. Format YYYY-MM-DD. |
| `billingType` | string | no | The activity's billing type. Possible values: 'Hours', 'Milestone', 'FixedFee'. |
| `category` | string or null | no | The activity's category. Possible values: 'ClientBillable', 'NonBillable', 'NonValuable', 'Valuable'. |
| `milestoneId` | number or null | no | The id of the milestone this activity is billed against. Absent unless billingType is 'Milestone'. It is a numeric package-layer key, not the UUID that GET psa/milestones/:id takes. |
| `fixedFeeId` | number or null | no | The id of the fixed fee this activity is billed against. Absent unless billingType is 'FixedFee'. It is a numeric package-layer key, not the UUID that GET psa/fixed-fees/:id takes. |
| `activityStatusId` | number or null | 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. |
| `statusName` | string or null | no | The name of the activity's progress status, for example 'In progress'. Absent when no status is set. |
| `parentActivityId` | number or null | no | The id of the parent activity when this is a sub-task. Absent when the activity is top-level. It is a numeric package-layer key, not the UUID that GET psa/activities/:id takes. |
| `psaProjectId` | number or null | 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. |
| `lastModifiedDate` | string (date-time) or null | no | The date and time this activity last changed, in UTC. Format YYYY-MM-DDTHH:mm:ss.sssZ. |

## Statuses

- `400` — Invalid request or business failure
- `401` — Missing or invalid access token
- `403` — Not authorized
- `404` — Not found
- `429` — Too many requests
- `500` — Internal server error
