Create Basecamp Todo
basecamp_create_todoCreate a new todo item in a Basecamp todo list with a title, optional content, due dates, assignees, and notifications.
Instructions
Create a new todo item in a todo list.
HTML rules for content:
Allowed tags: p, span, h2, h3, h4, br, strong, em, strike, code, a (with href attribute), pre, ol, ul, li, blockquote, mark, figure, figcaption, table, tbody, tr, th, td, div, bc-attachment.
Wrap every paragraph in ..., and put between one paragraph and the next. Both parts are necessary: newlines and blank lines in your HTML are discarded, and Basecamp shows no space around a on its own, so two paragraphs with nothing between them are shown as one block of text. Do not rely on line breaks in your HTML to separate paragraphs.
Headings: use , , as appropriate.
Inline code: text. Preformatted blocks: text.
Ordered lists: .... Unordered: ....
Tables: Heading...Cell...
To mention a person: . Put the tag where the name must show in the text, for example "Thanks for the fix". The person gets a notification. If the ID is not a person, the tool returns an error and writes nothing. Get person IDs from basecamp_list_people, or from the people in other responses (assignees, creators).
Single image:
Image gallery: wrap multiple in a .
A bc-attachment needs an attachable_sgid. For a file that is already in Basecamp, take the sgid from the HTML content of the message, comment or card that shows it, or use basecamp_list_recordings. For a file that is not in Basecamp yet, such as an image at an external URL or a screenshot on disk, upload it with basecamp_create_attachment and use the sgid that it returns. There is no tag, so an external image URL can never be embedded directly: upload it, or accept that it stays a plain link.
Basecamp auto-enriches bc-attachment tags after saving (adds url, href, filename, content-type, etc.) — you never need to write those.
When you see an existing, already-enriched tag (e.g. from a previous list/get call), leave its inner HTML alone. Before any content_append/content_prepend/search_replace runs, it is automatically collapsed back to its minimal form (sgid, presentation, caption, and content-type for mentions) — you don't need to strip it yourself, and doing so manually is unnecessary and risks mismatched find strings.
Background highlights: ...
Text color highlights: ...
For both, N is 1 (yellow), 2 (amber), 3 (red), 4 (pink), 5 (purple), 6 (blue), 7 (teal), 8 (near-white), or 9 (light gray).
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | ||
| due_on | No | Due date in YYYY-MM-DD format. Pass an empty string to leave the due date unset. | |
| notify | No | Whether to notify the assignees about this todo | |
| content | No | ||
| starts_on | No | Start date in YYYY-MM-DD format (for a date range; requires due_on). Pass an empty string to leave it unset. | |
| todolist_id | Yes | Basecamp resource identifier | |
| assignee_ids | No | Array of person IDs to assign to this todo |