Ticketing
Basecamp
API integration
Ship Ticketing features without building the integration. Full Basecamp API access via Proxy, normalized data through Unified APIs, and 100+ MCP-ready tools for AI agents — all extensible to your exact use case.
Talk to usUse Cases
Why integrate with Basecamp
Common scenarios for SaaS companies building Basecamp integrations for their customers.
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
Ship these features with Truto + Basecamp
Concrete product features your team can ship faster by leveraging Truto’s Basecamp integration instead of building from scratch.
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.
SuperAI
Basecamp AI agent tools
Comprehensive AI agent toolset with fine-grained control. Integrates with MCP clients like Cursor and Claude, or frameworks like LangChain.
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.
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.
Why Truto
Why use Truto’s MCP server for Basecamp
Other MCP servers give you a static tool list for one app. Truto gives you a managed, multi-tenant MCP infrastructure across 700+ integrations.
Auto-generated, always up to date
Tools are dynamically generated from curated documentation — not hand-coded. As integrations evolve, tools stay current without manual maintenance.
Fine-grained access control
Scope each MCP server to read-only, write-only, specific methods, or tagged tool groups. Expose only what your AI agent needs — nothing more.
Multi-tenant by design
Each MCP server is scoped to a single connected account with its own credentials. The URL itself is the auth token — no shared secrets, no credential leaking across tenants.
Works with every MCP client
Standard JSON-RPC 2.0 protocol. Paste the URL into Claude, ChatGPT, Cursor, or any MCP-compatible agent framework — tools are discovered automatically.
Built-in auth, rate limits, and error handling
Tool calls execute through Truto’s proxy layer with automatic OAuth refresh, rate-limit handling, and normalized error responses. No raw API plumbing in your agent.
Expiring and auditable servers
Create time-limited MCP servers for contractors or automated workflows. Optional dual-auth requires both the URL and a Truto API token for high-security environments.
Unified APIs
Unified APIs for Basecamp
Skip writing code for every integration. Use Truto’s category-specific Unified APIs out of the box or customize the mappings with AI.
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.
How It Works
From zero to integrated
Go live with Basecamp in under an hour. No boilerplate, no maintenance burden.
Link your customer’s Basecamp account
Use Truto’s frontend SDK to connect your customer’s Basecamp account. We handle all OAuth and API key flows — you don’t need to create the OAuth app.
We handle authentication
Don’t spend time refreshing access tokens or figuring out secure storage. We handle it and inject credentials into every API request.
Call our API, we call Basecamp
Truto’s Proxy API is a 1-to-1 mapping of the Basecamp API. You call us, we call Basecamp, and pass the response back in the same cycle.
Unified response format
Every response follows a single format across all integrations. We translate Basecamp’s pagination into unified cursor-based pagination. Data is always in the result attribute.
FAQs
Common questions about Basecamp on Truto
Authentication, rate limits, data freshness, and everything else you need to know before you integrate.
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.
From the Blog
Basecamp integration guides
Deep dives, architecture guides, and practical tutorials for building Basecamp integrations.
Basecamp
Get Basecamp integrated into your app
Our team understands what it takes to make a Basecamp integration successful. A short, crisp 30 minute call with folks who understand the problem.