Complete Basecamp 4 REST API integration for project management, task tracking, kanban boards, messaging, scheduling, documents, and team coordination. Read for ANY Basecamp or project management work.
Resources
4Install
npx skillscat add cgk-platform/cgk/basecamp Install via the SkillsCat registry.
Basecamp Skill
Complete Basecamp 4 API integration. Covers projects, todos, messages, campfire, schedules, card tables (kanban), documents, people, comments, webhooks, check-ins, recordings, subscriptions, and boosts.
Quick Start
All scripts are in scripts/ and output JSON. Each module is standalone -- import basecamp_api for the shared client.
Environment Variables (per-profile .env)
BASECAMP_ACCOUNT_ID-- Numeric account ID from Basecamp URLBASECAMP_ACCESS_TOKEN-- OAuth 2.0 Bearer token (auto-refreshed via cron)BASECAMP_USER_AGENT-- Required by API (e.g., "openCLAW (admin@example.com)")BASECAMP_REFRESH_TOKEN-- OAuth refresh token (10-year expiry)BASECAMP_CLIENT_ID-- OAuth app client IDBASECAMP_CLIENT_SECRET-- OAuth app client secretBASECAMP_DEFAULT_PROJECT-- Default project ID (used when--projectis omitted)BASECAMP_DEFAULT_CARD_TABLE-- Default card table ID for quick board access
Usage Examples
# List all projects
python3 scripts/projects.py list
# Get a specific project
python3 scripts/projects.py get 12345
# Create a project
python3 scripts/projects.py create --name "Q1 Launch" --description "Launch campaign"
# List todos in a project
python3 scripts/todos.py list --project 12345 --todolist 67890
# Create a todo
python3 scripts/todos.py create --project 12345 --todolist 67890 --content "Design landing page" --due-on 2026-03-15
# Complete a todo
python3 scripts/todos.py complete --project 12345 --todo 11111
# Get card table (kanban board)
python3 scripts/card_table.py get --project 12345 --card-table 99999
# Create a card
python3 scripts/card_table.py create-card --project 12345 --column 88888 --title "New feature" --due-on 2026-04-01
# Move a card to a different column
python3 scripts/card_table.py move-card --project 12345 --card 77777 --column 66666
# Reorder columns on the board
python3 scripts/card_table.py move-column --project 12345 --card-table 99999 --source 11111 --target 22222 --position 1
# Add a checklist step to a card
python3 scripts/card_table.py add-step --project 12345 --card 77777 --title "Review copy" --due-on 2026-04-01
# Complete a step
python3 scripts/card_table.py complete-step --project 12345 --step 55555
# Add/remove on-hold section from a column
python3 scripts/card_table.py on-hold --project 12345 --column 88888
python3 scripts/card_table.py on-hold --project 12345 --column 88888 --remove
# Post a campfire message
python3 scripts/campfire.py post --project 12345 --campfire 12345 --content "Team standup starting!"
# Create a schedule entry
python3 scripts/schedule.py create --project 12345 --schedule 12345 --summary "Sprint Review" --starts-at 2026-03-10T14:00:00Z --ends-at 2026-03-10T15:00:00Z
# Search recordings
python3 scripts/recordings.py search --query "launch" --type Todo
# Add a comment
python3 scripts/comments.py create --project 12345 --recording 44444 --content "Looks good, ship it!"API Coverage
| Module | Operations |
|---|---|
| projects | list, get, create, update, trash |
| todos | list, get, create, update, complete, uncomplete, reposition |
| messages | list, get, create, update |
| campfire | list, get, post, delete |
| schedule | get, list-entries, create, update |
| card_table | get, create-column, update-column, set-column-color, list-cards, get-card, create-card, update-card, move-card, move-column, add-step, update-step, complete-step, reposition-step, on-hold |
| documents | list, get, create, update |
| people | list, list-project, get, me, update-access |
| comments | list, create, update |
| webhooks | list, get, create, update, destroy |
| checkins | get-questionnaire, list-questions, create-question, list-answers, create-answer, get-answer |
| attachments | upload, embed-html |
| recordings | search, archive, trash, restore |
| subscriptions | get, subscribe, unsubscribe, update |
| boosts | list, get, create, destroy |
Rate Limiting
Basecamp returns 429 with Retry-After header. The client auto-retries with exponential backoff (max 3 retries).
Pagination
All list endpoints support pagination via Link header (RFC 5988). Pass --all to auto-paginate.