Menu

API reference · Tasks

Packs

task_management · packs · 12 operations

GET/v1/tasks/packs

List task packs

task_management.packs.list

ReadIdempotentSince 2026-11-01

Lists task packs (reusable lists of tasks with deadlines relative to an anchor date) in their manual order, paginated by cursor: the organization's own (source org, default) or the published templates of the MB Suite library (source system), which can be applied directly or cloned into the organization. A pack carries name, description, color, labels and item_count; its tasks are in task_management.packs.items.list. Every pack of the organization comes, ordered by order ascending: a pack saved without a position (older packs) counts as 0 and comes back with order 0, and ties go by id. That holds up to 200 packs; an organization with more is listed by its stored position, and a pack without one is left out. Cost: the organization's packs are read whole (one read per pack, up to 200, plus one); the library, one read per pack of the page.

Scope
task_management:read
Permission
View the module
MCP tool
task_management_packs_listOn the full surface; on the compact one, mb_execute_operation with id: "task_management.packs.list".

Declared cost: up to 203 reads and 0 writes per call (they count against the daily quota).

Parameters

limitintegerqueryoptional

Rows per page (1 to 200; default 50).

Default: 50

cursorstringqueryoptional

The next_cursor of the previous page, to continue the list; omit it for the first page.

sourceenumqueryoptional

org: the organization's own packs; system: MB Suite's library.

Values: org, system · Default: "org"

Response

dataarray<object>
has_moreboolean
next_cursorstring

Errors

Example

curl "https://api.mb-suite.com/v1/tasks/packs" \
  -H "Authorization: Bearer $MB_API_KEY"

Try it with your test API key

With a test API key the request always goes to your practice organization: example data you can reset.

curl "https://api.mb-suite.com/v1/tasks/packs" \
  -H "Authorization: Bearer $MB_TEST_KEY"
GET/v1/tasks/packs/{pack_id}

Get one task pack

task_management.packs.get

ReadIdempotentSince 2026-11-01

Returns one task pack: the organization's, or a published one of the MB Suite library (is_system_pack). Without source it looks in the organization first and then in the library. Its tasks are in task_management.packs.items.list.

Scope
task_management:read
Permission
View the module
MCP tool
task_management_packs_getOn the full surface; on the compact one, mb_execute_operation with id: "task_management.packs.get".

Declared cost: up to 2 reads and 0 writes per call (they count against the daily quota).

Parameters

pack_idstringpathrequired

The pack's id (from task_management.packs.list).

sourceenumqueryoptional

org: the organization's own packs; system: MB Suite's library.

Values: org, system

Response

idstring
namestring
descriptionstring | null
colorstring | null
ordernumber
label_idsarray<string>
item_countnumber
created_by_idstring | null
created_atnumber
updated_atnumber
is_system_packboolean

Errors

Example

curl "https://api.mb-suite.com/v1/tasks/packs/{pack_id}" \
  -H "Authorization: Bearer $MB_API_KEY"

Try it with your test API key

With a test API key the request always goes to your practice organization: example data you can reset.

curl "https://api.mb-suite.com/v1/tasks/packs/{pack_id}" \
  -H "Authorization: Bearer $MB_TEST_KEY"
GET/v1/tasks/packs/{pack_id}/items

List the tasks of a pack

task_management.packs.items.list

ReadIdempotentSince 2026-11-01

Lists the items of a task pack in order: title, description, days_offset (days from the anchor date when applied; negative, zero or positive), priority, subtasks and recurrence. Works for the organization's packs and the published library packs.

Scope
task_management:read
Permission
View the module
MCP tool
task_management_packs_items_listOn the full surface; on the compact one, mb_execute_operation with id: "task_management.packs.items.list".

Declared cost: up to 203 reads and 0 writes per call (they count against the daily quota).

Parameters

pack_idstringpathrequired

The pack's id (from task_management.packs.list).

limitintegerqueryoptional

Rows per page (1 to 200; default 50).

Default: 50

cursorstringqueryoptional

The next_cursor of the previous page, to continue the list; omit it for the first page.

sourceenumqueryoptional

org: the organization's own packs; system: MB Suite's library.

Values: org, system

Response

dataarray<object>
has_moreboolean
next_cursorstring

Errors

Example

curl "https://api.mb-suite.com/v1/tasks/packs/{pack_id}/items" \
  -H "Authorization: Bearer $MB_API_KEY"

Try it with your test API key

With a test API key the request always goes to your practice organization: example data you can reset.

curl "https://api.mb-suite.com/v1/tasks/packs/{pack_id}/items" \
  -H "Authorization: Bearer $MB_TEST_KEY"
POST/v1/tasks/packs

Create a task pack

task_management.packs.create

WriteSince 2026-11-01

Creates an empty task pack at the end of the organization's list, owned by the caller: name, optional description, color (hex, default #3b82f6) and pack labels (unknown label ids are ignored). Add its tasks with task_management.packs.items.add. Returns the pack.

Scope
task_management:write
Permission
Edit in the module
MCP tool
task_management_packs_createOn the full surface; on the compact one, mb_execute_operation with id: "task_management.packs.create".

Declared cost: up to 52 reads and 1 writes per call (they count against the daily quota).

Parameters

namestringbodyrequired

The pack's name (up to 120 characters).

descriptionstringbodyoptional

What the pack is for.

colorstringbodyoptional

A hex color like #3b82f6.

label_idsarray<string>bodyoptional

Pack label ids (the app's pack labels); ids that do not exist are ignored.

Response

pack_idstring
packobject

Errors

Example

curl -X POST "https://api.mb-suite.com/v1/tasks/packs" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "name": "NAME"
}'

Try it with your test API key

With a test API key the request always goes to your practice organization: example data you can reset.

curl -X POST "https://api.mb-suite.com/v1/tasks/packs" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "name": "NAME"
}'
PATCH/v1/tasks/packs/{pack_id}

Update a task pack

task_management.packs.update

WriteSince 2026-11-01

Changes one of the organization's task packs. Send the fields to change inside updates: name, description, color (hex like #3b82f6) or label_ids (pack labels; unknown ids are ignored); only what you send changes. Any other key inside updates is rejected (400 invalid_input). To edit the tasks of the pack use task_management.packs.items.update. Returns the pack.

Scope
task_management:write
Permission
Edit in the module
MCP tool
task_management_packs_updateOn the full surface; on the compact one, mb_execute_operation with id: "task_management.packs.update".

Declared cost: up to 52 reads and 1 writes per call (they count against the daily quota).

Parameters

pack_idstringpathrequired

The id of one of the organization's packs (task_management.packs.list).

updatesobjectbodyrequired

The fields to change (at least one).

Response

packobject

Errors

Example

curl -X PATCH "https://api.mb-suite.com/v1/tasks/packs/{pack_id}" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "updates": {}
}'

Try it with your test API key

With a test API key the request always goes to your practice organization: example data you can reset.

curl -X PATCH "https://api.mb-suite.com/v1/tasks/packs/{pack_id}" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "updates": {}
}'
DELETE/v1/tasks/packs/{pack_id}

Delete a task pack

task_management.packs.delete

IrreversibleSince 2026-11-01

Deletes one of the organization's task packs with all its items. It goes to the 30-day trash and comes back whole (items included). Tasks already created from the pack are not touched. Outside the app it needs a dry run and a confirm_token, except a REST DELETE with a key allowed to delete.

With an API key, this DELETE runs directly: the record stays 30 days in the trash and the response carries its trash_item_id. With an OAuth token, and through the MCP, it needs dry_run → confirm_token.

Scope
task_management:write and “Allow deletions” (task_management:delete in OAuth)
Permission
Edit in the module
MCP tool
task_management_packs_deleteOn the full surface; on the compact one, mb_execute_operation with id: "task_management.packs.delete".

Declared cost: up to 1001 reads and 1001 writes per call (they count against the daily quota).

Parameters

pack_idstringpathrequired

The id of one of the organization's packs (task_management.packs.list).

Response

oktrue
trash_item_idstring

The trash item this deletion left: the item_id of platform.trash.restore (POST /trash/{item_id}/restore). Missing if nothing went to the trash.

trash_item_idsarray<string>

Only when the deletion left more than one copy: all of them, the first being trash_item_id.

trash_expires_atnumber

When the copy leaves the trash for good (epoch ms): 30 days after the deletion.

Errors

Example

curl -X DELETE "https://api.mb-suite.com/v1/tasks/packs/{pack_id}" \
  -H "Authorization: Bearer $MB_API_KEY"

Try it with your test API key

With a test API key the request always goes to your practice organization: example data you can reset.

curl -X DELETE "https://api.mb-suite.com/v1/tasks/packs/{pack_id}" \
  -H "Authorization: Bearer $MB_TEST_KEY"
POST/v1/tasks/packs/{pack_id}/duplicate

Duplicate a task pack

task_management.packs.duplicate

WriteSince 2026-11-01

Copies one of the organization's task packs with all its items into a new pack named '<name> (Copy)' (the suffix in the caller's language: '(Copia)', '(Copy)' or '(Cópia)'), owned by the caller. Returns pack_id and the new pack.

Scope
task_management:write
Permission
Edit in the module
MCP tool
task_management_packs_duplicateOn the full surface; on the compact one, mb_execute_operation with id: "task_management.packs.duplicate".

Declared cost: up to 1001 reads and 1002 writes per call (they count against the daily quota).

Parameters

pack_idstringpathrequired

The id of one of the organization's packs (task_management.packs.list).

Response

pack_idstring
packobject

Errors

Example

curl -X POST "https://api.mb-suite.com/v1/tasks/packs/{pack_id}/duplicate" \
  -H "Authorization: Bearer $MB_API_KEY"

Try it with your test API key

With a test API key the request always goes to your practice organization: example data you can reset.

curl -X POST "https://api.mb-suite.com/v1/tasks/packs/{pack_id}/duplicate" \
  -H "Authorization: Bearer $MB_TEST_KEY"
POST/v1/tasks/packs/system/{system_pack_id}/clone

Copy a library pack into the organization

task_management.packs.clone_system

WriteSince 2026-11-01

Copies a published task pack of the MB Suite library (an id from task_management.packs.list with source system) into the organization, items included, so it can be edited. Drafts of the library cannot be copied. Returns pack_id and the new pack.

Scope
task_management:write
Permission
Edit in the module
MCP tool
task_management_packs_clone_systemOn the full surface; on the compact one, mb_execute_operation with id: "task_management.packs.clone_system".

Declared cost: up to 1002 reads and 1002 writes per call (they count against the daily quota).

Parameters

system_pack_idstringpathrequired

A pack of MB Suite's library (task_management.packs.list with source system).

Response

pack_idstring
packobject

Errors

Example

curl -X POST "https://api.mb-suite.com/v1/tasks/packs/system/{system_pack_id}/clone" \
  -H "Authorization: Bearer $MB_API_KEY"

Try it with your test API key

With a test API key the request always goes to your practice organization: example data you can reset.

curl -X POST "https://api.mb-suite.com/v1/tasks/packs/system/{system_pack_id}/clone" \
  -H "Authorization: Bearer $MB_TEST_KEY"
POST/v1/tasks/packs/{pack_id}/apply

Create the tasks of a pack

task_management.packs.apply

WriteBulk · up to 200Since 2026-11-01

Creates one task per item of a pack (the organization's or a published library pack), due on anchor_date + the item's days_offset days, with the item's subtasks, priority and recurrence. target says where they go: the workspace (default), one of its Accounts (kind account + account_id) or private. Every task is assigned to default_assignee_id (default: the caller; null leaves them unassigned); items can override their assignee or due date, or be skipped (include: false). Subtasks are created unassigned, like in the app. Up to 200 items and 1,000 tasks with subtasks. Outside the app it requires a dry run (which lists the tasks and dates) and a confirm_token. Returns tasks_created (the top-level tasks, whose ids come in task_ids), subtasks_created and has_stale_end_date (a recurrence end date already past was dropped).

Needs confirmation: first dry_run: true (preview and confirm_token, valid 10 minutes and for one run), then the same body with confirm_token. In a few operations only with certain data: the description says when. Why and how: Dry run and confirm_token.

Scope
task_management:write
Permission
Edit in the module
MCP tool
task_management_packs_applyOn the full surface; on the compact one, mb_execute_operation with id: "task_management.packs.apply".

Declared cost: up to 600 reads and 1000 writes per call (they count against the daily quota).

Parameters

pack_idstringpathrequired

The pack's id (from task_management.packs.list).

anchor_dateintegerbodyrequired

The anchor date, epoch ms: each task is due anchor_date + its days_offset.

sourceenumbodyoptional

org or system; without it, the organization's packs first and then MB Suite's library.

Values: org, system

targetobjectbodyoptional

Where the tasks are created (default: the workspace).

Default: {"kind":"workspace"}

label_idsarray<string>bodyoptional

Task label ids (from task_management.labels.list); ids that do not exist are ignored.

default_assignee_idstring | nullbodyoptional
itemsarray<object>bodyoptional

Settings per item; the items left out are created with their defaults.

Response

tasks_creatednumber

Top-level tasks created (their ids come in task_ids).

subtasks_creatednumber

Subtasks created under them.

task_idsarray<string>
has_stale_end_dateboolean

true when an item's recurrence end date was already past: those series repeat with no end.

Errors

Example

curl -X POST "https://api.mb-suite.com/v1/tasks/packs/{pack_id}/apply" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "anchor_date": 0,
  "dry_run": true
}'

Try it with your test API key

With a test API key the request always goes to your practice organization: example data you can reset.

curl -X POST "https://api.mb-suite.com/v1/tasks/packs/{pack_id}/apply" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "anchor_date": 0,
  "dry_run": true
}'
POST/v1/tasks/packs/{pack_id}/items

Add a task to a pack

task_management.packs.items.add

WriteSince 2026-11-01

Adds an item to one of the organization's task packs: title, description, days_offset (days from the anchor date when the pack is applied), priority, subtasks (titles) and recurrence; at the end of the pack unless order is given. Returns the item.

Scope
task_management:write
Permission
Edit in the module
MCP tool
task_management_packs_items_addOn the full surface; on the compact one, mb_execute_operation with id: "task_management.packs.items.add".

Declared cost: up to 2 reads and 2 writes per call (they count against the daily quota).

Parameters

pack_idstringpathrequired

The id of one of the organization's packs (task_management.packs.list); library packs are read only.

titlestringbodyrequired

The title of the task it creates.

days_offsetintegerbodyrequired

Days from the anchor date when the pack is applied (negative, zero or positive): the task is due anchor_date + days_offset.

descriptionstringbodyoptional

The description of the task it creates.

priority_idstring | nullbodyoptional
subtasksarray<object>bodyoptional

Subtasks the task is created with (up to 50).

recurrenceobjectbodyoptional

Repeats the task: when it is completed, the next instance is created with the next due date.

orderintegerbodyoptional

Position in the pack; without it, at the end.

Response

item_idstring
itemobject

Errors

Example

curl -X POST "https://api.mb-suite.com/v1/tasks/packs/{pack_id}/items" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "title": "TITLE",
  "days_offset": 0
}'

Try it with your test API key

With a test API key the request always goes to your practice organization: example data you can reset.

curl -X POST "https://api.mb-suite.com/v1/tasks/packs/{pack_id}/items" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "title": "TITLE",
  "days_offset": 0
}'
PATCH/v1/tasks/packs/{pack_id}/items/{item_id}

Edit a task of a pack

task_management.packs.items.update

WriteSince 2026-11-01

Changes an item of one of the organization's task packs. Send the fields to change inside updates: title, description (the description of the task it creates, up to 5,000 characters; an empty text clears it), days_offset, priority_id (null clears it), subtasks (the whole list of titles), recurrence (null removes it) or order; only what you send changes. Any other key inside updates is rejected (400 invalid_input); a field sent next to updates instead of inside it is ignored, and without updates the call is 400 invalid_input. Returns the item with its fields.

Scope
task_management:write
Permission
Edit in the module
MCP tool
task_management_packs_items_updateOn the full surface; on the compact one, mb_execute_operation with id: "task_management.packs.items.update".

Declared cost: up to 3 reads and 2 writes per call (they count against the daily quota).

Parameters

pack_idstringpathrequired

The id of one of the organization's packs (task_management.packs.list); library packs are read only.

item_idstringpathrequired

The item's id (from task_management.packs.items.list).

updatesobjectbodyrequired

The fields to change (at least one).

Response

itemobject

Errors

Example

curl -X PATCH "https://api.mb-suite.com/v1/tasks/packs/{pack_id}/items/{item_id}" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "updates": {}
}'

Try it with your test API key

With a test API key the request always goes to your practice organization: example data you can reset.

curl -X PATCH "https://api.mb-suite.com/v1/tasks/packs/{pack_id}/items/{item_id}" \
  -H "Authorization: Bearer $MB_TEST_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "updates": {}
}'
DELETE/v1/tasks/packs/{pack_id}/items/{item_id}

Remove a task from a pack

task_management.packs.items.delete

IrreversibleSince 2026-11-01

Removes an item from one of the organization's task packs (tasks already created from it are not touched). It stays 30 days in the trash. Outside the app it needs a dry run and a confirm_token, except a REST DELETE with a key allowed to delete.

With an API key, this DELETE runs directly: the record stays 30 days in the trash and the response carries its trash_item_id. With an OAuth token, and through the MCP, it needs dry_run → confirm_token.

Scope
task_management:write and “Allow deletions” (task_management:delete in OAuth)
Permission
Edit in the module
MCP tool
task_management_packs_items_deleteOn the full surface; on the compact one, mb_execute_operation with id: "task_management.packs.items.delete".

Declared cost: up to 2 reads and 2 writes per call (they count against the daily quota).

Parameters

pack_idstringpathrequired

The id of one of the organization's packs (task_management.packs.list); library packs are read only.

item_idstringpathrequired

The item's id (from task_management.packs.items.list).

Response

oktrue
trash_item_idstring

The trash item this deletion left: the item_id of platform.trash.restore (POST /trash/{item_id}/restore). Missing if nothing went to the trash.

trash_item_idsarray<string>

Only when the deletion left more than one copy: all of them, the first being trash_item_id.

trash_expires_atnumber

When the copy leaves the trash for good (epoch ms): 30 days after the deletion.

Errors

Example

curl -X DELETE "https://api.mb-suite.com/v1/tasks/packs/{pack_id}/items/{item_id}" \
  -H "Authorization: Bearer $MB_API_KEY"

Try it with your test API key

With a test API key the request always goes to your practice organization: example data you can reset.

curl -X DELETE "https://api.mb-suite.com/v1/tasks/packs/{pack_id}/items/{item_id}" \
  -H "Authorization: Bearer $MB_TEST_KEY"