Skip to main content
A project belongs to a client, holds the tasks people log time against, and carries the billing method used when the work is invoiced. For fields and response details, see the API reference.
A project is addressed by its identifier, the short hex string returned by projects list. --client-id is different: it takes the client’s record id, a UUID. See Getting the project ID.

List projects

Find a project’s identifier, or list the projects a user is on.
Without --page or --page-size, the command returns every record. With either flag, the result is paginated. The envelope always has a pagination object. See Pagination. Use --name to find a project by part of its name; the match is case-insensitive.
Sample output (--json)
On a terminal, this renders as a plain table with a page summary, the same way clients list does:
Sample output
--client-id accepts either the client’s identifier or its record id.

Show a project

Show a project with its client, tasks, checklists, and recurring invoice settings. Use it to find the task_id that time-entries create needs.
Required arguments:
  • <project-id> - The project’s identifier.
Sample output (--json)

Create a project

Create a project under a client. At least one --task is required, because a project must always have a task to log time against.
Billing methods are hourly_project_rate, hourly_person_rate, hourly_task_rate, and fixed_price_project. Use --flat-amount instead of --hourly-rate for a fixed price project.
Sample output (--json)

Update a project

Update a project. Only the flags you pass are changed. --user-email identifies the acting organization user and is always required.
Required arguments:
  • <project-id> - The project’s identifier.