Call this server's tools from your browser. Nothing to install.
https://decknote.app/api/v1/mcp
Bearer token from Decknote → Settings → API tokens (starts with ntrl_)
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_attachment Destructive
Attaches a link (url) or a file (contentBase64 + filename) to a task. Files follow the board owner's plan: 5 MB each and 100 MB per board on Free, 25 MB and 2 GB on Pro. Photos are optimized, as in the app.
An http(s) link.
The link's or file's name.
For a file: its name with extension.
For a file: its bytes, base64-encoded.
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.
Tools (211)
add_attachment
Attaches a link (url) or a file (contentBase64 + filename) to a task. Files follow the board owner's plan: 5 MB each and 100 MB per board on Free, 25 MB and 2 GB on Pro. Photos are optimized, as in the app.
destructive
Argument
Type
Description
url
string
An http(s) link.
name
string
The link's or file's name.
cardId*
string
filename
string
For a file: its name with extension.
mimeType
string
contentBase64
string
For a file: its bytes, base64-encoded.
Input schema (JSON)
{
"type": "object",
"required": [
"cardId"
],
"properties": {
"url": {
"type": "string",
"description": "An http(s) link."
},
"name": {
"type": "string",
"description": "The link's or file's name."
},
"cardId": {
"type": "string"
},
"filename": {
"type": "string",
"description": "For a file: its name with extension."
},
"mimeType": {
"type": "string"
},
"contentBase64": {
"type": "string",
"description": "For a file: its bytes, base64-encoded."
}
}
}
add_checklist
Adds a checklist with its items to a task, in addition to its other checklists.
Adds a comment to a task as the user. By default nobody is notified. With notify: true it notifies @mentioned board members and the card's watchers by push and email, as commenting in the app does; that needs confirm: true, and without it the result is a preview of who would be notified.
destructive
Argument
Type
Description
text*
string
Mention a board member by writing @ and their name.
cardId*
string
notify
boolean
Notify mentioned people and watchers, as the app does. Default false.
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
Input schema (JSON)
{
"type": "object",
"required": [
"cardId",
"text"
],
"properties": {
"text": {
"type": "string",
"description": "Mention a board member by writing @ and their name."
},
"cardId": {
"type": "string"
},
"notify": {
"type": "boolean",
"description": "Notify mentioned people and watchers, as the app does. Default false."
},
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
}
}
}
add_expense_receipt
Attaches a receipt to an expense: a photo (JPG, PNG, WebP or GIF, optimized like task photos) or a PDF, sent base64-encoded with its filename. The person who logged the expense and the project owner can add one, also to an expense already on an invoice. At most 10 per expense; each file up to the project owner's plan cap (5 MB on Free, 25 MB on Pro).
destructive
Argument
Type
Description
filename*
string
The file's name with its extension.
expenseId*
string
The expense.
contentBase64*
string
The file's bytes, base64-encoded.
Input schema (JSON)
{
"type": "object",
"required": [
"expenseId",
"filename",
"contentBase64"
],
"properties": {
"filename": {
"type": "string",
"description": "The file's name with its extension."
},
"expenseId": {
"type": "string",
"description": "The expense."
},
"contentBase64": {
"type": "string",
"description": "The file's bytes, base64-encoded."
}
}
}
add_holiday
Adds a holiday to the user's calendar: one per day, with a name of up to 80 characters. That day holds no work for anybody in the user's Workload, so every person's capacity for that week is one working day lower; a holiday on a Saturday or a Sunday changes nothing. A Pro feature.
destructive
Argument
Type
Description
day*
string
The day, YYYY-MM-DD.
name*
string
Up to 80 characters, for example Independence Day.
Input schema (JSON)
{
"type": "object",
"required": [
"day",
"name"
],
"properties": {
"day": {
"type": "string",
"description": "The day, YYYY-MM-DD."
},
"name": {
"type": "string",
"description": "Up to 80 characters, for example Independence Day."
}
}
}
add_page_comment
Adds a comment to a note or discussion (plain text, up to 5000 characters); the page moves up its list. Not on an archived page. Needs the editor role on the project.
destructive
Argument
Type
Description
text*
string
Up to 5000 characters.
pageId*
string
The page (a note or a discussion).
Input schema (JSON)
{
"type": "object",
"required": [
"pageId",
"text"
],
"properties": {
"text": {
"type": "string",
"description": "Up to 5000 characters."
},
"pageId": {
"type": "string",
"description": "The page (a note or a discussion)."
}
}
}
add_reminder
Adds a reminder for the user on a task: a push notification and an email at a chosen moment. Either `at` (an ISO 8601 instant), or relative to the due date (`daysBefore` + local `time` + IANA `timeZone`), which follows the due date when it moves and repeats with repeating tasks.
Records time off for the user or, on Pro, for an editor of a project the user owns: a vacation, sick leave or other, from a first day to a last day (a single day when no last day is given), for the whole working day or a number of minutes of each. Once approved it lowers that person's capacity in the Workload for the weeks it touches (Monday to Friday count). The user's own time off is a request (status pending, and those owners get a notification) when an owner of a project the user edits plans with the team calendar, and approved at once otherwise; time off recorded for an editor is approved. A span is at most 366 days. The note belongs to the person: only they can write it, so it is refused when the time off is for somebody else.
destructive
Argument
Type
Description
kind
string
vacation, sick or other. Default vacation.
note
string
Up to 300 characters. Only the person writes it and only they read it back.
endDay
string
The last day off. Default: the first day, YYYY-MM-DD.
userId
string
Whose time off it is: the user (default) or an editor of one of the user's projects (Pro).
startDay*
string
The first day off, YYYY-MM-DD.
minutesPerDay
integer | null
Minutes off each day (240 is half a working day), between 1 and the person's working day. null or missing: the whole working day.
api_create
Creates something through Decknote's HTTP API (reference: https://decknote.app/api-docs#mcp-http-api) as the signed-in user, with POST. Reachable: POST /api/v1/boards: a board: { title, template? }; POST /api/v1/cards: a card: { listId | boardId, title, description?, dueDate?, checklist?, reminders? }; POST /api/v1/boards/{boardId}/embeds: an embed of a board: { name, origins[], canEdit? } (owner, Pro). Takes a path on Decknote itself (not a full URL) and a JSON object body as documented there. Needs confirm: true; without it nothing is sent and the result is a preview of the request. Authentication, token, session, admin, payment and internal endpoints are not reachable, and secrets are removed from responses.
destructive
Argument
Type
Description
body
object
The JSON body the route documents.
path*
string
A path from the list, e.g. /api/v1/cards
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
Input schema (JSON)
{
"type": "object",
"required": [
"path"
],
"properties": {
"body": {
"type": "object",
"description": "The JSON body the route documents."
},
"path": {
"type": "string",
"description": "A path from the list, e.g. /api/v1/cards"
},
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
}
}
}
api_read
Reads from Decknote's HTTP API (reference: https://decknote.app/api-docs#mcp-http-api) as the signed-in user, with GET; it doesn't change anything. Covers what no dedicated tool returns, such as the contents of an uploaded text file or a link preview. Reachable: GET /api/v1/me: the user (id, name, email); GET /api/v1/boards: the user's boards and their lists; GET /api/v1/boards/{boardId}/embeds: a board's live embeds (owner); GET /api/export: everything the user can read, as one JSON document; GET /api/link-preview?url=…: the title and description of a web page; GET /api/attachments/{attachmentId}: an uploaded file (text files come back as text; others as type and size). Takes a path on Decknote itself (not a full URL) and optional query parameters. Authentication, token, session, admin, payment and internal endpoints are not reachable, and secrets are removed from responses.
read-only
Argument
Type
Description
path*
string
A path from the list, e.g. /api/v1/boards or /api/link-preview?url=https://example.com
query
object
Extra query parameters (string, number or boolean values).
Input schema (JSON)
{
"type": "object",
"required": [
"path"
],
"properties": {
"path": {
"type": "string",
"description": "A path from the list, e.g. /api/v1/boards or /api/link-preview?url=https://example.com"
},
"query": {
"type": "object",
"description": "Extra query parameters (string, number or boolean values)."
}
}
}
approve_time_off
Approves a time off an editor of a project the user owns asked for: from then on it lowers that person's capacity in the Workload, and the person gets a notification. A Pro feature (the team calendar). Needs confirm: true; without it the result is a preview.
destructive
Argument
Type
Description
note
string
Up to 300 characters for the person (why it was rejected). The person and the owners read it.
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
timeOffId*
string
A time off of the user or of an editor of one of the user's projects.
Input schema (JSON)
{
"type": "object",
"required": [
"timeOffId"
],
"properties": {
"note": {
"type": "string",
"description": "Up to 300 characters for the person (why it was rejected). The person and the owners read it."
},
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
},
"timeOffId": {
"type": "string",
"description": "A time off of the user or of an editor of one of the user's projects."
}
}
}
approve_timesheet
Approves a week of hours a person on the user's projects submitted for approval: its hours stay closed to that person (the user, as the project owner, can still change them) and the person gets a notification. A rejected week has to be submitted again first. A Pro feature. Needs confirm: true; without it the result is a preview with the week's hours by project and task.
destructive
Argument
Type
Description
note
string
Up to 500 characters, sent to the person with the notification.
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
timesheetId*
string
A week handed in for approval (the user's own, or one handed to the user).
Input schema (JSON)
{
"type": "object",
"required": [
"timesheetId"
],
"properties": {
"note": {
"type": "string",
"description": "Up to 500 characters, sent to the person with the notification."
},
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
},
"timesheetId": {
"type": "string",
"description": "A week handed in for approval (the user's own, or one handed to the user)."
}
}
}
archive_board
Archives a board the user owns: it leaves everyone's dashboard and keeps all its data until it is restored. Archived boards don't count toward the free plan's 5 owned boards.
Archives a client: it leaves the active list and stops counting toward the plan's client limit. Its projects keep the link and all the time stays. Needs confirm: true; without it the result is a preview.
destructive
Argument
Type
Description
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
clientId*
string
Input schema (JSON)
{
"type": "object",
"required": [
"clientId"
],
"properties": {
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
},
"clientId": {
"type": "string"
}
}
}
archive_task
Archives a task: it leaves the board but keeps all its data and can be restored from the board's archive. Archiving a dated repeating task creates its next occurrence, as in the app.
Acts on up to 100 tasks of one board at once, like multi-select in the app: moves them to a list, adds a label, or archives them (repeating ones create their next occurrence).
Turns an accepted estimate into a draft invoice with the same lines, once while that invoice stands (after the invoice is voided or its draft deleted, the estimate can be turned into a new one). Counts toward the free plan's 2 documents per month.
Makes a project board from an accepted estimate that is not tied to a project yet: the estimate's client, its amount before tax (budget "money", the default), its hours ("hours") or no budget ("none") as the project's budget, the hourly rate when every line in hours has the same price, and one task per line (lines in hours carry their hours as the task's estimate) unless tasks is false. The estimate is then tied to that project. Counts against the board limit of the user's plan.
destructive
Argument
Type
Description
tasks
boolean
One task per line of the estimate. Default true.
title
string
The project's name, up to 120 characters. Default: the client's name and the estimate's number.
budget
string
invoiceId*
string
The accepted estimate.
Input schema (JSON)
{
"type": "object",
"required": [
"invoiceId"
],
"properties": {
"tasks": {
"type": "boolean",
"description": "One task per line of the estimate. Default true."
},
"title": {
"type": "string",
"description": "The project's name, up to 120 characters. Default: the client's name and the estimate's number."
},
"budget": {
"enum": [
"money",
"hours",
"none"
],
"type": "string"
},
"invoiceId": {
"type": "string",
"description": "The accepted estimate."
}
}
}
create_automation
Adds a board rule: WHEN a card is added to a list / moved to a list / gets a label, THEN move it, add or remove a label, assign someone, set the due date N days ahead, archive it, or comment. Triggers: card_added, card_moved, label_added (card_added/card_moved need triggerListId, label_added needs triggerLabelId). Actions: move_to_list, add_label, remove_label, assign, set_due, archive, comment (move_to_list needs actionListId; add_label/remove_label need actionLabelId; assign needs actionUserId; set_due needs actionDays; comment needs actionText). Free plan: 1 per board.
destructive
Argument
Type
Description
name*
string
action*
string
boardId*
string
trigger*
string
actionDays
integer
actionText
string
actionListId
string
actionUserId
string
create_board
Creates a new board owned by the user. `template` sets the initial lists and labels, in the user's language: blank (To do / In progress / Done), kanban, content or personal; `lists` replaces the template's list titles. Returns the board with its list ids. The free plan allows 5 owned boards.
destructive
Argument
Type
Description
lists
array
List titles, in order; they replace the template's lists (its labels stay).
Adds a client. Projects are linked to a client in their settings; the client's currency and default hourly rate apply to their time. The free plan includes 2 active clients; Pro has no limit.
destructive
Argument
Type
Description
name*
string
Up to 120 characters.
email
string
Contact email.
notes
string
phone
string
taxId
string
Tax or VAT number.
address
string
currency
string
Three-letter code, e.g. USD or ARS. Default USD.
hourlyRate
number | string
Default hourly rate for this client's projects. An amount in the currency's main unit, e.g. 85 or "85.50" (not cents).
Input schema (JSON)
{
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string",
"description": "Up to 120 characters."
},
"email": {
"type": "string",
"description": "Contact email."
},
"notes": {
"type": "string"
},
"phone": {
"type": "string"
},
"taxId": {
"type": "string",
"description": "Tax or VAT number."
},
"address": {
"type": "string"
},
"currency": {
"type": "string",
"description": "Three-letter code, e.g. USD or ARS. Default USD."
},
"hourlyRate": {
"type": [
"number",
"string"
],
"description": "Default hourly rate for this client's projects. An amount in the currency's main unit, e.g. 85 or \"85.50\" (not cents)."
}
}
}
create_custom_field
Adds a custom field to a board's cards: text, number, select (with up to 20 options), checkbox or date. The free plan allows 3 per board.
Lets another app of the user's show this board in an iframe (Pro, owner only): a name and up to 5 https origins allowed to frame it, read-only unless canEdit. That app's server then requests a session through the REST API. Needs confirm: true; without it the result is a preview.
destructive
Argument
Type
Description
name*
string
boardId*
string
canEdit
boolean
Whether people in the embed can edit. Default false.
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
origins*
array
Up to 5, like https://your-app.com
Input schema (JSON)
{
"type": "object",
"required": [
"boardId",
"name",
"origins"
],
"properties": {
"name": {
"type": "string"
},
"boardId": {
"type": "string"
},
"canEdit": {
"type": "boolean",
"description": "Whether people in the embed can edit. Default false."
},
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
},
"origins": {
"type": "array",
"items": {
"type": "string"
},
"description": "Up to 5, like https://your-app.com"
}
}
}
create_expense
Logs an expense on a project: what was spent, the amount, the day, a category (travel, software, hardware, services, meals, other), the vendor, whether it can be billed to the client, and optionally a task. It records a cost; nothing is paid. Only the project owner can set a markup (a percentage added when billing it). Needs the editor role on the project.
destructive
Argument
Type
Description
day
string
The day it was spent. Default today, YYYY-MM-DD.
amount*
number | string
What it cost. An amount in the currency's main unit, e.g. 85 or "85.50" (not cents).
cardId
string | null
A task of the same project.
vendor
string | null
boardId*
string
The project.
billable
boolean
Whether it can be billed to the client. Default: the project's own setting (true when it has none).
category
string
description*
string
What it was, up to 200 characters.
create_invoice
Creates a draft invoice or estimate, with its lines if given, copying the user's billing details and the chosen client onto it. The draft is private: nothing is sent or published. It has no number until it is sent; sending takes the next one from the profile's counter. The free plan includes 2 invoices or estimates per calendar month (voided ones count); Pro has no limit. Needs the billing details to be set up.
destructive
Argument
Type
Description
kind*
string
lines
array
At most 500.
notes
string | null
Up to 4000 characters. Default: the profile's default notes.
terms
string | null
Up to 4000 characters. Default: the profile's payment instructions.
toName
string
Who it is for. Default: the client's name.
boardId
string | null
A project the user owns, to link the document to.
dueDate
string | null
YYYY-MM-DD. Default: the profile's payment terms (invoice) or 30 days (estimate).
toEmail
string | null
create_invoice_from_work
Creates a draft invoice from a project's unbilled work (same options as the preview): the finished billable hours and billable expenses become lines and are tied to the invoice, so they cannot be invoiced twice or edited until it is voided. The draft is private: nothing is sent. Counts toward the free plan's 2 documents per month. Only the project owner. Needs confirm: true and amount equal to the total of the preview; without them the result is that preview.
destructive
Argument
Type
Description
to
string
Only work up to this day, YYYY-MM-DD.
from
string
Only work from this day on, YYYY-MM-DD.
notes
string | null
Up to 4000 characters. Default: the profile's default notes.
terms
string | null
Up to 4000 characters. Default: the profile's payment instructions.
amount
number | string
The document's total in the currency's main unit, repeated from the preview (e.g. 220 or "220.00"). Must equal the total or nothing is done.
toName
string
Who it is for. Default: the client's name.
boardId*
string
The project.
create_label
Adds a label to a board. Colors: green, yellow, orange, red, purple, blue, sky, pink.
Adds a list (column) to a board, at the end or, with first: true, before the other lists. Returns the new list with its id. Needs edit access to the board.
destructive
Argument
Type
Description
first
boolean
Put it before the other lists. Default false.
title*
string
boardId*
string
Input schema (JSON)
{
"type": "object",
"required": [
"boardId",
"title"
],
"properties": {
"first": {
"type": "boolean",
"description": "Put it before the other lists. Default false."
},
"title": {
"type": "string"
},
"boardId": {
"type": "string"
}
}
}
create_page
Starts a note (shared writing any editor can change) or a discussion (its text belongs to its author and the owner; editors answer with comments) in a project. The body is Markdown; links must be http, https, mailto, tel or of this site. Too much text is refused, not cut. Needs the editor role on the project.
Creates a new project: a board with the plain three-list layout and project settings (active), optionally for one of the user's clients. Counts against the free plan's board limit like any board. To turn an existing board into a project, change its project settings.
Creates a new project from a starter or saved template: its lists, labels, tasks with estimates and checklists, and settings, with due dates shifted onto the start date (default today). The template is untouched. Optionally for one of the user's clients. Counts against the free plan's board limit like any board.
destructive
Argument
Type
Description
title*
string
The new project's name, up to 120 characters.
clientId
string | null
One of the user's clients.
startDate
string | null
YYYY-MM-DD. The day the project starts. Default today.
templateId*
string
The template's id: a starter's or a saved one's.
templateKind*
string
Input schema (JSON)
{
"type": "object",
"required": [
"templateKind",
"templateId",
"title"
],
"properties": {
"title": {
"type": "string",
"description": "The new project's name, up to 120 characters."
},
"clientId": {
"type": [
"string",
"null"
],
"description": "One of the user's clients."
},
"startDate": {
"type": [
"string",
"null"
],
"description": "YYYY-MM-DD. The day the project starts. Default today."
},
"templateId": {
"type": "string",
"description": "The template's id: a starter's or a saved one's."
},
"templateKind": {
"enum": [
"starter",
"saved"
],
"type": "string"
}
}
}
create_recurring_invoice
Pro. Makes an invoice repeat: a new invoice with the same client, lines, tax, notes and terms is made on each date (every N weeks, months or years from nextDate), until endAfter invoices are made or with no end. Each new invoice is left as a draft, marked as sent (its link is published), or emailed to the client, as action says. The lines are copied now: later changes to the original invoice do not reach the ones to come. Needs confirm: true; without it the result is a preview.
destructive
Argument
Type
Description
every
integer | string
Every how many weeks, months or years, 1 to 12. Default 1.
action
string
What happens to each new invoice. Default draft. email needs the client's email address on the invoice.
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
endAfter
integer | string | null
How many invoices to make, 1 to 500; null or omitted = no end.
interval*
string
nextDate*
string
The date of the next invoice, today or later, YYYY-MM-DD.
invoiceId
create_sample_project
Creates a sample client, a sample project with a budget, six tasks with estimates and two weeks of hours, labelled as a sample in its name, so reports, the budget bar and the timesheet have something to show. One at a time. Uses a board of the free plan's limit (and the sample client is left out if the client limit is full).
destructive
No arguments.
Input schema (JSON)
{
"type": "object",
"properties": {}
}
create_saved_view
Saves a personal view of a board: how to show it (board, table, calendar or timeline) and a filter (due date, labels, assignees). Only the user sees it. The free plan allows 3 per board.
Adds a task (card) to a list, or to a board's first list when only boardId is given. The description becomes the card's page and accepts Markdown (headings, bullet and numbered lists, - [ ] task lists, bold, italic, code, links, fenced code). Optional due date, reminders, repeat (Pro) and a checklist. The board's rules for new cards run, as in the app.
destructive
Argument
Type
Description
title*
string
listId
string
boardId
string
Used if listId is omitted.
dueDate
string
ISO 8601.
checklist
object
A checklist on the card: { title?, items: [{ text, done? }] }.
reminders
array
Reminders for you (push and email).
recurrence
string
Repeat: archiving the task creates the next one, dates and reminders moved (Pro; needs a due date).
description
string
Input schema (JSON)
create_task_from_template
Adds a task to a list from one of the board's card templates.
Adds a webhook: from then on, each chosen event of the user's boards is sent outside Decknote. kind "slack" posts a line to a Slack channel through a Slack incoming-webhook URL (https://hooks.slack.com/…); kind "json" POSTs the event as JSON to any https URL (Zapier, Make, n8n, a server), signed in X-Decknote-Signature with a secret returned once, here. boardId limits it to one board the user owns; without it, every board they own and their invoices and estimates. events: the types to send (default: all). The free plan has 1 webhook, Pro 25. Needs confirm: true; without it the result is a preview.
destructive
Argument
Type
Description
url*
string
kind*
string
events
array
boardId
string
One board the user owns. Omit for all of them.
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
Input schema (JSON)
{
"type": "object",
"required": [
"kind",
"url"
],
"properties": {
"url": {
"type": "string"
},
"kind": {
"enum": [
"json",
"slack"
],
"type": "string"
},
"events": {
"type": "array",
"items": {
"enum": [
"task.created",
"task.moved",
"task.completed",
"task.reopened",
"comment.created",
"invoice.sent",
"estimate.sent",
"payment.recorded",
"invoice.paid",
"estimate.accepted",
"estimate.declined"
],
"type": "string"
}
},
"boardId": {
"type": "string",
"description": "One board the user owns. Omit for all of them."
},
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
}
}
}
delete_attachment
Deletes an attachment from a task (and the task's cover, if it was the cover image). Needs confirm: true; without it the result is a preview.
destructive
Argument
Type
Description
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
attachmentId*
string
Input schema (JSON)
{
"type": "object",
"required": [
"attachmentId"
],
"properties": {
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
},
"attachmentId": {
"type": "string"
}
}
}
delete_automation
Deletes a board rule. Needs confirm: true; without it the result is a preview.
destructive
Argument
Type
Description
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
automationId*
string
Input schema (JSON)
{
"type": "object",
"required": [
"automationId"
],
"properties": {
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
},
"automationId": {
"type": "string"
}
}
}
delete_board
Permanently deletes a board the user owns, with every list, card, comment and attachment on it, also for the people it is shared with. Irreversible. Without confirm: true nothing is deleted and the result is a preview of what would be lost.
destructive
Argument
Type
Description
boardId*
string
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
Input schema (JSON)
{
"type": "object",
"required": [
"boardId"
],
"properties": {
"boardId": {
"type": "string"
},
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
}
}
}
delete_card_template
Deletes a card template; tasks made from it stay. Needs confirm: true; without it the result is a preview.
destructive
Argument
Type
Description
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
templateId*
string
Input schema (JSON)
{
"type": "object",
"required": [
"templateId"
],
"properties": {
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
},
"templateId": {
"type": "string"
}
}
}
delete_checklist
Deletes a checklist with all its items. Needs confirm: true; without it the result is a preview.
destructive
Argument
Type
Description
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
checklistId*
string
Input schema (JSON)
{
"type": "object",
"required": [
"checklistId"
],
"properties": {
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
},
"checklistId": {
"type": "string"
}
}
}
delete_checklist_item
Deletes one checklist item. A checklist keeps at least one item, so its last item only goes away with the whole checklist. Needs confirm: true; without it the result is a preview.
destructive
Argument
Type
Description
itemId*
string
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
Input schema (JSON)
{
"type": "object",
"required": [
"itemId"
],
"properties": {
"itemId": {
"type": "string"
},
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
}
}
}
delete_client_comment
Permanently removes one comment from a task's conversation on the client portal (spam, a mistake): the client's page stops showing it at once. Works on the client's comments and on the team's answers. Only the project owner. Needs confirm: true; without it the result is a preview.
destructive
Argument
Type
Description
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
commentId*
string
A comment of the portal.
Input schema (JSON)
{
"type": "object",
"required": [
"commentId"
],
"properties": {
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
},
"commentId": {
"type": "string",
"description": "A comment of the portal."
}
}
}
delete_comment
Deletes a comment (the user's own, or any on a board the user owns). Needs confirm: true; without it the result is a preview.
destructive
Argument
Type
Description
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
commentId*
string
Input schema (JSON)
{
"type": "object",
"required": [
"commentId"
],
"properties": {
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
},
"commentId": {
"type": "string"
}
}
}
delete_custom_field
Deletes a custom field and its value on every card. Needs confirm: true; without it the result is a preview.
destructive
Argument
Type
Description
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
fieldId*
string
Input schema (JSON)
{
"type": "object",
"required": [
"fieldId"
],
"properties": {
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
},
"fieldId": {
"type": "string"
}
}
}
delete_expense
Permanently deletes an expense that is not yet on an invoice. The person who logged it and the project owner can delete it. Needs confirm: true; without it the result is a preview of what would be lost.
destructive
Argument
Type
Description
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
expenseId*
string
The expense.
Input schema (JSON)
{
"type": "object",
"required": [
"expenseId"
],
"properties": {
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
},
"expenseId": {
"type": "string",
"description": "The expense."
}
}
}
delete_expense_receipt
Deletes a receipt of an expense for good. The person who logged the expense and the project owner can delete it. Needs confirm: true; without it the result is a preview.
destructive
Argument
Type
Description
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
receiptId*
string
The receipt (its id is in each expense's receipts).
Input schema (JSON)
{
"type": "object",
"required": [
"receiptId"
],
"properties": {
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
},
"receiptId": {
"type": "string",
"description": "The receipt (its id is in each expense's receipts)."
}
}
}
delete_invoice_draft
Deletes a draft invoice or estimate for good. Only a draft: it was not sent, so no client saw it, and it has no number, so no gap is left in the numbering. The hours and expenses it had taken go back to the project's unbilled work, and an estimate it was made from can become an invoice again. A deleted draft stops counting toward the free plan's monthly allowance. Needs confirm: true; without it the result is a preview.
destructive
Argument
Type
Description
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
invoiceId*
string
The invoice or estimate.
Input schema (JSON)
{
"type": "object",
"required": [
"invoiceId"
],
"properties": {
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
},
"invoiceId": {
"type": "string",
"description": "The invoice or estimate."
}
}
}
delete_label
Deletes a label from a board and removes it from every card that has it. Needs confirm: true; without it the result is a preview.
destructive
Argument
Type
Description
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
labelId*
string
Input schema (JSON)
{
"type": "object",
"required": [
"labelId"
],
"properties": {
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
},
"labelId": {
"type": "string"
}
}
}
delete_list
Permanently deletes a list and every card in it, archived ones included. Irreversible. Needs confirm: true; without it the result is a preview with the number of cards that would be lost.
destructive
Argument
Type
Description
listId*
string
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
Input schema (JSON)
{
"type": "object",
"required": [
"listId"
],
"properties": {
"listId": {
"type": "string"
},
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
}
}
}
delete_page
Permanently deletes a note or discussion with all its comments. Its author and the project owner can. Needs confirm: true; without it the result is a preview.
destructive
Argument
Type
Description
pageId*
string
The page (a note or a discussion).
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
Input schema (JSON)
{
"type": "object",
"required": [
"pageId"
],
"properties": {
"pageId": {
"type": "string",
"description": "The page (a note or a discussion)."
},
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
}
}
}
delete_page_comment
Permanently deletes a page comment. Its author and the project owner can. Needs confirm: true; without it the result is a preview.
destructive
Argument
Type
Description
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
commentId*
string
A page comment.
Input schema (JSON)
{
"type": "object",
"required": [
"commentId"
],
"properties": {
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
},
"commentId": {
"type": "string",
"description": "A page comment."
}
}
}
delete_project_template
Permanently deletes a saved template of the user (projects already made from it are untouched; the starters cannot be deleted). Needs confirm: true; without it the result is a preview.
destructive
Argument
Type
Description
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
templateId*
string
A saved template of the user.
Input schema (JSON)
{
"type": "object",
"required": [
"templateId"
],
"properties": {
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
},
"templateId": {
"type": "string",
"description": "A saved template of the user."
}
}
}
delete_recurring_invoice
Deletes a recurring invoice: no more invoices are made from it. The invoices it already made stay as they are. Needs confirm: true; without it the result is a preview.
destructive
Argument
Type
Description
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
recurringId*
string
The recurring invoice.
Input schema (JSON)
{
"type": "object",
"required": [
"recurringId"
],
"properties": {
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
},
"recurringId": {
"type": "string",
"description": "The recurring invoice."
}
}
}
delete_sample_project
Permanently deletes the sample project with everything on it (its tasks, hours and anything added to it since) and the sample client if nothing else uses it. The user's own projects and reports are untouched. Needs confirm: true; without it the result is a preview.
destructive
Argument
Type
Description
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
Input schema (JSON)
{
"type": "object",
"properties": {
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
}
}
}
delete_saved_view
Deletes one of the user's saved views. Needs confirm: true; without it the result is a preview.
destructive
Argument
Type
Description
viewId*
string
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
Input schema (JSON)
{
"type": "object",
"required": [
"viewId"
],
"properties": {
"viewId": {
"type": "string"
},
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
}
}
}
delete_task
Permanently deletes a task with its comments, checklists and attachments. Irreversible. Needs confirm: true; without it the result is a preview of what would be lost.
destructive
Argument
Type
Description
cardId*
string
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
Input schema (JSON)
{
"type": "object",
"required": [
"cardId"
],
"properties": {
"cardId": {
"type": "string"
},
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
}
}
}
delete_time_entry
Permanently deletes a time entry, or a running timer. A person deletes their own entries and the project owner deletes anyone's; time already billed to a client cannot be deleted. Needs confirm: true; without it the result is a preview of what would be lost.
destructive
Argument
Type
Description
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
entryId*
string
Input schema (JSON)
{
"type": "object",
"required": [
"entryId"
],
"properties": {
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
},
"entryId": {
"type": "string"
}
}
}
delete_webhook
Deletes one of the account's webhooks: nothing more is sent to its address. Needs confirm: true; without it the result is a preview.
destructive
Argument
Type
Description
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
webhookId*
string
Input schema (JSON)
{
"type": "object",
"required": [
"webhookId"
],
"properties": {
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
},
"webhookId": {
"type": "string"
}
}
}
duplicate_board
Copies a board the user can see into a new board the user owns: lists, cards (content, dates, checklists, labels) and look. Members, comments and attachments are not copied. Counts toward the free plan's 5 owned boards.
Creates a new draft with the same client, lines, tax, notes and terms as an invoice or estimate, dated today and without a number until it is sent; no work, no payments. Counts toward the free plan's 2 documents per month.
Copies a task right below the original: title, description, dates, labels, cover, field values and checklists (not comments, assignees or attachments).
Emails the document to the client from Decknote on the user's behalf (replies go to the user), with a link to it; a draft takes the next number, becomes sent and its link is published. One plain address: the document's or `to`. Limited to 20 emails an hour per person and 5 per document. Needs confirm: true and amount equal to the total; without them the result is a preview with the exact email.
destructive
Argument
Type
Description
to
string
Another address than the one on the document.
amount
number | string
The document's total in the currency's main unit, repeated from the preview (e.g. 220 or "220.00"). Must equal the total or nothing is done.
locale
string
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
message
string | null
A few personal lines at the top, up to 2000 characters.
reminder
boolean
A reminder for a sent invoice with a balance.
invoiceId*
string
The invoice or estimate.
Input schema (JSON)
export_data
Exports everything the user can read in Decknote as one JSON document (boards, lists, cards, checklists, comments, attachment metadata), the same export as Settings → Your data. Up to 5 per hour.
read-only
No arguments.
Input schema (JSON)
{
"type": "object",
"properties": {}
}
export_invoices_csv
Exports the matching invoices and estimates as CSV text for an accountant: number, type, status, dates, client, currency, subtotal, discount, tax, total, paid and balance. Same filters as the list. Cells that start with = + - or @ are escaped so a spreadsheet does not run them. A Pro feature; large exports are cut at 400,000 characters.
read-only
Argument
Type
Description
q
string
Text in the number or the client's name.
to
string
Issued up to this day, YYYY-MM-DD.
from
string
Issued from this day on, YYYY-MM-DD.
kind
string
status
string
overdue: sent and past its due date. open: sent and not paid.
boardId
string
Only the documents of this project (one the user owns).
clientId
string
Only this client's documents.
Input schema (JSON)
{
"type": "object",
"properties": {
"q": {
"type": "string",
"description": "Text in the number or the client's name."
},
"to": {
"type": "string",
"description": "Issued up to this day, YYYY-MM-DD."
},
"from": {
"type": "string",
"description": "Issued from this day on, YYYY-MM-DD."
},
"kind": {
"enum": [
"invoice",
"estimate"
],
"type": "string"
},
"status": {
"enum": [
"draft",
"sent",
"paid",
"void",
"accepted",
"declined",
"overdue",
"open"
],
"type": "string",
"description": "overdue: sent and past its due date. open: sent and not paid."
},
"boardId": {
"type": "string",
"description": "Only the documents of this project (one the user owns)."
},
"clientId": {
"type": "string",
"description": "Only this client's documents."
}
}
}
export_time_report
Exports the detail lines of a date range as CSV text (date, project, client, task, person, hours, billable, rate per hour), with the same filters and visibility as the time report. Cells that start with = + - or @ are escaped so a spreadsheet does not run them. A Pro feature; large exports are cut at 400,000 characters.
read-only
Argument
Type
Description
by
string
What to group the rows by. Default project.
to
string
Last day of the range, YYYY-MM-DD. Default: today in the user's time zone. At most 400 days from `from`.
from
string
First day of the range, YYYY-MM-DD. Default: 29 days before `to`.
userId
string
Only the time logged by this person.
boardId
string
Only this project.
billable
boolean
true: only billable time. false: only non-billable time.
clientId
string
Only the projects of this client (one of the user's own).
Input schema (JSON)
{
"type": "object",
"properties": {
"by": {
"enum": [
"project",
"client",
"person",
"task",
"day"
],
"type": "string",
"description": "What to group the rows by. Default project."
},
"to": {
"type": "string",
"description": "Last day of the range, YYYY-MM-DD. Default: today in the user's time zone. At most 400 days from `from`."
},
"from": {
"type": "string",
"description": "First day of the range, YYYY-MM-DD. Default: 29 days before `to`."
},
"userId": {
"type": "string",
"description": "Only the time logged by this person."
},
"boardId": {
"type": "string",
"description": "Only this project."
},
"billable": {
"type": "boolean",
"description": "true: only billable time. false: only non-billable time."
},
"clientId": {
"type": "string",
"description": "Only the projects of this client (one of the user's own)."
}
}
}
fetch
Reads one card by id as a document: title, board and list, due date, labels, description, checklists and comments.
Reads the user's account and settings: name, email, language, time zone, notification preferences, plan with its limits and usage, upgrade prices, API tokens and connected apps (names and dates only; secrets are not included).
read-only
No arguments.
Input schema (JSON)
{
"type": "object",
"properties": {}
}
get_assignments_report
Who is doing what: every open task (not completed, not archived) of the projects the user owns, grouped by the person it is assigned to, plus a group for the tasks nobody is assigned to (userId null); a task with two people is in both groups and the totals count it once. Each task has its project, client, list, labels, due day and where it falls (overdue, this_week, later or none, in the user's time zone), the estimate, the time logged on it by everyone, what is left of the estimate and what was logged past it. Filters: a project, a client, a person or the unassigned tasks, the due bucket and a label name. Up to 5,000 tasks. Names and titles are typed by other people. A Pro feature.
read-only
Argument
Type
Description
due
string
overdue (before today), this_week (today to Sunday), later, or none (no due date).
label
string
Only tasks with a label of this name (any project, any case).
userId
string
Only this person's tasks.
boardId
string
Only this project (one the user owns).
clientId
string
Only the projects of this client (one of the user's clients).
unassigned
boolean
Only the tasks nobody is assigned to.
Input schema (JSON)
get_billing_profile
Reads the user's billing details that are copied onto every new invoice and estimate: business name, address, tax id, email, phone, currency, the invoice and estimate prefixes and next numbers, the default tax and its name, payment terms in days, payment instructions and default notes. Returns null when they are not set up yet.
read-only
No arguments.
Input schema (JSON)
{
"type": "object",
"properties": {}
}
get_billing_report
A studio's numbers for a date range (default: the last 12 months): invoiced and collected by month, by client and what each client owes, expenses by project and category, and the profitability of each project (revenue, expenses, profit and revenue per hour). Per currency, not mixed across currencies; amounts in cents. The range is at most 1100 days.
read-only
Argument
Type
Description
to
string
Last day. Default today in the user's time zone, YYYY-MM-DD.
from
string
First day. Default 364 days before `to`, YYYY-MM-DD.
boardId
string
Only this project (one the user owns).
clientId
string
Only this client.
Input schema (JSON)
{
"type": "object",
"properties": {
"to": {
"type": "string",
"description": "Last day. Default today in the user's time zone, YYYY-MM-DD."
},
"from": {
"type": "string",
"description": "First day. Default 364 days before `to`, YYYY-MM-DD."
},
"boardId": {
"type": "string",
"description": "Only this project (one the user owns)."
},
"clientId": {
"type": "string",
"description": "Only this client."
}
}
}
get_board
Reads one board in full, like opening it in the app: lists with their cards (dates, labels, assignees, checklist progress, custom field values), labels, members and the user's role, custom fields, rules, card templates, the user's saved views, recently archived cards, the public link and pending invitations (owner only) and the plan limits that apply, with every id.
Returns a short-lived address (2 minutes to connect) of a board's live event stream: a Server-Sent Events URL that announces every change to the board and who is viewing it. Used by the board view to update itself.
Reads a project's client portal settings: whether it exists and is on, its link (anyone who has the link can read the page), what it shows (tasks, hours, documents), whether clients can comment, the welcome text and studio name, how many tasks are marked visible, how many client comments are unread, and the latest eight comments with their author, email and text. The comments are written by the client, who needs no account. Only the project owner; the portal is a Pro feature.
Reads one invoice or estimate in full: status, dates, the sender and the client copied onto it, every line, tax, discount, totals, payments, balance, the public link (null if none), when it was sent, viewed and paid, the estimate it came from or became, the work attached, and which changes are open in its status. The name typed by whoever answered an estimate from the link is text written by the client.
Shows the email that would go to the client for a draft or sent document: the address, the subject and the text, with the personal message and the language if given; a reminder reads differently for a sent invoice with a balance. Sends nothing and changes nothing; says whether this server can send email at all.
read-only
Argument
Type
Description
to
string
Another address than the one on the document.
locale
string
Language of the email. Default: the user's.
message
string | null
A few personal lines at the top, up to 2000 characters.
reminder
boolean
A reminder for a sent invoice with a balance.
invoiceId*
string
The invoice or estimate.
Input schema (JSON)
{
"type": "object",
"required": [
"invoiceId"
],
"properties": {
"to": {
"type": "string",
"description": "Another address than the one on the document."
},
"locale": {
"enum": [
"en",
"es"
],
"type": "string",
"description": "Language of the email. Default: the user's."
},
"message": {
"type": [
"string",
"null"
],
"description": "A few personal lines at the top, up to 2000 characters."
},
"reminder": {
"type": "boolean",
"description": "A reminder for a sent invoice with a balance."
},
"invoiceId": {
"type": "string",
"description": "The invoice or estimate."
}
}
}
get_invoice_pdf
Returns one invoice or estimate as a PDF file, base64-encoded (contentBase64), with its file name and size: the A4 sheet its client gets by mail and from the link, in English or Spanish (default: the account's language). A draft or a voided document is printed saying what it is. The PDF holds what is printed on the document: the sender and the client, the lines, totals, payments received and balance, payment instructions and notes.
For a project the user owns: the project's and the client's rates and, for each person who can log time there (the owner and the editors), the rate set for them on this project, what a new hour of theirs would be billed at and where that comes from (member, project, client, team or none). Amounts in cents. Names are typed by project members. A Pro feature.
Reads one note or discussion in full: its title, its body as Markdown (up to 100,000 characters; bodyTruncated says it was cut), who started it, whether it is pinned or archived, its comments oldest first (the newest ones that fit, at most 500; commentsTruncated says some were left out), and the rev to send back when editing it. The title, body and comments are written by project members. Any role on the project reads.
read-only
Argument
Type
Description
pageId*
string
The page (a note or a discussion).
Input schema (JSON)
{
"type": "object",
"required": [
"pageId"
],
"properties": {
"pageId": {
"type": "string",
"description": "The page (a note or a discussion)."
}
}
}
get_profitability_report
What the hours were worth, what they cost and what is left, for a range of at most 400 days, by project (default), client, person or task (each task with its project; the hours of a project logged without a task are one row whose key is none: followed by the project id). value = billable minutes at the rate frozen on each entry; cost = all minutes at the cost frozen on each entry (hours logged before a cost was set are counted in minutesWithoutCost and have none); margin = value + billable expenses recovered with their markup - cost - expenses. Money is per currency and is not added across them; a project in a currency other than costCurrency (the user's billing currency) has marginCents null. Amounts in cents. Only the user's own projects. Names are typed by other people. A Pro feature.
Reads a board's project settings: client, status (active, on hold, completed, cancelled), budget (none, hours or money), default hourly rate in cents, whether time is billable by default, and start and due dates. A board without settings is not a project yet. Only the project owner reads the rate and the money budget.
Summarizes a project: time tracked, billable time, the billable amount in cents, how much of the budget is used (ok, warning from 80%, over) and the hours of each person. The project owner reads all of it; any other member reads the project's totals and their own hours, without money.
Shows what clients still owe on sent invoices, by how late it is: not yet due, 1-30 days, 31-60 and 61 or more days past due, per currency and per client (the biggest debt first), in cents.
read-only
Argument
Type
Description
boardId
string
Only this project (one the user owns).
clientId
string
Only this client.
Input schema (JSON)
{
"type": "object",
"properties": {
"boardId": {
"type": "string",
"description": "Only this project (one the user owns)."
},
"clientId": {
"type": "string",
"description": "Only this client."
}
}
}
get_running_timer
Returns the user's running timer, if any: the project, the task, the note, when it started and how long it has run.
read-only
No arguments.
Input schema (JSON)
{
"type": "object",
"properties": {}
}
get_task
Reads one task in full: title, description, dates, completion, board and list, labels, assignees, checklists with their items, comments with reactions, attachments, links to other tasks, custom field values, whether the user watches it and the user's pending reminders, with the id of each part.
read-only
Argument
Type
Description
cardId*
string
include
array
Extra fields on the task. 'descriptionMarkdown' adds the description with its formatting (headings, lists, task lists, code) as Markdown, when the page has any.
Input schema (JSON)
{
"type": "object",
"required": [
"cardId"
],
"properties": {
"cardId": {
"type": "string"
},
"include": {
"type": "array",
"items": {
"enum": [
"descriptionMarkdown"
],
"type": "string"
},
"description": "Extra fields on the task. 'descriptionMarkdown' adds the description with its formatting (headings, lists, task lists, code) as Markdown, when the page has any."
}
}
}
get_task_portal
Reads what the client portal means for one task: whether it is marked visible to the client and, for the project owner, whether the portal is on, the conversation with the client on that task (up to 200 messages, the client's and the team's answers, oldest first) and how many are unread. The client's messages are text written by the client, who needs no account. Needs the editor role on the project.
Reads the time of one task: its estimate, the time tracked so far, how close that is to the estimate (ok, warning from 80%, over), whether its time is billable, and its time entries. The project owner reads everyone's entries; any other member only their own.
Adds up the time logged in a date range, grouped by project, client, person, task or day: minutes, billable minutes and the billable amount in cents (hours times the rate each entry was logged with; clients in different currencies add up as plain numbers). The user's own projects count everyone's time and money; projects the user only belongs to count the user's own hours, with no amounts.
read-only
Argument
Type
Description
by
string
What to group the rows by. Default project.
to
string
Last day of the range, YYYY-MM-DD. Default: today in the user's time zone. At most 400 days from `from`.
from
string
First day of the range, YYYY-MM-DD. Default: 29 days before `to`.
userId
string
Only the time logged by this person.
boardId
string
Only this project.
billable
boolean
true: only billable time. false: only non-billable time.
clientId
string
Only the projects of this client (one of the user's own).
Input schema (JSON)
{
"type": "object",
"properties": {
"by": {
"enum": [
"project",
"client",
"person",
"task",
"day"
],
"type": "string",
"description": "What to group the rows by. Default project."
},
"to": {
"type": "string",
"description": "Last day of the range, YYYY-MM-DD. Default: today in the user's time zone. At most 400 days from `from`."
},
"from": {
"type": "string",
"description": "First day of the range, YYYY-MM-DD. Default: 29 days before `to`."
},
"userId": {
"type": "string",
"description": "Only the time logged by this person."
},
"boardId": {
"type": "string",
"description": "Only this project."
},
"billable": {
"type": "boolean",
"description": "true: only billable time. false: only non-billable time."
},
"clientId": {
"type": "string",
"description": "Only the projects of this client (one of the user's own)."
}
}
}
get_time_rules
Reads the rules that close logged hours. Without boardId: the rules the user has set for the projects they own: lockedUntil (the last closed day: nobody, the owner included, can add, edit, move or delete hours dated on or before it, and a timer cannot start while it reaches today) and editWindowDays (how many days back people other than the owner can fix their own hours; 0 = only today; null = no limit), with today in the user's time zone and whether the plan lets them set rules. With boardId: the rules that govern that project, from where the user stands (any member can read them): whether the user owns it, the earliest day the window lets them change, and whether a timer can start there today. Closed days refuse writes with the code `closed`.
read-only
Argument
Type
Description
boardId
string
A project the user belongs to. Omit it for the user's own rules.
Input schema (JSON)
{
"type": "object",
"properties": {
"boardId": {
"type": "string",
"description": "A project the user belongs to. Omit it for the user's own rules."
}
}
}
get_timer_alert
Reads the user's alert for a timer left running: how many hours a timer may run before Decknote sends a notification (and a push to their devices), once per timer; 0 means off. The default is 8 hours. It does not stop the timer.
read-only
No arguments.
Input schema (JSON)
{
"type": "object",
"properties": {}
}
get_utilization_report
For each person on the user's team: what they could work in a range of at most 400 days (their weekly capacity over Monday to Friday, less the user's holidays and their own time off), their hours on the user's projects, their billable hours, and billable over capacity in percent (utilizationPct, null with no capacity). Only the hours on the user's own projects are counted. Names are typed by other people. A Pro feature.
read-only
Argument
Type
Description
to*
string
Last day as YYYY-MM-DD.
from*
string
First day as YYYY-MM-DD.
Input schema (JSON)
{
"type": "object",
"required": [
"from",
"to"
],
"properties": {
"to": {
"type": "string",
"description": "Last day as YYYY-MM-DD."
},
"from": {
"type": "string",
"description": "First day as YYYY-MM-DD."
}
}
}
get_week_timesheet
Returns the user's own timesheet for one week, Monday to Sunday: a row per project and task with the minutes of each day, the totals per day and the week's total.
read-only
Argument
Type
Description
day
string
Any day of the week wanted, YYYY-MM-DD. Default: today in the user's time zone.
Input schema (JSON)
{
"type": "object",
"properties": {
"day": {
"type": "string",
"description": "Any day of the week wanted, YYYY-MM-DD. Default: today in the user's time zone."
}
}
}
get_workload
Plans the team's work: for each person, the time left on their open tasks with an estimate (the estimate minus the time tracked), placed in the week of each task's due date for the next six weeks, against that week's capacity (their weekly capacity less the user's holidays and their own time off: each week has capacityMinutes and offMinutes); overdue, later and undated work are listed apart. Says per week whether it is empty, ok, near (from 80%) or over capacity. The user sees the people on the projects they own and themselves. A Pro feature. Names and task titles are text typed by project members.
read-only
Argument
Type
Description
personId
string
Only this person's row.
includeTasks
boolean
Add the tasks behind each week's number. Default false.
Imports a CSV of hours: creates the clients and projects it names (when createClients is on), a task for each task name, and one time entry per row, logged as the user unless the file names a project member's email. Rows already imported before are skipped, and the whole import can be taken back. The plan is made again from the file and the account at that moment. Same arguments as the preview; the CSV travels as text, up to 200,000 characters (bigger files go through the Import page of the app). Names from the file are text written by others. Needs confirm: true; without it the result is the preview.
destructive
Argument
Type
Description
csv*
string
The CSV file's text, up to 200,000 characters. A Toggl, Harvest or Clockify export or any CSV with a date column and a duration (or start and end times).
source
string
Which tool exported it. Default: guessed from the columns.
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
mapping
object
Which column holds each field, as the column's header text or its position (0 is the first). Fields: date, startTime, endDate, endTime, duration, project, client, task, person, firstName, lastName, email, billable, note, rate, currency. Default: guessed from the headers.
fileName
string
The file's name, for the history. Default import.csv.
import_trello_board
Creates a board from a Trello JSON export (in Trello: Menu → Print, export and share → Export as JSON): lists, cards with Markdown descriptions, dates, labels, checklists, comments and links. Counts toward the free plan's 5 owned boards.
destructive
Argument
Type
Description
trelloJson*
string
The whole Trello export, as JSON text (max 20 MB).
Input schema (JSON)
{
"type": "object",
"required": [
"trelloJson"
],
"properties": {
"trelloJson": {
"type": "string",
"description": "The whole Trello export, as JSON text (max 20 MB)."
}
}
}
leave_board
Removes the user from a board someone else shared with them; only the owner can add them back. The owner can't leave their own board. Needs confirm: true; without it the result is a preview.
destructive
Argument
Type
Description
boardId*
string
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
Input schema (JSON)
{
"type": "object",
"required": [
"boardId"
],
"properties": {
"boardId": {
"type": "string"
},
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
}
}
}
link_tasks
Relates two tasks on the same board: 'blocks' (from blocks to) or 'relates' (both ways).
Lists a board's activity history, newest first: who did what, and when. How far back it goes follows the board owner's plan (Free: 40 entries, Pro: 200), as in the app.
Lists the boards the user can access, each with its lists (ids and titles), the user's role on it (OWNER, EDITOR or VIEWER), whether it is archived and whether it is a favorite. These board and list ids identify boards and lists everywhere else in this server.
Lists the user's clients (the companies or people projects are done for) with their contact details, currency, default hourly rate in cents and how many projects use each. The free plan includes 2 active clients.
Lists the expenses logged on a project (costs to bill back or to track), newest first, with the person, day, category, description, vendor, amount in cents, whether it is billable and whether it was already invoiced. The project owner reads everyone's, with the markup; any other member only their own, without it. Descriptions and vendors are text typed by project members.
read-only
Argument
Type
Description
to
string
Only expenses up to this day, YYYY-MM-DD.
from
string
Only expenses from this day on, YYYY-MM-DD.
limit
integer
Default 100, max 500.
userId
string
Only this person's expenses.
boardId*
string
The project.
unbilled
boolean
true: only expenses not yet on an invoice.
Input schema (JSON)
{
"type": "object",
"required": [
"boardId"
],
"properties": {
"to": {
"type": "string",
"description": "Only expenses up to this day, YYYY-MM-DD."
},
"from": {
"type": "string",
"description": "Only expenses from this day on, YYYY-MM-DD."
},
"limit": {
"type": "integer",
"description": "Default 100, max 500."
},
"userId": {
"type": "string",
"description": "Only this person's expenses."
},
"boardId": {
"type": "string",
"description": "The project."
},
"unbilled": {
"type": "boolean",
"description": "true: only expenses not yet on an invoice."
}
}
}
list_holidays
Lists the holidays on the user's calendar, oldest first (up to 1,000): day, name and whether it falls on a weekend (a weekend holiday takes nothing from anyone's capacity). A holiday takes the whole working day off the capacity of everybody in the user's Workload. A Pro feature.
read-only
Argument
Type
Description
to
string
Only holidays on or before this day, YYYY-MM-DD.
from
string
Only holidays on or after this day, YYYY-MM-DD.
Input schema (JSON)
{
"type": "object",
"properties": {
"to": {
"type": "string",
"description": "Only holidays on or before this day, YYYY-MM-DD."
},
"from": {
"type": "string",
"description": "Only holidays on or after this day, YYYY-MM-DD."
}
}
}
list_invoices
Lists the user's invoices and estimates, newest first, 25 per page (up to 100): number, kind, status (draft, sent, paid, overdue, void, accepted, declined), client, project, dates, and total, paid and balance in cents. Also returns, per currency, what the matching invoices add up to, what was paid and what is still owed. Only the account's owner has invoices; other project members do not read them.
read-only
Argument
Type
Description
q
string
Text in the number or the client's name.
to
string
Issued up to this day, YYYY-MM-DD.
from
string
Issued from this day on, YYYY-MM-DD.
kind
string
page
integer
Default 1.
status
string
overdue: sent and past its due date. open: sent and not paid.
boardId
string
Only the documents of this project (one the user owns).
clientId
string
Only this client's documents.
pageSize
integer
list_my_tasks
Lists the user's tasks across every board, like the app's My tasks page: open cards assigned to the user plus dated cards on the user's own boards that nobody is assigned to, grouped as overdue, today, next 7 days, later and no date.
Lists a project's notes or discussions, pinned first and then the most recently touched (a reply counts), up to 200: title, a snippet, who started it, comment count, pinned and archived. Searches titles and bodies. Titles and snippets are written by project members. Any role on the project reads.
read-only
Argument
Type
Description
q
string
Text in the title or the body.
kind*
string
boardId*
string
The project.
archived
boolean
true: the archived ones. Default false.
Input schema (JSON)
{
"type": "object",
"required": [
"boardId",
"kind"
],
"properties": {
"q": {
"type": "string",
"description": "Text in the title or the body."
},
"kind": {
"enum": [
"note",
"discussion"
],
"type": "string"
},
"boardId": {
"type": "string",
"description": "The project."
},
"archived": {
"type": "boolean",
"description": "true: the archived ones. Default false."
}
}
}
list_project_files
Lists every file and link attached to a project's tasks, newest first (up to 200): name, type (image, pdf, document, sheet, archive, media, link, other), MIME type, size, the task and list it is on, and for a link its address. Narrow by type or by text in the file or task name; also returns how many there are of each type. Names and addresses are typed by project members. Any role on the project reads.
read-only
Argument
Type
Description
q
string
Text in the file name or the task title.
type
string
boardId*
string
The project.
Input schema (JSON)
{
"type": "object",
"required": [
"boardId"
],
"properties": {
"q": {
"type": "string",
"description": "Text in the file name or the task title."
},
"type": {
"enum": [
"image",
"pdf",
"document",
"sheet",
"archive",
"media",
"link",
"other"
],
"type": "string"
},
"boardId": {
"type": "string",
"description": "The project."
}
}
}
list_project_templates
Lists the templates a new project can start from: the starters that come with Decknote (website project, marketing campaign, monthly retainer) and the ones the user saved, each with its lists, number of tasks, total estimate, whether its tasks carry relative due dates, and a note when a saved one cannot be used. The free plan keeps 1 saved template; the starters cost no place.
read-only
No arguments.
Input schema (JSON)
{
"type": "object",
"properties": {}
}
list_projects
Lists the projects the user can see (boards with project settings): client, status (active, on hold, completed, cancelled), dates, hours tracked, the budget and how much of it is used (ok, warning from 80%, over), and who worked on it. On a project the user owns the hours are everyone's and the amounts count; on one the user only belongs to, only their own hours and no money. Also lists the boards the user owns that could become projects, and the sample project if there is one.
read-only
Argument
Type
Description
q
string
Text in the project, client or owner name.
sort
string
Default status.
status
string
open: active and on hold. Default all.
clientId
string
Only this client's projects; none: projects without a client.
Input schema (JSON)
{
"type": "object",
"properties": {
"q": {
"type": "string",
"description": "Text in the project, client or owner name."
},
"sort": {
"enum": [
"status",
"name",
"due",
"hours",
"budget"
],
"type": "string",
"description": "Default status."
},
"status": {
"enum": [
"all",
"open",
"active",
"on_hold",
"completed",
"cancelled"
],
"type": "string",
"description": "open: active and on hold. Default all."
},
"clientId": {
"type": "string",
"description": "Only this client's projects; none: projects without a client."
}
}
}
list_recurring_invoices
Lists the user's recurring invoices: for each, the client, the total of each invoice, how often (every N weeks, months or years), the next date, how many are left (null = no end), what happens to each new invoice (draft, sent, or emailed to the client), whether it is paused, the last invoice it made and the reason its last run could not finish, if any. Client names and line descriptions are text typed by the user and their clients.
read-only
No arguments.
Input schema (JSON)
{
"type": "object",
"properties": {}
}
list_reminders
Lists the user's pending reminders, soonest first, optionally on one board, with each task's title and due date.
Lists the user's team (themselves, the people on their projects and whoever logged time on them) with each person's default hourly rate, what an hour of theirs costs the user, their weekly capacity and on how many projects they are. Amounts in cents. The cost is only the user's: nobody else reads it. Names and emails are typed by other people. A Pro feature.
read-only
No arguments.
Input schema (JSON)
{
"type": "object",
"properties": {}
}
list_time_entries
Lists the time entries of a project, newest first, with who logged each, the task, the day, the minutes and whether it is billable. The project owner reads everyone's entries, with their hourly rates in cents; any other member reads only their own, without rates. Also returns the total minutes of everything the filters match.
read-only
Argument
Type
Description
to
string
Only entries up to this day, YYYY-MM-DD.
from
string
Only entries from this day on, YYYY-MM-DD.
limit
integer
Default 100, max 500.
cardId
string
Only this task.
userId
string
Only this person's entries.
boardId*
string
The project.
Input schema (JSON)
{
"type": "object",
"required": [
"boardId"
],
"properties": {
"to": {
"type": "string",
"description": "Only entries up to this day, YYYY-MM-DD."
},
"from": {
"type": "string",
"description": "Only entries from this day on, YYYY-MM-DD."
},
"limit": {
"type": "integer",
"description": "Default 100, max 500."
},
"cardId": {
"type": "string",
"description": "Only this task."
},
"userId": {
"type": "string",
"description": "Only this person's entries."
},
"boardId": {
"type": "string",
"description": "The project."
}
}
}
list_time_imports
Lists the user's time imports, newest first (the last 30): the source (toggl, harvest, clockify, generic), the file name, whether it is done or was undone, how many entries and how many minutes it brought, how many rows were skipped as duplicates or failed, and when. The sample project is not listed.
read-only
No arguments.
Input schema (JSON)
{
"type": "object",
"properties": {}
}
list_time_off
Lists time off (vacation, sick leave, other), soonest first (up to 500): the user's own and, on Pro, that of the editors of the projects the user owns. Each has the person, the kind, the first and last day, the minutes off each day (null is the whole working day), the number of days and its status: pending (asked for and waiting for an owner of the person's projects), approved (it lowers the capacity) or rejected, with who decided, when and their note, and whether the user can approve or reject it. The person's own note comes only with the user's own time off. Person names and notes are typed by people. Optionally one person's, one status, or what overlaps a range of days.
read-only
Argument
Type
Description
to
string
Only time off that starts on or before this day, YYYY-MM-DD.
from
string
Only time off that reaches this day or later, YYYY-MM-DD.
status
string
Only time off in this status (pending: waiting for approval).
userId
string
Only this person's time off: the user's own or an editor of one of the user's projects (Pro).
Input schema (JSON)
{
"type": "object",
"properties": {
"to": {
"type": "string",
"description": "Only time off that starts on or before this day, YYYY-MM-DD."
},
"from": {
"type": "string",
"description": "Only time off that reaches this day or later, YYYY-MM-DD."
},
"status": {
"enum": [
"pending",
"approved",
"rejected"
],
"type": "string",
"description": "Only time off in this status (pending: waiting for approval)."
},
"userId": {
"type": "string",
"description": "Only this person's time off: the user's own or an editor of one of the user's projects (Pro)."
}
}
}
list_timesheets
Lists the weeks of hours handed in for approval, newest week first (up to 100 of each): toReview, the weeks the people on the user's projects submitted to the user, and mine, the weeks the user submitted to the owners of the projects they work on. Each week has its status (submitted: waiting; approved; rejected: open again), the hours when it was submitted and now, the owner's note, and the hours by project and task for each day from Monday to Sunday. While a week is submitted or approved its hours are closed to the person who submitted it; the project owner can still change them. Names, titles and notes are typed by other people.
read-only
Argument
Type
Description
to
string
Only weeks that start on or before this day, YYYY-MM-DD.
from
string
Only weeks that start on or after the week of this day, YYYY-MM-DD.
status
string
Only weeks in this status. Default: all.
userId
string
Only this person's weeks, among those handed to the user.
Input schema (JSON)
{
"type": "object",
"properties": {
"to": {
"type": "string",
"description": "Only weeks that start on or before this day, YYYY-MM-DD."
},
"from": {
"type": "string",
"description": "Only weeks that start on or after the week of this day, YYYY-MM-DD."
},
"status": {
"enum": [
"submitted",
"approved",
"rejected"
],
"type": "string",
"description": "Only weeks in this status. Default: all."
},
"userId": {
"type": "string",
"description": "Only this person's weeks, among those handed to the user."
}
}
}
list_unbilled_work
Lists what a project could still bill: its finished billable time entries (person, task, day, minutes and the rate each will be priced at, in cents) and its billable expenses not yet on an invoice. Only the project owner. Expense descriptions and task titles are text typed by project members.
read-only
Argument
Type
Description
to
string
Up to this day, YYYY-MM-DD.
from
string
From this day on, YYYY-MM-DD.
boardId*
string
The project.
Input schema (JSON)
{
"type": "object",
"required": [
"boardId"
],
"properties": {
"to": {
"type": "string",
"description": "Up to this day, YYYY-MM-DD."
},
"from": {
"type": "string",
"description": "From this day on, YYYY-MM-DD."
},
"boardId": {
"type": "string",
"description": "The project."
}
}
}
list_webhooks
Lists the account's webhooks and Slack channels: kind (slack or json), a shortened address, the board it listens to (null: every board the user owns, plus invoices and estimates), the event types it sends, whether it is on, and how its last delivery went (lastStatus, lastError, lastSentAt; it turns itself off after 20 failures in a row). Signing secrets are not listed.
read-only
No arguments.
Input schema (JSON)
{
"type": "object",
"properties": {}
}
log_time
Adds hours by hand to a project, or to one of its tasks. The entry takes the project's hourly rate (or the client's) and is billable according to the task's setting, else the project's, unless billable is given. Needs the editor role on the project.
destructive
Argument
Type
Description
day
string
The day worked, YYYY-MM-DD. Default: today in the user's time zone.
note
string
What was done, up to 500 characters.
cardId
string
The task the time was spent on.
boardId
string
The project. Optional when cardId is given.
billable
boolean
Default: the task's setting, else the project's.
duration*
string
A duration the way a person writes it: 90, 90m, 1h, 1h30, 1:30 or 1.5h. A bare number is minutes. Up to 24 hours per entry.
Input schema (JSON)
{
"type": "object",
"required": [
"duration"
],
"properties": {
"day": {
"type": "string",
"description": "The day worked, YYYY-MM-DD. Default: today in the user's time zone."
},
"note": {
"type": "string",
"description": "What was done, up to 500 characters."
},
"cardId": {
"type": "string",
"description": "The task the time was spent on."
},
"boardId": {
"type": "string",
"description": "The project. Optional when cardId is given."
},
"billable": {
"type": "boolean",
"description": "Default: the task's setting, else the project's."
},
"duration": {
"type": "string",
"description": "A duration the way a person writes it: 90, 90m, 1h, 1h30, 1:30 or 1.5h. A bare number is minutes. Up to 24 hours per entry."
}
}
}
mark_client_comments_read
Marks the client's portal comments as read, and clears the bell notices about them: those of one task (cardId) or every one of the project (boardId). Give exactly one of the two. Only the project owner.
Marks notifications as read: one (notificationId, which also marks the others about the same card, as opening it in the app does), every one about a card (cardId), or all of them (all: true).
Moves a task to another list: on the same board, optionally to a position (index 0 = top), or on another board the user can edit (it lands at the end). Moving to another board drops the old board's labels and the assignees and watchers who can't see the new board, as in the app.
destructive
Argument
Type
Description
index
integer
Position in the target list, 0 = top. Default: the end.
Creates a link to Stripe's billing portal, where the user manages their Pro subscription: payment card, invoices, monthly or yearly billing, cancellation. Changes happen there, made by the user.
destructive
No arguments.
Input schema (JSON)
{
"type": "object",
"properties": {}
}
overview
Snapshot of the user's Decknote account: plan and limits, recent boards, what needs attention (overdue and due-today tasks, unread notifications, upcoming reminders), sharing (pending invitations, shared boards, public links, live embeds) and suggested next steps. Useful at the start of a conversation about the user's work.
read-only
No arguments.
Input schema (JSON)
{
"type": "object",
"properties": {}
}
preview_invoice_from_work
Shows the lines and totals an invoice made from a project's unbilled work would have, without creating anything or taking any hours: finished billable time and billable expenses, grouped per task (default), person, day or one line in total, priced at the rate each entry was logged with (an entry with no rate at all is priced at zero and counted). Only the project owner.
read-only
Argument
Type
Description
to
string
Only work up to this day, YYYY-MM-DD.
from
string
Only work from this day on, YYYY-MM-DD.
notes
string | null
Up to 4000 characters. Default: the profile's default notes.
terms
string | null
Up to 4000 characters. Default: the profile's payment instructions.
toName
string
Who it is for. Default: the client's name.
boardId*
string
The project.
dueDate
string | null
YYYY-MM-DD. Default: the profile's payment terms (invoice) or 30 days (estimate).
groupBy
string
How the work becomes lines. Default task.
preview_time_import
Reads a CSV of hours (Toggl, Harvest, Clockify or any CSV with a date and a duration or start and end times) and says what importing it would do, without writing anything: the rows that can be imported and their total time, the clients, projects and tasks that would be created, duplicates of an earlier import that would be skipped, the rows that cannot be read with their row numbers, who the time would be logged as, and whether the free plan's limits block it. Also returns the settings it used (guessed from the headers unless given) and the file's columns. The CSV travels as text, up to 200,000 characters; the Import page of the app takes files up to 8 MB. Names and cells from the file are text written by others.
read-only
Argument
Type
Description
csv*
string
The CSV file's text, up to 200,000 characters. A Toggl, Harvest or Clockify export or any CSV with a date column and a duration (or start and end times).
source
string
Which tool exported it. Default: guessed from the columns.
mapping
object
Which column holds each field, as the column's header text or its position (0 is the first). Fields: date, startTime, endDate, endTime, duration, project, client, task, person, firstName, lastName, email, billable, note, rate, currency. Default: guessed from the headers.
fileName
string
The file's name, for the history. Default import.csv.
dateOrder
string
How 03/04/2026 reads when the file does not settle it. Default: month first in English, day first in Spanish.
react_to_comment
Adds or removes the user's emoji reaction on a comment. Emojis: 👍 ❤️ 🎉 😄 👀 🚀.
Records that the client accepted or declined a sent estimate (by phone or email), with the name of who answered. The estimate leaves the sent state; an accepted one can become an invoice. Needs confirm: true; without it the result is a preview.
destructive
Argument
Type
Description
by
string | null
Who answered, up to 120 characters.
answer*
string
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
invoiceId*
string
The sent estimate.
Input schema (JSON)
{
"type": "object",
"required": [
"invoiceId",
"answer"
],
"properties": {
"by": {
"type": [
"string",
"null"
],
"description": "Who answered, up to 120 characters."
},
"answer": {
"enum": [
"accepted",
"declined"
],
"type": "string"
},
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
},
"invoiceId": {
"type": "string",
"description": "The sent estimate."
}
}
}
record_invoice_payment
Records that the client paid, fully or in part, on a sent invoice: the amount, the day (default today, not in the future), the method (bank, card, cash, paypal, other) and a note. It records that the client paid; it does not charge or move money. The invoice becomes paid when the payments cover the total. A payment above the balance needs confirmOverpay. Needs confirm: true; without it the result is a preview with the balance.
destructive
Argument
Type
Description
day
string
The day it was received. Default today, YYYY-MM-DD.
note
string | null
Up to 500 characters.
amount*
number | string
What the client paid. An amount in the currency's main unit, e.g. 85 or "85.50" (not cents).
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
invoiceId*
string
The invoice or estimate.
paymentMethod
string
How it was received. Default other.
confirmOverpay
boolean
Record it even though it is more than the balance.
regenerate_client_portal_link
Replaces the secret in a project's client portal link: the old link stops working at once, for anyone who has it, and the new link lets whoever holds it read the portal. The portal's settings, tasks and comments stay. The portal has to exist. Only the project owner. Needs confirm: true; without it the result is a preview.
destructive
Argument
Type
Description
boardId*
string
The project.
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
Input schema (JSON)
{
"type": "object",
"required": [
"boardId"
],
"properties": {
"boardId": {
"type": "string",
"description": "The project."
},
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
}
}
}
regenerate_invoice_link
Replaces the public link of a document with a new one: the old link stops working at once for anyone who has it, and the new one lets anyone who holds it read the document. Not for a voided document. Needs confirm: true; without it the result is a preview.
destructive
Argument
Type
Description
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
invoiceId*
string
The invoice or estimate.
Input schema (JSON)
{
"type": "object",
"required": [
"invoiceId"
],
"properties": {
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
},
"invoiceId": {
"type": "string",
"description": "The invoice or estimate."
}
}
}
reject_time_off
Rejects a time off an editor of a project the user owns asked for, or one approved before: it no longer lowers that person's capacity. The note is read by the person, who gets a notification. A Pro feature (the team calendar). Needs confirm: true; without it the result is a preview.
destructive
Argument
Type
Description
note
string
Up to 300 characters for the person (why it was rejected). The person and the owners read it.
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
timeOffId*
string
A time off of the user or of an editor of one of the user's projects.
Input schema (JSON)
{
"type": "object",
"required": [
"timeOffId"
],
"properties": {
"note": {
"type": "string",
"description": "Up to 300 characters for the person (why it was rejected). The person and the owners read it."
},
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
},
"timeOffId": {
"type": "string",
"description": "A time off of the user or of an editor of one of the user's projects."
}
}
}
reject_timesheet
Sends back a week of hours a person submitted to the user, or reopens one the user approved: its hours open again for that person, who can change them and submit the week again. The note goes to the person with the notification. Available on every plan. Needs confirm: true; without it the result is a preview.
destructive
Argument
Type
Description
note
string
Up to 500 characters, sent to the person with the notification.
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
timesheetId*
string
A week handed in for approval (the user's own, or one handed to the user).
Input schema (JSON)
{
"type": "object",
"required": [
"timesheetId"
],
"properties": {
"note": {
"type": "string",
"description": "Up to 500 characters, sent to the person with the notification."
},
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
},
"timesheetId": {
"type": "string",
"description": "A week handed in for approval (the user's own, or one handed to the user)."
}
}
}
remove_holiday
Removes a holiday from the user's calendar: that day counts as a working day again in everybody's capacity. Needs confirm: true; without it the result is a preview. A Pro feature.
destructive
Argument
Type
Description
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
holidayId*
string
A holiday of the user's calendar.
Input schema (JSON)
{
"type": "object",
"required": [
"holidayId"
],
"properties": {
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
},
"holidayId": {
"type": "string",
"description": "A holiday of the user's calendar."
}
}
}
remove_invoice_payment
Deletes a recorded payment from an invoice, as if it had not been written down; a paid invoice that is no longer covered goes back to sent. It undoes a note in the books; no money moves. Needs confirm: true; without it the result is a preview.
destructive
Argument
Type
Description
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
paymentId*
string
A payment of one of the user's invoices.
Input schema (JSON)
{
"type": "object",
"required": [
"paymentId"
],
"properties": {
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
},
"paymentId": {
"type": "string",
"description": "A payment of one of the user's invoices."
}
}
}
remove_member
Removes someone from a board the user owns: they lose access, and their assignments, watches and reactions on it are removed (their comments stay). Needs confirm: true; without it the result is a preview.
destructive
Argument
Type
Description
userId*
string
boardId*
string
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
Input schema (JSON)
{
"type": "object",
"required": [
"boardId",
"userId"
],
"properties": {
"userId": {
"type": "string"
},
"boardId": {
"type": "string"
},
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
}
}
}
Deletes a time off (the user's own, or on Pro one of an editor of the user's projects): those days count as working days again in the Workload. Needs confirm: true; without it the result is a preview.
destructive
Argument
Type
Description
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
timeOffId*
string
A time off of the user or of an editor of one of the user's projects.
Input schema (JSON)
{
"type": "object",
"required": [
"timeOffId"
],
"properties": {
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
},
"timeOffId": {
"type": "string",
"description": "A time off of the user or of an editor of one of the user's projects."
}
}
}
rename_attachment
Renames an attachment; a file keeps its extension.
Posts an answer from the team under a task on the client portal, shown to anyone who has the portal link under the studio name (not the user's own name) and marking the client's comments on that task as read. It is not emailed. Up to 2000 characters. The portal has to exist. Only the project owner. Needs confirm: true; without it the result is a preview with the exact text.
destructive
Argument
Type
Description
text*
string
The answer, up to 2000 characters.
cardId*
string
The task.
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
Input schema (JSON)
{
"type": "object",
"required": [
"cardId",
"text"
],
"properties": {
"text": {
"type": "string",
"description": "The answer, up to 2000 characters."
},
"cardId": {
"type": "string",
"description": "The task."
},
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
}
}
}
reprice_time
A rate or a cost is frozen on each hour when it is logged, so one set today does not reach last month's hours. This gives the hours logged on or after `from` (not invoiced, not running, not on a closed day) the rate and cost a new hour would get now: only the empty ones unless overwrite is true, and it does not clear a value. It changes numbers in the user's reports, so it needs confirm: true; without it the result is a preview with the counts. Only the user's own projects and team. A Pro feature.
destructive
Argument
Type
Description
from*
string
The first day to re-price as YYYY-MM-DD.
userId
string
Only this person's hours.
boardId
string
Only this project (one the user owns).
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
overwrite
boolean
Also replace rates and costs that are already there. Default false: only fill the empty ones.
Input schema (JSON)
{
"type": "object",
"required": [
"from"
],
"properties": {
"from": {
"type": "string",
"description": "The first day to re-price as YYYY-MM-DD."
},
"userId": {
"type": "string",
"description": "Only this person's hours."
},
"boardId": {
"type": "string",
"description": "Only this project (one the user owns)."
},
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
},
"overwrite": {
"type": "boolean",
"description": "Also replace rates and costs that are already there. Default false: only fill the empty ones."
}
}
}
restore_board
Restores an archived board the user owns to everyone's dashboard.
Revokes one of the user's API tokens (apiTokenId) or disconnects a connected app (appClientId), as listed in the account. Whatever used it stops working at once, including this connection if it is the one in use. Needs confirm: true; without it the result is a preview. New tokens are only created by the user, in Settings.
destructive
Argument
Type
Description
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
apiTokenId
string
appClientId
string
Input schema (JSON)
{
"type": "object",
"properties": {
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
},
"apiTokenId": {
"type": "string"
},
"appClientId": {
"type": "string"
}
}
}
revoke_embed
Turns off one of a board's embeds: the app showing it loses access at its next request. Needs confirm: true; without it the result is a preview.
destructive
Argument
Type
Description
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
embedId*
string
Input schema (JSON)
{
"type": "object",
"required": [
"embedId"
],
"properties": {
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
},
"embedId": {
"type": "string"
}
}
}
revoke_invoice_link
Turns a document's public link off: the client can no longer open the document until a new link is made. The document itself is unchanged. Needs confirm: true; without it the result is a preview.
destructive
Argument
Type
Description
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
invoiceId*
string
The invoice or estimate.
Input schema (JSON)
{
"type": "object",
"required": [
"invoiceId"
],
"properties": {
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
},
"invoiceId": {
"type": "string",
"description": "The invoice or estimate."
}
}
}
save_project_as_template
Saves a project's shape as a template: its lists, open tasks (title, estimate, billable, labels, checklists with the items unticked, due dates as days from the start), labels and billable default. Its people, comments, logged time, descriptions, attachments and client are left out. The budget and the hourly rate are saved only with includeMoney. Only the project owner. The free plan keeps 1 saved template; Pro has no limit.
destructive
Argument
Type
Description
name*
string
Up to 100 characters.
boardId*
string
The project.
description
string
Up to 300 characters.
includeMoney
boolean
Keep the budget and the hourly rate. Default false.
Input schema (JSON)
{
"type": "object",
"required": [
"boardId",
"name"
],
"properties": {
"name": {
"type": "string",
"description": "Up to 100 characters."
},
"boardId": {
"type": "string",
"description": "The project."
},
"description": {
"type": "string",
"description": "Up to 300 characters."
},
"includeMoney": {
"type": "boolean",
"description": "Keep the budget and the hourly rate. Default false."
}
}
}
save_task_as_template
Saves a task's description and labels as a reusable card template on its board.
Searches the open and completed cards of every board the user can access by text in title and description. Returns card ids, titles (with the board) and links.
Searches the user's tasks (cards) across boards by free text in title and description, and by board, list, status (open, completed, all or archived) and due date. Answers questions like what is still open, what was noted about something, or what is due soon.
read-only
Argument
Type
Description
limit
number
Max results, 1–100. Default 20.
query
string
Free text; matches card title and description.
listId
string
status
string
Default 'open'. 'archived' finds archived tasks.
boardId
string
include
array
Extra fields on each task. 'location' adds the names of its board (board) and list (list).
dueBefore
string
ISO 8601; only tasks due before this instant.
Input schema (JSON)
{
"type": "object",
"properties": {
"limit": {
"type": "number",
"description": "Max results, 1–100. Default 20."
},
"query": {
"type": "string",
"description": "Free text; matches card title and description."
},
"listId": {
"type": "string"
},
"status": {
"enum": [
"open",
"completed",
"all",
"archived"
],
"type": "string",
"description": "Default 'open'. 'archived' finds archived tasks."
},
"boardId": {
"type": "string"
},
"include": {
"type": "array",
"items": {
"enum": [
"location"
],
"type": "string"
},
"description": "Extra fields on each task. 'location' adds the names of its board (board) and list (list)."
},
"dueBefore": {
"type": "string",
"description": "ISO 8601; only tasks due before this instant."
}
}
}
send_invoice
Marks a draft as sent, gives it the next number and publishes its link: anyone who has the link can read the document (lines, amounts, the user's business details), and for an estimate answer it. Nothing is emailed. After that only the notes and the due date change. The draft needs a client name, at least one line and a total above zero. Needs confirm: true and amount equal to the total; without them the result is a preview.
destructive
Argument
Type
Description
amount
number | string
The document's total in the currency's main unit, repeated from the preview (e.g. 220 or "220.00"). Must equal the total or nothing is done.
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
invoiceId*
string
The invoice or estimate.
Input schema (JSON)
{
"type": "object",
"required": [
"invoiceId"
],
"properties": {
"amount": {
"type": [
"number",
"string"
],
"description": "The document's total in the currency's main unit, repeated from the preview (e.g. 220 or \"220.00\"). Must equal the total or nothing is done."
},
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
},
"invoiceId": {
"type": "string",
"description": "The invoice or estimate."
}
}
}
Sets what one person is billed at on one project the user owns, over the project's, the client's and their default. null goes back to those. It applies to hours logged from then on. The person must be able to log time there. A Pro feature.
destructive
Argument
Type
Description
userId*
string
A person on the user's team.
boardId*
string
The project.
hourlyRate*
number | string | null
In the currency's main unit: 85, "85.50", "1.250,50". null clears it.
Input schema (JSON)
{
"type": "object",
"required": [
"boardId",
"userId",
"hourlyRate"
],
"properties": {
"userId": {
"type": "string",
"description": "A person on the user's team."
},
"boardId": {
"type": "string",
"description": "The project."
},
"hourlyRate": {
"type": [
"number",
"string",
"null"
],
"description": "In the currency's main unit: 85, \"85.50\", \"1.250,50\". null clears it."
}
}
}
set_my_weekly_capacity
Sets how many hours a week the user can work, which the workload view compares their planned work with: 40, 37.5 or 37:30; 0 for someone who is away, at most 168. Only the user's own: there is no way to set another person's.
destructive
Argument
Type
Description
hours*
number | string
Hours a week, e.g. 40 or "37:30".
Input schema (JSON)
{
"type": "object",
"required": [
"hours"
],
"properties": {
"hours": {
"type": [
"number",
"string"
],
"description": "Hours a week, e.g. 40 or \"37:30\"."
}
}
}
set_page_archived
Archives a page (it leaves the list, becomes read-only and loses its pin) or restores it. Only the project owner.
destructive
Argument
Type
Description
pageId*
string
The page (a note or a discussion).
archived*
boolean
Input schema (JSON)
{
"type": "object",
"required": [
"pageId",
"archived"
],
"properties": {
"pageId": {
"type": "string",
"description": "The page (a note or a discussion)."
},
"archived": {
"type": "boolean"
}
}
}
set_page_pinned
Pins a page to the top of its list, or unpins it. Only the project owner; an archived page cannot be pinned.
destructive
Argument
Type
Description
pageId*
string
The page (a note or a discussion).
pinned*
boolean
Input schema (JSON)
{
"type": "object",
"required": [
"pageId",
"pinned"
],
"properties": {
"pageId": {
"type": "string",
"description": "The page (a note or a discussion)."
},
"pinned": {
"type": "boolean"
}
}
}
set_public_link
Turns a board's public read-only link on or off, or issues a new one so the old one stops working. Anyone with the link can view the board without an account. Owner only. Needs confirm: true; without it the result is a preview.
destructive
Argument
Type
Description
boardId*
string
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
enabled*
boolean
regenerate
boolean
Issue a new link, so the old one stops working.
Input schema (JSON)
{
"type": "object",
"required": [
"boardId",
"enabled"
],
"properties": {
"boardId": {
"type": "string"
},
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
},
"enabled": {
"type": "boolean"
},
"regenerate": {
"type": "boolean",
"description": "Issue a new link, so the old one stops working."
}
}
}
set_task_assignees
Assigns or unassigns board members on a task. Assigning someone other than the user sends them a push and an email, as in the app, so it needs confirm: true and returns a preview without it; self-assigning and unassigning don't.
destructive
Argument
Type
Description
add
array
cardId*
string
remove
array
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
Input schema (JSON)
{
"type": "object",
"required": [
"cardId"
],
"properties": {
"add": {
"type": "array",
"items": {
"type": "string"
}
},
"cardId": {
"type": "string"
},
"remove": {
"type": "array",
"items": {
"type": "string"
}
},
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
}
}
}
set_task_billable
Sets whether time logged on a task is billable to the client (true or false), or makes it follow the project's default (null). Applies to time logged from then on; entries already logged keep their setting. Needs the editor role on the project.
Sets how long a task is expected to take, or clears it with null. Written with a unit: 4h, 1h30, 90m, 1.5h (a bare number is minutes); up to 10,000 hours. Needs the editor role on the project.
Sets a custom field's value on a task, or clears it with null. text: any text; number: a number; select: one of its options; checkbox: true or false; date: YYYY-MM-DD.
Shows a task on the project's client portal, or stops showing it. Visitors read the task's title, whether it is done, in progress or late, and its due date, and can comment on it; descriptions, files, people, time and money are not shown. Making it visible needs confirm: true (without it the result is a preview); hiding it does not. Needs the editor role on the project.
destructive
Argument
Type
Description
cardId*
string
The task.
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
visible*
boolean
Input schema (JSON)
{
"type": "object",
"required": [
"cardId",
"visible"
],
"properties": {
"cardId": {
"type": "string",
"description": "The task."
},
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
},
"visible": {
"type": "boolean"
}
}
}
set_team_rate
Sets what a person is billed at by default on the user's projects (hourlyRate) and what an hour of theirs costs the user (hourlyCost), per hour. They apply to hours logged from then on: each hour keeps the rate and cost it had when it was logged, unless the user applies the new ones to the hours already logged. null clears a value. The rate is the last resort: the person's rate on a project, then the project's, then the client's come first. A Pro feature.
destructive
Argument
Type
Description
userId*
string
A person on the user's team.
hourlyCost
number | string | null
What an hour costs the user (salary and overhead). In the currency's main unit: 85, "85.50", "1.250,50". null clears it.
hourlyRate
number | string | null
Default hourly rate. In the currency's main unit: 85, "85.50", "1.250,50". null clears it.
Input schema (JSON)
{
"type": "object",
"required": [
"userId"
],
"properties": {
"userId": {
"type": "string",
"description": "A person on the user's team."
},
"hourlyCost": {
"type": [
"number",
"string",
"null"
],
"description": "What an hour costs the user (salary and overhead). In the currency's main unit: 85, \"85.50\", \"1.250,50\". null clears it."
},
"hourlyRate": {
"type": [
"number",
"string",
"null"
],
"description": "Default hourly rate. In the currency's main unit: 85, \"85.50\", \"1.250,50\". null clears it."
}
}
}
set_time_rules
Sets the rules that close logged hours on all the projects the user owns, which change what every person on them can do: lockedUntil, a day (YYYY-MM-DD, up to today) closes every day on or before it for everybody, the user included, until the date is changed; editWindowDays, a whole number of days (0 to 366), limits how far back people other than the user can fix their own hours (0 = only today). null clears a rule; a field left out stays. Setting rules is a Pro feature; turning them off is allowed on every plan, and rules already set keep protecting the hours if the plan lapses. Needs confirm: true; without it the result is a preview that says how many hours get frozen.
destructive
Argument
Type
Description
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
lockedUntil
string | null
The last day that is closed, YYYY-MM-DD, not later than today; null reopens everything.
editWindowDays
integer | null
Days back that people other than the owner can still change their hours (0 to 366; 0 = only today); null = no limit.
Input schema (JSON)
{
"type": "object",
"properties": {
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
},
"lockedUntil": {
"type": [
"string",
"null"
],
"description": "The last day that is closed, YYYY-MM-DD, not later than today; null reopens everything."
},
"editWindowDays": {
"type": [
"integer",
"null"
],
"description": "Days back that people other than the owner can still change their hours (0 to 366; 0 = only today); null = no limit."
}
}
}
set_timer_alert
Sets after how many hours a running timer sends the user a notification (and a push to their devices), once per timer: 0 turns it off; otherwise between 0.5 and 24 hours (the Time page offers 4, 8, 10 and 12). It only tells the user: the timer keeps running. Available on every plan.
Shares a board the user owns with someone by email, as EDITOR or VIEWER. People with an account get access right away; others get an invitation to sign up. Decknote emails them either way, so it needs confirm: true; without it the result is a preview. Sharing is a Pro feature on the web (one flat price, not per person).
destructive
Argument
Type
Description
role
string
Default EDITOR.
email*
string
boardId*
string
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
Input schema (JSON)
{
"type": "object",
"required": [
"boardId",
"email"
],
"properties": {
"role": {
"enum": [
"EDITOR",
"VIEWER"
],
"type": "string",
"description": "Default EDITOR."
},
"email": {
"type": "string"
},
"boardId": {
"type": "string"
},
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
}
}
}
show_board
Shows a board as an interactive kanban that updates live while the conversation is open: lists and cards with labels, due dates, checklist progress and assignees, where the user can drag cards between lists, complete them and add new ones. Without boardId it shows the board the user changed most recently. Clients that can't display it get the same board as JSON.
read-only
Argument
Type
Description
boardId
string
The board to show. Default: the most recently changed one.
Input schema (JSON)
{
"type": "object",
"properties": {
"boardId": {
"type": "string",
"description": "The board to show. Default: the most recently changed one."
}
}
}
sort_list
Reorders a list's cards by due date (soonest first, undated last), by title (A to Z) or by creation (newest first).
Starts an upgrade to Decknote Pro (14-day free trial, then US$9/month or US$90/year) by creating a Stripe Checkout link where the user pays; this tool charges nothing. Without confirm: true it returns the exact price and changes nothing; with confirm: true, amount has to equal that price. Accounts billed through Shopify are upgraded from the Shopify admin, not here.
destructive
Argument
Type
Description
offer
string
A founder-offer code from Decknote's email, if the user has one.
amount
number | string
The price the user agreed to, in US$ (e.g. 9 or 90).
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
interval
string
Default month.
Input schema (JSON)
{
"type": "object",
"properties": {
"offer": {
"type": "string",
"description": "A founder-offer code from Decknote's email, if the user has one."
},
"amount": {
"type": [
"number",
"string"
],
"description": "The price the user agreed to, in US$ (e.g. 9 or 90)."
},
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
},
"interval": {
"enum": [
"month",
"year"
],
"type": "string",
"description": "Default month."
}
}
}
start_timer
Starts the user's time tracker on a project, optionally on one of its tasks. There is one timer per person: a timer already running is stopped and its time kept first (a timer stopped within 30 seconds is dropped as an accidental click). The hours are the time elapsed when it stops, rounded to the minute and capped at 16 hours. Needs the editor role on the project.
destructive
Argument
Type
Description
note
string
What is being done, up to 500 characters.
cardId
string
The task to track time on.
boardId
string
The project. Optional when cardId is given.
Input schema (JSON)
{
"type": "object",
"properties": {
"note": {
"type": "string",
"description": "What is being done, up to 500 characters."
},
"cardId": {
"type": "string",
"description": "The task to track time on."
},
"boardId": {
"type": "string",
"description": "The project. Optional when cardId is given."
}
}
}
stop_timer
Stops the user's running timer and keeps the elapsed time as a time entry. A timer stopped within 30 seconds is dropped as an accidental click. Says so when no timer was running.
destructive
No arguments.
Input schema (JSON)
{
"type": "object",
"properties": {}
}
submit_timesheet
Hands in the user's week of hours (give any day of it; weeks run Monday to Sunday) for approval to each owner of the projects the user logged hours on that week, or only to ownerId. From then on the user cannot add, change or delete their hours of that week on those projects until the owner rejects it or the user withdraws it, and an approved week stays closed. A week can be submitted from its Monday on, a timer running in that week has to be stopped first, and a week already submitted or approved stays as it is. Each owner gets a notification. The owner's plan has to include it (Pro). Needs confirm: true; without it the result is a preview with the hours for each owner.
destructive
Argument
Type
Description
week*
string
Any day of the week to submit, YYYY-MM-DD.
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
ownerId
string
Only to this owner (one of the owners of the projects the user logged hours on that week).
Input schema (JSON)
{
"type": "object",
"required": [
"week"
],
"properties": {
"week": {
"type": "string",
"description": "Any day of the week to submit, YYYY-MM-DD."
},
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
},
"ownerId": {
"type": "string",
"description": "Only to this owner (one of the owners of the projects the user logged hours on that week)."
}
}
}
test_webhook
Sends a test to one of the account's webhooks now and returns how it went (ok, HTTP status, error): a sample of the first event type it sends, marked "test": true (a Slack channel gets a line saying it is connected). Needs confirm: true, since it sends to an address outside Decknote; without it the result is a preview.
destructive
Argument
Type
Description
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
webhookId*
string
Input schema (JSON)
{
"type": "object",
"required": [
"webhookId"
],
"properties": {
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
},
"webhookId": {
"type": "string"
}
}
}
transfer_board
Hands a board the user owns to one of its members: they become the owner (their plan then decides the board's Pro features) and the user stays on as an editor. Needs confirm: true; without it the result is a preview.
destructive
Argument
Type
Description
boardId*
string
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
newOwnerId*
string
Input schema (JSON)
{
"type": "object",
"required": [
"boardId",
"newOwnerId"
],
"properties": {
"boardId": {
"type": "string"
},
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
},
"newOwnerId": {
"type": "string"
}
}
}
undo_time_import
Takes an import back: deletes its time entries and the clients, projects and tasks it created that nobody has used since (those that were used are kept, and the result counts them). Refused when some of the time was already invoiced, when it was already undone, and for the sample project. Needs confirm: true; without it the result is a preview.
destructive
Argument
Type
Description
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
importId*
string
An import of the user.
Input schema (JSON)
{
"type": "object",
"required": [
"importId"
],
"properties": {
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
},
"importId": {
"type": "string",
"description": "An import of the user."
}
}
}
Changes the user's settings: display name, language (en, es, fr), time zone (IANA, e.g. America/Argentina/Buenos_Aires; the daily digest goes out in the user's morning) and which notifications they get (mention, assigned, comment, due; email turns emails on or off).
Sets or changes the user's billing details: business name (required the first time), address, tax id, email, phone, currency, prefixes and next numbers of invoices and estimates, default tax (percentage and name), payment terms in days, payment instructions and default notes; null clears an optional text. New documents copy these; documents already issued keep what they had.
destructive
Argument
Type
Description
email
string | null
Where clients reply to.
phone
string | null
taxId
string | null
address
string | null
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
currency
string
Three-letter code, e.g. USD.
businessName
string
Up to 120 characters.
defaultNotes
string | null
Printed on each new document as its notes.
update_board
Changes a board's title, icon (one emoji), cover color or background image (Pro; PNG, JPEG, WEBP or GIF up to 5 MB, base64-encoded), or removes the background. Needs edit access to the board.
Changes a client's name, contact details, currency, default hourly rate or notes; null clears an optional field. A new rate applies to time logged from then on: entries already logged keep the rate they were logged with.
destructive
Argument
Type
Description
name
string
email
string | null
notes
string | null
phone
string | null
taxId
string | null
address
string | null
clientId*
string
currency
string
Three-letter code, e.g. USD or ARS. Default USD.
hourlyRate
number | string | null
Default hourly rate for this client's projects. An amount in the currency's main unit, e.g. 85 or "85.50" (not cents). null clears it.
Input schema (JSON)
update_client_portal
Turns a project's client portal on or off and sets what it shows: tasks, hours (hours only; rates and money are left out), the list of sent documents, whether clients may comment, a welcome text and the studio name shown on the page and on answers. The first time it creates the portal and its link, on. Turning it on or changing what an enabled portal shows publishes that to anyone with the link and needs confirm: true (without it the result is a preview); turning it off does not. A Pro feature, except turning an existing portal off. Only the project owner.
destructive
Argument
Type
Description
boardId*
string
The project.
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
enabled
boolean
Whether the link works. Turning it off keeps the link for when it is turned on again.
welcome
string
Up to 2000 characters. An empty text clears it.
showHours
boolean
Show hours tracked against the hours budget.
showTasks
boolean
Show the tasks marked visible to the client.
studioName
string
update_custom_field
Renames a custom field or changes a select field's options. Removing an option that cards use clears it from them, which needs confirm: true; without it the result is a preview.
destructive
Argument
Type
Description
name
string
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
fieldId*
string
options
array
Input schema (JSON)
{
"type": "object",
"required": [
"fieldId"
],
"properties": {
"name": {
"type": "string"
},
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
},
"fieldId": {
"type": "string"
},
"options": {
"type": "array",
"items": {
"type": "string"
}
}
}
}
update_expense
Changes an expense that is not yet on an invoice: description, amount, day, category, vendor, billable, markup (project owner only) or its task (null removes it). The person who logged it and the project owner can change it.
destructive
Argument
Type
Description
day
string
The day it was spent, YYYY-MM-DD.
amount
number | string
An amount in the currency's main unit, e.g. 85 or "85.50" (not cents).
cardId
string | null
vendor
string | null
billable
boolean
category
string
expenseId*
string
The expense.
description
string
markupPercent
number | string | null
Input schema (JSON)
update_invoice
Changes a document. A draft takes every field (client, dates, currency, tax, discount, notes, terms, who it is for, project and the whole list of lines, which replaces the current ones); once sent only the notes and the due date change; once paid or answered, only the notes. Totals are recomputed on the server. null clears an optional field.
destructive
Argument
Type
Description
lines
array
The whole list (replaces the current lines). At most 500.
notes
string | null
Up to 4000 characters. Default: the profile's default notes.
terms
string | null
Up to 4000 characters. Default: the profile's payment instructions.
toName
string
Who it is for. Default: the client's name.
boardId
string | null
A project the user owns.
dueDate
string | null
YYYY-MM-DD. Default: the profile's payment terms (invoice) or 30 days (estimate).
toEmail
string | null
toTaxId
string | null
update_label
Renames or recolors a label; the change shows on every card that has it.
Renames a list, sets its WIP limit (Pro; null clears it) or moves it to another position among the board's lists (index 0 = first). Needs edit access to the board.
destructive
Argument
Type
Description
index
integer
New position among the lists, 0 = first.
title
string
listId*
string
wipLimit
integer | null
Max cards before the list warns (Pro), or null.
Input schema (JSON)
{
"type": "object",
"required": [
"listId"
],
"properties": {
"index": {
"type": "integer",
"description": "New position among the lists, 0 = first."
},
"title": {
"type": "string"
},
"listId": {
"type": "string"
},
"wipLimit": {
"type": [
"integer",
"null"
],
"description": "Max cards before the list warns (Pro), or null."
}
}
}
update_member
Changes a member's role on a board the user owns: EDITOR (can change things) or VIEWER (read only).
Changes a page's title and/or body (Markdown, replacing the whole body). It needs the rev from when the page was read: if somebody saved in between, the save is refused with the reason and nothing is overwritten. Pinning, archiving and comments do not change the rev. A discussion's text is edited by its author and the project owner; an archived page is read-only. A page with images, or with a body longer than 100,000 characters, keeps its body: only its title changes. Needs the editor role on the project.
destructive
Argument
Type
Description
rev*
string
The rev returned when the page was read.
title
string
pageId*
string
The page (a note or a discussion).
content
string
The whole new body, in Markdown.
Input schema (JSON)
{
"type": "object",
"required": [
"pageId",
"rev"
],
"properties": {
"rev": {
"type": "string",
"description": "The rev returned when the page was read."
},
"title": {
"type": "string"
},
"pageId": {
"type": "string",
"description": "The page (a note or a discussion)."
},
"content": {
"type": "string",
"description": "The whole new body, in Markdown."
}
}
}
update_project_settings
Turns a board into a project or changes its settings: client (one of the user's own), status, budget type with its hours or amount, default hourly rate, billable by default, start and due dates. null clears a value. A new rate applies to time logged from then on. Only the board's owner can do this.
destructive
Argument
Type
Description
status
string
boardId*
string
dueDate
string | null
YYYY-MM-DD.
clientId
string | null
One of the user's clients; null unlinks it.
startDate
string | null
YYYY-MM-DD.
budgetType
string
What the budget counts: tracked hours, or the billable amount.
hourlyRate
number | string | null
Hourly rate for this project, over the client's. An amount in the currency's main unit, e.g. 85 or "85.50" (not cents).
budgetHours
number | string | null
Hours budget, e.g. 40 or "40h". Used when budgetType is hours.
update_recurring_invoice
Changes a recurring invoice: how often, the next date (a new cadence counts from it), endAfter (null = no end), what happens to each new invoice, the days to pay, or pauses it (active false) and resumes it (active true; dates missed while paused are skipped). The lines stay as they were copied. Pausing needs nothing more; a change after which new invoices are sent or emailed needs confirm: true, and without it the result is a preview.
destructive
Argument
Type
Description
every
integer | string
1 to 12.
action
string
active
boolean
false pauses it, true resumes it.
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
endAfter
integer | string | null
Invoices left to make, 1 to 500; null = no end.
interval
string
nextDate
string
The new next date, today or later, YYYY-MM-DD.
recurringId*
string
update_task
Edits a task: title, description, due date, start date, repeat or cover (a color, or one of the task's image attachments). The description accepts Markdown and replaces the card's whole page. null clears a date, the repeat or the cover.
destructive
Argument
Type
Description
title
string
cardId*
string
dueDate
string | null
ISO 8601, or null to clear.
startDate
string | null
ISO 8601, or null to clear (shown on the timeline).
coverColor
string | null
A color cover, or null to remove the cover. Replaces an image cover.
recurrence
string | null
Repeat on archive (Pro), or null to stop repeating.
description
string
coverImageAttachmentId
string | null
Use one of the card's image attachments as its cover (null removes it).
Input schema (JSON)
update_time_entry
Changes a finished time entry: its duration, day, note, whether it is billable, or the task it is on (null takes it off any task). A person edits their own entries and the project owner edits anyone's. Time already billed to a client, and a timer still running, cannot be edited.
destructive
Argument
Type
Description
day
string
The day worked, YYYY-MM-DD.
note
string
Up to 500 characters.
cardId
string | null
Move the entry to this task of the same project; null removes the task.
entryId*
string
billable
boolean
duration
string
A duration the way a person writes it: 90, 90m, 1h, 1h30, 1:30 or 1.5h. A bare number is minutes. Up to 24 hours per entry.
Input schema (JSON)
{
"type": "object",
"required": [
"entryId"
],
"properties": {
"day": {
"type": "string",
"description": "The day worked, YYYY-MM-DD."
},
"note": {
"type": "string",
"description": "Up to 500 characters."
},
"cardId": {
"type": [
"string",
"null"
],
"description": "Move the entry to this task of the same project; null removes the task."
},
"entryId": {
"type": "string"
},
"billable": {
"type": "boolean"
},
"duration": {
"type": "string",
"description": "A duration the way a person writes it: 90, 90m, 1h, 1h30, 1:30 or 1.5h. A bare number is minutes. Up to 24 hours per entry."
}
}
}
update_time_off
Changes the kind, the days, the minutes off each day or the note of a time off; what is not given stays as it was, and null minutes make it the whole working day again. A person changes their own (changing the kind, the days or the minutes of an approved or rejected one asks the owners for approval again); on Pro, the owner of a project changes the time off of its editors (the note stays the person's). The whole result is checked again: at most 366 days, ending on or after the first day.
destructive
Argument
Type
Description
kind
string
vacation, sick or other. Default vacation.
note
string
Up to 300 characters. Only the person writes it and only they read it back.
endDay
string
The last day off, YYYY-MM-DD.
startDay
string
The first day off, YYYY-MM-DD.
timeOffId*
string
A time off of the user or of an editor of one of the user's projects.
minutesPerDay
integer | null
Minutes off each day (240 is half a working day), between 1 and the person's working day. null or missing: the whole working day.
Input schema (JSON)
{
"type": "object",
"required": [
"timeOffId"
],
"properties": {
"kind": {
"enum": [
"vacation",
"sick",
"other"
],
"type": "string",
"description": "vacation, sick or other. Default vacation."
},
"note": {
"type": "string",
"description": "Up to 300 characters. Only the person writes it and only they read it back."
},
"endDay": {
"type": "string",
"description": "The last day off, YYYY-MM-DD."
},
"startDay": {
"type": "string",
"description": "The first day off, YYYY-MM-DD."
},
"timeOffId": {
"type": "string",
"description": "A time off of the user or of an editor of one of the user's projects."
},
"minutesPerDay": {
"type": [
"integer",
"null"
],
"description": "Minutes off each day (240 is half a working day), between 1 and the person's working day. null or missing: the whole working day."
}
}
}
update_webhook
Changes one of the account's webhooks: the event types it sends, turns it off or on (enabled), or replaces its signing secret (rotateSecret: the new one comes back once, and the old one stops verifying). Turning it on needs confirm: true, since events leave Decknote again; without it the result is a preview.
destructive
Argument
Type
Description
events
array
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
enabled
boolean
webhookId*
string
rotateSecret
boolean
Input schema (JSON)
{
"type": "object",
"required": [
"webhookId"
],
"properties": {
"events": {
"type": "array",
"items": {
"enum": [
"task.created",
"task.moved",
"task.completed",
"task.reopened",
"comment.created",
"invoice.sent",
"estimate.sent",
"payment.recorded",
"invoice.paid",
"estimate.accepted",
"estimate.declined"
],
"type": "string"
}
},
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
},
"enabled": {
"type": "boolean"
},
"webhookId": {
"type": "string"
},
"rotateSecret": {
"type": "boolean"
}
}
}
void_invoice
Voids a sent invoice or estimate: it cannot change any more, its number is kept, and the hours and expenses it had taken go back to the project's unbilled work. A draft is not voided (it is deleted). An invoice with payments recorded, and an estimate whose invoice still stands, cannot be voided. Needs confirm: true; without it the result is a preview.
destructive
Argument
Type
Description
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
invoiceId*
string
The invoice or estimate.
Input schema (JSON)
{
"type": "object",
"required": [
"invoiceId"
],
"properties": {
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
},
"invoiceId": {
"type": "string",
"description": "The invoice or estimate."
}
}
}
watch_task
Starts or stops watching a task (watchers are notified of new comments on it). Affects only the user.
Takes back a week the user submitted that is still waiting for approval: its hours can be changed again and the week can be submitted again later. An approved week can only be reopened by the project owner.
destructive
Argument
Type
Description
timesheetId*
string
A week handed in for approval (the user's own, or one handed to the user).
Input schema (JSON)
{
"type": "object",
"required": [
"timesheetId"
],
"properties": {
"timesheetId": {
"type": "string",
"description": "A week handed in for approval (the user's own, or one handed to the user)."
}
}
}
Input schema (JSON)
{
"type": "object",
"required": [
"startDay"
],
"properties": {
"kind": {
"enum": [
"vacation",
"sick",
"other"
],
"type": "string",
"description": "vacation, sick or other. Default vacation."
},
"note": {
"type": "string",
"description": "Up to 300 characters. Only the person writes it and only they read it back."
},
"endDay": {
"type": "string",
"description": "The last day off. Default: the first day, YYYY-MM-DD."
},
"userId": {
"type": "string",
"description": "Whose time off it is: the user (default) or an editor of one of the user's projects (Pro)."
},
"startDay": {
"type": "string",
"description": "The first day off, YYYY-MM-DD."
},
"minutesPerDay": {
"type": [
"integer",
"null"
],
"description": "Minutes off each day (240 is half a working day), between 1 and the person's working day. null or missing: the whole working day."
}
}
}
Percentage added when billing it, e.g. 10. Project owner only.
Input schema (JSON)
{
"type": "object",
"required": [
"boardId",
"description",
"amount"
],
"properties": {
"day": {
"type": "string",
"description": "The day it was spent. Default today, YYYY-MM-DD."
},
"amount": {
"type": [
"number",
"string"
],
"description": "What it cost. An amount in the currency's main unit, e.g. 85 or \"85.50\" (not cents)."
},
"cardId": {
"type": [
"string",
"null"
],
"description": "A task of the same project."
},
"vendor": {
"type": [
"string",
"null"
]
},
"boardId": {
"type": "string",
"description": "The project."
},
"billable": {
"type": "boolean",
"description": "Whether it can be billed to the client. Default: the project's own setting (true when it has none)."
},
"category": {
"enum": [
"travel",
"software",
"hardware",
"services",
"meals",
"other"
],
"type": "string"
},
"description": {
"type": "string",
"description": "What it was, up to 200 characters."
},
"markupPercent": {
"type": [
"number",
"string",
"null"
],
"description": "Percentage added when billing it, e.g. 10. Project owner only."
}
}
}
toTaxId
string | null
clientId
string | null
One of the user's clients; its name, email, address, tax id and currency are copied onto the document.
currency
string
Three-letter code. Default: the client's, else the profile's.
discount
number | string | null
A fixed amount off the whole document. An amount in the currency's main unit, e.g. 85 or "85.50" (not cents). null clears it.
taxLabel
string
What the tax is called, up to 30 characters.
issueDate
string
The issue date. Default today, YYYY-MM-DD.
toAddress
string | null
taxPercent
number | string
Tax as a percentage, e.g. 21 or "10,5". Default: the profile's.
Input schema (JSON)
{
"type": "object",
"required": [
"kind"
],
"properties": {
"kind": {
"enum": [
"invoice",
"estimate"
],
"type": "string"
},
"lines": {
"type": "array",
"items": {
"type": "object",
"required": [
"description",
"quantity",
"price"
],
"properties": {
"kind": {
"enum": [
"time",
"expense",
"custom"
],
"type": "string",
"description": "Where the line came from. Default custom."
},
"price": {
"type": [
"number",
"string"
],
"description": "Price per unit. An amount in the currency's main unit, e.g. 85 or \"85.50\" (not cents). A negative price is a credit."
},
"taxable": {
"type": "boolean",
"description": "Whether tax applies to the line. Default true."
},
"quantity": {
"type": [
"number",
"string"
],
"description": "Hours or units as typed: 2, 1.5 or \"1,25\" (more than zero, up to two decimals)."
},
"description": {
"type": "string",
"description": "Up to 500 characters."
}
}
},
"description": "At most 500."
},
"notes": {
"type": [
"string",
"null"
],
"description": "Up to 4000 characters. Default: the profile's default notes."
},
"terms": {
"type": [
"string",
"null"
],
"description": "Up to 4000 characters. Default: the profile's payment instructions."
},
"toName": {
"type": "string",
"description": "Who it is for. Default: the client's name."
},
"boardId": {
"type": [
"string",
"null"
],
"description": "A project the user owns, to link the document to."
},
"dueDate": {
"type": [
"string",
"null"
],
"description": "YYYY-MM-DD. Default: the profile's payment terms (invoice) or 30 days (estimate)."
},
"toEmail": {
"type": [
"string",
"null"
]
},
"toTaxId": {
"type": [
"string",
"null"
]
},
"clientId": {
"type": [
"string",
"null"
],
"description": "One of the user's clients; its name, email, address, tax id and currency are copied onto the document."
},
"currency": {
"type": "string",
"description": "Three-letter code. Default: the client's, else the profile's."
},
"discount": {
"type": [
"number",
"string",
"null"
],
"description": "A fixed amount off the whole document. An amount in the currency's main unit, e.g. 85 or \"85.50\" (not cents). null clears it."
},
"taxLabel": {
"type": "string",
"description": "What the tax is called, up to 30 characters."
},
"issueDate": {
"type": "string",
"description": "The issue date. Default today, YYYY-MM-DD."
},
"toAddress": {
"type": [
"string",
"null"
]
},
"taxPercent": {
"type": [
"number",
"string"
],
"description": "Tax as a percentage, e.g. 21 or \"10,5\". Default: the profile's."
}
}
}
confirm
boolean
true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects.
dueDate
string | null
YYYY-MM-DD. Default: the profile's payment terms (invoice) or 30 days (estimate).
groupBy
string
How the work becomes lines. Default task.
toEmail
string | null
toTaxId
string | null
clientId
string | null
One of the user's clients; its name, email, address, tax id and currency are copied onto the document.
currency
string
Three-letter code. Default: the client's, else the profile's.
discount
number | string | null
A fixed amount off the whole document. An amount in the currency's main unit, e.g. 85 or "85.50" (not cents). null clears it.
taxLabel
string
What the tax is called, up to 30 characters.
issueDate
string
The issue date. Default today, YYYY-MM-DD.
toAddress
string | null
expenseIds
array
taxPercent
number | string
Tax as a percentage, e.g. 21 or "10,5". Default: the profile's.
includeTime
boolean
taxableTime
boolean
timeEntryIds
array
includeExpenses
boolean
taxableExpenses
boolean
Input schema (JSON)
{
"type": "object",
"required": [
"boardId"
],
"properties": {
"to": {
"type": "string",
"description": "Only work up to this day, YYYY-MM-DD."
},
"from": {
"type": "string",
"description": "Only work from this day on, YYYY-MM-DD."
},
"notes": {
"type": [
"string",
"null"
],
"description": "Up to 4000 characters. Default: the profile's default notes."
},
"terms": {
"type": [
"string",
"null"
],
"description": "Up to 4000 characters. Default: the profile's payment instructions."
},
"amount": {
"type": [
"number",
"string"
],
"description": "The document's total in the currency's main unit, repeated from the preview (e.g. 220 or \"220.00\"). Must equal the total or nothing is done."
},
"toName": {
"type": "string",
"description": "Who it is for. Default: the client's name."
},
"boardId": {
"type": "string",
"description": "The project."
},
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
},
"dueDate": {
"type": [
"string",
"null"
],
"description": "YYYY-MM-DD. Default: the profile's payment terms (invoice) or 30 days (estimate)."
},
"groupBy": {
"enum": [
"task",
"person",
"day",
"total"
],
"type": "string",
"description": "How the work becomes lines. Default task."
},
"toEmail": {
"type": [
"string",
"null"
]
},
"toTaxId": {
"type": [
"string",
"null"
]
},
"clientId": {
"type": [
"string",
"null"
],
"description": "One of the user's clients; its name, email, address, tax id and currency are copied onto the document."
},
"currency": {
"type": "string",
"description": "Three-letter code. Default: the client's, else the profile's."
},
"discount": {
"type": [
"number",
"string",
"null"
],
"description": "A fixed amount off the whole document. An amount in the currency's main unit, e.g. 85 or \"85.50\" (not cents). null clears it."
},
"taxLabel": {
"type": "string",
"description": "What the tax is called, up to 30 characters."
},
"issueDate": {
"type": "string",
"description": "The issue date. Default today, YYYY-MM-DD."
},
"toAddress": {
"type": [
"string",
"null"
]
},
"expenseIds": {
"type": "array",
"items": {
"type": "string"
}
},
"taxPercent": {
"type": [
"number",
"string"
],
"description": "Tax as a percentage, e.g. 21 or \"10,5\". Default: the profile's."
},
"includeTime": {
"type": "boolean"
},
"taxableTime": {
"type": "boolean"
},
"timeEntryIds": {
"type": "array",
"items": {
"type": "string"
}
},
"includeExpenses": {
"type": "boolean"
},
"taxableExpenses": {
"type": "boolean"
}
}
}
*
string
The invoice to repeat (not an estimate, not voided).
paymentTermsDays
integer | string
Days each new invoice gives to pay. Default: those of the original invoice.
Input schema (JSON)
{
"type": "object",
"required": [
"invoiceId",
"interval",
"nextDate"
],
"properties": {
"every": {
"type": [
"integer",
"string"
],
"description": "Every how many weeks, months or years, 1 to 12. Default 1."
},
"action": {
"enum": [
"draft",
"send",
"email"
],
"type": "string",
"description": "What happens to each new invoice. Default draft. email needs the client's email address on the invoice."
},
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
},
"endAfter": {
"type": [
"integer",
"string",
"null"
],
"description": "How many invoices to make, 1 to 500; null or omitted = no end."
},
"interval": {
"enum": [
"week",
"month",
"year"
],
"type": "string"
},
"nextDate": {
"type": "string",
"description": "The date of the next invoice, today or later, YYYY-MM-DD."
},
"invoiceId": {
"type": "string",
"description": "The invoice to repeat (not an estimate, not voided)."
},
"paymentTermsDays": {
"type": [
"integer",
"string"
],
"description": "Days each new invoice gives to pay. Default: those of the original invoice."
}
}
}
{
"type": "object",
"required": [
"title"
],
"properties": {
"title": {
"type": "string"
},
"listId": {
"type": "string"
},
"boardId": {
"type": "string",
"description": "Used if listId is omitted."
},
"dueDate": {
"type": "string",
"description": "ISO 8601."
},
"checklist": {
"type": "object",
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"done": {
"type": "boolean"
},
"text": {
"type": "string"
}
}
}
},
"title": {
"type": "string"
}
},
"description": "A checklist on the card: { title?, items: [{ text, done? }] }."
},
"reminders": {
"type": "array",
"items": {
"type": "object",
"properties": {
"at": {
"type": "string"
},
"time": {
"type": "string"
},
"timeZone": {
"type": "string"
},
"daysBefore": {
"type": "integer"
}
},
"description": "Either `at` (ISO 8601 instant), or relative to the due date: `daysBefore` (0 = that day) + `time` (local HH:MM, default 09:00) in `timeZone` (IANA, e.g. America/Argentina/Buenos_Aires)."
},
"description": "Reminders for you (push and email)."
},
"recurrence": {
"enum": [
"daily",
"weekly",
"biweekly",
"monthly"
],
"type": "string",
"description": "Repeat: archiving the task creates the next one, dates and reminders moved (Pro; needs a due date)."
},
"description": {
"type": "string"
}
}
}
{
"type": "object",
"required": [
"invoiceId"
],
"properties": {
"to": {
"type": "string",
"description": "Another address than the one on the document."
},
"amount": {
"type": [
"number",
"string"
],
"description": "The document's total in the currency's main unit, repeated from the preview (e.g. 220 or \"220.00\"). Must equal the total or nothing is done."
},
"locale": {
"enum": [
"en",
"es"
],
"type": "string"
},
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
},
"message": {
"type": [
"string",
"null"
],
"description": "A few personal lines at the top, up to 2000 characters."
},
"reminder": {
"type": "boolean",
"description": "A reminder for a sent invoice with a balance."
},
"invoiceId": {
"type": "string",
"description": "The invoice or estimate."
}
}
}
{
"type": "object",
"properties": {
"due": {
"enum": [
"overdue",
"this_week",
"later",
"none"
],
"type": "string",
"description": "overdue (before today), this_week (today to Sunday), later, or none (no due date)."
},
"label": {
"type": "string",
"description": "Only tasks with a label of this name (any project, any case)."
},
"userId": {
"type": "string",
"description": "Only this person's tasks."
},
"boardId": {
"type": "string",
"description": "Only this project (one the user owns)."
},
"clientId": {
"type": "string",
"description": "Only the projects of this client (one of the user's clients)."
},
"unassigned": {
"type": "boolean",
"description": "Only the tasks nobody is assigned to."
}
}
}
dateOrder
string
How 03/04/2026 reads when the file does not settle it. Default: month first in English, day first in Spanish.
durationUnit
string
What a bare number in the duration column means. Default auto: hours.
createClients
boolean
Create the clients named in the file and link the projects to them. Default true.
excludeProjects
array
Projects to leave out, by their key in the preview.
fallbackProject
string
The project for rows that name none. Default "Imported time".
Input schema (JSON)
{
"type": "object",
"required": [
"csv"
],
"properties": {
"csv": {
"type": "string",
"description": "The CSV file's text, up to 200,000 characters. A Toggl, Harvest or Clockify export or any CSV with a date column and a duration (or start and end times)."
},
"source": {
"enum": [
"toggl",
"harvest",
"clockify",
"generic"
],
"type": "string",
"description": "Which tool exported it. Default: guessed from the columns."
},
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
},
"mapping": {
"type": "object",
"description": "Which column holds each field, as the column's header text or its position (0 is the first). Fields: date, startTime, endDate, endTime, duration, project, client, task, person, firstName, lastName, email, billable, note, rate, currency. Default: guessed from the headers.",
"additionalProperties": {
"type": [
"string",
"integer"
]
}
},
"fileName": {
"type": "string",
"description": "The file's name, for the history. Default import.csv."
},
"dateOrder": {
"enum": [
"dmy",
"mdy",
"ymd"
],
"type": "string",
"description": "How 03/04/2026 reads when the file does not settle it. Default: month first in English, day first in Spanish."
},
"durationUnit": {
"enum": [
"auto",
"hours",
"minutes",
"seconds"
],
"type": "string",
"description": "What a bare number in the duration column means. Default auto: hours."
},
"createClients": {
"type": "boolean",
"description": "Create the clients named in the file and link the projects to them. Default true."
},
"excludeProjects": {
"type": "array",
"items": {
"type": "string"
},
"description": "Projects to leave out, by their key in the preview."
},
"fallbackProject": {
"type": "string",
"description": "The project for rows that name none. Default \"Imported time\"."
}
}
}
Default 25, max 100.
Input schema (JSON)
{
"type": "object",
"properties": {
"q": {
"type": "string",
"description": "Text in the number or the client's name."
},
"to": {
"type": "string",
"description": "Issued up to this day, YYYY-MM-DD."
},
"from": {
"type": "string",
"description": "Issued from this day on, YYYY-MM-DD."
},
"kind": {
"enum": [
"invoice",
"estimate"
],
"type": "string"
},
"page": {
"type": "integer",
"description": "Default 1."
},
"status": {
"enum": [
"draft",
"sent",
"paid",
"void",
"accepted",
"declined",
"overdue",
"open"
],
"type": "string",
"description": "overdue: sent and past its due date. open: sent and not paid."
},
"boardId": {
"type": "string",
"description": "Only the documents of this project (one the user owns)."
},
"clientId": {
"type": "string",
"description": "Only this client's documents."
},
"pageSize": {
"type": "integer",
"description": "Default 25, max 100."
}
}
}
toEmail
string | null
toTaxId
string | null
clientId
string | null
One of the user's clients; its name, email, address, tax id and currency are copied onto the document.
currency
string
Three-letter code. Default: the client's, else the profile's.
discount
number | string | null
A fixed amount off the whole document. An amount in the currency's main unit, e.g. 85 or "85.50" (not cents). null clears it.
taxLabel
string
What the tax is called, up to 30 characters.
issueDate
string
The issue date. Default today, YYYY-MM-DD.
toAddress
string | null
expenseIds
array
Only these expenses.
taxPercent
number | string
Tax as a percentage, e.g. 21 or "10,5". Default: the profile's.
includeTime
boolean
Default true.
taxableTime
boolean
Whether tax applies to the time lines. Default true.
timeEntryIds
array
Only these time entries (from the unbilled list).
includeExpenses
boolean
Default true.
taxableExpenses
boolean
Whether tax applies to the expense lines. Default true.
Input schema (JSON)
{
"type": "object",
"required": [
"boardId"
],
"properties": {
"to": {
"type": "string",
"description": "Only work up to this day, YYYY-MM-DD."
},
"from": {
"type": "string",
"description": "Only work from this day on, YYYY-MM-DD."
},
"notes": {
"type": [
"string",
"null"
],
"description": "Up to 4000 characters. Default: the profile's default notes."
},
"terms": {
"type": [
"string",
"null"
],
"description": "Up to 4000 characters. Default: the profile's payment instructions."
},
"toName": {
"type": "string",
"description": "Who it is for. Default: the client's name."
},
"boardId": {
"type": "string",
"description": "The project."
},
"dueDate": {
"type": [
"string",
"null"
],
"description": "YYYY-MM-DD. Default: the profile's payment terms (invoice) or 30 days (estimate)."
},
"groupBy": {
"enum": [
"task",
"person",
"day",
"total"
],
"type": "string",
"description": "How the work becomes lines. Default task."
},
"toEmail": {
"type": [
"string",
"null"
]
},
"toTaxId": {
"type": [
"string",
"null"
]
},
"clientId": {
"type": [
"string",
"null"
],
"description": "One of the user's clients; its name, email, address, tax id and currency are copied onto the document."
},
"currency": {
"type": "string",
"description": "Three-letter code. Default: the client's, else the profile's."
},
"discount": {
"type": [
"number",
"string",
"null"
],
"description": "A fixed amount off the whole document. An amount in the currency's main unit, e.g. 85 or \"85.50\" (not cents). null clears it."
},
"taxLabel": {
"type": "string",
"description": "What the tax is called, up to 30 characters."
},
"issueDate": {
"type": "string",
"description": "The issue date. Default today, YYYY-MM-DD."
},
"toAddress": {
"type": [
"string",
"null"
]
},
"expenseIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "Only these expenses."
},
"taxPercent": {
"type": [
"number",
"string"
],
"description": "Tax as a percentage, e.g. 21 or \"10,5\". Default: the profile's."
},
"includeTime": {
"type": "boolean",
"description": "Default true."
},
"taxableTime": {
"type": "boolean",
"description": "Whether tax applies to the time lines. Default true."
},
"timeEntryIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "Only these time entries (from the unbilled list)."
},
"includeExpenses": {
"type": "boolean",
"description": "Default true."
},
"taxableExpenses": {
"type": "boolean",
"description": "Whether tax applies to the expense lines. Default true."
}
}
}
durationUnit
string
What a bare number in the duration column means. Default auto: hours.
createClients
boolean
Create the clients named in the file and link the projects to them. Default true.
excludeProjects
array
Projects to leave out, by their key in the preview.
fallbackProject
string
The project for rows that name none. Default "Imported time".
Input schema (JSON)
{
"type": "object",
"required": [
"csv"
],
"properties": {
"csv": {
"type": "string",
"description": "The CSV file's text, up to 200,000 characters. A Toggl, Harvest or Clockify export or any CSV with a date column and a duration (or start and end times)."
},
"source": {
"enum": [
"toggl",
"harvest",
"clockify",
"generic"
],
"type": "string",
"description": "Which tool exported it. Default: guessed from the columns."
},
"mapping": {
"type": "object",
"description": "Which column holds each field, as the column's header text or its position (0 is the first). Fields: date, startTime, endDate, endTime, duration, project, client, task, person, firstName, lastName, email, billable, note, rate, currency. Default: guessed from the headers.",
"additionalProperties": {
"type": [
"string",
"integer"
]
}
},
"fileName": {
"type": "string",
"description": "The file's name, for the history. Default import.csv."
},
"dateOrder": {
"enum": [
"dmy",
"mdy",
"ymd"
],
"type": "string",
"description": "How 03/04/2026 reads when the file does not settle it. Default: month first in English, day first in Spanish."
},
"durationUnit": {
"enum": [
"auto",
"hours",
"minutes",
"seconds"
],
"type": "string",
"description": "What a bare number in the duration column means. Default auto: hours."
},
"createClients": {
"type": "boolean",
"description": "Create the clients named in the file and link the projects to them. Default true."
},
"excludeProjects": {
"type": "array",
"items": {
"type": "string"
},
"description": "Projects to leave out, by their key in the preview."
},
"fallbackProject": {
"type": "string",
"description": "The project for rows that name none. Default \"Imported time\"."
}
}
}
Input schema (JSON)
{
"type": "object",
"required": [
"invoiceId",
"amount"
],
"properties": {
"day": {
"type": "string",
"description": "The day it was received. Default today, YYYY-MM-DD."
},
"note": {
"type": [
"string",
"null"
],
"description": "Up to 500 characters."
},
"amount": {
"type": [
"number",
"string"
],
"description": "What the client paid. An amount in the currency's main unit, e.g. 85 or \"85.50\" (not cents)."
},
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
},
"invoiceId": {
"type": "string",
"description": "The invoice or estimate."
},
"paymentMethod": {
"enum": [
"bank",
"card",
"cash",
"paypal",
"other"
],
"type": "string",
"description": "How it was received. Default other."
},
"confirmOverpay": {
"type": "boolean",
"description": "Record it even though it is more than the balance."
}
}
}
autoReminders
boolean
Pro. When on, the client of every sent invoice that is past due and unpaid gets a reminder email 3, 7 and 14 days after the due date, in the user's daytime.
invoicePrefix
string
e.g. INV-
estimatePrefix
string
e.g. EST-
defaultTaxLabel
string
e.g. VAT. Up to 30 characters.
paymentTermsDays
integer | string
Days from the issue date to the due date, 0 to 365.
defaultTaxPercent
number | string
e.g. 21 or "10,5".
nextInvoiceNumber
integer | string
nextEstimateNumber
integer | string
paymentInstructions
string | null
Printed on each new document as its terms.
Input schema (JSON)
{
"type": "object",
"properties": {
"email": {
"type": [
"string",
"null"
],
"description": "Where clients reply to."
},
"phone": {
"type": [
"string",
"null"
]
},
"taxId": {
"type": [
"string",
"null"
]
},
"address": {
"type": [
"string",
"null"
]
},
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
},
"currency": {
"type": "string",
"description": "Three-letter code, e.g. USD."
},
"businessName": {
"type": "string",
"description": "Up to 120 characters."
},
"defaultNotes": {
"type": [
"string",
"null"
],
"description": "Printed on each new document as its notes."
},
"autoReminders": {
"type": "boolean",
"description": "Pro. When on, the client of every sent invoice that is past due and unpaid gets a reminder email 3, 7 and 14 days after the due date, in the user's daytime."
},
"invoicePrefix": {
"type": "string",
"description": "e.g. INV-"
},
"estimatePrefix": {
"type": "string",
"description": "e.g. EST-"
},
"defaultTaxLabel": {
"type": "string",
"description": "e.g. VAT. Up to 30 characters."
},
"paymentTermsDays": {
"type": [
"integer",
"string"
],
"description": "Days from the issue date to the due date, 0 to 365."
},
"defaultTaxPercent": {
"type": [
"number",
"string"
],
"description": "e.g. 21 or \"10,5\"."
},
"nextInvoiceNumber": {
"type": [
"integer",
"string"
]
},
"nextEstimateNumber": {
"type": [
"integer",
"string"
]
},
"paymentInstructions": {
"type": [
"string",
"null"
],
"description": "Printed on each new document as its terms."
}
}
}
{
"type": "object",
"required": [
"clientId"
],
"properties": {
"name": {
"type": "string"
},
"email": {
"type": [
"string",
"null"
]
},
"notes": {
"type": [
"string",
"null"
]
},
"phone": {
"type": [
"string",
"null"
]
},
"taxId": {
"type": [
"string",
"null"
]
},
"address": {
"type": [
"string",
"null"
]
},
"clientId": {
"type": "string"
},
"currency": {
"type": "string",
"description": "Three-letter code, e.g. USD or ARS. Default USD."
},
"hourlyRate": {
"type": [
"number",
"string",
"null"
],
"description": "Default hourly rate for this client's projects. An amount in the currency's main unit, e.g. 85 or \"85.50\" (not cents). null clears it."
}
}
}
Up to 60 characters. An empty text clears it.
showInvoices
boolean
Show the project's sent documents (links, no amounts on the portal page).
allowComments
boolean
Let visitors comment on the visible tasks.
Input schema (JSON)
{
"type": "object",
"required": [
"boardId"
],
"properties": {
"boardId": {
"type": "string",
"description": "The project."
},
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
},
"enabled": {
"type": "boolean",
"description": "Whether the link works. Turning it off keeps the link for when it is turned on again."
},
"welcome": {
"type": "string",
"description": "Up to 2000 characters. An empty text clears it."
},
"showHours": {
"type": "boolean",
"description": "Show hours tracked against the hours budget."
},
"showTasks": {
"type": "boolean",
"description": "Show the tasks marked visible to the client."
},
"studioName": {
"type": "string",
"description": "Up to 60 characters. An empty text clears it."
},
"showInvoices": {
"type": "boolean",
"description": "Show the project's sent documents (links, no amounts on the portal page)."
},
"allowComments": {
"type": "boolean",
"description": "Let visitors comment on the visible tasks."
}
}
}
{
"type": "object",
"required": [
"expenseId"
],
"properties": {
"day": {
"type": "string",
"description": "The day it was spent, YYYY-MM-DD."
},
"amount": {
"type": [
"number",
"string"
],
"description": "An amount in the currency's main unit, e.g. 85 or \"85.50\" (not cents)."
},
"cardId": {
"type": [
"string",
"null"
]
},
"vendor": {
"type": [
"string",
"null"
]
},
"billable": {
"type": "boolean"
},
"category": {
"enum": [
"travel",
"software",
"hardware",
"services",
"meals",
"other"
],
"type": "string"
},
"expenseId": {
"type": "string",
"description": "The expense."
},
"description": {
"type": "string"
},
"markupPercent": {
"type": [
"number",
"string",
"null"
]
}
}
}
clientId
string | null
One of the user's clients; its name, email, address, tax id and currency are copied onto the document.
currency
string
Three-letter code. Default: the client's, else the profile's.
discount
number | string | null
A fixed amount off the whole document. An amount in the currency's main unit, e.g. 85 or "85.50" (not cents). null clears it.
taxLabel
string
What the tax is called, up to 30 characters.
invoiceId*
string
The invoice or estimate.
issueDate
string
The issue date. Default today, YYYY-MM-DD.
toAddress
string | null
taxPercent
number | string
Tax as a percentage, e.g. 21 or "10,5". Default: the profile's.
Input schema (JSON)
{
"type": "object",
"required": [
"invoiceId"
],
"properties": {
"lines": {
"type": "array",
"items": {
"type": "object",
"required": [
"description",
"quantity",
"price"
],
"properties": {
"kind": {
"enum": [
"time",
"expense",
"custom"
],
"type": "string",
"description": "Where the line came from. Default custom."
},
"price": {
"type": [
"number",
"string"
],
"description": "Price per unit. An amount in the currency's main unit, e.g. 85 or \"85.50\" (not cents). A negative price is a credit."
},
"taxable": {
"type": "boolean",
"description": "Whether tax applies to the line. Default true."
},
"quantity": {
"type": [
"number",
"string"
],
"description": "Hours or units as typed: 2, 1.5 or \"1,25\" (more than zero, up to two decimals)."
},
"description": {
"type": "string",
"description": "Up to 500 characters."
}
}
},
"description": "The whole list (replaces the current lines). At most 500."
},
"notes": {
"type": [
"string",
"null"
],
"description": "Up to 4000 characters. Default: the profile's default notes."
},
"terms": {
"type": [
"string",
"null"
],
"description": "Up to 4000 characters. Default: the profile's payment instructions."
},
"toName": {
"type": "string",
"description": "Who it is for. Default: the client's name."
},
"boardId": {
"type": [
"string",
"null"
],
"description": "A project the user owns."
},
"dueDate": {
"type": [
"string",
"null"
],
"description": "YYYY-MM-DD. Default: the profile's payment terms (invoice) or 30 days (estimate)."
},
"toEmail": {
"type": [
"string",
"null"
]
},
"toTaxId": {
"type": [
"string",
"null"
]
},
"clientId": {
"type": [
"string",
"null"
],
"description": "One of the user's clients; its name, email, address, tax id and currency are copied onto the document."
},
"currency": {
"type": "string",
"description": "Three-letter code. Default: the client's, else the profile's."
},
"discount": {
"type": [
"number",
"string",
"null"
],
"description": "A fixed amount off the whole document. An amount in the currency's main unit, e.g. 85 or \"85.50\" (not cents). null clears it."
},
"taxLabel": {
"type": "string",
"description": "What the tax is called, up to 30 characters."
},
"invoiceId": {
"type": "string",
"description": "The invoice or estimate."
},
"issueDate": {
"type": "string",
"description": "The issue date. Default today, YYYY-MM-DD."
},
"toAddress": {
"type": [
"string",
"null"
]
},
"taxPercent": {
"type": [
"number",
"string"
],
"description": "Tax as a percentage, e.g. 21 or \"10,5\". Default: the profile's."
}
}
}
budgetAmount
number | string | null
Money budget. An amount in the currency's main unit, e.g. 85 or "85.50" (not cents). Used when budgetType is money.
billableByDefault
boolean
Whether time is billable unless a task says otherwise.
Input schema (JSON)
{
"type": "object",
"required": [
"boardId"
],
"properties": {
"status": {
"enum": [
"active",
"on_hold",
"completed",
"cancelled"
],
"type": "string"
},
"boardId": {
"type": "string"
},
"dueDate": {
"type": [
"string",
"null"
],
"description": "YYYY-MM-DD."
},
"clientId": {
"type": [
"string",
"null"
],
"description": "One of the user's clients; null unlinks it."
},
"startDate": {
"type": [
"string",
"null"
],
"description": "YYYY-MM-DD."
},
"budgetType": {
"enum": [
"none",
"hours",
"money"
],
"type": "string",
"description": "What the budget counts: tracked hours, or the billable amount."
},
"hourlyRate": {
"type": [
"number",
"string",
"null"
],
"description": "Hourly rate for this project, over the client's. An amount in the currency's main unit, e.g. 85 or \"85.50\" (not cents)."
},
"budgetHours": {
"type": [
"number",
"string",
"null"
],
"description": "Hours budget, e.g. 40 or \"40h\". Used when budgetType is hours."
},
"budgetAmount": {
"type": [
"number",
"string",
"null"
],
"description": "Money budget. An amount in the currency's main unit, e.g. 85 or \"85.50\" (not cents). Used when budgetType is money."
},
"billableByDefault": {
"type": "boolean",
"description": "Whether time is billable unless a task says otherwise."
}
}
}
The recurring invoice.
paymentTermsDays
integer | string
Input schema (JSON)
{
"type": "object",
"required": [
"recurringId"
],
"properties": {
"every": {
"type": [
"integer",
"string"
],
"description": "1 to 12."
},
"action": {
"enum": [
"draft",
"send",
"email"
],
"type": "string"
},
"active": {
"type": "boolean",
"description": "false pauses it, true resumes it."
},
"confirm": {
"type": "boolean",
"description": "true performs the action. Without it (or with any value other than the boolean true) nothing changes and the result is a preview of the effects."
},
"endAfter": {
"type": [
"integer",
"string",
"null"
],
"description": "Invoices left to make, 1 to 500; null = no end."
},
"interval": {
"enum": [
"week",
"month",
"year"
],
"type": "string"
},
"nextDate": {
"type": "string",
"description": "The new next date, today or later, YYYY-MM-DD."
},
"recurringId": {
"type": "string",
"description": "The recurring invoice."
},
"paymentTermsDays": {
"type": [
"integer",
"string"
]
}
}
}
{
"type": "object",
"required": [
"cardId"
],
"properties": {
"title": {
"type": "string"
},
"cardId": {
"type": "string"
},
"dueDate": {
"type": [
"string",
"null"
],
"description": "ISO 8601, or null to clear."
},
"startDate": {
"type": [
"string",
"null"
],
"description": "ISO 8601, or null to clear (shown on the timeline)."
},
"coverColor": {
"enum": [
"indigo",
"emerald",
"rose",
"amber",
"sky",
"violet",
"teal",
"slate",
null
],
"type": [
"string",
"null"
],
"description": "A color cover, or null to remove the cover. Replaces an image cover."
},
"recurrence": {
"enum": [
"daily",
"weekly",
"biweekly",
"monthly",
null
],
"type": [
"string",
"null"
],
"description": "Repeat on archive (Pro), or null to stop repeating."
},
"description": {
"type": "string"
},
"coverImageAttachmentId": {
"type": [
"string",
"null"
],
"description": "Use one of the card's image attachments as its cover (null removes it)."
}
}
}