Browse Paymo projects, tasks, timesheets and invoices, and create tasks, log time or run timers.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Add a comment to a task's discussion thread (content may contain basic HTML). Read existing comments with paymo_get_task include=thread.comments. Paymo: POST /api/comments.
Comment text.
Task to comment on.
The server marks this tool as destructive. Running it may delete or overwrite data on the server or in any account you connected with your headers.
Add a comment to a task's discussion thread (content may contain basic HTML). Read existing comments with paymo_get_task include=thread.comments. Paymo: POST /api/comments.
| Argument | Type | Description |
|---|---|---|
| content* | string | Comment text. |
| task_id* | integer | Task to comment on. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"task_id",
"content"
],
"properties": {
"content": {
"type": "string",
"minLength": 1,
"description": "Comment text."
},
"task_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Task to comment on.",
"exclusiveMinimum": 0
}
}
}Create a project. Note: if client_id is omitted Paymo auto-creates a 'Sample Client'. Free plans have an active-projects limit (403). Paymo: POST /api/projects.
| Argument | Type | Description |
|---|---|---|
| name* | string | Project name. |
| users | array | User ids to assign. |
| billable | boolean | Whether the project is billable. |
| managers | array | User ids of managers (subset of users). |
| client_id | integer | Client the project is for. |
| description | string | Project description. |
| budget_hours | number | Budget in hours. |
| price_per_hour | number | Hourly rate for time & materials projects. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"minLength": 1,
"description": "Project name."
},
"users": {
"type": "array",
"items": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
},
"description": "User ids to assign."
},
"billable": {
"type": "boolean",
"description": "Whether the project is billable."
},
"managers": {
"type": "array",
"items": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
},
"description": "User ids of managers (subset of users)."
},
"client_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Client the project is for.",
"exclusiveMinimum": 0
},
"description": {
"type": "string",
"description": "Project description."
},
"budget_hours": {
"type": "number",
"minimum": 0,
"description": "Budget in hours."
},
"price_per_hour": {
"type": "number",
"minimum": 0,
"description": "Hourly rate for time & materials projects."
}
}
}Create a task in a task list (tasklist_id) or a project (project_id — goes to its 'Default Task List'). Paymo: POST /api/tasks.
| Argument | Type | Description |
|---|---|---|
| name* | string | Task name. |
| users | array | Assignee user ids. |
| billable | boolean | Whether the task is billable. |
| due_date | string | Due date. |
| priority | any | Priority: 25 low, 50 normal, 75 high, 100 critical. |
| project_id | integer | Project to add the task to (used when tasklist_id is not given). |
| description | string | Task description / notes. |
| tasklist_id | integer | Task list to add the task to. |
| budget_hours | number | Budget hours for the task. |
Log a completed time entry on a task, EITHER as date + duration_seconds OR as start_time + end_time (min 1 minute). To start a live timer use paymo_start_timer. Paymo: POST /api/entries.
| Argument | Type | Description |
|---|---|---|
| date | string | Day of the entry (with duration_seconds). |
| task_id* | integer | Task the time is for. |
| user_id | integer | User to log the time for (default: the API key's user). |
| end_time | string | End (with start_time). |
| start_time | string | Start (with end_time). |
| description | string | What was done. |
| duration_seconds | integer | Length in seconds (with date), e.g. 3600 = 1h. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"task_id"
],
"properties": {
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Day of the entry (with duration_seconds)."
},
"task_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Task the time is for.",
"exclusiveMinimum": 0
},
"user_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "User to log the time for (default: the API key's user).",
"exclusiveMinimum": 0
},
"end_time": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(Z|[+-]\\d{2}:\\d{2})$",
"description": "End (with start_time)."
},
"start_time": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(Z|[+-]\\d{2}:\\d{2})$",
"description": "Start (with end_time)."
},
"description": {
"type": "string",
"description": "What was done."
},
"duration_seconds": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Length in seconds (with date), e.g. 3600 = 1h.",
"exclusiveMinimum": 0
}
}
}Fetch the company (account) info and settings: name, default currency, timezone, working days, invoice numbering. Paymo: GET /api/company.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}Fetch one invoice with totals, and (by default) its line items and payments. Paymo: GET /api/invoices/{id}?include=invoiceitems,invoicepayments.
| Argument | Type | Description |
|---|---|---|
| invoice_id* | integer | The invoice id. |
| include_items | boolean | Include line items and payments (default true). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"invoice_id"
],
"properties": {
"invoice_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The invoice id.",
"exclusiveMinimum": 0
},
"include_items": {
"type": "boolean",
"description": "Include line items and payments (default true)."
}
}
}Fetch the Paymo user the API key belongs to (id, name, type, timezone). Use the id as user_id for 'my' time entries and timers. A cheap way to confirm the key works. Paymo: GET /api/me.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}Fetch one project, optionally with related objects inline, e.g. include=tasklists.tasks for the whole task tree or include=client. Paymo: GET /api/projects/{id}.
| Argument | Type | Description |
|---|---|---|
| include | string | Related objects to embed (Paymo `include`), comma-separated, e.g. client or tasklists.tasks. |
| project_id* | integer | The project id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"project_id"
],
"properties": {
"include": {
"type": "string",
"pattern": "^[a-z_]+(\\.[a-z_]+)*(,[a-z_]+(\\.[a-z_]+)*)*$",
"maxLength": 300,
"description": "Related objects to embed (Paymo `include`), comma-separated, e.g. client or tasklists.tasks."
},
"project_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The project id.",
"exclusiveMinimum": 0
}
}
}Fetch one task, optionally with related objects: include=thread.comments for its comments, subtasks, entries (time logged), files, project. Paymo: GET /api/tasks/{id}.
| Argument | Type | Description |
|---|---|---|
| include | string | Related objects to embed (Paymo `include`), comma-separated, e.g. client or tasklists.tasks. |
| task_id* | integer | The task id. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"task_id"
],
"properties": {
"include": {
"type": "string",
"pattern": "^[a-z_]+(\\.[a-z_]+)*(,[a-z_]+(\\.[a-z_]+)*)*$",
"maxLength": 300,
"description": "Related objects to embed (Paymo `include`), comma-separated, e.g. client or tasklists.tasks."
},
"task_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The task id.",
"exclusiveMinimum": 0
}
}
}List clients (id, name, contact details, active flag). Paymo: GET /api/clients.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Max items to return (default 100, max 500). Paymo has no pagination; results beyond this are truncated. |
| where | string | Extra raw Paymo filter ANDed onto the typed ones, e.g. `billable=true` or `name like Website`. Operators: = > >= < <= != like, not like, in (a,b), not in (a,b). |
| active | boolean | true = active clients only, false = archived only. |
| include | string | Related objects to embed (Paymo `include`), comma-separated, e.g. client or tasklists.tasks. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"maximum": 500,
"minimum": 1,
"description": "Max items to return (default 100, max 500). Paymo has no pagination; results beyond this are truncated."
},
"where": {
"type": "string",
"maxLength": 500,
"description": "Extra raw Paymo filter ANDed onto the typed ones, e.g. `billable=true` or `name like Website`. Operators: = > >= < <= != like, not like, in (a,b), not in (a,b)."
},
"active": {
"type": "boolean",
"description": "true = active clients only, false = archived only."
},
"include": {
"type": "string",
"pattern": "^[a-z_]+(\\.[a-z_]+)*(,[a-z_]+(\\.[a-z_]+)*)*$",
"maxLength": 300,
"description": "Related objects to embed (Paymo `include`), comma-separated, e.g. client or tasklists.tasks."
}
}
}List expenses (id, client_id, project_id, user_id, amount, currency, date, notes, invoiced, tags). Paymo: GET /api/expenses.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Max items to return (default 100, max 500). Paymo has no pagination; results beyond this are truncated. |
| where | string | Extra raw Paymo filter ANDed onto the typed ones, e.g. `billable=true` or `name like Website`. Operators: = > >= < <= != like, not like, in (a,b), not in (a,b). |
| date_to | string | Only expenses dated on/before this day. |
| invoiced | boolean | true = already invoiced, false = not yet invoiced. |
| client_id | integer | Only expenses for this client. |
| date_from | string | Only expenses dated on/after this day. |
| project_id | integer | Only expenses for this project. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"maximum": 500,
"minimum": 1,
"description": "Max items to return (default 100, max 500). Paymo has no pagination; results beyond this are truncated."
},
"where": {
"type": "string",
"maxLength": 500,
"description": "Extra raw Paymo filter ANDed onto the typed ones, e.g. `billable=true` or `name like Website`. Operators: = > >= < <= != like, not like, in (a,b), not in (a,b)."
},
"date_to": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Only expenses dated on/before this day."
},
"invoiced": {
"type": "boolean",
"description": "true = already invoiced, false = not yet invoiced."
},
"client_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Only expenses for this client.",
"exclusiveMinimum": 0
},
"date_from": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Only expenses dated on/after this day."
},
"project_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Only expenses for this project.",
"exclusiveMinimum": 0
}
}
}List invoices (id, number, client_id, status, currency, date, due_date, subtotal, total). Paymo: GET /api/invoices.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Max items to return (default 100, max 500). Paymo has no pagination; results beyond this are truncated. |
| where | string | Extra raw Paymo filter ANDed onto the typed ones, e.g. `billable=true` or `name like Website`. Operators: = > >= < <= != like, not like, in (a,b), not in (a,b). |
| status | string | Only invoices with this status. |
| client_id | integer | Only invoices for this client. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"maximum": 500,
"minimum": 1,
"description": "Max items to return (default 100, max 500). Paymo has no pagination; results beyond this are truncated."
},
"where": {
"type": "string",
"maxLength": 500,
"description": "Extra raw Paymo filter ANDed onto the typed ones, e.g. `billable=true` or `name like Website`. Operators: = > >= < <= != like, not like, in (a,b), not in (a,b)."
},
"status": {
"enum": [
"draft",
"sent",
"viewed",
"paid",
"void"
],
"type": "string",
"description": "Only invoices with this status."
},
"client_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Only invoices for this client.",
"exclusiveMinimum": 0
}
}
}List projects (id, name, code, client_id, active, billable, budget_hours, users, managers), optionally filtered. Paymo: GET /api/projects.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Max items to return (default 100, max 500). Paymo has no pagination; results beyond this are truncated. |
| where | string | Extra raw Paymo filter ANDed onto the typed ones, e.g. `billable=true` or `name like Website`. Operators: = > >= < <= != like, not like, in (a,b), not in (a,b). |
| active | boolean | true = active projects, false = archived. |
| include | string | Related objects to embed (Paymo `include`), comma-separated, e.g. client or tasklists.tasks. |
| user_id | integer | Only projects this user is assigned to. |
| billable | boolean | Only billable (true) or non-billable (false) projects. |
| client_id | integer | Only projects for this client. |
| manager_id | integer | Only projects this user manages. |
List task lists (id, name, project_id, milestone_id), e.g. to pick a tasklist_id when creating a task. Paymo: GET /api/tasklists.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Max items to return (default 100, max 500). Paymo has no pagination; results beyond this are truncated. |
| include | string | Related objects to embed (Paymo `include`), comma-separated, e.g. client or tasklists.tasks. |
| project_id | integer | Only task lists from this project. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"maximum": 500,
"minimum": 1,
"description": "Max items to return (default 100, max 500). Paymo has no pagination; results beyond this are truncated."
},
"include": {
"type": "string",
"pattern": "^[a-z_]+(\\.[a-z_]+)*(,[a-z_]+(\\.[a-z_]+)*)*$",
"maxLength": 300,
"description": "Related objects to embed (Paymo `include`), comma-separated, e.g. client or tasklists.tasks."
},
"project_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Only task lists from this project.",
"exclusiveMinimum": 0
}
}
}List tasks (id, name, code, project_id, tasklist_id, complete, due_date, users, priority), filtered by project, task list, assignee or completion. my_tasks=true returns the caller's 'My Tasks'. Paymo: GET /api/tasks.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Max items to return (default 100, max 500). Paymo has no pagination; results beyond this are truncated. |
| where | string | Extra raw Paymo filter ANDed onto the typed ones, e.g. `billable=true` or `name like Website`. Operators: = > >= < <= != like, not like, in (a,b), not in (a,b). |
| include | string | Related objects to embed (Paymo `include`), comma-separated, e.g. client or tasklists.tasks. |
| user_id | integer | Only tasks assigned to this user. |
| complete | boolean | true = completed tasks, false = open tasks. |
| my_tasks | boolean | true = tasks assigned to the calling user or to nobody, in their projects. |
| project_id | integer | Only tasks from this project. |
| tasklist_id | integer |
List time entries (id, task_id, user_id, project_id, start_time/end_time or date, duration in seconds, description, billed). At least one filter is required. from/to filter by the entry's time interval; running_only=true returns running timers. Paymo: GET /api/entries.
| Argument | Type | Description |
|---|---|---|
| to | string | Interval end (YYYY-MM-DD = end of that day UTC). Requires `from`. |
| from | string | Interval start (YYYY-MM-DD = start of that day UTC). Requires `to`. |
| limit | integer | Max items to return (default 100, max 500). Paymo has no pagination; results beyond this are truncated. |
| where | string | Extra raw Paymo filter ANDed onto the typed ones, e.g. `billable=true` or `name like Website`. Operators: = > >= < <= != like, not like, in (a,b), not in (a,b). |
| billed | boolean | true = already invoiced, false = unbilled. |
| include | string | Related objects to embed (Paymo `include`), comma-separated, e.g. client or tasklists.tasks. |
| task_id | integer | Only entries for this task. |
| user_id |
List users in the company (id, name, email, type, hourly rate, assigned/managed projects). Paymo: GET /api/users.
| Argument | Type | Description |
|---|---|---|
| type | string | Only users of this type. |
| limit | integer | Max items to return (default 100, max 500). Paymo has no pagination; results beyond this are truncated. |
| where | string | Extra raw Paymo filter ANDed onto the typed ones, e.g. `billable=true` or `name like Website`. Operators: = > >= < <= != like, not like, in (a,b), not in (a,b). |
| active | boolean | true = active users only, false = retired users only. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"type": {
"enum": [
"Admin",
"Employee",
"Guest"
],
"type": "string",
"description": "Only users of this type."
},
"limit": {
"type": "integer",
"maximum": 500,
"minimum": 1,
"description": "Max items to return (default 100, max 500). Paymo has no pagination; results beyond this are truncated."
},
"where": {
"type": "string",
"maxLength": 500,
"description": "Extra raw Paymo filter ANDed onto the typed ones, e.g. `billable=true` or `name like Website`. Operators: = > >= < <= != like, not like, in (a,b), not in (a,b)."
},
"active": {
"type": "boolean",
"description": "true = active users only, false = retired users only."
}
}
}Start a running timer on a task (a time entry with a start_time and no end_time). A user can have only one running timer; if one is running Paymo returns 409. Paymo: POST /api/entries.
| Argument | Type | Description |
|---|---|---|
| task_id* | integer | Task to time. |
| user_id | integer | User to start the timer for (default: the API key's user). |
| start_time | string | When the timer started (default: now). |
| description | string | What is being worked on. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"task_id"
],
"properties": {
"task_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Task to time.",
"exclusiveMinimum": 0
},
"user_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "User to start the timer for (default: the API key's user).",
"exclusiveMinimum": 0
},
"start_time": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(Z|[+-]\\d{2}:\\d{2})$",
"description": "When the timer started (default: now)."
},
"description": {
"type": "string",
"description": "What is being worked on."
}
}
}Stop a running timer by setting its end_time (default: now). The final duration must be at least 1 minute. Find running timers with paymo_list_time_entries running_only=true. Paymo: PUT /api/entries/{id}.
| Argument | Type | Description |
|---|---|---|
| end_time | string | When the timer stopped (default: now). |
| entry_id* | integer | The running timer's time-entry id. |
| description | string | Final description. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"entry_id"
],
"properties": {
"end_time": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(Z|[+-]\\d{2}:\\d{2})$",
"description": "When the timer stopped (default: now)."
},
"entry_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The running timer's time-entry id.",
"exclusiveMinimum": 0
},
"description": {
"type": "string",
"description": "Final description."
}
}
}Update a task — rename, re-describe, reassign (users replaces the whole list), set due date or priority, mark complete/incomplete, move to another task list or workflow status. Only the fields given are changed. Paymo: PUT /api/tasks/{id}.
| Argument | Type | Description |
|---|---|---|
| name | string | New name. |
| users | array | New FULL list of assignee user ids. |
| task_id* | integer | The task id. |
| complete | boolean | true = mark complete, false = reopen. |
| due_date | string | New due date. |
| priority | any | Priority: 25 low, 50 normal, 75 high, 100 critical. |
| status_id | integer | Workflow status id. |
| description | string | New description. |
| tasklist_id | integer | Move to this task list. |
Edit a time entry: description, task, or its length. duration_seconds only applies to date+duration entries; for start/end entries change end_time instead. Paymo: PUT /api/entries/{id}.
| Argument | Type | Description |
|---|---|---|
| date | string | New day (date+duration entries only). |
| task_id | integer | Move the entry to this task. |
| end_time | string | New end (start/end entries only). |
| entry_id* | integer | The time entry id. |
| start_time | string | New start (start/end entries only). |
| description | string | New description. |
| duration_seconds | integer | New length in seconds (date+duration entries only). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"entry_id"
],
"properties": {
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "New day (date+duration entries only)."
},
"task_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Move the entry to this task.",
"exclusiveMinimum": 0
},
"end_time": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(Z|[+-]\\d{2}:\\d{2})$",
"description": "New end (start/end entries only)."
},
"entry_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The time entry id.",
"exclusiveMinimum": 0
},
"start_time": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(Z|[+-]\\d{2}:\\d{2})$",
"description": "New start (start/end entries only)."
},
"description": {
"type": "string",
"description": "New description."
},
"duration_seconds": {
"type": "integer",
"maximum": 9007199254740991,
"description": "New length in seconds (date+duration entries only).",
"exclusiveMinimum": 0
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"minLength": 1,
"description": "Task name."
},
"users": {
"type": "array",
"items": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
},
"description": "Assignee user ids."
},
"billable": {
"type": "boolean",
"description": "Whether the task is billable."
},
"due_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Due date."
},
"priority": {
"anyOf": [
{
"type": "number",
"const": 25
},
{
"type": "number",
"const": 50
},
{
"type": "number",
"const": 75
},
{
"type": "number",
"const": 100
}
],
"description": "Priority: 25 low, 50 normal, 75 high, 100 critical."
},
"project_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Project to add the task to (used when tasklist_id is not given).",
"exclusiveMinimum": 0
},
"description": {
"type": "string",
"description": "Task description / notes."
},
"tasklist_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Task list to add the task to.",
"exclusiveMinimum": 0
},
"budget_hours": {
"type": "number",
"minimum": 0,
"description": "Budget hours for the task."
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"maximum": 500,
"minimum": 1,
"description": "Max items to return (default 100, max 500). Paymo has no pagination; results beyond this are truncated."
},
"where": {
"type": "string",
"maxLength": 500,
"description": "Extra raw Paymo filter ANDed onto the typed ones, e.g. `billable=true` or `name like Website`. Operators: = > >= < <= != like, not like, in (a,b), not in (a,b)."
},
"active": {
"type": "boolean",
"description": "true = active projects, false = archived."
},
"include": {
"type": "string",
"pattern": "^[a-z_]+(\\.[a-z_]+)*(,[a-z_]+(\\.[a-z_]+)*)*$",
"maxLength": 300,
"description": "Related objects to embed (Paymo `include`), comma-separated, e.g. client or tasklists.tasks."
},
"user_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Only projects this user is assigned to.",
"exclusiveMinimum": 0
},
"billable": {
"type": "boolean",
"description": "Only billable (true) or non-billable (false) projects."
},
"client_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Only projects for this client.",
"exclusiveMinimum": 0
},
"manager_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Only projects this user manages.",
"exclusiveMinimum": 0
}
}
}| Only tasks from this task list. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"maximum": 500,
"minimum": 1,
"description": "Max items to return (default 100, max 500). Paymo has no pagination; results beyond this are truncated."
},
"where": {
"type": "string",
"maxLength": 500,
"description": "Extra raw Paymo filter ANDed onto the typed ones, e.g. `billable=true` or `name like Website`. Operators: = > >= < <= != like, not like, in (a,b), not in (a,b)."
},
"include": {
"type": "string",
"pattern": "^[a-z_]+(\\.[a-z_]+)*(,[a-z_]+(\\.[a-z_]+)*)*$",
"maxLength": 300,
"description": "Related objects to embed (Paymo `include`), comma-separated, e.g. client or tasklists.tasks."
},
"user_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Only tasks assigned to this user.",
"exclusiveMinimum": 0
},
"complete": {
"type": "boolean",
"description": "true = completed tasks, false = open tasks."
},
"my_tasks": {
"type": "boolean",
"description": "true = tasks assigned to the calling user or to nobody, in their projects."
},
"project_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Only tasks from this project.",
"exclusiveMinimum": 0
},
"tasklist_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Only tasks from this task list.",
"exclusiveMinimum": 0
}
}
}| integer |
| Only entries for this user. |
| client_id | integer | Only entries for this client. |
| project_id | integer | Only entries from this project. |
| running_only | boolean | true = only running timers (no end_time yet). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"to": {
"type": "string",
"description": "Interval end (YYYY-MM-DD = end of that day UTC). Requires `from`."
},
"from": {
"type": "string",
"description": "Interval start (YYYY-MM-DD = start of that day UTC). Requires `to`."
},
"limit": {
"type": "integer",
"maximum": 500,
"minimum": 1,
"description": "Max items to return (default 100, max 500). Paymo has no pagination; results beyond this are truncated."
},
"where": {
"type": "string",
"maxLength": 500,
"description": "Extra raw Paymo filter ANDed onto the typed ones, e.g. `billable=true` or `name like Website`. Operators: = > >= < <= != like, not like, in (a,b), not in (a,b)."
},
"billed": {
"type": "boolean",
"description": "true = already invoiced, false = unbilled."
},
"include": {
"type": "string",
"pattern": "^[a-z_]+(\\.[a-z_]+)*(,[a-z_]+(\\.[a-z_]+)*)*$",
"maxLength": 300,
"description": "Related objects to embed (Paymo `include`), comma-separated, e.g. client or tasklists.tasks."
},
"task_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Only entries for this task.",
"exclusiveMinimum": 0
},
"user_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Only entries for this user.",
"exclusiveMinimum": 0
},
"client_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Only entries for this client.",
"exclusiveMinimum": 0
},
"project_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Only entries from this project.",
"exclusiveMinimum": 0
},
"running_only": {
"type": "boolean",
"description": "true = only running timers (no end_time yet)."
}
}
}| budget_hours |
| number |
| New budget hours. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"task_id"
],
"properties": {
"name": {
"type": "string",
"minLength": 1,
"description": "New name."
},
"users": {
"type": "array",
"items": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
},
"description": "New FULL list of assignee user ids."
},
"task_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The task id.",
"exclusiveMinimum": 0
},
"complete": {
"type": "boolean",
"description": "true = mark complete, false = reopen."
},
"due_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "New due date."
},
"priority": {
"anyOf": [
{
"type": "number",
"const": 25
},
{
"type": "number",
"const": 50
},
{
"type": "number",
"const": 75
},
{
"type": "number",
"const": 100
}
],
"description": "Priority: 25 low, 50 normal, 75 high, 100 critical."
},
"status_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Workflow status id.",
"exclusiveMinimum": 0
},
"description": {
"type": "string",
"description": "New description."
},
"tasklist_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Move to this task list.",
"exclusiveMinimum": 0
},
"budget_hours": {
"type": "number",
"minimum": 0,
"description": "New budget hours."
}
}
}