Skip to content
Hoursmith Docs
APIReferenceProjects

List projects

Any role. Member tokens see only projects they have been granted, and money fields (hourlyRate, fixedFeeAmount, budgetAmount) are omitted from their responses.

GET
/projects

Authorization

BearerAuth
AuthorizationBearer <token>

Personal Access Token. Mint at Settings → API. Token shape: hsk_<env>_<prefix12>_<secret32>.

In: header

Query Parameters

cursor?string

Opaque pagination cursor — nextCursor from a previous response.

limit?integer

Page size (1–200, default 50).

sort?string

Sort field, optionally prefixed with - for descending (Stripe-style). Defaults to -createdAt (newest first). The allowed fields differ per resource — see each list* operation. Common examples: ?sort=-paidAt (latest paid invoice), ?sort=dueDate (earliest due first), ?sort=name (alphabetical). Cursors are sort-aware: keep the same sort= when paginating. Allowed sort fields for projects: createdAt, dueDate, id, name, startDate, status, updatedAt.

search?string

Case-insensitive partial match across: name, description. Max 200 chars.

clientName?string

Case-insensitive partial match on the related client's name. Joins through the relation — pair with other filters as needed.

clientId?string

Owning client UUID.

status?string

One of: ACTIVE, COMPLETED, ARCHIVED.

startDateFrom?string

Inclusive lower bound on startDate. Accepts YYYY-MM-DD (treated as UTC midnight) or full ISO timestamp.

startDateTo?string

Inclusive upper bound on startDate. YYYY-MM-DD is treated as end-of-day so the date is fully included.

dueDateFrom?string

Inclusive lower bound on dueDate. Accepts YYYY-MM-DD (treated as UTC midnight) or full ISO timestamp.

dueDateTo?string

Inclusive upper bound on dueDate. YYYY-MM-DD is treated as end-of-day so the date is fully included.

createdAtFrom?string

Inclusive lower bound on createdAt. Accepts YYYY-MM-DD (treated as UTC midnight) or full ISO timestamp.

createdAtTo?string

Inclusive upper bound on createdAt. YYYY-MM-DD is treated as end-of-day so the date is fully included.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/projects"
{  "data": [    {      "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",      "orgId": "25b2c2d5-a7fc-47d0-89e4-8709a1560bfa",      "clientId": "5e505642-9024-474d-9434-e5a44f505cc5",      "name": "string",      "description": "string",      "color": "string",      "status": "ACTIVE",      "rateType": "HOURLY",      "hourlyRate": "string",      "fixedFeeAmount": "string",      "budgetHours": "string",      "budgetAmount": "string",      "startDate": "2019-08-24",      "dueDate": "2019-08-24",      "createdAt": "2019-08-24T14:15:22Z",      "updatedAt": "2019-08-24T14:15:22Z",      "deletedAt": "2019-08-24T14:15:22Z"    }  ],  "pagination": {    "limit": 1,    "nextCursor": "string"  }}
{  "error": {    "code": "unauthenticated",    "message": "string",    "fields": {      "property1": "string",      "property2": "string"    },    "requiredPlan": "studio",    "feature": "string",    "requestId": "string"  }}
{  "error": {    "code": "unauthenticated",    "message": "string",    "fields": {      "property1": "string",      "property2": "string"    },    "requiredPlan": "studio",    "feature": "string",    "requestId": "string"  }}
{  "error": {    "code": "unauthenticated",    "message": "string",    "fields": {      "property1": "string",      "property2": "string"    },    "requiredPlan": "studio",    "feature": "string",    "requestId": "string"  }}
{  "error": {    "code": "unauthenticated",    "message": "string",    "fields": {      "property1": "string",      "property2": "string"    },    "requiredPlan": "studio",    "feature": "string",    "requestId": "string"  }}
{  "error": {    "code": "unauthenticated",    "message": "string",    "fields": {      "property1": "string",      "property2": "string"    },    "requiredPlan": "studio",    "feature": "string",    "requestId": "string"  }}
{  "error": {    "code": "unauthenticated",    "message": "string",    "fields": {      "property1": "string",      "property2": "string"    },    "requiredPlan": "studio",    "feature": "string",    "requestId": "string"  }}
Was this page helpful?