# Basecamp MCP connector

Connect Basecamp to Elaichi and Claude, ChatGPT, Cursor, or any MCP client can read and update your Basecamp projects, to-do lists, to-dos, comments, and card tables as the person who signed in, with every action logged.

Source: https://elaichi.ai/connectors/basecamp/

## Facts

| | |
| --- | --- |
| Application | Basecamp |
| Category | Ticketing |
| AI tools | 103 |
| Authentication | Connects over OAuth |
| Needs your own OAuth app | No |
| MCP endpoint | https://api.elaichi.ai/mcp |
| Works with | Claude, ChatGPT, Cursor, any MCP client, and the Elaichi Agent |
| Tools advertised by name | No. 103 tools is past the 30-tool threshold, so clients use `search_tools` and `execute_tool` |

## What you can ask once Basecamp is connected

- Which Basecamp todos are overdue across active projects?
- List todo lists in the Website Redesign project.
- Create a Basecamp todo for the Q3 launch checklist.

## Connect Basecamp in Elaichi

This happens once for the organization, before any client is involved.

1. Open Connections, choose Add connection, and pick Basecamp.
2. Optionally set Share with, then press Connect.
3. Approve it in Basecamp. Basecamp's own window opens. Whoever approves it decides what this connection can reach.

Credentials are vaulted and nobody, including the AI, reads them back. The connection becomes a toolbox immediately, so you can curate which Basecamp tools are exposed, rename them, or freeze arguments before anyone points a client at it.

## Connect Basecamp to Claude

Endpoint: https://api.elaichi.ai/mcp

1. Open Customize, then Connectors.
2. Press Add.
3. Name it, paste the MCP server URL, then Continue.
4. Sign in and approve.

On Team and Enterprise, an Owner adds it once. Everyone else turns it on for themselves.

## Connect Basecamp to ChatGPT

Endpoint: https://api.elaichi.ai/mcp

1. Open Plugins, then press the + button.
2. Name it and paste the endpoint into Server URL.
3. Leave Authentication on OAuth, then tick the risk acknowledgement.
4. Press Create, then sign in and approve.

Works on the web today. The plugin directory lives at chatgpt.com/plugins.

## Connect Basecamp to Cursor

Endpoint: https://api.elaichi.ai/mcp

1. Open `~/.cursor/mcp.json`.
2. Add the endpoint under `mcpServers`.
3. Reload Cursor, then sign in and approve.

Set up per machine, so repeat it on each computer you work from.

## Connect Basecamp to any MCP client

Endpoint: https://api.elaichi.ai/mcp

1. Add the endpoint as a remote MCP server.
2. Sign in and approve.

The Elaichi Agent already has these tools, with nothing to set up.

## What the consent screen decides

Only Read is granted by default, which is not enough to call a Basecamp tool. Over MCP there is no trusted place to confirm a write in the moment, so the consent screen is the standing approval rather than a formality. Grant Read and Run tools. Think hard before granting Delete, which reaches into connected apps and cannot be undone.

## What teams do with Basecamp through Elaichi

### Set up a new project in minutes

Operations. Describe the kickoff and the agent creates the Basecamp project, adds the to-do lists your team always uses, and fills in the first round of to-dos with owners and due dates.

### Turn a campaign brief into to-dos

Marketing. Paste the brief and get a to-do list in the right Basecamp project, one to-do per deliverable, so nobody has to type the plan in by hand.

### Catch a client up on project status

Client services. Ask what changed in a client's Basecamp project this week and get a plain summary of completed to-dos, open items, and the latest comments, ready to paste into an email.

### See where every card sits

Product. Pull the cards from a Basecamp card table, ask which column is piling up, and add a new column when the workflow changes, without opening each card.

### Reply to feedback in the thread

Design. Read the comments on a to-do, draft a reply that answers each point, and post it back to Basecamp under your own name after a quick look.

### Find who is carrying the most work

Leadership. List the people in your Basecamp account, see which projects and to-dos they are assigned to, and spot the person with too much on their plate before the deadline slips.

## Frequently asked questions

### How do I connect Basecamp to Claude?

Two steps. In Elaichi, choose Basecamp and sign in to your Basecamp account in the normal Basecamp window; it connects over OAuth, so there is no OAuth application to register and no client ID or secret to generate. Then open Claude, go to Customize, then Connectors, then Add, and paste https://api.elaichi.ai/mcp as the endpoint. Claude will ask you to sign in to Elaichi, and from then on it can work with your Basecamp projects and to-dos.

### Does Basecamp work with ChatGPT and Cursor as well as Claude?

Yes. Once Basecamp is connected in Elaichi, the same endpoint, https://api.elaichi.ai/mcp, works in Claude, ChatGPT, Cursor, any other MCP client, and the Elaichi Agent. You connect Basecamp once and every client you use picks it up.

### What can an AI agent actually do with my Basecamp data?

It can look up people, projects, to-do lists, to-dos, comments, and card tables in Basecamp, and it can create projects, to-do lists, to-dos, comments, and card table columns or update them. In practice that means asking for a status summary of a project, turning a meeting note into to-dos with owners and due dates, or posting a reply in a comment thread. Because Basecamp has a lot of actions, short concrete asks like "add a to-do to the launch list for Priya, due Friday" work better than long paragraphs.

### Does connecting Basecamp give the AI every project in my account?

No. The agent only sees the Basecamp projects, to-dos, and comments that the person who signed in can already see, because every request runs as that person. Elaichi can narrow that further, for example to reading only, or to a set of actions, but it can never grant access to a Basecamp project the person could not open themselves.

### Can my team share one Basecamp connection?

Yes. One person connects Basecamp in Elaichi and shares the connection with a team, and nobody else ever handles a password or a token. Each teammate still signs in to Elaichi as themselves, so every to-do created or comment posted in Basecamp is recorded in the audit log under the name of the person who did it.

### Can I stop an agent from deleting or changing things in Basecamp?

Yes. In Elaichi you restrict Basecamp action by action, so you can block deleting projects, or block every change and allow reading only. A blocked action is never shown to Claude, ChatGPT, Cursor, or any other client at all, so no prompt, however worded, can reach it.

### What happens to a Basecamp connection when someone leaves?

When you offboard a person in Elaichi, their access to Basecamp through every AI client ends at once. If they had shared a Basecamp connection with a team, that connection keeps working for everyone else. If you want Basecamp gone entirely, disconnecting it once in Elaichi removes it from Claude, ChatGPT, Cursor, and every other client at the same time.

## All 103 Basecamp tools

Every tool below is callable through https://api.elaichi.ai/mcp once Basecamp is connected, subject to the toolbox it is in and the restrictions on the caller.

- **List all Basecamp people** (List). Get all people visible to the current user in Basecamp. Returns fields including id, name, email_address, title, bio, location, admin status, employee status, time_zone, avatar_url, and company details.
- **Get single Basecamp person by ID** (Get). Get person profile by id in Basecamp. Returns id, name, email_address, personable_type, title, created_at, updated_at, admin, owner, client, employee, time_zone, avatar_url, can_manage_projects, and can_manage_people fields.
- **List all Basecamp projects** (List). Get all active projects visible to the current user in Basecamp. Returns project id, status, created_at, updated_at, name, description, purpose, clients_enabled, bookmark_url, url, app_url, dock details, and bookmarked status.
- **Get single Basecamp project by ID** (Get). Get a project by id in Basecamp. Returns id, status, created_at, updated_at, name, description, purpose, clients_enabled, bookmark_url, url, app_url, and dock array with current tools and their enabled status and URLs.
- **Create a Basecamp project** (Create). Create a new project in Basecamp with name and description. Returns the created project's JSON representation. Note: Free accounts have a project limit and will receive a 507 error if exceeded.
- **Update a Basecamp project by ID** (Update). Update a project by id in Basecamp. Requires name; optional description, admissions (invite, employee or team) and schedule_attributes.start_date + schedule_attributes.end_date (both required together, ISO 8601). status is read-only here. Returns 200 OK with the full project representation.
- **Delete a Basecamp project by ID** (Delete). Trash a project by id in Basecamp. Marks the project as trashed and it will be deleted after 30 days. Returns 204 No Content if successful.
- **List all Basecamp todos** (List). Get active to-dos for project_id and todo_list_id in Basecamp. Returns fields including id, status, title, created_at, updated_at, completed, description, content, and assignees.
- **Get single Basecamp todo by ID** (Get). Get a to-do in Basecamp by project_id and id. Returns id, status, title, creator info, completion status, assignees, and URLs for the to-do.
- **Create a Basecamp todo** (Create). Create a to-do in Basecamp under the given project_id (bucket) and todo_list_id. Requires content; optional description, assignee_ids, completion_subscriber_ids, notify, due_on and starts_on. Returns 201 Created with the full to-do representation.
- **Update a Basecamp todo by ID** (Update). Update a to-do in Basecamp with project_id and id. Requires all existing parameters including content, description, assignee_ids, completion_subscriber_ids, notify, due_on, and starts_on. Returns the updated to-do representation.
- **List all Basecamp todo lists** (List). Get active to-do lists for project_id and todo_set_id in Basecamp. Returns fields including id, status, title, creator, completed, completed_ratio, and URLs for todos and comments. todo_set_id must be taken from the project's `dock` array (the `todoset` entry) returned by Get a project. Only active, non-completed lists are returned unless the status or completed filters are used.
- **Get single Basecamp todo list by ID** (Get). Get a to-do list by project_id and id in Basecamp. Returns fields including id, status, title, created_at, updated_at, completed, completed_ratio, description, and URLs for todos and groups.
- **Create a Basecamp todo list** (Create). Create a to-do list with name in Basecamp under project_id and todo_set_id. Returns the to-do list including id, name, and description.
- **Update a Basecamp todo list by ID** (Update). Update a to-do list with id in the project project_id in Basecamp. Requires name and description parameters. Returns the updated to-do list representation including name and description fields.
- **List all Basecamp comments** (List). Get comments for a recording in Basecamp using project_id and recording_id. Returns comment id, status, visibility, timestamps, title, type, URLs, parent message info, bucket info, creator details, and content.
- **Get single Basecamp comment by ID** (Get). Get a comment by id and project_id in Basecamp. Returns id, status, visible_to_clients, created_at, updated_at, title, type, url, parent message info, bucket project info, creator details, and content.
- **Create a Basecamp comment** (Create). Create a comment with content in Basecamp under the recording with recording_id in the project with project_id. Returns the created comment including its content and metadata.
- **Update a Basecamp comment by ID** (Update). Update a comment content in Basecamp using project_id and id. Returns the updated comment with fields such as content and id.
- **Get single Basecamp card table by ID** (Get). Get a card table by project_id and id in Basecamp. Returns fields including id, status, title, type, url, creator details, subscribers, and lists with their cards count and URLs.
- **Create a Basecamp card table column** (Create). Create a column in the card table with card_table_id in the project with project_id in Basecamp. Requires title. Returns the created column's id, title, and description.
- **Update a Basecamp card table column by ID** (Update). Update a column in Basecamp with project_id and id. Returns the updated column's JSON representation including title and description.
- **Get single Basecamp card table column by ID** (Get). Get a card table column by id and project_id in Basecamp. Returns id, status, title, type, creator info, bucket info, cards_count, and URLs for the column.
- **List all Basecamp card table cards** (List). Get cards in a column in Basecamp using project_id and column_id. Returns card id, status, title, creator info, description, completion status, and URLs for card and comments.
- **Get single Basecamp card table card by ID** (Get). Get a card in Basecamp by project_id and id. Returns id, status, title, description, creator info, parent column, bucket project, comments_count, and steps details.
- **Create a Basecamp card table card** (Create). Create a card in the card table column identified by project_id and column_id in Basecamp. Requires title; optional content, due_on and notify. Returns 201 Created with the card, including id, title, content, due_on, assignees, steps and comments_url.
- **Update a Basecamp card table card by ID** (Update). Update a card in Basecamp with project_id and id. Returns the updated card including title, content, due_on, and assignee_ids fields.
- **List all Basecamp campfires** (List). Get a list of all active Campfires visible to the current user in Basecamp. Returns fields including id, status, title, created_at, updated_at, url, bucket info, and creator details.
- **Get single Basecamp campfire by ID** (Get). Get a Campfire by project_id (bucket) and id in Basecamp; both ids come from list_all_basecamp_campfires. Returns id, status, title, creator details, bucket info, and URLs for app, bookmark, subscription and lines.
- **List all Basecamp campfire lines** (List). Get Campfire lines for project_id and chat_id in Basecamp. Returns id, status, visible_to_clients, created_at, updated_at, title, type, url, parent info, bucket info, creator info, and content fields.
- **Get single Basecamp campfire line by ID** (Get). Get a Campfire line by project_id, chat_id, and id in Basecamp. Returns id, status, visibility, timestamps, title, type, URLs, parent chat info, bucket info, creator details, and content.
- **Create a Basecamp campfire line** (Create). Create a Campfire line in Basecamp. Requires project_id (the bucket) and chat_id (the Campfire id, from list_all_basecamp_campfires), plus a content body parameter. Returns 201 Created with the created line including id, content, creator and parent Campfire.
- **Delete a Basecamp campfire line by ID** (Delete). Delete a Campfire line by project_id, chat_id, and id in Basecamp. Returns 204 No Content if successful.
- **Create a Basecamp card table step** (Create). Create a step with title in the card with id in the project project_id in Basecamp. Returns the created step including title, due_on, and assignees.
- **Update a Basecamp card table step by ID** (Update). Update a step in Basecamp with project_id and id. Returns the updated step including title, due_on, and assignees fields.
- **List all Basecamp chatbots** (List). Get all chatbots on the Basecamp account. project_id (bucket) and chat_id select the Campfire whose lines_url is returned with each chatbot. Returns id, created_at, updated_at, service_name, command_url, url, app_url and lines_url.
- **Get single Basecamp chatbot by ID** (Get). Get a chatbot in Basecamp. Requires project_id, chat_id, and id. Returns id, created_at, updated_at, service_name, command_url, url, app_url, and lines_url fields in the response.
- **Create a Basecamp chatbot** (Create). Create a chatbot in the Campfire identified by project_id (bucket) and chat_id in Basecamp. Requires service_name, which may not contain spaces, emoji or non-word characters because it is used to invoke the bot (for example !tally); optional command_url. Returns 201 Created with the chatbot including its lines_url for posting lines.
- **Update a Basecamp chatbot by ID** (Update). Update a chatbot with id in Basecamp by changing its service_name. Returns the updated chatbot JSON representation including service_name and command_url fields.
- **Delete a Basecamp chatbot by ID** (Delete). Delete a chatbot by id in Basecamp. The chatbot is removed across the whole account, not just the Campfire named in the path. Requires project_id (bucket) and chat_id. Returns 204 No Content on success.
- **List all Basecamp client approvals** (List). Get a list of client approvals for the project with project_id in Basecamp. Returns fields including id, status, title, created_at, updated_at, approval_status, and approver details.
- **Get single Basecamp client approval by ID** (Get). Get client approval by id in Basecamp. Returns fields including id, status, title, created_at, updated_at, approval_status, creator details, approver details, content, and responses.
- **List all Basecamp client correspondences** (List). Get client correspondences for project_id in Basecamp. Returns id, status, visible_to_clients, created_at, updated_at, title, type, url, parent info, bucket info, creator details, content, subject, replies_count, and replies_url.
- **Get single Basecamp client correspondence by ID** (Get). Get client correspondence by id and project_id in Basecamp. Returns id, status, title, content, creator info, created_at, updated_at, subject, replies_count, and URLs.
- **List all Basecamp client replies** (List). Get a list of client replies for the project identified by project_id and the recording identified by recording_id in Basecamp. Returns id, status, title, created_at, updated_at, content, and creator details. recording_id must be the id of a client correspondence (see the client correspondences list) or a client approval (see the client approvals list) in the same project - no other recording type has client replies.
- **Get single Basecamp client reply by ID** (Get). Get a client reply by id for the recording with recording_id in the project with project_id in Basecamp. Returns id, status, visible_to_clients, created_at, updated_at, title, type, url, parent info, bucket info, creator info, and content. recording_id must be the id of a client correspondence or a client approval in the project; get it from the client correspondences or client approvals list endpoints.
- **Update a Basecamp client visibility by ID** (Update). Toggle client visibility for the recording with id in the project with project_id in Basecamp. Requires visible_to_clients parameter. Returns the current recording JSON representation. Some recordings inherit visibility and cannot be toggled. Recordings that inherit visibility from a parent (individual to-dos inherit their to-do list, cards inherit their card table) cannot be toggled and return 403 Forbidden.
- **List all Basecamp documents** (List). Get a list of active documents in the project with project_id and vault with vault_id in Basecamp. Returns document id, status, title, creator info, content, and URLs.
- **Get single Basecamp document by ID** (Get). Get a document by id in Basecamp specifying project_id and id. Returns fields including id, status, title, created_at, updated_at, content, creator, parent, bucket, and URLs for access.
- **Create a Basecamp document** (Create). Create a document in the vault vault_id of project project_id in Basecamp. Requires title and content (HTML rich text). Set status to "active" to publish immediately - if status is omitted the document is created as a draft and is not posted or notified to anyone. Returns the created document including id, title, content, and status.
- **Update a Basecamp document by ID** (Update). Update a document's title and content in Basecamp using project_id and id. Returns the updated document with fields like title and content.
- **List all Basecamp events** (List). Get a list of events for the recording with recording_id in the project with project_id in Basecamp. Returns event id, recording_id, action, details, created_at, and creator info including id, name, email_address, title, and company.
- **List all Basecamp forwards** (List). Get active forwards for the inbox inbox_id in project project_id in Basecamp. inbox_id is not the project id - read it from the project's dock payload (Get a project) or the Get inbox endpoint. Optional sort (created_at, updated_at) and direction (desc, asc). Returns id, status, title, created_at, updated_at, content, subject, from, replies_count, and creator details.
- **Get single Basecamp forward by ID** (Get). Get a forward in Basecamp by project_id and id. Returns fields including id, status, title, content, subject, from, replies_count, and creator details.
- **List all Basecamp inbox replies** (List). Get inbox replies for project_id and inbox_forward_id in Basecamp. Returns id, status, visible_to_clients, created_at, updated_at, title, type, url, parent info, bucket info, creator info, and content fields.
- **Get single Basecamp inbox reply by ID** (Get). Get inbox reply by id for the forward with inbox_forward_id in the project project_id in Basecamp. Returns id, status, visible_to_clients, created_at, updated_at, title, type, url, parent, bucket, creator, and content fields.
- **Get single Basecamp inbox by ID** (Get). Get inbox details for project_id and id in Basecamp. Returns id, status, title, creator info, forwards_count, and URLs.
- **Create a Basecamp lineup maker** (Create). Create a marker with name and date in Basecamp. Requires name and date (ISO8601 without time). Returns 201 Created with empty response body.
- **Update a Basecamp lineup maker by ID** (Update). Update a marker's name and/or date by id in Basecamp. Returns 200 OK with an empty response body.
- **Delete a Basecamp lineup maker by ID** (Delete). Destroy a marker by id in Basecamp. This operation permanently deletes the marker and returns 204 No Content.
- **Get single Basecamp message board by ID** (Get). Get message board for project project_id and id in Basecamp. Returns id, status, title, creator info, messages_count, and URLs for the message board.
- **List all Basecamp message types** (List). Get list of all message types for a project in Basecamp using project_id. Returns id, name, icon, created_at, and updated_at fields for each message type.
- **Get single Basecamp message type by ID** (Get). Get message type with id in Basecamp. Returns id, name, icon, created_at, and updated_at fields.
- **Create a Basecamp message type** (Create). Create a message type with name and icon in Basecamp. Requires project_id, name, and icon. Returns the created message type's JSON representation.
- **Update a Basecamp message type by ID** (Update). Update a message type with id in the project identified by project_id in Basecamp. Returns the updated message type including name and icon fields.
- **Delete a Basecamp message type by ID** (Delete). Delete a message type with id in the bucket identified by project_id in Basecamp. Returns 204 No Content if successful.
- **List all Basecamp messages** (List). Get a list of active messages for project_id and message_board_id in Basecamp. Returns fields including id, status, title, created_at, updated_at, url, comments_count, content, and subject.
- **Get single Basecamp message by ID** (Get). Get a message by id and project_id in Basecamp. Returns id, status, title, content, creator info, comments_count, and URLs related to the message.
- **Create a Basecamp message** (Create). Create a message on the message board message_board_id in project project_id in Basecamp. Only subject is required. Set status to "active" to publish immediately - if status is omitted the message is created as a draft that notifies no one. Optional content (HTML), category_id (from the message types endpoint) and subscriptions (people IDs; if omitted everyone on the project is notified). Returns the created message including id, subject, content, status, and subscription_url.
- **Update a Basecamp message by ID** (Update). Update a message in Basecamp with project_id and id. Returns the updated message including subject, content, and category_id fields.
- **Basecamp messages unpin** (Action). Unpin a message in Basecamp. Requires project_id (the bucket) and the message id. This only removes the pin — it does not delete or trash the message. Returns 204 No Content.
- **List all Basecamp question answers** (List). Get a list of answers for the question with id in the project project_id in Basecamp. Returns fields including id, status, title, creator info, content, and timestamps.
- **Get single Basecamp question answer by ID** (Get). Get a question answer by project_id and id in Basecamp. Returns fields including id, status, title, content, creator details, parent question, bucket info, and timestamps.
- **Get single Basecamp questionnaire by ID** (Get). Get questionnaire by id for project with id in Basecamp. Returns id, status, title, created_at, updated_at, bucket info, creator info, questions_count, and questions_url.
- **List all Basecamp questions** (List). Get a list of questions for the project identified by project_id and the questionnaire identified by questionnaire_id in Basecamp. Returns fields including id, status, title, creator, schedule, and answers_count.
- **Get single Basecamp question by ID** (Get). Get a question by id and project_id in Basecamp. Returns fields including id, status, title, creator details, schedule, and answers_count.
- **List all Basecamp recordings** (List). Get recordings of one type across projects in Basecamp. Requires type, which must be one of Comment, Document, Door, Kanban::Card, Kanban::Step, Message, Question::Answer, Schedule::Entry, Todo, Todolist, Upload, or Vault. Optional bucket (comma-separated project IDs), status (active, archived, trashed), sort (created_at, updated_at) and direction (desc, asc).
- **Basecamp recordings trash** (Action). Trash any recording in Basecamp: a to-do, message, document, upload, comment, card, or to-do list. Requires project_id (the bucket) and the recording id. The record is marked trashed and is recoverable through Basecamp's trash, not permanently deleted. Returns 204 No Content if successful.
- **List all Basecamp schedule entries** (List). Get active schedule entries for schedule with id in Basecamp. Returns fields including id, status, title, starts_at, ends_at, creator, description, and participants.
- **Get single Basecamp schedule entry by ID** (Get). Get a schedule entry by project_id and id in Basecamp. Returns fields including id, status, title, description, starts_at, ends_at, participants, and creator details. For a recurring entry this redirects to its first individual occurrence; a specific occurrence can be fetched at /schedule_entries/{id}/occurrences/{YYYYMMDD}.json, which returns 404 for a date the entry does not occur on.
- **Create a Basecamp schedule entry** (Create). Create a schedule entry under schedule schedule_id in project project_id in Basecamp. Requires summary, starts_at, and ends_at (ISO 8601). Returns the created entry including id, summary, starts_at, ends_at, description, all_day, highlighted, join_url, participants, and recurrence_schedule.
- **Update a Basecamp schedule entry by ID** (Update). Update the schedule entry id in project project_id in Basecamp. This is a full replace: send the complete set of attributes you want the entry to have, because every attribute you omit is cleared - except participant_ids, url and highlighted, which are kept when omitted. A recurring entry cannot be updated here; the request redirects to its first occurrence. Returns the updated schedule entry.
- **Get single Basecamp schedule by ID** (Get). Get schedule for a project using project_id and id. Returns fields including id, status, title, url, bucket info, creator details, and entries_count.
- **Update a Basecamp schedule by ID** (Update). Update the schedule id in project project_id in Basecamp. Requires include_due_assignments (boolean), which must be nested inside a top-level "schedule" object, for example {"schedule": {"include_due_assignments": false}}. It controls whether due dates from to-dos, cards and steps appear on the schedule. Returns 200 OK with the updated schedule.
- **List all Basecamp templates** (List). Get a list of active Templates visible to the current user in Basecamp. Returns fields including id, status, created_at, updated_at, name, description, url, app_url, and dock details.
- **Get single Basecamp template by ID** (Get). Get a Template by id in Basecamp. Returns id, status, created_at, updated_at, name, description, url, app_url, and dock array with details of associated resources.
- **Create a Basecamp template** (Create). Create a new Template in Basecamp with name and optionally description. Returns the created Template's JSON representation. Note: Free subscription accounts may receive 507 Insufficient Storage error.
- **Update a Basecamp template by ID** (Update). Update a Template's name and description in Basecamp using id. Returns the updated Template representation on success.
- **Delete a Basecamp template by ID** (Delete). Trash a template by id in Basecamp. Marks the template as trashed and it will be deleted after 30 days. Returns 204 No Content if successful.
- **Get single Basecamp todo set by ID** (Get). Get to-do set for a project in Basecamp using project_id and id. Returns id, status, title, creator info, completed status, completed_ratio, todolists_count, and URLs for the to-do set. There is no list endpoint for to-do sets - get the id from the `dock` array of Get a project (the entry whose name is `todoset`).
- **List all Basecamp uploads** (List). Get a list of active uploads in the project specified by project_id and vault specified by vault_id in Basecamp. Returns fields including id, status, title, url, creator info, description, content_type, byte_size, filename, and dimensions.
- **Get single Basecamp upload by ID** (Get). Get upload details by project_id and id in Basecamp. Returns id, status, title, url, creator info, description, content_type, byte_size, filename, download_url, width, and height.
- **Create a Basecamp upload** (Create). Create an upload in the vault vault_id of project project_id in Basecamp. Requires attachable_sgid, which you get by first POSTing the file bytes to the Create an attachment endpoint (POST /attachments.json) - it cannot be constructed by hand. Optional description (HTML) and base_name (file name without extension). Returns 201 Created with the full upload representation, including id, status, title, filename, content_type, byte_size, download_url, description, and url. A 507 Insufficient Storage means the account hit its storage limit.
- **Update a Basecamp upload by ID** (Update). Update an upload's description and base_name in Basecamp. Requires project_id and id. Returns the updated upload including its description and base_name.
- **List all Basecamp vaults** (List). Get a paginated list of vaults in the vault with id in the project specified by project_id in Basecamp. Returns fields including id, status, title, creator, documents_count, uploads_count, and URLs for related resources.
- **Get single Basecamp vault by ID** (Get). Get a vault by id in Basecamp specifying project_id and id. Returns id, status, title, creator info, counts of documents, uploads, vaults, and URLs for related resources.
- **Create a Basecamp vault** (Create). Create a vault in Basecamp under the vault with id in the project with project_id. Requires title. Returns the created vault with its details.
- **Update a Basecamp vault by ID** (Update). Update a vault title in Basecamp using project_id and id. Returns the updated vault with fields like id, title, and other vault details.
- **List all Basecamp webhooks** (List). Get all webhooks for a specific bucket in Basecamp. Requires project_id. Returns webhook id, active status, created_at, updated_at, payload_url, types, url, and app_url fields.
- **Get single Basecamp webhook by ID** (Get). Get a webhook by id in Basecamp for the project identified by project_id. Returns webhook details including id, active status, payload_url, types, and recent_deliveries array with the 25 most recent delivery exchanges.
- **Create a Basecamp webhook** (Create). Create a webhook in Basecamp for project_id with payload_url. Returns the created webhook including payload_url and types fields.
- **Update a Basecamp webhook by ID** (Update). Update a webhook in Basecamp with project_id and id. Requires payload_url to set the HTTPS callback URL. Returns the updated webhook's payload_url, types, and active status.
- **Delete a Basecamp webhook by ID** (Delete). Delete a webhook by id in Basecamp. Requires project_id and id. Returns 204 No Content on success.
