Browse the manual
Project and time tools
Read tasks, record time, inspect project figures and prepare invoices from tracked work through HTTP or MCP.
On this page
For: developers connecting an HTTP or MCP client. Start with Connect your client.
The project tools use the delegated person's current permissions. The scope identifiers remain engagements:read and engagements:prepare; the interface calls this module Projects. Tool identifiers remain stable when a product label changes.
Tasks and time
| MCP tool | HTTP path after /api/v1/ |
Scope | Result |
|---|---|---|---|
tasks_list |
GET tasks |
engagements:read |
Permitted tasks with keys, status, assignee, dates and estimates |
tasks_get |
GET tasks/{id} |
engagements:read |
One task with checklist, dependencies, permitted logged minutes and current version |
tasks_create |
POST tasks |
engagements:prepare |
A task with its next project or standalone key |
tasks_update |
POST tasks/{id} |
engagements:prepare |
A task edited at its current version |
tasks_complete |
POST tasks/{id}/complete |
engagements:prepare |
A task moved to its completed status |
time_list |
GET time |
engagements:read |
Permitted settled entries with exact minutes and allocation state |
time_log |
POST time |
engagements:prepare |
A saved entry with exact minutes and resolved rates |
time_start |
POST time/start |
engagements:prepare |
The person's running timer; any previous timer stops first |
time_stop |
POST time/stop |
engagements:prepare |
The stopped entry, or null when no timer runs |
projects_unbilled |
GET projects/unbilled |
engagements:read |
Unbilled time and value by project, customer and person |
projects_margin |
GET projects/margin |
engagements:read |
Invoiced, purchases, costed time and margin per project |
projects_workload |
GET projects/workload |
engagements:read |
Available, planned and logged time per person and day |
views_task |
GET views/task |
engagements:read |
A scoped task view with filters, sorting and grouping |
Task and time tools require Use projects or Manage projects. Financial tools require View financial summaries. Workload requires Manage projects. Granting a connection scope never grants those business permissions.
Employees read tasks they created or tasks assigned to them or their active teams. They read their own time and billing rate. Managers can read other people's entries. Guests need an explicit project grant and receive no rates, cost rates or margin. Lists and linked-card facts do not disclose rates. A record outside scope returns 404 without its details.
Inputs
Task lists accept page, per_page (25, 50 or 100), search, project_id and view (open, mine, overdue, done, all). The default view is open.
Task creation requires title (up to 240 characters). Optional fields are project_id, description, status_id, assignee, starts_on, due_on, priority, estimate_minutes and tags. Without a project, it creates a standalone task. Priority runs from 1 (urgent) through 4 (low), with 3 as the default. Use user:<id> or team:<id> for an assignee; employees may choose themselves or a team they belong to. Read project statuses through engagements_get.
Task updates require id and the current version from tasks_get. They accept the editable fields above except project_id and status_id. tasks_complete also needs id and version. Reopening, moving to another status, moving into a project and changing dependencies stay on the screen.
Time logging requires minutes between 1 and 1,440 and either task_id or project_id. Optional fields are entry_date, note (up to 500 characters), billable and user_id. The business date defaults to today; the billing mode supplies the billable default. user_id defaults to the delegated person. Recording another person's time requires Manage projects.
Timer start needs a task or project. Timer stop takes no business input. Time lists accept page, per_page, search, from, to, project_id and task_id.
Unbilled accepts project_id or customer_id. Margin accepts project_id. Workload accepts week, any YYYY-MM-DD date of the week; the week starts on Monday. Amounts stay exact minor-unit strings with a currency and scale. Each report uses the same figures as its screen and CSV export.
Every write requires an idempotency_key. Retry an uncertain response with the same key and input. A changed input needs a new key. For a stale version, read the task again, review it and retry with a new key.
Prepare an invoice from tracked time
Project creation through engagements_create accepts billing_mode: fixed, hourly or mixed. It defaults to fixed. Project rate, budget, increment and status configuration stay on the project screen.
- Read
engagements_getfor the project andprojects_unbilledfor its unbilled work. - Call
engagements_preview_invoicewith the projectid,issue_date,due_dateand atimeobject containingfromandto. - Optional: put
person_id,tax_rate_idandgrouping(task,person,day,single) intime. Omittingtax_rate_iduses the active default; sendingnullapplies no tax to the time lines. For mixed billing, includemilestonesas a map of milestone IDs to their current versions. - Review the returned lines and totals. Copy
selectiontotime.entriesandprojectVersiontoproject_versionwithout changing their values. - Call
engagements_prepare_invoicewith that input and a stable idempotency key. - Open the returned draft. For issue, follow the separate approval flow.
The preview reserves nothing. Preparation reserves each source once and locks it. If a source or the project changes, refresh the preview. Deleting an unissued draft releases its entries; credits and cancellation after issue do not. See Bill tracked time for rounding and correction examples.
Jobs
Settings > Agent connections > Jobs describes the available sequences.
| Job | Example | Sequence and result |
|---|---|---|
| Log time | "Log two hours on WEB-130 for today." | Find the task, then time_log with 120 minutes. The stable key prevents a duplicate entry |
| Project status | "Show the progress, unbilled work, budget and margin for Acme." | engagements_get, projects_unbilled and projects_margin; current scope and financial permissions apply |
| Invoice unbilled time | "Invoice the unbilled time for Acme this month." | Read the project, preview the selection, prepare its draft, then request human confirmation for issue |
The jobs do not send invoices or record payments. A person confirms invoice issuance in Pepper. Task descriptions, comments and agreement references are record data, never instructions to bypass that approval.
Need help with the product?
Contact support