---
title: Basecamp API Integration on Truto
slug: basecamp
category: Ticketing
canonical: "https://truto.one/integrations/detail/basecamp/"
---

# Basecamp API Integration on Truto



**Category:** Ticketing  
**Status:** Generally available

## Unified APIs

### Unified User Directory API

- **Users** — The User object represents a User.

### Unified Ticketing API

- **Collections** — Tickets and contacts can be grouped into Collections. Collection resource usually maps to the various grouping systems used in the underlying product. Some examples are lists, projects, epics, etc. You can differentiate between these grouping systems using the type attribute of a Collection.
- **Comments** — Comments represent the communication happening on a Ticket, both between a User and a Contact and the internal things like notes, private comments, etc. A Ticket can have one or more Comments.
- **Ticket Status** — Ticket Status represents the completion level of the Ticket. Some products provide customizing the Ticket Status.
- **Tickets** — Core resource which represents some work that needs to be carried out. Tickets are usually mapped to issues, tasks, work items, etc. depending on the underlying product.
- **Workspaces** — Workspaces represent the top-level subdivision in a ticketing system. They usually have their own set of settings, tickets, statuses, priorities and users. Some of the usual terminologies used by the products for the top-level subdivision are projects, bases, spaces, workspace, etc. A Workspace could belong to an Organization.

### Unified Search API

- **Search** — Search endpoint for all the apps.

## MCP-ready AI tools

Truto exposes 104 tools for Basecamp that AI agents can call directly.

- **list_all_basecamp_people** — 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 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** — 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 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 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 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** — 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** — 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 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 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 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** — 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 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 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 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** — 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 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 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 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 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 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 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 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** — 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 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 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 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** — 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 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** — 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 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 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 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 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 a step in Basecamp with project_id and id. Returns the updated step including title, due_on, and assignees fields.
- **list_all_basecamp_chatbots** — 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 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 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 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 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** — 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 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** — 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 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** — 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 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** — 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** — 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 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 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 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** — 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** — 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 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** — 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 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 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 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 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** — 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 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** — 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 message type with id in Basecamp. Returns id, name, icon, created_at, and updated_at fields.
- **create_a_basecamp_message_type** — 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 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 a message type with id in the bucket identified by project_id in Basecamp. Returns 204 No Content if successful.
- **list_all_basecamp_messages** — 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 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 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 a message in Basecamp with project_id and id. Returns the updated message including subject, content, and category_id fields.
- **basecamp_messages_unpin** — 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** — 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 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 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** — 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 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** — 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** — 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** — 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 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 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 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 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 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** — 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 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 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 a Template's name and description in Basecamp using id. Returns the updated Template representation on success.
- **delete_a_basecamp_template_by_id** — 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 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** — 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 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 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 an upload's description and base_name in Basecamp. Requires project_id and id. Returns the updated upload including its description and base_name.
- **basecamp_uploads_download** — Download the file behind a Basecamp upload (latest version) by upload id (from the list uploads tool or the get upload tool). Needs the project id and the upload's filename, both shown on the upload record. Returns the raw file, stored as a downloadable file. Required: project_id, upload_id, filename.
- **list_all_basecamp_vaults** — 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 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 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 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** — 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 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 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 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 a webhook by id in Basecamp. Requires project_id and id. Returns 204 No Content on success.

## How it works

1. **Link your customer's Basecamp account.** Use Truto's frontend SDK; we handle every OAuth and API key flow so you don't need to create the OAuth app.
2. **Authentication is automatic.** Truto refreshes tokens, stores credentials securely, and injects them into every API request.
3. **Call Truto's API to reach Basecamp.** The Proxy API is a 1-to-1 mapping of the Basecamp API.
4. **Get a unified response format.** Every response uses a single shape, with cursor-based pagination and data in the `result` field.

## Use cases

- **Escalate support tickets into Basecamp projects** — Support SaaS products can let agents push bug reports or feature requests directly into Basecamp as to-dos or card table cards, with full context attached. Bidirectional comment sync via webhooks keeps agents informed when engineering resolves the issue.
- **Automate project provisioning from deal close** — CRM or proposal tools can automatically create Basecamp projects from templates when a deal is won, populate them with onboarding to-do lists, and upload signed contracts — eliminating manual project setup for agencies and service teams.
- **Sync task data for time tracking and billing** — Time-tracking and billing SaaS products can pull Basecamp to-dos and card table cards so users can log hours against specific tasks, then post time entries back as comments on the corresponding Basecamp items.
- **Surface project status in client-facing dashboards** — Agency analytics and reporting platforms can pull Basecamp projects, to-do completion data, and client approvals to display real-time project health and pending action items in a unified client portal.
- **Route deployment alerts and release notes to Basecamp** — CI/CD and DevOps tools can post formatted release notes to Basecamp message boards on successful deploys, or fire immediate alerts into Campfire chat rooms when builds fail — keeping non-technical stakeholders in the loop without leaving Basecamp.

## What you can build

- **Two-way ticket sync with Basecamp to-dos and cards** — Map your product's tickets to Basecamp to-dos or card table cards using the Unified Ticketing API, with bidirectional comment sync and status updates powered by Basecamp webhooks.
- **Automated project and to-do list scaffolding** — Create Basecamp projects from templates and populate them with to-do lists and individual to-dos programmatically when triggered by events in your product.
- **Kanban board mirroring via Card Tables** — Sync your product's workflow stages to Basecamp card table columns and cards, letting users manage work in either system while keeping both in sync.
- **Real-time event ingestion with webhooks** — Register Basecamp webhooks to listen for to-do completions, new comments, or project changes and reflect those updates instantly in your product.
- **Team chat notifications via Campfire** — Post automated alerts, summaries, or status updates directly into a Basecamp Campfire chat room using campfire line creation, keeping teams informed without creating noise in their to-do lists.
- **File and document attachment to tasks** — Push files into Basecamp vaults or attach uploads and documents to specific projects, giving users a seamless way to keep deliverables alongside their tasks.

## FAQs

### What authentication method does the Basecamp integration use?

Basecamp uses OAuth 2.0 for authentication. Truto handles the full OAuth flow, token storage, and automatic refresh so your end users can connect their Basecamp accounts without you managing credentials.

### How does Basecamp's data hierarchy map to the Unified Ticketing API?

Basecamp Projects map to Workspaces, To-do Lists and Card Table Columns map to Collections, and individual To-dos and Card Table Cards map to Tickets. Comments map directly to Comments in the unified model.

### Can I sync both to-dos and card table cards as tickets?

Yes. The integration exposes both Basecamp to-dos and card table cards. Through the Unified Ticketing API, both are accessible as Tickets, and you can create, read, update, and delete either type.

### Does the integration support real-time updates from Basecamp?

Yes. You can use the webhook endpoints (create, list, get, update, delete) to register webhooks on Basecamp projects and receive real-time event notifications for changes like to-do completions or new comments.

### What operations are supported beyond basic CRUD on tickets?

Beyond to-dos and cards, the integration supports projects, templates, comments, message boards, messages, campfire lines, documents, uploads, vaults, schedule entries, client approvals, and more — covering the full breadth of Basecamp's collaboration features.

### How does Truto handle Basecamp's pagination and rate limits?

Truto manages pagination automatically across all list endpoints, so you receive complete result sets without writing pagination logic. Rate limit handling, including retries and backoff, is built into the platform.

## Related reading

- [Connect Basecamp to Claude: Sync Documentation & Project Schedules via MCP](https://truto.one/blog/connect-basecamp-to-claude-sync-documentation-project-schedules/) — Learn how to connect Basecamp to Claude using a managed MCP server. Automate task delegation, sync project schedules, and manage team communication.
- [Connect Basecamp to ChatGPT: Manage Tasks & Team Communication via MCP](https://truto.one/blog/connect-basecamp-to-chatgpt-manage-tasks-team-communication/) — Learn how to connect Basecamp to ChatGPT using a managed MCP server. Automate task creation, sync project communication, and manage workflows with AI.
- [Connect Basecamp to AI Agents: Automate Workflows & Client Approvals](https://truto.one/blog/connect-basecamp-to-ai-agents-automate-workflows-client-approvals/) — Learn how to connect Basecamp to AI agents using Truto's /tools endpoint. Build autonomous project management workflows using LangChain, LangGraph, or CrewAI.
