Maton

Basecamp

Access the Basecamp 4 API with managed OAuth authentication. Manage projects, to-dos, messages, schedules, documents, and team collaboration.

Reference

Get Current User

GET /basecamp/my/profile.json

Response:

{
  "id": 51197030,
  "name": "Chris Kim",
  "email_address": "chris@example.com",
  "admin": true,
  "owner": true,
  "time_zone": "America/Los_Angeles",
  "avatar_url": "https://..."
}

List People

GET /basecamp/people.json

Response:

[
  {
    "id": 51197030,
    "name": "Chris Kim",
    "email_address": "chris@example.com",
    "admin": true,
    "owner": true,
    "employee": true,
    "time_zone": "America/Los_Angeles"
  }
]

Get Person

GET /basecamp/people/{person_id}.json

List Project Members

GET /basecamp/projects/{project_id}/people.json

List Projects

GET /basecamp/projects.json

Response:

[
  {
    "id": 46005636,
    "status": "active",
    "name": "Getting Started",
    "description": "Quickly get up to speed with everything Basecamp",
    "created_at": "2026-02-05T22:59:26.087Z",
    "url": "https://3.basecampapi.com/6153810/projects/46005636.json",
    "dock": [...]
  }
]

Get Project

GET /basecamp/projects/{project_id}.json

The project response includes a dock array with available tools (message_board, todoset, vault, chat, schedule, etc.). Each dock item has:

  • id: The tool's ID
  • name: Tool type (e.g., "todoset", "message_board")
  • enabled: Whether the tool is active
  • url: Direct URL to access the tool

Create Project

POST /basecamp/projects.json
Content-Type: application/json

{
  "name": "New Project",
  "description": "Project description"
}

Update Project

PUT /basecamp/projects/{project_id}.json
Content-Type: application/json

{
  "name": "Updated Project Name",
  "description": "Updated description"
}

Delete (Trash) Project

DELETE /basecamp/projects/{project_id}.json

Get Todoset

First, get the todoset ID from the project's dock:

GET /basecamp/buckets/{project_id}/todosets/{todoset_id}.json

List Todolists

GET /basecamp/buckets/{project_id}/todosets/{todoset_id}/todolists.json

Response:

[
  {
    "id": 9550474442,
    "title": "Basecamp essentials",
    "description": "",
    "completed": false,
    "completed_ratio": "0/5",
    "url": "https://..."
  }
]

Create Todolist

POST /basecamp/buckets/{project_id}/todosets/{todoset_id}/todolists.json
Content-Type: application/json

{
  "name": "New Todo List",
  "description": "List description"
}

Get Todolist

GET /basecamp/buckets/{project_id}/todolists/{todolist_id}.json

List Todos

GET /basecamp/buckets/{project_id}/todolists/{todolist_id}/todos.json

Response:

[
  {
    "id": 9550474446,
    "content": "Start here",
    "description": "",
    "completed": false,
    "due_on": null,
    "assignees": []
  }
]

Create Todo

POST /basecamp/buckets/{project_id}/todolists/{todolist_id}/todos.json
Content-Type: application/json

{
  "content": "New todo item",
  "description": "Todo description",
  "due_on": "2026-02-15",
  "assignee_ids": [51197030]
}

Response:

{
  "id": 9555973289,
  "content": "New todo item",
  "completed": false
}

Update Todo

PUT /basecamp/buckets/{project_id}/todos/{todo_id}.json
Content-Type: application/json

{
  "content": "Updated todo",
  "description": "Updated description"
}

Complete Todo

POST /basecamp/buckets/{project_id}/todos/{todo_id}/completion.json

Returns 204 on success.

Uncomplete Todo

DELETE /basecamp/buckets/{project_id}/todos/{todo_id}/completion.json

Get Message Board

GET /basecamp/buckets/{project_id}/message_boards/{message_board_id}.json

List Messages

GET /basecamp/buckets/{project_id}/message_boards/{message_board_id}/messages.json

Create Message

POST /basecamp/buckets/{project_id}/message_boards/{message_board_id}/messages.json
Content-Type: application/json

{
  "subject": "Message Subject",
  "content": "<p>Message body with HTML</p>",
  "category_id": 123
}

Get Message

GET /basecamp/buckets/{project_id}/messages/{message_id}.json

Update Message

PUT /basecamp/buckets/{project_id}/messages/{message_id}.json
Content-Type: application/json

{
  "subject": "Updated Subject",
  "content": "<p>Updated content</p>"
}

Get Schedule

GET /basecamp/buckets/{project_id}/schedules/{schedule_id}.json

List Schedule Entries

GET /basecamp/buckets/{project_id}/schedules/{schedule_id}/entries.json

Create Schedule Entry

POST /basecamp/buckets/{project_id}/schedules/{schedule_id}/entries.json
Content-Type: application/json

{
  "summary": "Team Meeting",
  "description": "Weekly sync",
  "starts_at": "2026-02-15T14:00:00Z",
  "ends_at": "2026-02-15T15:00:00Z",
  "all_day": false,
  "participant_ids": [51197030]
}

Update Schedule Entry

PUT /basecamp/buckets/{project_id}/schedule_entries/{entry_id}.json
Content-Type: application/json

{
  "summary": "Updated Meeting",
  "starts_at": "2026-02-15T15:00:00Z",
  "ends_at": "2026-02-15T16:00:00Z"
}

Get Vault

GET /basecamp/buckets/{project_id}/vaults/{vault_id}.json

List Documents in Vault

GET /basecamp/buckets/{project_id}/vaults/{vault_id}/documents.json

Create Document

POST /basecamp/buckets/{project_id}/vaults/{vault_id}/documents.json
Content-Type: application/json

{
  "title": "Document Title",
  "content": "<p>Document content with HTML</p>"
}

List Uploads in Vault

GET /basecamp/buckets/{project_id}/vaults/{vault_id}/uploads.json

List All Campfires

GET /basecamp/chats.json

Get Campfire

GET /basecamp/buckets/{project_id}/chats/{chat_id}.json

List Campfire Lines (Messages)

GET /basecamp/buckets/{project_id}/chats/{chat_id}/lines.json

Create Campfire Line

POST /basecamp/buckets/{project_id}/chats/{chat_id}/lines.json
Content-Type: application/json

{
  "content": "Hello from the API!"
}

List Comments on Recording

GET /basecamp/buckets/{project_id}/recordings/{recording_id}/comments.json

Create Comment

POST /basecamp/buckets/{project_id}/recordings/{recording_id}/comments.json
Content-Type: application/json

{
  "content": "<p>Comment text</p>"
}

Trash Recording

PUT /basecamp/buckets/{project_id}/recordings/{recording_id}/status/trashed.json

Archive Recording

PUT /basecamp/buckets/{project_id}/recordings/{recording_id}/status/archived.json

Unarchive Recording

PUT /basecamp/buckets/{project_id}/recordings/{recording_id}/status/active.json

List Templates

GET /basecamp/templates.json

Create Project from Template

POST /basecamp/templates/{template_id}/project_constructions.json
Content-Type: application/json

{
  "name": "New Project from Template",
  "description": "Description"
}

Resources

On this page