canonical: https://jentic.com/apis/basecampapi.com/basecamp

# Basecamp API

The Basecamp API gives programmatic access to projects, to-do lists and to-dos, messages, comments, people, campfires, and other core Basecamp resources. Endpoints follow flat resource ID routes off a per-account base URL, so agents can list and update projects, manage tasks, post messages, and read campfire chat history. This page describes a curated, agent-optimised Jentic specification of 29 operations across 17 paths. Basecamp also publishes its own OpenAPI document at github.com/basecamp/basecamp-sdk; the Jentic specification is kept alongside it because it declares the account-scoped server URL and the OAuth 2.0 scheme that the vendor's document leaves out.

## For AI agents

Manage Basecamp projects, to-do lists, to-dos, messages, comments, and campfires programmatically. Suitable for agents that automate task creation, status updates, and team communication in Basecamp.

## Scope

Does not handle billing, account provisioning, or video conferencing - use for managing Basecamp projects, to-dos, messages, and campfires only.

## Capabilities

- List and create Basecamp projects on a given account
- Manage to-do lists and the to-dos that belong to them
- Post and read messages within a project's message board
- Add comments to messages and to-dos for follow-up discussion
- Look up people in the account or scoped to a specific project
- Read campfire chat history within a project

## Use cases

### Automated Project Setup from Form Submissions

Provision a new Basecamp project automatically when a sales contract is signed or a customer onboarding form is submitted. The agent calls POST /projects.json with the project name and description, then creates a default set of to-do lists and to-dos via /todosets and /todolists endpoints. This removes the manual project setup step and ensures consistent structure across customer accounts.

Example prompt: POST /projects.json with name 'Acme Onboarding', then create a 'Phase 1' to-do list and add three to-dos for kickoff, contract review, and integration sign-off.

### Cross-Tool Status Updates to Basecamp

Post status updates from CI/CD, monitoring, or sales tools into a Basecamp project's message board so the team sees activity in one place. POST /message_boards/{messageBoardId}/messages.json carries the structured update, and follow-up comments via POST /recordings/{recordingId}/comments.json capture discussion. This pattern is useful when Basecamp is the canonical project home but other tools generate the underlying events.

Example prompt: POST a deployment notification message to a Basecamp project's message board summarising the build number, environment, and changelog summary.

### To-Do Synchronisation with External Trackers

Synchronise to-dos between Basecamp and an external tracker (issue tracker, CRM tasks, calendar) so updates flow both ways. The /todolists/{todolistId}/todos.json endpoint creates and lists to-dos, GET /todosets/{todosetId}/todolists.json lists the to-do lists in a project's to-do set, and POST /todos/{todoId}/completion.json marks a to-do complete. Pair this with stored mappings to avoid duplicates and to mark completed items in both systems.

Example prompt: On a new external task creation, POST /todolists/{todolistId}/todos.json with content matching the external task title and store the returned to-do ID for two-way sync.

### AI Agent Project Status Reporter via Jentic

Run an AI agent that can answer 'what's the status on the Acme project' by calling Basecamp through Jentic. The agent searches Jentic for an intent like 'get to-dos in a project' or 'list recent messages', loads the matched operation, and executes the call with the OAuth2 access token held in your Jentic One instance. This avoids exposing user OAuth tokens to the LLM context.

Example prompt: Search Jentic for 'list to-dos in a basecamp list', execute GET /todolists/{todolistId}/todos.json, and reply with how many to-dos are open versus completed.

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| GET | /projects.json | List all projects |
| POST | /projects.json | Create a project |
| GET | /projects/{projectId}.json | Get a project |
| GET | /people.json | List all people |
| GET | /todosets/{todosetId}/todolists.json | List to-do lists |
| POST | /todolists/{todolistId}/todos.json | Create a to-do |
| GET | /todolists/{todolistId}/todos.json | List to-dos |

## Key resources

- **Projects** — Top-level project containers with member access controls
- **To-do Lists** — Grouped lists of to-dos within a project
- **To-dos** — Individual tasks belonging to a to-do list
- **Messages** — Project message board posts
- **Comments** — Threaded comments on messages and to-dos
- **People** — Account-level and project-level user records
- **Campfires** — Project chat rooms

## Why Jentic

- **Setup:** Wiring Basecamp by hand means running the OAuth 2.0 flow, calling launchpad.37signals.com/authorization.json afterwards to find which account the token can use, and then threading that account id into the base host (3.basecampapi.com/{accountId}) on every call yourself. Through Jentic you install once, import the Basecamp API from the API Directory, store the OAuth tokens once, and your agent calls it.
- **Permission scoping:** Basecamp puts the account id in the base path and the project id in the URL path (/projects/{projectId}.json), so a rule can pin your agent to one account and its projects: it reads and updates within that account and nothing else. You choose the operations it may call, so project creation is not included unless you add it.
- **Credential handling:** Your Basecamp OAuth access and refresh tokens are stored once, encrypted, by your own Jentic One instance and injected at execution time. They never enter the agent's prompt, logs, or context.
- **Discovery method:** Agents search Jentic by intent such as 'create a Basecamp project' or 'list to-dos in a list', and Jentic returns the matching Basecamp operation with its input schema, including the account id path parameter, so the agent calls the right endpoint without browsing the reference docs.

## Related APIs

- **Asana** — Project management with strong workflow automation features.
- **Trello** — Kanban-board task management API.
- **ClickUp** — All-in-one productivity platform spanning tasks, docs, and goals.

## FAQ

### Which OpenAPI specification does this Basecamp API page describe?

It describes a curated, agent-optimised Jentic specification covering 29 operations across 17 paths, built from Basecamp's own REST API reference. Basecamp publishes its own OpenAPI document too, at github.com/basecamp/basecamp-sdk, which covers a much larger surface. The Jentic variant is kept alongside it because it declares the account-scoped server URL (3.basecampapi.com/{accountId}) and the OAuth 2.0 authorisation and token endpoints, which the vendor's document does not carry. Get started with Jentic One, the self-hosted execution layer.

### What authentication does the Basecamp API use?

Basecamp uses OAuth 2.0 with per-user access tokens scoped to a Basecamp account. Each request must include the Authorization header with the bearer token, and the URL contains the account ID in the path. When called through Jentic, the OAuth tokens are stored encrypted in your Jentic One instance and injected at execution time.

### Can I create to-dos in a Basecamp project?

Yes. POST /todolists/{todolistId}/todos.json with the to-do content and optional assignees. The to-do list ID comes from listing to-do lists under a to-do set via /todosets/{todosetId}/todolists.json.

### What are the rate limits for the Basecamp API?

Basecamp runs several limits at once, for example separate GET and POST limits and per-second, per-hour and per-day limits, and it adjusts them dynamically. The vendor describes the first limit you commonly encounter as 50 requests per 10 second period per IP address. Exceeding a limit returns 429 Too Many Requests; consult the Retry-After response header for how many seconds to wait before retrying, and batch read calls (for example, list /people.json once and cache rather than re-fetching per request).

### How do I post a message to a Basecamp project through Jentic?

Install Jentic One, import the Basecamp API from the API Directory, then have your agent search for 'post a message to a basecamp project' and execute POST /message_boards/{messageBoardId}/messages.json with the message subject and content. Jentic injects the OAuth bearer token, calls Basecamp, and returns the created message record.

### Does the Basecamp API expose campfire chat history?

Yes. Campfires are modelled as chat resources: GET /chats.json lists the campfires visible to the current user, GET /chats/{chatId}.json returns one campfire, and GET /chats/{chatId}/lines.json returns its chat lines. Posting is supported too, with POST /chats/{chatId}/lines.json. Reads are scoped by the campfire ID rather than the project ID.

### Is there a Basecamp MCP server?

You do not need an MCP server to give your agent Basecamp. Jentic connects the API directly from the API Directory: import it, store your OAuth credential once in your self-hosted Jentic One instance, and your agent calls the 29 operations described here without loading another server's tool definitions into its context. Basecamp's own API reference points AI-agent users at Basecamp Skills and the Basecamp CLI. Either way, your rules decide which Basecamp operations the agent may call.

### Can I limit what my agent is allowed to do with the Basecamp API?

Yes. Because Jentic One is self-hosted, your own rules decide which Basecamp operations and credentials the agent may use. Since Basecamp puts the account ID in the base path and the project ID in the URL path (for example /projects/{projectId}.json), you can pin the agent to a single account and its projects so it only reads and updates to-dos, messages, comments, and campfires within that scope. You also choose the exact operations it may call, so destructive actions like creating projects via POST /projects.json are excluded unless you explicitly allow them.
