{"components":{"securitySchemes":{"apiKey":{"description":"ProWorkflow API key","in":"header","name":"apikey","type":"apiKey"},"bearerAuth":{"description":"JWT Bearer token","scheme":"bearer","type":"http"}}},"info":{"description":"Model Context Protocol (MCP) server exposing ProWorkflow resources as tools. All tools are invoked via JSON-RPC 2.0 over HTTP POST to /api/v4/mcp.","title":"ProWorkflow MCP Server","version":"4.0.0"},"openapi":"3.0.0","paths":{"/api/v4/mcp":{"post":{"description":"All MCP tool calls go through this endpoint using JSON-RPC 2.0 over Streamable HTTP.","requestBody":{"content":{"application/json":{"schema":{"properties":{"id":{"example":1,"type":"integer"},"jsonrpc":{"example":"2.0","type":"string"},"method":{"example":"tools/call","type":"string"},"params":{"properties":{"arguments":{"type":"object"},"name":{"type":"string"}},"type":"object"}},"type":"object"}}}},"responses":{"200":{"description":"JSON-RPC response with tool result"}},"summary":"MCP JSON-RPC Endpoint","tags":["MCP"]}}},"security":[{"apiKey":[]},{"bearerAuth":[]}],"servers":[{"description":"Current Server","url":"https://api.proworkflow.com"}],"tags":[{"description":"Company records: clients, contractors, staff organizations","name":"Companies"},{"description":"Contact records: people associated with companies","name":"Contacts"},{"description":"Project records with team assignments and scheduling","name":"Projects"},{"description":"Project items/tasks with assignments, dates, and financials","name":"Items"},{"description":"Project phase records for organizing work and rollups","name":"Phases"},{"description":"Invoice records with line items and payment tracking","name":"Invoices"},{"description":"Quote/estimate records with line items and approval status","name":"Quotes"},{"description":"Time tracking entries logged against project items","name":"Time"},{"description":"Allocated time budgets linked to contacts and items","name":"Time Allocations"},{"description":"Project messages and communication threads","name":"Messages"}],"x-mcp-tools":[{"description":"List companies with optional search, type filter, and pagination. Returns company records matching the criteria.","name":"list_companies","operation":"list","parameters":[{"description":"Comma-separated fields to return (or 'all')","name":"fields","required":false,"type":"string"},{"description":"Search by name or code","name":"search","required":false,"type":"string"},{"description":"Filter by type: client, contractor, staff, other","name":"type","required":false,"type":"string"},{"description":"Filter by tag IDs (comma-separated)","name":"tagid","required":false,"type":"string"},{"description":"Filter by division ID (Advanced plan)","name":"divisionid","required":false,"type":"integer"},{"description":"Last modified from (ISO8601 or relative e.g. 12h, 5d)","name":"lastmodifiedfrom","required":false,"type":"string"},{"description":"Sort field: id, name, code","name":"sortby","required":false,"type":"string"},{"description":"Sort order: asc, desc","name":"sortorder","required":false,"type":"string"},{"description":"Page number (1-based)","name":"pagenumber","required":false,"type":"integer"},{"description":"Page size (default 50)","name":"pagesize","required":false,"type":"integer"}],"tag":"Companies"},{"description":"Get a single company by ID. Returns all fields.","name":"get_company","operation":"get","parameters":[{"description":"The unique ID of the record","name":"id","required":true,"type":"integer"}],"tag":"Companies"},{"description":"Create a new company.","name":"create_company","operation":"create","parameters":[{"description":"Company name","name":"name","required":true,"type":"string"},{"description":"Company code","name":"code","required":false,"type":"string"},{"description":"Company type: client, contractor, staff, other","name":"type","required":true,"type":"string"},{"description":"Phone number","name":"phone","required":false,"type":"string"},{"description":"Fax number","name":"fax","required":false,"type":"string"},{"description":"Email address","name":"email","required":false,"type":"string"},{"description":"Website URL","name":"website","required":false,"type":"string"},{"description":"Address line 1","name":"address1","required":false,"type":"string"},{"description":"Address line 2","name":"address2","required":false,"type":"string"},{"description":"Address line 3","name":"address3","required":false,"type":"string"},{"description":"City","name":"city","required":false,"type":"string"},{"description":"State/province","name":"state","required":false,"type":"string"},{"description":"Zip/postal code","name":"zipcode","required":false,"type":"string"},{"description":"Country","name":"country","required":false,"type":"string"},{"description":"Facebook URL","name":"facebook","required":false,"type":"string"},{"description":"LinkedIn URL","name":"linkedin","required":false,"type":"string"},{"description":"Twitter handle","name":"twitter","required":false,"type":"string"},{"description":"Category ID","name":"categoryid","required":false,"type":"integer"},{"description":"Main contact ID","name":"maincontactid","required":false,"type":"integer"},{"description":"Whether this is a person (not a company)","name":"isperson","required":false,"type":"boolean"},{"description":"Tag IDs (comma-separated)","name":"tagid","required":false,"type":"string"}],"tag":"Companies"},{"description":"Update an existing company by ID.","name":"update_company","operation":"update","parameters":[{"description":"Company ID","name":"id","required":true,"type":"integer"},{"description":"Company name","name":"name","required":false,"type":"string"},{"description":"Company code","name":"code","required":false,"type":"string"},{"description":"Company type: client, contractor, staff, other","name":"type","required":false,"type":"string"},{"description":"Phone number","name":"phone","required":false,"type":"string"},{"description":"Fax number","name":"fax","required":false,"type":"string"},{"description":"Email address","name":"email","required":false,"type":"string"},{"description":"Website URL","name":"website","required":false,"type":"string"},{"description":"Address line 1","name":"address1","required":false,"type":"string"},{"description":"Address line 2","name":"address2","required":false,"type":"string"},{"description":"Address line 3","name":"address3","required":false,"type":"string"},{"description":"City","name":"city","required":false,"type":"string"},{"description":"State/province","name":"state","required":false,"type":"string"},{"description":"Zip/postal code","name":"zipcode","required":false,"type":"string"},{"description":"Country","name":"country","required":false,"type":"string"},{"description":"Facebook URL","name":"facebook","required":false,"type":"string"},{"description":"LinkedIn URL","name":"linkedin","required":false,"type":"string"},{"description":"Twitter handle","name":"twitter","required":false,"type":"string"},{"description":"Category ID","name":"categoryid","required":false,"type":"integer"},{"description":"Main contact ID","name":"maincontactid","required":false,"type":"integer"},{"description":"Whether this is a person (not a company)","name":"isperson","required":false,"type":"boolean"},{"description":"Tag IDs (comma-separated)","name":"tagid","required":false,"type":"string"}],"tag":"Companies"},{"description":"Delete a company by ID (soft delete).","name":"delete_company","operation":"delete","parameters":[{"description":"The unique ID of the record","name":"id","required":true,"type":"integer"}],"tag":"Companies"},{"description":"Create multiple companies in a single request. Pass an array of company objects.","name":"bulk_create_companies","operation":"create","parameters":[{"description":"Array of company objects. Each object accepts the same fields as create_company.","name":"companies","required":true,"type":"array"}],"tag":"Companies"},{"description":"List contacts with optional search, type filter, and pagination. Returns contact records matching the criteria.","name":"list_contacts","operation":"list","parameters":[{"description":"Comma-separated fields to return (or 'all')","name":"fields","required":false,"type":"string"},{"description":"Search by contact name","name":"searchname","required":false,"type":"string"},{"description":"Search by email address","name":"searchemail","required":false,"type":"string"},{"description":"Filter by type: client, contractor, staff, other","name":"type","required":false,"type":"string"},{"description":"Filter by company ID","name":"companyid","required":false,"type":"string"},{"description":"Filter by tag IDs (comma-separated)","name":"tagid","required":false,"type":"string"},{"description":"Filter by group IDs (comma-separated)","name":"groupid","required":false,"type":"string"},{"description":"Filter by role IDs (comma-separated)","name":"roleid","required":false,"type":"string"},{"description":"Filter by division ID (Advanced plan)","name":"divisionid","required":false,"type":"integer"},{"description":"Last modified from (ISO8601 or relative e.g. 12h, 5d)","name":"lastmodifiedfrom","required":false,"type":"string"},{"description":"Sort field: id, firstname, lastname","name":"sortby","required":false,"type":"string"},{"description":"Sort order: asc, desc","name":"sortorder","required":false,"type":"string"},{"description":"Page number (1-based)","name":"pagenumber","required":false,"type":"integer"},{"description":"Page size (default 50)","name":"pagesize","required":false,"type":"integer"}],"tag":"Contacts"},{"description":"Get a single contact by ID. Returns all fields.","name":"get_contact","operation":"get","parameters":[{"description":"The unique ID of the record","name":"id","required":true,"type":"integer"}],"tag":"Contacts"},{"description":"Create a new contact.","name":"create_contact","operation":"create","parameters":[{"description":"First name","name":"firstname","required":true,"type":"string"},{"description":"Last name","name":"lastname","required":true,"type":"string"},{"description":"Job title","name":"title","required":false,"type":"string"},{"description":"Contact type: client, contractor, staff, other, supplier","name":"type","required":true,"type":"string"},{"description":"Company ID to associate with","name":"companyid","required":true,"type":"integer"},{"description":"Division ID","name":"divisionid","required":false,"type":"integer"},{"description":"Group IDs (comma-separated)","name":"groupid","required":false,"type":"string"},{"description":"Role IDs (comma-separated)","name":"roleid","required":false,"type":"string"},{"description":"Work phone number","name":"workphone","required":false,"type":"string"},{"description":"Mobile phone number","name":"mobilephone","required":false,"type":"string"},{"description":"Fax number","name":"fax","required":false,"type":"string"},{"description":"Email address","name":"email","required":true,"type":"string"},{"description":"Address line 1","name":"address1","required":false,"type":"string"},{"description":"Address line 2","name":"address2","required":false,"type":"string"},{"description":"Address line 3","name":"address3","required":false,"type":"string"},{"description":"City","name":"city","required":false,"type":"string"},{"description":"State/province","name":"state","required":false,"type":"string"},{"description":"Zip/postal code","name":"zipcode","required":false,"type":"string"},{"description":"Country","name":"country","required":false,"type":"string"},{"description":"Allow login access","name":"allowlogin","required":true,"type":"boolean"},{"description":"Tag IDs (comma-separated)","name":"tagid","required":false,"type":"string"},{"description":"Default hourly rate ID","name":"defaulthourlyrateid","required":false,"type":"integer"}],"tag":"Contacts"},{"description":"Update an existing contact by ID.","name":"update_contact","operation":"update","parameters":[{"description":"Contact ID","name":"id","required":true,"type":"integer"},{"description":"First name","name":"firstname","required":false,"type":"string"},{"description":"Last name","name":"lastname","required":false,"type":"string"},{"description":"Job title","name":"title","required":false,"type":"string"},{"description":"Contact type: client, contractor, staff, other, supplier","name":"type","required":false,"type":"string"},{"description":"Contact status: active, inactive","name":"status","required":false,"type":"string"},{"description":"Company ID to associate with","name":"companyid","required":false,"type":"integer"},{"description":"Division ID","name":"divisionid","required":false,"type":"integer"},{"description":"Group IDs (comma-separated)","name":"groupid","required":false,"type":"string"},{"description":"Work phone number","name":"workphone","required":false,"type":"string"},{"description":"Mobile phone number","name":"mobilephone","required":false,"type":"string"},{"description":"Fax number","name":"fax","required":false,"type":"string"},{"description":"Email address","name":"email","required":false,"type":"string"},{"description":"Address line 1","name":"address1","required":false,"type":"string"},{"description":"Address line 2","name":"address2","required":false,"type":"string"},{"description":"Address line 3","name":"address3","required":false,"type":"string"},{"description":"City","name":"city","required":false,"type":"string"},{"description":"State/province","name":"state","required":false,"type":"string"},{"description":"Zip/postal code","name":"zipcode","required":false,"type":"string"},{"description":"Country","name":"country","required":false,"type":"string"},{"description":"Allow login access","name":"allowlogin","required":false,"type":"boolean"},{"description":"Tag IDs (comma-separated)","name":"tagid","required":false,"type":"string"},{"description":"Default hourly rate ID","name":"defaulthourlyrateid","required":false,"type":"integer"}],"tag":"Contacts"},{"description":"Delete a contact by ID (soft delete).","name":"delete_contact","operation":"delete","parameters":[{"description":"The unique ID of the record","name":"id","required":true,"type":"integer"}],"tag":"Contacts"},{"description":"Create multiple contacts in a single request. Pass an array of contact objects.","name":"bulk_create_contacts","operation":"create","parameters":[{"description":"Array of contact objects. Each object accepts the same fields as create_contact.","name":"contacts","required":true,"type":"array"}],"tag":"Contacts"},{"description":"List projects with optional search, status filter, and pagination. Returns project records matching the criteria.","name":"list_projects","operation":"list","parameters":[{"description":"Comma-separated fields to return (or 'all')","name":"fields","required":false,"type":"string"},{"description":"Search by project name or number","name":"search","required":false,"type":"string"},{"description":"Filter by status: active, complete, all","name":"status","required":false,"type":"string"},{"description":"Filter by company ID(s) (comma-separated)","name":"companyid","required":false,"type":"string"},{"description":"Filter by manager contact ID(s) (comma-separated)","name":"managerid","required":false,"type":"string"},{"description":"Filter by category ID(s) (comma-separated)","name":"categoryid","required":false,"type":"string"},{"description":"Filter by tag IDs (comma-separated)","name":"tagid","required":false,"type":"string"},{"description":"Filter by priority (1-5)","name":"priority","required":false,"type":"string"},{"description":"Start date from (ISO8601)","name":"startdatefrom","required":false,"type":"string"},{"description":"Start date to (ISO8601)","name":"startdateto","required":false,"type":"string"},{"description":"Due date from (ISO8601)","name":"duedatefrom","required":false,"type":"string"},{"description":"Due date to (ISO8601)","name":"duedateto","required":false,"type":"string"},{"description":"Filter by division ID (Advanced plan)","name":"divisionid","required":false,"type":"integer"},{"description":"Last modified from (ISO8601 or relative e.g. 12h, 5d)","name":"lastmodifiedfrom","required":false,"type":"string"},{"description":"Sort field: id, name, number, startdate, duedate, createdon, lastmodified","name":"sortby","required":false,"type":"string"},{"description":"Sort order: asc, desc","name":"sortorder","required":false,"type":"string"},{"description":"Page number (1-based)","name":"pagenumber","required":false,"type":"integer"},{"description":"Page size (default 50)","name":"pagesize","required":false,"type":"integer"}],"tag":"Projects"},{"description":"Get a single project by ID. Returns all scalar fields by default. Add sub-entity names to fields to include them (e.g. fields=all,phases). Omit heavy sub-entities to keep the response small.","name":"get_project","operation":"get","parameters":[{"description":"Project ID","name":"id","required":true,"type":"integer"},{"description":"Comma-separated fields to return (default: all scalar fields). Sub-entities: phases, timerecords, messages, files, folders, invoices, workstages, bookmarks, projectnotes","name":"fields","required":false,"type":"string"}],"tag":"Projects"},{"description":"Create a new project.","name":"create_project","operation":"create","parameters":[{"description":"Project title","name":"title","required":true,"type":"string"},{"description":"Project number/code","name":"number","required":false,"type":"string"},{"description":"Project description","name":"description","required":false,"type":"string"},{"description":"Company ID (external client)","name":"companyid","required":true,"type":"integer"},{"description":"Management team. Required: managerid (integer). Optional: groupid (integer), teamid (integer)","name":"managementteam","required":true,"type":"object"},{"description":"Staff contact IDs (comma-separated)","name":"staffid","required":false,"type":"string"},{"description":"Client contact IDs (comma-separated)","name":"clientid","required":false,"type":"string"},{"description":"Contractor contact IDs (comma-separated)","name":"contractorid","required":false,"type":"string"},{"description":"Contact IDs (comma-separated)","name":"contactid","required":false,"type":"string"},{"description":"Category ID","name":"categoryid","required":false,"type":"integer"},{"description":"Priority ID (1-5)","name":"priorityid","required":false,"type":"integer"},{"description":"Tag IDs (comma-separated)","name":"tagid","required":false,"type":"string"},{"description":"Work type ID","name":"worktypeid","required":false,"type":"integer"},{"description":"Active work stage ID","name":"activeworkstageid","required":false,"type":"integer"},{"description":"Start date (ISO8601)","name":"startdate","required":false,"type":"string"},{"description":"Due date (ISO8601)","name":"duedate","required":false,"type":"string"},{"description":"Complete date (ISO8601)","name":"completedate","required":false,"type":"string"},{"description":"Cost rate type","name":"costRateType","required":false,"type":"integer"},{"description":"Charge rate type","name":"chargeRateType","required":false,"type":"integer"},{"description":"Private notes (internal only)","name":"privatenotes","required":false,"type":"string"},{"description":"Purchase order number","name":"purchaseorder","required":false,"type":"string"},{"description":"Custom form title","name":"customformtitle","required":false,"type":"string"},{"description":"Time allocated in minutes","name":"timeallocated","required":false,"type":"integer"},{"description":"Template ID to create from","name":"templateused","required":false,"type":"integer"},{"description":"Send notification","name":"notification","required":false,"type":"boolean"},{"description":"Division ID (Advanced plan)","name":"divisionid","required":false,"type":"integer"},{"description":"Enable client access","name":"clientaccess","required":false,"type":"boolean"},{"description":"Client can view all tasks","name":"clientviewalltasks","required":false,"type":"boolean"},{"description":"Staff can view all tasks","name":"staffviewalltasks","required":false,"type":"boolean"}],"tag":"Projects"},{"description":"Update an existing project by ID.","name":"update_project","operation":"update","parameters":[{"description":"Project ID","name":"id","required":true,"type":"integer"},{"description":"Project title","name":"title","required":false,"type":"string"},{"description":"Project number/code","name":"number","required":false,"type":"string"},{"description":"Project description","name":"description","required":false,"type":"string"},{"description":"Company ID","name":"companyid","required":false,"type":"integer"},{"description":"Manager contact ID","name":"managerid","required":false,"type":"integer"},{"description":"Team ID","name":"teamid","required":false,"type":"integer"},{"description":"Group ID","name":"groupid","required":false,"type":"integer"},{"description":"Staff contact IDs (comma-separated)","name":"staffid","required":false,"type":"string"},{"description":"Client contact IDs (comma-separated)","name":"clientid","required":false,"type":"string"},{"description":"Contractor contact IDs (comma-separated)","name":"contractorid","required":false,"type":"string"},{"description":"Contact IDs (comma-separated)","name":"contactid","required":false,"type":"string"},{"description":"Category ID","name":"categoryid","required":false,"type":"integer"},{"description":"Priority ID (1-5)","name":"priorityid","required":false,"type":"integer"},{"description":"Tag IDs (comma-separated)","name":"tagid","required":false,"type":"string"},{"description":"Work type ID","name":"worktypeid","required":false,"type":"integer"},{"description":"Active work stage ID","name":"activeworkstageid","required":false,"type":"integer"},{"description":"Start date (ISO8601)","name":"startdate","required":false,"type":"string"},{"description":"Due date (ISO8601)","name":"duedate","required":false,"type":"string"},{"description":"Complete date (ISO8601)","name":"completedate","required":false,"type":"string"},{"description":"Cost rate type","name":"costRateType","required":false,"type":"integer"},{"description":"Charge rate type","name":"chargeRateType","required":false,"type":"integer"},{"description":"Private notes (internal only)","name":"privatenotes","required":false,"type":"string"},{"description":"Purchase order number","name":"purchaseorder","required":false,"type":"string"},{"description":"Custom form title","name":"customformtitle","required":false,"type":"string"},{"description":"Time allocated in minutes","name":"timeallocated","required":false,"type":"integer"},{"description":"Template ID to create from","name":"templateused","required":false,"type":"integer"},{"description":"Send notification","name":"notification","required":false,"type":"boolean"},{"description":"Division ID (Advanced plan)","name":"divisionid","required":false,"type":"integer"},{"description":"Enable client access","name":"clientaccess","required":false,"type":"boolean"},{"description":"Client can view all tasks","name":"clientviewalltasks","required":false,"type":"boolean"},{"description":"Staff can view all tasks","name":"staffviewalltasks","required":false,"type":"boolean"}],"tag":"Projects"},{"description":"Delete a project by ID (soft delete).","name":"delete_project","operation":"delete","parameters":[{"description":"The unique ID of the record","name":"id","required":true,"type":"integer"}],"tag":"Projects"},{"description":"Create multiple projects in a single request. Pass an array of project objects.","name":"bulk_create_projects","operation":"create","parameters":[{"description":"Array of project objects. Each object accepts the same fields as create_project.","name":"projects","required":true,"type":"array"}],"tag":"Projects"},{"description":"Update multiple projects at once. Only supplied fields are updated.","name":"bulk_update_projects","operation":"update","parameters":[{"description":"Array of project IDs to update","name":"ids","required":true,"type":"array"},{"description":"Priority ID (1-5)","name":"priorityid","required":false,"type":"integer"},{"description":"Category ID","name":"categoryid","required":false,"type":"integer"},{"description":"Start date (ISO8601)","name":"startdate","required":false,"type":"string"},{"description":"Due date (ISO8601)","name":"duedate","required":false,"type":"string"},{"description":"Send notification to contacts","name":"notification","required":false,"type":"boolean"}],"tag":"Projects"},{"description":"Shift start and due dates on multiple projects by a number of days. Negative values shift backwards.","name":"bulk_adjust_project_dates","operation":"update","parameters":[{"description":"Array of project IDs to adjust","name":"ids","required":true,"type":"array"},{"description":"Days to shift dates (positive = forward, negative = backward)","name":"shiftdates","required":true,"type":"integer"},{"description":"Days to shift child item dates","name":"shiftchilddates","required":false,"type":"integer"}],"tag":"Projects"},{"description":"Soft delete multiple projects by ID.","name":"bulk_delete_projects","operation":"delete","parameters":[{"description":"Array of project IDs to delete","name":"ids","required":true,"type":"array"}],"tag":"Projects"},{"description":"List project items/tasks with optional search, status filter, and pagination. Returns items across all projects unless filtered by projectid.","name":"list_projectitems","operation":"list","parameters":[{"description":"Comma-separated fields to return (or 'all')","name":"fields","required":false,"type":"string"},{"description":"Search by item name","name":"search","required":false,"type":"string"},{"description":"Filter by status: active, complete, deleted, all","name":"status","required":false,"type":"string"},{"description":"Filter by project ID(s) (comma-separated)","name":"projectid","required":false,"type":"string"},{"description":"Filter by company ID(s) (comma-separated)","name":"companyid","required":false,"type":"string"},{"description":"Filter by assigned contact ID(s) (comma-separated or 'me')","name":"contacts","required":false,"type":"string"},{"description":"Filter by priority (1-5, comma-separated)","name":"priority","required":false,"type":"string"},{"description":"Filter by tag IDs (comma-separated)","name":"tagid","required":false,"type":"string"},{"description":"Start date from (ISO8601)","name":"startdatefrom","required":false,"type":"string"},{"description":"Start date to (ISO8601)","name":"startdateto","required":false,"type":"string"},{"description":"Due date from (ISO8601)","name":"duedatefrom","required":false,"type":"string"},{"description":"Due date to (ISO8601)","name":"duedateto","required":false,"type":"string"},{"description":"Filter by division ID (Advanced plan)","name":"divisionid","required":false,"type":"integer"},{"description":"Last modified from (ISO8601 or relative e.g. 12h, 5d)","name":"lastmodifiedfrom","required":false,"type":"string"},{"description":"Sort field: id, name, priority, startdate, duedate, status, sortorder","name":"sortby","required":false,"type":"string"},{"description":"Sort order: asc, desc","name":"sortorder","required":false,"type":"string"},{"description":"Page number (1-based)","name":"pagenumber","required":false,"type":"integer"},{"description":"Page size (default 50)","name":"pagesize","required":false,"type":"integer"}],"tag":"Items"},{"description":"Get a single project item/task by ID. Returns all fields.","name":"get_projectitem","operation":"get","parameters":[{"description":"The unique ID of the record","name":"id","required":true,"type":"integer"}],"tag":"Items"},{"description":"Create a new project item/task.","name":"create_projectitem","operation":"create","parameters":[{"description":"Item/task name","name":"name","required":true,"type":"string"},{"description":"Project ID this item belongs to","name":"projectid","required":true,"type":"integer"},{"description":"Item code","name":"code","required":false,"type":"string"},{"description":"Item description","name":"description","required":false,"type":"string"},{"description":"Item status: active, complete","name":"status","required":false,"type":"string"},{"description":"Phase/collection ID","name":"itemcollectionid","required":true,"type":"integer"},{"description":"Item type ID","name":"itemtypeid","required":true,"type":"integer"},{"description":"Parent item ID (for sub-items)","name":"parentid","required":false,"type":"integer"},{"description":"Prerequisite item IDs (comma-separated)","name":"prerequisiteid","required":false,"type":"string"},{"description":"Product library ID","name":"productid","required":false,"type":"integer"},{"description":"Category ID","name":"categoryid","required":false,"type":"integer"},{"description":"Assigned contact IDs (comma-separated)","name":"contactid","required":false,"type":"string"},{"description":"Start date (ISO8601)","name":"startdate","required":false,"type":"string"},{"description":"Due date (ISO8601)","name":"duedate","required":false,"type":"string"},{"description":"Complete date (ISO8601)","name":"completedate","required":false,"type":"string"},{"description":"Priority ID (1-5)","name":"priorityid","required":false,"type":"integer"},{"description":"Story points","name":"storyPoints","required":false,"type":"integer"},{"description":"Impact score ID","name":"impactScoreId","required":false,"type":"integer"},{"description":"Effort score ID","name":"effortScoreId","required":false,"type":"integer"},{"description":"Tag IDs (comma-separated)","name":"tagid","required":false,"type":"string"},{"description":"Budget type","name":"budgetType","required":false,"type":"integer"},{"description":"Bill type","name":"billType","required":false,"type":"integer"},{"description":"Hourly rate service ID","name":"hourlyrateserviceid","required":false,"type":"integer"},{"description":"Cost unit quantity","name":"inUnitQty","required":false,"type":"number"},{"description":"Charge unit quantity","name":"outUnitQty","required":false,"type":"number"},{"description":"Cost unit price","name":"inUnitPrice","required":false,"type":"number"},{"description":"Charge unit price","name":"outUnitPrice","required":false,"type":"number"},{"description":"Cost rate type","name":"costRateType","required":false,"type":"integer"},{"description":"Charge rate type","name":"chargeRateType","required":false,"type":"integer"},{"description":"Projected time spent in minutes","name":"projectedTimeSpent","required":false,"type":"integer"},{"description":"Manual projected time in minutes","name":"projectedTimeManual","required":false,"type":"integer"},{"description":"Manual percentage complete (0-100)","name":"manualPercentageComplete","required":false,"type":"number"}],"tag":"Items"},{"description":"Update an existing project item/task by ID.","name":"update_projectitem","operation":"update","parameters":[{"description":"Project item ID","name":"id","required":true,"type":"integer"},{"description":"Item/task name","name":"name","required":false,"type":"string"},{"description":"Item code","name":"code","required":false,"type":"string"},{"description":"Item description","name":"description","required":false,"type":"string"},{"description":"Item status: active, complete","name":"status","required":false,"type":"string"},{"description":"Phase/collection ID","name":"itemcollectionid","required":false,"type":"integer"},{"description":"Item type ID","name":"itemtypeid","required":false,"type":"integer"},{"description":"Parent item ID (for sub-items)","name":"parentid","required":false,"type":"integer"},{"description":"Prerequisite item IDs (comma-separated)","name":"prerequisiteid","required":false,"type":"string"},{"description":"Product library ID","name":"productid","required":false,"type":"integer"},{"description":"Category ID","name":"categoryid","required":false,"type":"integer"},{"description":"Assigned contact IDs (comma-separated)","name":"contactid","required":false,"type":"string"},{"description":"Start date (ISO8601)","name":"startdate","required":false,"type":"string"},{"description":"Due date (ISO8601)","name":"duedate","required":false,"type":"string"},{"description":"Complete date (ISO8601)","name":"completedate","required":false,"type":"string"},{"description":"Priority ID (1-5)","name":"priorityid","required":false,"type":"integer"},{"description":"Story points","name":"storyPoints","required":false,"type":"integer"},{"description":"Impact score ID","name":"impactScoreId","required":false,"type":"integer"},{"description":"Effort score ID","name":"effortScoreId","required":false,"type":"integer"},{"description":"Tag IDs (comma-separated)","name":"tagid","required":false,"type":"string"},{"description":"Budget type","name":"budgetType","required":false,"type":"integer"},{"description":"Bill type","name":"billType","required":false,"type":"integer"},{"description":"Hourly rate service ID","name":"hourlyrateserviceid","required":false,"type":"integer"},{"description":"Cost unit quantity","name":"inUnitQty","required":false,"type":"number"},{"description":"Charge unit quantity","name":"outUnitQty","required":false,"type":"number"},{"description":"Cost unit price","name":"inUnitPrice","required":false,"type":"number"},{"description":"Charge unit price","name":"outUnitPrice","required":false,"type":"number"},{"description":"Cost rate type","name":"costRateType","required":false,"type":"integer"},{"description":"Charge rate type","name":"chargeRateType","required":false,"type":"integer"},{"description":"Projected time spent in minutes","name":"projectedTimeSpent","required":false,"type":"integer"},{"description":"Manual projected time in minutes","name":"projectedTimeManual","required":false,"type":"integer"},{"description":"Manual percentage complete (0-100)","name":"manualPercentageComplete","required":false,"type":"number"}],"tag":"Items"},{"description":"Delete a project item/task by ID (soft delete).","name":"delete_projectitem","operation":"delete","parameters":[{"description":"The unique ID of the record","name":"id","required":true,"type":"integer"}],"tag":"Items"},{"description":"Create multiple project items/tasks in a single request. Pass an array of project item objects.","name":"bulk_create_projectitems","operation":"create","parameters":[{"description":"Array of project item objects. Each object accepts the same fields as create_projectitem.","name":"projectitems","required":true,"type":"array"}],"tag":"Items"},{"description":"Update multiple project items at once. Only supplied fields are updated.","name":"bulk_update_projectitems","operation":"update","parameters":[{"description":"Array of project item IDs to update","name":"ids","required":true,"type":"array"},{"description":"Product library ID","name":"productid","required":false,"type":"integer"},{"description":"Category ID","name":"categoryid","required":false,"type":"integer"},{"description":"Item type ID","name":"itemtypeid","required":false,"type":"integer"},{"description":"Item code","name":"code","required":false,"type":"string"},{"description":"Start date (ISO8601)","name":"startdate","required":false,"type":"string"},{"description":"Due date (ISO8601)","name":"duedate","required":false,"type":"string"},{"description":"Days to shift dates (positive = forward, negative = backward)","name":"shiftDates","required":false,"type":"integer"},{"description":"Priority ID (1-5)","name":"priorityid","required":false,"type":"integer"},{"description":"Manual percentage complete (0-100)","name":"manualPercentageComplete","required":false,"type":"number"},{"description":"Manual projected time in minutes","name":"projectedTimeManual","required":false,"type":"integer"},{"description":"Projected time spent in minutes","name":"projectedTimeSpent","required":false,"type":"integer"},{"description":"Story points","name":"storyPoints","required":false,"type":"integer"},{"description":"Impact score","name":"impactScore","required":false,"type":"integer"},{"description":"Effort score","name":"effortScore","required":false,"type":"integer"},{"description":"Importance score","name":"importanceScore","required":false,"type":"integer"},{"description":"Urgency score","name":"urgencyScore","required":false,"type":"integer"},{"description":"Budget type","name":"budgetType","required":false,"type":"integer"},{"description":"Bill type","name":"billType","required":false,"type":"integer"},{"description":"Manual budget amount","name":"manualBudget","required":false,"type":"number"},{"description":"Manual bill amount","name":"manualBillAmount","required":false,"type":"number"},{"description":"Hourly rate service ID","name":"hourlyrateserviceid","required":false,"type":"integer"},{"description":"Cost unit quantity","name":"inUnitQty","required":false,"type":"number"},{"description":"Charge unit quantity","name":"outUnitQty","required":false,"type":"number"},{"description":"Cost unit price","name":"inUnitPrice","required":false,"type":"number"},{"description":"Charge unit price","name":"outUnitPrice","required":false,"type":"number"},{"description":"Discount to apply. Fields: percent (number), amount (number)","name":"discount","required":false,"type":"object"}],"tag":"Items"},{"description":"Set the active work stage for multiple project items at once.","name":"bulk_update_projectitem_workstage","operation":"update","parameters":[{"description":"Array of project item IDs to update","name":"ids","required":true,"type":"array"},{"description":"Work stage ID to set","name":"activeworkstageid","required":true,"type":"integer"}],"tag":"Items"},{"description":"Mark one or more project items/tasks as complete in a single request.","name":"complete_projectitems","operation":"update","parameters":[{"description":"Array of project item IDs to mark complete","name":"id","required":true,"type":"array"}],"tag":"Items"},{"description":"Move one or more project items/tasks to a different phase (item collection).","name":"move_projectitems","operation":"update","parameters":[{"description":"Array of project item IDs to move","name":"id","required":true,"type":"array"},{"description":"Destination phase (item collection) ID","name":"itemcollectionid","required":true,"type":"integer"}],"tag":"Items"},{"description":"List invoices with optional search, status filter, and pagination. Returns invoice records matching the criteria.","name":"list_invoices","operation":"list","parameters":[{"description":"Comma-separated fields to return (or 'all')","name":"fields","required":false,"type":"string"},{"description":"Search by invoice number or title","name":"search","required":false,"type":"string"},{"description":"Filter by status: draft, sent, paid, overdue, all","name":"status","required":false,"type":"string"},{"description":"Filter by project ID(s) (comma-separated)","name":"projectid","required":false,"type":"string"},{"description":"Filter by company ID(s) (comma-separated)","name":"companyid","required":false,"type":"string"},{"description":"Filter by manager contact ID(s) (comma-separated)","name":"managerid","required":false,"type":"string"},{"description":"Invoiced date from (ISO8601)","name":"invoiceddatefrom","required":false,"type":"string"},{"description":"Invoiced date to (ISO8601)","name":"invoiceddateto","required":false,"type":"string"},{"description":"Due date from (ISO8601)","name":"duedatefrom","required":false,"type":"string"},{"description":"Due date to (ISO8601)","name":"duedateto","required":false,"type":"string"},{"description":"Filter by division ID (Advanced plan)","name":"divisionid","required":false,"type":"integer"},{"description":"Last modified from (ISO8601 or relative e.g. 12h, 5d)","name":"lastmodifiedfrom","required":false,"type":"string"},{"description":"Sort field: id, number, title, invoiceddate, duedate, grandtotal, lastmodified","name":"sortby","required":false,"type":"string"},{"description":"Sort order: asc, desc","name":"sortorder","required":false,"type":"string"},{"description":"Page number (1-based)","name":"pagenumber","required":false,"type":"integer"},{"description":"Page size (default 50)","name":"pagesize","required":false,"type":"integer"}],"tag":"Invoices"},{"description":"Get a single invoice by ID. Returns all fields and line items.","name":"get_invoice","operation":"get","parameters":[{"description":"The unique ID of the record","name":"id","required":true,"type":"integer"}],"tag":"Invoices"},{"description":"Create a new invoice.","name":"create_invoice","operation":"create","parameters":[{"description":"Invoice title","name":"title","required":true,"type":"string"},{"description":"Company ID (required unless template=true)","name":"companyid","required":true,"type":"integer"},{"description":"Set true to create an invoice template (companyid not required)","name":"template","required":false,"type":"boolean"},{"description":"Invoice number","name":"number","required":false,"type":"string"},{"description":"Invoice description","name":"description","required":false,"type":"string"},{"description":"Project ID","name":"projectid","required":false,"type":"integer"},{"description":"Invoice date (ISO8601)","name":"invoicedate","required":false,"type":"string"},{"description":"Due date (ISO8601)","name":"duedate","required":false,"type":"string"},{"description":"Invoice term ID","name":"invoicetermid","required":true,"type":"integer"},{"description":"Purchase order number","name":"purchaseordernumber","required":false,"type":"string"},{"description":"Active work stage ID","name":"activeworkstageid","required":false,"type":"integer"}],"tag":"Invoices"},{"description":"Update an existing invoice by ID.","name":"update_invoice","operation":"update","parameters":[{"description":"Invoice ID","name":"id","required":true,"type":"integer"},{"description":"Invoice title","name":"title","required":false,"type":"string"},{"description":"Invoice number","name":"number","required":false,"type":"string"},{"description":"Invoice description","name":"description","required":false,"type":"string"},{"description":"Invoice status: draft, submitted, authorised, paid, voided","name":"status","required":false,"type":"string"},{"description":"Invoice date (ISO8601)","name":"invoicedate","required":false,"type":"string"},{"description":"Due date (ISO8601)","name":"duedate","required":false,"type":"string"},{"description":"Client company name (override)","name":"clientcompany","required":false,"type":"string"},{"description":"Client contact name (override)","name":"clientcontactname","required":false,"type":"string"},{"description":"Address line 1","name":"address1","required":false,"type":"string"},{"description":"Address line 2","name":"address2","required":false,"type":"string"},{"description":"City","name":"city","required":false,"type":"string"},{"description":"State/province","name":"state","required":false,"type":"string"},{"description":"Zip/postal code","name":"zipcode","required":false,"type":"string"},{"description":"Country","name":"country","required":false,"type":"string"},{"description":"Invoice term ID","name":"invoicetermid","required":false,"type":"integer"},{"description":"Payment period in days","name":"paymentperiod","required":false,"type":"integer"},{"description":"Payment terms text","name":"paymentterms","required":false,"type":"string"},{"description":"Payment details text","name":"paymentdetails","required":false,"type":"string"},{"description":"Purchase order number","name":"purchaseordernumber","required":false,"type":"string"},{"description":"Tax rate percentage","name":"taxrate","required":false,"type":"number"},{"description":"Whether invoice is taxable","name":"taxable","required":false,"type":"boolean"},{"description":"Page title","name":"pagetitle","required":false,"type":"string"},{"description":"Footer details text","name":"footerdetails","required":false,"type":"string"},{"description":"Show cost breakdown","name":"showcostbreakdown","required":false,"type":"boolean"},{"description":"Show item descriptions","name":"showItemDescription","required":false,"type":"boolean"},{"description":"Layout template ID","name":"layoutid","required":false,"type":"integer"},{"description":"Active work stage ID","name":"activeworkstageid","required":false,"type":"integer"}],"tag":"Invoices"},{"description":"Delete an invoice by ID (soft delete).","name":"delete_invoice","operation":"delete","parameters":[{"description":"The unique ID of the record","name":"id","required":true,"type":"integer"}],"tag":"Invoices"},{"description":"Soft delete multiple invoices by ID.","name":"bulk_delete_invoices","operation":"delete","parameters":[{"description":"Array of invoice IDs to delete","name":"ids","required":true,"type":"array"}],"tag":"Invoices"},{"description":"List quotes with optional search, status filter, and pagination. Returns quote records matching the criteria.","name":"list_quotes","operation":"list","parameters":[{"description":"Comma-separated fields to return (or 'all')","name":"fields","required":false,"type":"string"},{"description":"Search by quote number or title","name":"search","required":false,"type":"string"},{"description":"Filter by status: pending, approved, declined, all","name":"status","required":false,"type":"string"},{"description":"Filter by project ID(s) (comma-separated)","name":"projectid","required":false,"type":"string"},{"description":"Filter by company ID(s) (comma-separated)","name":"companyid","required":false,"type":"string"},{"description":"Filter by manager contact ID(s) (comma-separated)","name":"managerid","required":false,"type":"string"},{"description":"Quoted date from (ISO8601)","name":"quoteddatefrom","required":false,"type":"string"},{"description":"Quoted date to (ISO8601)","name":"quoteddateto","required":false,"type":"string"},{"description":"Filter by division ID (Advanced plan)","name":"divisionid","required":false,"type":"integer"},{"description":"Last modified from (ISO8601 or relative e.g. 12h, 5d)","name":"lastmodifiedfrom","required":false,"type":"string"},{"description":"Sort field: id, number, title, quoteddate, grandtotal, lastmodified","name":"sortby","required":false,"type":"string"},{"description":"Sort order: asc, desc","name":"sortorder","required":false,"type":"string"},{"description":"Page number (1-based)","name":"pagenumber","required":false,"type":"integer"},{"description":"Page size (default 50)","name":"pagesize","required":false,"type":"integer"}],"tag":"Quotes"},{"description":"Get a single quote by ID. Returns all fields and line items.","name":"get_quote","operation":"get","parameters":[{"description":"The unique ID of the record","name":"id","required":true,"type":"integer"}],"tag":"Quotes"},{"description":"Create a new quote.","name":"create_quote","operation":"create","parameters":[{"description":"Quote title","name":"title","required":true,"type":"string"},{"description":"Company ID (required unless template=true)","name":"companyid","required":true,"type":"integer"},{"description":"Set true to create a quote template (companyid not required)","name":"template","required":false,"type":"boolean"},{"description":"Quote number","name":"number","required":false,"type":"string"},{"description":"Quote description","name":"description","required":false,"type":"string"},{"description":"Project ID","name":"projectid","required":false,"type":"integer"},{"description":"Quote date (ISO8601)","name":"quotedate","required":false,"type":"string"},{"description":"Valid until date (ISO8601)","name":"validdate","required":false,"type":"string"},{"description":"Quote validity period in days","name":"quoteperiod","required":false,"type":"integer"},{"description":"Quote type: estimate, quote","name":"type","required":false,"type":"string"},{"description":"Enable client access","name":"clientaccess","required":false,"type":"boolean"},{"description":"Active work stage ID","name":"activeworkstageid","required":false,"type":"integer"}],"tag":"Quotes"},{"description":"Update an existing quote by ID.","name":"update_quote","operation":"update","parameters":[{"description":"Quote ID","name":"id","required":true,"type":"integer"},{"description":"Quote title","name":"title","required":false,"type":"string"},{"description":"Quote number","name":"number","required":false,"type":"string"},{"description":"Quote description","name":"description","required":false,"type":"string"},{"description":"Quote status: pending, sent, accepted, declined","name":"status","required":false,"type":"string"},{"description":"Quote date (ISO8601)","name":"quotedate","required":false,"type":"string"},{"description":"Valid until date (ISO8601)","name":"validdate","required":false,"type":"string"},{"description":"Approved date (ISO8601)","name":"approveddate","required":false,"type":"string"},{"description":"Quote validity period in days","name":"quoteperiod","required":false,"type":"integer"},{"description":"Company ID","name":"companyid","required":false,"type":"integer"},{"description":"Client company name (override)","name":"clientcompany","required":false,"type":"string"},{"description":"Client contact name (override)","name":"clientcontactname","required":false,"type":"string"},{"description":"Quoted by name","name":"quotedby","required":false,"type":"string"},{"description":"Address line 1","name":"address1","required":false,"type":"string"},{"description":"Address line 2","name":"address2","required":false,"type":"string"},{"description":"City","name":"city","required":false,"type":"string"},{"description":"State/province","name":"state","required":false,"type":"string"},{"description":"Zip/postal code","name":"zipcode","required":false,"type":"string"},{"description":"Country","name":"country","required":false,"type":"string"},{"description":"Tax rate percentage","name":"taxrate","required":false,"type":"number"},{"description":"Whether quote is taxable","name":"taxable","required":false,"type":"boolean"},{"description":"Page title","name":"pagetitle","required":false,"type":"string"},{"description":"Footer details text","name":"footerdetails","required":false,"type":"string"},{"description":"Terms and conditions","name":"terms","required":false,"type":"string"},{"description":"Show cost breakdown","name":"showcostbreakdown","required":false,"type":"boolean"},{"description":"Show item descriptions","name":"showItemDescription","required":false,"type":"boolean"},{"description":"Layout template ID","name":"layoutid","required":false,"type":"integer"},{"description":"Enable client access","name":"clientaccess","required":false,"type":"boolean"},{"description":"Active work stage ID","name":"activeworkstageid","required":false,"type":"integer"}],"tag":"Quotes"},{"description":"Delete a quote by ID (soft delete).","name":"delete_quote","operation":"delete","parameters":[{"description":"The unique ID of the record","name":"id","required":true,"type":"integer"}],"tag":"Quotes"},{"description":"Update multiple quotes at once. Only supplied fields are updated.","name":"bulk_update_quotes","operation":"update","parameters":[{"description":"Array of quote IDs to update","name":"ids","required":true,"type":"array"},{"description":"Enable client access","name":"clientaccess","required":false,"type":"boolean"},{"description":"Valid until date (ISO8601)","name":"validdate","required":false,"type":"string"},{"description":"Layout template ID","name":"layoutid","required":false,"type":"integer"}],"tag":"Quotes"},{"description":"Soft delete multiple quotes by ID.","name":"bulk_delete_quotes","operation":"delete","parameters":[{"description":"Array of quote IDs to delete","name":"ids","required":true,"type":"array"}],"tag":"Quotes"},{"description":"List time records with optional contact, project, date range filters, and pagination. Returns time entries matching the criteria.","name":"list_time","operation":"list","parameters":[{"description":"Comma-separated fields to return (or 'all')","name":"fields","required":false,"type":"string"},{"description":"Filter by contact ID(s) (comma-separated or 'me' or 'all')","name":"contacts","required":false,"type":"string"},{"description":"Filter by project ID(s) (comma-separated)","name":"projectid","required":false,"type":"string"},{"description":"Filter by item/task ID(s) (comma-separated)","name":"itemid","required":false,"type":"string"},{"description":"Filter by company ID(s) (comma-separated)","name":"companyid","required":false,"type":"string"},{"description":"Tracked date from (ISO8601, default -6d)","name":"trackedfrom","required":false,"type":"string"},{"description":"Tracked date to (ISO8601, default today)","name":"trackedto","required":false,"type":"string"},{"description":"Filter by billable status: billable, nonbillable, all","name":"billable","required":false,"type":"string"},{"description":"Filter by project status: active, complete, all","name":"projectstatus","required":false,"type":"string"},{"description":"Filter by division ID (Advanced plan)","name":"divisionid","required":false,"type":"integer"},{"description":"Last modified from (ISO8601 or relative e.g. 12h, 5d)","name":"lastmodifiedfrom","required":false,"type":"string"},{"description":"Sort field: id, date, projectid, itemid","name":"sortby","required":false,"type":"string"},{"description":"Sort order: asc, desc","name":"sortorder","required":false,"type":"string"},{"description":"Page number (1-based)","name":"pagenumber","required":false,"type":"integer"},{"description":"Page size (default 50)","name":"pagesize","required":false,"type":"integer"}],"tag":"Time"},{"description":"Get a single time record by ID. Returns all fields.","name":"get_time","operation":"get","parameters":[{"description":"The unique ID of the record","name":"id","required":true,"type":"integer"}],"tag":"Time"},{"description":"Create a new time entry.","name":"create_time","operation":"create","parameters":[{"description":"Contact ID who logged the time","name":"contactid","required":true,"type":"integer"},{"description":"Item/task ID to log time against","name":"itemid","required":true,"type":"integer"},{"description":"Time spent in minutes","name":"timespent","required":true,"type":"integer"},{"description":"Start time (ISO8601)","name":"starttime","required":true,"type":"string"},{"description":"Time entry notes","name":"notes","required":false,"type":"string"},{"description":"Time allocation ID","name":"timeAllocationId","required":false,"type":"integer"}],"tag":"Time"},{"description":"Update an existing time record by ID.","name":"update_time","operation":"update","parameters":[{"description":"Time record ID","name":"id","required":true,"type":"integer"},{"description":"Time spent in minutes","name":"timespent","required":false,"type":"integer"},{"description":"Item/task ID","name":"itemid","required":false,"type":"integer"},{"description":"Start time (ISO8601)","name":"starttime","required":false,"type":"string"},{"description":"Time entry notes","name":"notes","required":false,"type":"string"}],"tag":"Time"},{"description":"Delete a time record by ID.","name":"delete_time","operation":"delete","parameters":[{"description":"The unique ID of the record","name":"id","required":true,"type":"integer"}],"tag":"Time"},{"description":"Create multiple time entries in a single request. Pass an array of time entry objects.","name":"bulk_create_time","operation":"create","parameters":[{"description":"Array of time entry objects. Each object accepts the same fields as create_time.","name":"entries","required":true,"type":"array"}],"tag":"Time"},{"description":"Start a timer against a project item/task. Creates a running time entry that can be stopped with stop_timer.","name":"start_timer","operation":"create","parameters":[{"description":"Project item/task ID to start the timer against","name":"itemid","required":true,"type":"integer"}],"tag":"Time"},{"description":"Stop the currently running timer and save the time entry. Optionally override the time spent (minutes) and add notes.","name":"stop_timer","operation":"create","parameters":[{"description":"Time spent in minutes (overrides tracked time; optional)","name":"timespent","required":false,"type":"integer"},{"description":"Notes for the time entry (optional)","name":"notes","required":false,"type":"string"}],"tag":"Time"},{"description":"Reassign one or more time records to a different contact.","name":"update_time_contact","operation":"update","parameters":[{"description":"Time record IDs to reassign","name":"ids","required":true,"type":"array"},{"description":"New contact ID to assign","name":"contactid","required":true,"type":"integer"}],"tag":"Time"},{"description":"Update the hourly rate service for one or more time records.","name":"update_time_rate","operation":"update","parameters":[{"description":"Time record IDs to update","name":"ids","required":true,"type":"array"},{"description":"Hourly rate service ID to apply","name":"hourlyrateserviceid","required":true,"type":"integer"}],"tag":"Time"},{"description":"List time allocations with optional project, contact, and item filters. Returns time allocation records matching the criteria.","name":"list_timeallocations","operation":"list","parameters":[{"description":"Comma-separated fields to return (or 'all'). Groups: contact, item, project, time, labour","name":"fields","required":false,"type":"string"},{"description":"Filter by project ID(s) (comma-separated)","name":"projectid","required":false,"type":"string"},{"description":"Filter by contact ID(s) (comma-separated)","name":"contactid","required":false,"type":"string"},{"description":"Filter by item/task ID(s) (comma-separated)","name":"itemid","required":false,"type":"string"},{"description":"Filter by project status: active, complete, all","name":"projectstatus","required":false,"type":"string"},{"description":"Filter by division ID (Advanced plan)","name":"divisionid","required":false,"type":"integer"},{"description":"Sort field: id, contactid, itemid, projectid","name":"sortby","required":false,"type":"string"},{"description":"Sort order: asc, desc","name":"sortorder","required":false,"type":"string"},{"description":"Page number (1-based)","name":"pagenumber","required":false,"type":"integer"},{"description":"Page size (default 50)","name":"pagesize","required":false,"type":"integer"}],"tag":"Time Allocations"},{"description":"Get a single time allocation by ID. Returns all fields.","name":"get_timeallocation","operation":"get","parameters":[{"description":"The unique ID of the record","name":"id","required":true,"type":"integer"}],"tag":"Time Allocations"},{"description":"Create a new time allocation.","name":"create_timeallocation","operation":"create","parameters":[{"description":"Item/task ID","name":"itemid","required":true,"type":"integer"},{"description":"Contact ID","name":"contactid","required":false,"type":"integer"},{"description":"Time allocated in minutes","name":"timeallocated","required":true,"type":"integer"},{"description":"Billable time in minutes","name":"timeBillable","required":true,"type":"integer"},{"description":"Allocation start time (ISO8601)","name":"starttime","required":false,"type":"string"},{"description":"Hourly rate service ID","name":"hourlyrateserviceid","required":false,"type":"integer"}],"tag":"Time Allocations"},{"description":"Update an existing time allocation by ID.","name":"update_timeallocation","operation":"update","parameters":[{"description":"Time allocation ID","name":"id","required":true,"type":"integer"},{"description":"Item/task ID","name":"itemid","required":true,"type":"integer"},{"description":"Contact ID","name":"contactid","required":false,"type":"integer"},{"description":"Time allocated in minutes","name":"timeallocated","required":false,"type":"integer"},{"description":"Billable time in minutes","name":"timeBillable","required":false,"type":"integer"},{"description":"Allocation start time (ISO8601)","name":"starttime","required":false,"type":"string"},{"description":"Hourly rate service ID","name":"hourlyrateserviceid","required":false,"type":"integer"}],"tag":"Time Allocations"},{"description":"Delete a time allocation by ID.","name":"delete_timeallocation","operation":"delete","parameters":[{"description":"The unique ID of the record","name":"id","required":true,"type":"integer"}],"tag":"Time Allocations"},{"description":"Create multiple time allocations in a single request. Pass an array of time allocation objects.","name":"bulk_create_timeallocations","operation":"create","parameters":[{"description":"Array of time allocation objects. Each object accepts the same fields as create_timeallocation.","name":"allocations","required":true,"type":"array"}],"tag":"Time Allocations"},{"description":"Update multiple time allocations in a single request. Each entry must include id and itemid. Only supplied fields are updated.","name":"bulk_update_timeallocations","operation":"update","parameters":[{"description":"Array of time allocation objects to update. Each must include id and itemid.","name":"allocations","required":true,"type":"array"}],"tag":"Time Allocations"},{"description":"Delete multiple time allocations in a single request.","name":"bulk_delete_timeallocations","operation":"delete","parameters":[{"description":"Time allocation IDs to delete","name":"ids","required":true,"type":"array"}],"tag":"Time Allocations"},{"description":"List project phases with optional search, project filter, and pagination. Returns phase records matching the criteria.","name":"list_phases","operation":"list","parameters":[{"description":"Comma-separated fields to return (or 'all')","name":"fields","required":false,"type":"string"},{"description":"Search by phase name (prefix with ! for negation)","name":"search","required":false,"type":"string"},{"description":"Filter by project ID(s) (comma-separated)","name":"projectid","required":false,"type":"string"},{"description":"Filter by parent phase ID (0 for top-level only)","name":"parentid","required":false,"type":"string"},{"description":"Filter by division ID (Advanced plan)","name":"divisionid","required":false,"type":"integer"},{"description":"Sort field: id, name, sortorder, startdate, duedate","name":"sortby","required":false,"type":"string"},{"description":"Sort order: asc, desc","name":"sortorder","required":false,"type":"string"},{"description":"Page number (1-based)","name":"pagenumber","required":false,"type":"integer"},{"description":"Page size (default 50)","name":"pagesize","required":false,"type":"integer"}],"tag":"Phases"},{"description":"Get a single project phase by ID. Returns all fields including financial rollups.","name":"get_phase","operation":"get","parameters":[{"description":"The unique ID of the record","name":"id","required":true,"type":"integer"}],"tag":"Phases"},{"description":"Create a new project phase.","name":"create_phase","operation":"create","parameters":[{"description":"Phase name","name":"name","required":true,"type":"string"},{"description":"Project ID this phase belongs to","name":"projectid","required":true,"type":"integer"},{"description":"Parent phase ID (for sub-phases)","name":"parentid","required":false,"type":"integer"}],"tag":"Phases"},{"description":"Update an existing project phase by ID.","name":"update_phase","operation":"update","parameters":[{"description":"Phase ID","name":"id","required":true,"type":"integer"},{"description":"Phase name","name":"name","required":false,"type":"string"},{"description":"Parent phase ID","name":"parentid","required":false,"type":"integer"},{"description":"Sort order position","name":"sortorder","required":false,"type":"integer"}],"tag":"Phases"},{"description":"Delete a project phase by ID (soft delete).","name":"delete_phase","operation":"delete","parameters":[{"description":"The unique ID of the record","name":"id","required":true,"type":"integer"}],"tag":"Phases"},{"description":"Create multiple project phases in a single request. Pass an array of phase objects.","name":"bulk_create_phases","operation":"create","parameters":[{"description":"Array of phase objects. Each object accepts the same fields as create_phase.","name":"phases","required":true,"type":"array"}],"tag":"Phases"},{"description":"Update financial settings on multiple project phases at once. Only supplied fields are updated.","name":"bulk_update_phases","operation":"update","parameters":[{"description":"Array of phase IDs to update","name":"ids","required":true,"type":"array"},{"description":"Budget type","name":"budgetType","required":false,"type":"integer"},{"description":"Bill type","name":"billType","required":false,"type":"integer"},{"description":"Manual budget amount","name":"manualBudget","required":false,"type":"number"},{"description":"Manual bill amount","name":"manualBillAmount","required":false,"type":"number"},{"description":"Cost tax code ID","name":"inTaxCodeId","required":false,"type":"integer"},{"description":"Charge tax code ID","name":"outTaxCodeId","required":false,"type":"integer"},{"description":"Cost accounting code ID","name":"inAccountingCodeId","required":false,"type":"integer"},{"description":"Charge accounting code ID","name":"outAccountingCodeId","required":false,"type":"integer"}],"tag":"Phases"},{"description":"List messages with optional search, project filter, and pagination. Returns message records matching the criteria.","name":"list_messages","operation":"list","parameters":[{"description":"Comma-separated fields to return (or 'all')","name":"fields","required":false,"type":"string"},{"description":"Search by message content","name":"search","required":false,"type":"string"},{"description":"Filter by contact ID(s) (comma-separated)","name":"contacts","required":false,"type":"string"},{"description":"Filter by project ID(s) (comma-separated)","name":"projectid","required":false,"type":"string"},{"description":"Filter by item/task ID(s) (comma-separated)","name":"itemid","required":false,"type":"string"},{"description":"Filter by project status","name":"projectstatus","required":false,"type":"string"},{"description":"Date from (ISO8601)","name":"datefrom","required":false,"type":"string"},{"description":"Date to (ISO8601)","name":"dateto","required":false,"type":"string"},{"description":"Filter by division ID (Advanced plan)","name":"divisionid","required":false,"type":"integer"},{"description":"Sort field","name":"sortby","required":false,"type":"string"},{"description":"Sort order: asc, desc","name":"sortorder","required":false,"type":"string"},{"description":"Page number (1-based)","name":"pagenumber","required":false,"type":"integer"},{"description":"Page size (default 50)","name":"pagesize","required":false,"type":"integer"}],"tag":"Messages"},{"description":"Get a single message by ID. Returns all fields.","name":"get_message","operation":"get","parameters":[{"description":"The unique ID of the record","name":"id","required":true,"type":"integer"}],"tag":"Messages"},{"description":"Create a new message.","name":"create_message","operation":"create","parameters":[{"description":"Message subject/title","name":"subject","required":false,"type":"string"},{"description":"Message body (HTML supported)","name":"content","required":true,"type":"string"},{"description":"Project ID","name":"projectid","required":false,"type":"integer"},{"description":"Item/task ID to associate with","name":"itemid","required":false,"type":"integer"},{"description":"Contact IDs to notify","name":"contactid","required":true,"type":"array"},{"description":"Whether message is public","name":"public","required":false,"type":"boolean"},{"description":"File IDs to attach (comma-separated)","name":"fileid","required":false,"type":"string"}],"tag":"Messages"},{"description":"Update an existing message by ID.","name":"update_message","operation":"update","parameters":[{"description":"Message ID","name":"id","required":true,"type":"integer"},{"description":"Whether message is public","name":"public","required":false,"type":"boolean"},{"description":"Whether to send email notifications","name":"notifications","required":false,"type":"boolean"}],"tag":"Messages"},{"description":"Add one or more contacts to one or more messages.","name":"add_contacts_to_messages","operation":"update","parameters":[{"description":"Message ID(s)","name":"id","required":true,"type":"array"},{"description":"Contact ID(s)","name":"contactid","required":true,"type":"array"}],"tag":"Messages"},{"description":"Remove one or more contacts from one or more messages. Note: you cannot remove a recipient who has replied to the discussion.","name":"remove_contacts_from_messages","operation":"update","parameters":[{"description":"Message ID(s)","name":"id","required":true,"type":"array"},{"description":"Contact ID(s)","name":"contactid","required":true,"type":"array"}],"tag":"Messages"},{"description":"Delete a message by ID.","name":"delete_message","operation":"delete","parameters":[{"description":"The unique ID of the record","name":"id","required":true,"type":"integer"}],"tag":"Messages"}]}
