PROJECT MANAGEMENT · TASKS
To-do lists, message boards, and docs in the projects that person is on.
Each user connects their own account. Every call carries both identities — the agent and the person it is acting for — so the agent can never reach past what that individual can already do.
Tokens live in the vault and attach server-side at call time. The agent holds a session, not a secret, and revoking access does not mean rotating a key.
Who asked, which agent acted, which action ran, and the verdict that let it through — one audit trail across every integration, not one per vendor.
Each action is granted on its own. An agent allowed to read is not thereby allowed to write, and the scope beside each row is what the acting user must have connected for it to run at all.
basecamp_delete_by_accountid_account_logo_jsonWRITERemove the account logo. via DELETE /{accountId}/account/logo.json
basecamp_delete_by_accountid_boosts_by_boostidWRITEDelete a boost via DELETE /{accountId}/boosts/{boostId}
basecamp_delete_by_accountid_buckets_by_bucketid_card_tables_columns_by_columnid_on_hold_jsonWRITEDisable on-hold section in a column via DELETE /{accountId}/buckets/{bucketId}/card_tables/columns/{columnId}/on_hold.json
basecamp_delete_by_accountid_buckets_by_bucketid_card_tables_wormholes_by_wormholeidWRITEDelete a wormhole via DELETE /{accountId}/buckets/{bucketId}/card_tables/wormholes/{wormholeId}
basecamp_delete_by_accountid_buckets_by_bucketid_categories_by_typeidWRITEDelete a message type via DELETE /{accountId}/buckets/{bucketId}/categories/{typeId}
basecamp_delete_by_accountid_buckets_by_bucketid_chats_by_campfireid_integrations_by_chatbotidWRITEDelete a chatbot via DELETE /{accountId}/buckets/{bucketId}/chats/{campfireId}/integrations/{chatbotId}
basecamp_delete_by_accountid_card_tables_lists_by_columnid_subscription_jsonWRITEUnsubscribe from a card column (stop watching for changes) via DELETE /{accountId}/card_tables/lists/{columnId}/subscription.json
basecamp_delete_by_accountid_chats_by_campfireid_lines_by_lineidWRITEDelete a campfire line; allowed for the line's creator or an admin. via DELETE /{accountId}/chats/{campfireId}/lines/{lineId}
basecamp_delete_by_accountid_dock_tools_by_toolidWRITEDelete a tool (trash it) via DELETE /{accountId}/dock/tools/{toolId}
basecamp_delete_by_accountid_gauge_needles_by_needleidWRITEDestroy a gauge needle via DELETE /{accountId}/gauge_needles/{needleId}
basecamp_delete_by_accountid_lineup_markers_by_markeridWRITEDelete a lineup marker via DELETE /{accountId}/lineup/markers/{markerId}
basecamp_delete_by_accountid_my_priorities_by_recordingidWRITERemove a recording from Up Next (returns 204 No Content). via DELETE /{accountId}/my/priorities/{recordingId}
basecamp_delete_by_accountid_people_by_personid_out_of_office_jsonWRITEDisable out of office for a person. via DELETE /{accountId}/people/{personId}/out_of_office.json
basecamp_delete_by_accountid_projects_by_projectidWRITETrash a project (returns 204 No Content) via DELETE /{accountId}/projects/{projectId}
basecamp_delete_by_accountid_questions_by_questionid_pause_jsonWRITEResume a paused check-in question (resumes sending reminders) via DELETE /{accountId}/questions/{questionId}/pause.json
basecamp_delete_by_accountid_recordings_by_messageid_pin_jsonWRITEUnpin a message from the message board via DELETE /{accountId}/recordings/{messageId}/pin.json
basecamp_delete_by_accountid_recordings_by_recordingid_bookmark_jsonWRITERemove the current user's bookmark from a recording (returns 204 No Content). via DELETE /{accountId}/recordings/{recordingId}/bookmark.json
basecamp_delete_by_accountid_recordings_by_recordingid_spotlight_jsonWRITERemove a recording from the spotlight area. via DELETE /{accountId}/recordings/{recordingId}/spotlight.json
basecamp_delete_by_accountid_recordings_by_recordingid_subscription_jsonWRITEUnsubscribe the current user from a recording via DELETE /{accountId}/recordings/{recordingId}/subscription.json
basecamp_delete_by_accountid_recordings_by_toolid_position_jsonWRITEDisable a tool (hide it from the project dock) via DELETE /{accountId}/recordings/{toolId}/position.json
basecamp_delete_by_accountid_stacks_by_folderidWRITEDelete a folder and unpin its projects from the home screen (returns 204 No Content). via DELETE /{accountId}/stacks/{folderId}
basecamp_delete_by_accountid_templates_by_templateidWRITEDelete a template (trash it) via DELETE /{accountId}/templates/{templateId}
basecamp_delete_by_accountid_timesheet_entries_by_entryidWRITEPermanently delete a timesheet entry; answers 403 when the caller may not archive or trash it. via DELETE /{accountId}/timesheet_entries/{entryId}
basecamp_delete_by_accountid_todos_by_todoid_completion_jsonWRITEMark a todo as incomplete via DELETE /{accountId}/todos/{todoId}/completion.json
basecamp_delete_by_accountid_webhooks_by_webhookidWRITEDelete a webhook via DELETE /{accountId}/webhooks/{webhookId}
basecamp_get_by_accountid_account_jsonREADGet the account for the current access token via GET /{accountId}/account.json
basecamp_get_by_accountid_boosts_by_boostidREADGet a single boost via GET /{accountId}/boosts/{boostId}
basecamp_get_by_accountid_buckets_by_bucketid_categories_by_typeidREADGet a single message type by id via GET /{accountId}/buckets/{bucketId}/categories/{typeId}
basecamp_get_by_accountid_buckets_by_bucketid_categories_jsonREADList message types in a project **Pagination**: Uses Link header (RFC5988). via GET /{accountId}/buckets/{bucketId}/categories.json
basecamp_get_by_accountid_buckets_by_bucketid_chats_by_campfireid_integrations_by_chatbotidREADGet a chatbot by ID via GET /{accountId}/buckets/{bucketId}/chats/{campfireId}/integrations/{chatbotId}
basecamp_get_by_accountid_buckets_by_bucketid_chats_by_campfireid_integrations_jsonREADList all chatbots for a campfire **Pagination**: Uses Link header (RFC5988). via GET /{accountId}/buckets/{bucketId}/chats/{campfireId}/integrations.json
basecamp_get_by_accountid_buckets_by_bucketid_client_approvals_jsonREADList all client approvals in a project **Pagination**: Uses Link header (RFC5988). via GET /{accountId}/buckets/{bucketId}/client/approvals.json
basecamp_get_by_accountid_buckets_by_bucketid_client_correspondences_jsonREADList all client correspondences in a project **Pagination**: Uses Link header (RFC5988). via GET /{accountId}/buckets/{bucketId}/client/correspondences.json
basecamp_get_by_accountid_buckets_by_bucketid_client_recordings_by_recordingid_replies_by_replyidREADGet a single client reply by id via GET /{accountId}/buckets/{bucketId}/client/recordings/{recordingId}/replies/{replyId}
basecamp_get_by_accountid_buckets_by_bucketid_client_recordings_by_recordingid_replies_jsonREADList all client replies for a recording (correspondence or approval) **Pagination**: Uses Link header (RFC5988). via GET /{accountId}/buckets/{bucketId}/client/recordings/{recordingId}/replies.json
basecamp_get_by_accountid_buckets_by_bucketid_webhooks_jsonREADList all webhooks for a project **Pagination**: Uses Link header (RFC5988). via GET /{accountId}/buckets/{bucketId}/webhooks.json
basecamp_get_by_accountid_calendars_by_calendaridREADGet a calendar by its bucket id. via GET /{accountId}/calendars/{calendarId}
basecamp_get_by_accountid_card_tables_by_cardtableidREADGet a card table by ID via GET /{accountId}/card_tables/{cardTableId}
basecamp_get_by_accountid_card_tables_cards_by_cardidREADGet a card by ID via GET /{accountId}/card_tables/cards/{cardId}
basecamp_get_by_accountid_card_tables_columns_by_columnidREADGet a card column by ID via GET /{accountId}/card_tables/columns/{columnId}
basecamp_get_by_accountid_card_tables_lists_by_columnid_cards_jsonREADList cards in a column **Pagination**: Uses Link header (RFC5988). via GET /{accountId}/card_tables/lists/{columnId}/cards.json
basecamp_get_by_accountid_card_tables_steps_by_stepidREADGet a step by ID via GET /{accountId}/card_tables/steps/{stepId}
basecamp_get_by_accountid_cards_completed_jsonREADCompleted cards across all accessible projects, grouped by project (paginated). via GET /{accountId}/cards/completed.json
basecamp_get_by_accountid_cards_no_due_date_jsonREADOpen cards with no due date across all accessible projects, grouped by project (paginated). via GET /{accountId}/cards/no_due_date.json
basecamp_get_by_accountid_cards_not_now_jsonREADCards parked in a project's "Not now" column across all accessible projects, grouped by project (paginated). via GET /{accountId}/cards/not_now.json
basecamp_get_by_accountid_cards_open_jsonREADIncomplete cards in active columns across all accessible projects, grouped by project (paginated). via GET /{accountId}/cards/open.json
basecamp_get_by_accountid_cards_overdue_jsonREADGet every overdue card across all accessible projects, oldest-due-date-first. via GET /{accountId}/cards/overdue.json
basecamp_get_by_accountid_cards_unassigned_jsonREADOpen, unassigned cards across all accessible projects, grouped by project (paginated). via GET /{accountId}/cards/unassigned.json
basecamp_get_by_accountid_chats_by_campfireidREADGet a campfire by ID via GET /{accountId}/chats/{campfireId}
basecamp_get_by_accountid_chats_by_campfireid_lines_by_lineidREADGet a campfire line by ID via GET /{accountId}/chats/{campfireId}/lines/{lineId}
basecamp_get_by_accountid_chats_by_campfireid_lines_jsonREADList all lines (messages) in a campfire **Pagination**: Uses Link header (RFC5988). via GET /{accountId}/chats/{campfireId}/lines.json
basecamp_get_by_accountid_chats_by_campfireid_uploads_jsonREADList uploaded files in a campfire **Pagination**: Uses Link header (RFC5988). via GET /{accountId}/chats/{campfireId}/uploads.json
basecamp_get_by_accountid_chats_jsonREADList all campfires across the account **Pagination**: Uses Link header (RFC5988). via GET /{accountId}/chats.json
basecamp_get_by_accountid_checkins_jsonREADGet every automatic check-in answer across all accessible projects, newest-first. via GET /{accountId}/checkins.json
basecamp_get_by_accountid_circles_people_jsonREADList all account users who can be pinged **Pagination**: Uses Link header (RFC5988). via GET /{accountId}/circles/people.json
basecamp_get_by_accountid_client_approvals_by_approvalidREADGet a single client approval by id via GET /{accountId}/client/approvals/{approvalId}
basecamp_get_by_accountid_client_correspondences_by_correspondenceidREADGet a single client correspondence by id via GET /{accountId}/client/correspondences/{correspondenceId}
basecamp_get_by_accountid_cloud_files_by_cloudfileidREADGet a single cloud file by id via GET /{accountId}/cloud_files/{cloudFileId}
basecamp_get_by_accountid_comments_by_commentidREADGet a single comment by id via GET /{accountId}/comments/{commentId}
basecamp_get_by_accountid_comments_jsonREADGet every comment across all accessible projects, newest-first (paginated). via GET /{accountId}/comments.json
basecamp_get_by_accountid_dock_tools_by_toolidREADGet a dock tool by id via GET /{accountId}/dock/tools/{toolId}
basecamp_get_by_accountid_documents_by_documentidREADGet a single document by id via GET /{accountId}/documents/{documentId}
basecamp_get_by_accountid_files_jsonREADGet every file recording across all accessible projects, newest-first (paginated). via GET /{accountId}/files.json
basecamp_get_by_accountid_forwards_jsonREADGet every inbox forward across all accessible projects, newest-first (paginated). via GET /{accountId}/forwards.json
basecamp_get_by_accountid_gauge_needles_by_needleidREADGet a gauge needle by ID via GET /{accountId}/gauge_needles/{needleId}
basecamp_get_by_accountid_google_documents_by_googledocumentidREADGet a single Google document by id via GET /{accountId}/google_documents/{googleDocumentId}
basecamp_get_by_accountid_inbox_forwards_by_forwardidREADGet a forward by ID via GET /{accountId}/inbox_forwards/{forwardId}
basecamp_get_by_accountid_inbox_forwards_by_forwardid_replies_by_replyidREADGet a forward reply by ID via GET /{accountId}/inbox_forwards/{forwardId}/replies/{replyId}
basecamp_get_by_accountid_inbox_forwards_by_forwardid_replies_jsonREADList all replies to a forward **Pagination**: Uses Link header (RFC5988). via GET /{accountId}/inbox_forwards/{forwardId}/replies.json
basecamp_get_by_accountid_inboxes_by_inboxidREADGet an inbox by ID via GET /{accountId}/inboxes/{inboxId}
basecamp_get_by_accountid_inboxes_by_inboxid_inbox_forwards_jsonREADList all forwards in an inbox **Pagination**: Uses Link header (RFC5988). via GET /{accountId}/inboxes/{inboxId}/inbox_forwards.json
basecamp_get_by_accountid_lineup_markers_jsonREADList all lineup markers for the account via GET /{accountId}/lineup/markers.json
basecamp_get_by_accountid_message_boards_by_boardidREADGet a message board via GET /{accountId}/message_boards/{boardId}
basecamp_get_by_accountid_message_boards_by_boardid_messages_jsonREADList messages on a message board **Pagination**: Uses Link header (RFC5988). via GET /{accountId}/message_boards/{boardId}/messages.json
basecamp_get_by_accountid_messages_by_messageidREADGet a single message by id via GET /{accountId}/messages/{messageId}
basecamp_get_by_accountid_messages_jsonREADGet every message across all accessible projects, newest-first (paginated). via GET /{accountId}/messages.json
basecamp_get_by_accountid_my_assignments_completed_jsonREADGet the current user's completed assignments. via GET /{accountId}/my/assignments/completed.json
basecamp_get_by_accountid_my_assignments_due_jsonREADGet the current user's assignments filtered by due date scope. via GET /{accountId}/my/assignments/due.json
basecamp_get_by_accountid_my_assignments_jsonREADGet the current user's active assignments grouped into priorities and non_priorities. via GET /{accountId}/my/assignments.json
basecamp_get_by_accountid_my_bookmarks_jsonREADList the current user's bookmarks, most recently bookmarked first (paginated). via GET /{accountId}/my/bookmarks.json
basecamp_get_by_accountid_my_drafts_jsonREADList the current user's drafts across their active projects, most recently updated first (paginated, capped at 250 like /my/assignments). via GET /{accountId}/my/drafts.json
basecamp_get_by_accountid_my_notes_jsonREADGet the authenticated user's note — a per-person notebook singleton at /my/notes.json. via GET /{accountId}/my/notes.json
basecamp_get_by_accountid_my_preferences_jsonREADGet the current user's preferences via GET /{accountId}/my/preferences.json
basecamp_get_by_accountid_my_profile_jsonREADGet the current authenticated user's profile via GET /{accountId}/my/profile.json
basecamp_get_by_accountid_my_question_reminders_jsonREADGet pending check-in reminders for the current user Returns questions that are pending a response from the authenticated user. via GET /{accountId}/my/question_reminders.json
basecamp_get_by_accountid_my_readings_bubble_ups_jsonREADGet the current user's current and scheduled bubble-ups (paginated, 50 per page). via GET /{accountId}/my/readings/bubble_ups.json
basecamp_get_by_accountid_my_readings_jsonREADGet the current user's notification inbox (the "Hey!" menu). via GET /{accountId}/my/readings.json
basecamp_get_by_accountid_my_recent_projects_jsonREADList the projects the current user has most recently visited, most recent visit first. via GET /{accountId}/my/recent_projects.json
basecamp_get_by_accountid_people_by_personidREADGet a person by ID via GET /{accountId}/people/{personId}
basecamp_get_by_accountid_people_by_personid_out_of_office_jsonREADGet the out of office status for a person via GET /{accountId}/people/{personId}/out_of_office.json
basecamp_get_by_accountid_people_jsonREADList all people visible to the current user **Pagination**: Uses Link header (RFC5988). via GET /{accountId}/people.json
basecamp_get_by_accountid_projects_by_projectidREADGet a single project by id via GET /{accountId}/projects/{projectId}
basecamp_get_by_accountid_projects_by_projectid_gauge_needles_jsonREADList gauge needles for a project, ordered newest first. via GET /{accountId}/projects/{projectId}/gauge/needles.json
basecamp_get_by_accountid_projects_by_projectid_people_jsonREADList all active people on a project **Pagination**: Uses Link header (RFC5988). via GET /{accountId}/projects/{projectId}/people.json
basecamp_get_by_accountid_projects_by_projectid_timeline_jsonREADGet project timeline via GET /{accountId}/projects/{projectId}/timeline.json
basecamp_get_by_accountid_projects_by_projectid_timesheet_jsonREADGet timesheet for a specific project via GET /{accountId}/projects/{projectId}/timesheet.json
basecamp_get_by_accountid_projects_jsonREADList projects (active by default; optionally archived/trashed) **Pagination**: Uses Link header (RFC5988). via GET /{accountId}/projects.json
basecamp_get_by_accountid_projects_recordings_jsonREADList recordings of a given type across projects **Pagination**: Uses Link header (RFC5988). via GET /{accountId}/projects/recordings.json
basecamp_get_by_accountid_question_answers_by_answeridREADGet a single answer by id via GET /{accountId}/question_answers/{answerId}
basecamp_get_by_accountid_questionnaires_by_questionnaireidREADGet a questionnaire (automatic check-ins container) by id via GET /{accountId}/questionnaires/{questionnaireId}
basecamp_get_by_accountid_questionnaires_by_questionnaireid_questions_jsonREADList all questions in a questionnaire **Pagination**: Uses Link header (RFC5988). via GET /{accountId}/questionnaires/{questionnaireId}/questions.json
basecamp_get_by_accountid_questions_by_questionidREADGet a single question by id via GET /{accountId}/questions/{questionId}
basecamp_get_by_accountid_questions_by_questionid_answers_by_by_personidREADGet all answers from a specific person for a question **Pagination**: Uses Link header (RFC5988). via GET /{accountId}/questions/{questionId}/answers/by/{personId}
basecamp_get_by_accountid_questions_by_questionid_answers_by_jsonREADList all people who have answered a question (answerers) **Pagination**: Uses Link header (RFC5988). via GET /{accountId}/questions/{questionId}/answers/by.json
basecamp_get_by_accountid_questions_by_questionid_answers_jsonREADList all answers for a question **Pagination**: Uses Link header (RFC5988). via GET /{accountId}/questions/{questionId}/answers.json
basecamp_get_by_accountid_recordings_by_recordingid_bookmark_jsonREADReport whether the current user has bookmarked the recording. via GET /{accountId}/recordings/{recordingId}/bookmark.json
basecamp_get_by_accountid_recordings_by_recordingid_boosts_jsonREADList boosts on a recording via GET /{accountId}/recordings/{recordingId}/boosts.json
basecamp_get_by_accountid_recordings_by_recordingid_comments_jsonREADList comments on a recording **Pagination**: Uses Link header (RFC5988). via GET /{accountId}/recordings/{recordingId}/comments.json
basecamp_get_by_accountid_recordings_by_recordingid_events_by_eventid_boosts_jsonREADList boosts on a specific event within a recording via GET /{accountId}/recordings/{recordingId}/events/{eventId}/boosts.json
basecamp_get_by_accountid_recordings_by_recordingid_events_jsonREADList all events for a recording **Pagination**: Uses Link header (RFC5988). via GET /{accountId}/recordings/{recordingId}/events.json
basecamp_get_by_accountid_recordings_by_recordingid_subscription_jsonREADGet subscription information for a recording via GET /{accountId}/recordings/{recordingId}/subscription.json
basecamp_get_by_accountid_recordings_by_recordingid_timesheet_jsonREADGet timesheet for a specific recording via GET /{accountId}/recordings/{recordingId}/timesheet.json
basecamp_get_by_accountid_reports_gauges_jsonREADList gauges across all projects the authenticated user has access to. via GET /{accountId}/reports/gauges.json
basecamp_get_by_accountid_reports_progress_jsonREADGet account-wide activity feed (progress report) via GET /{accountId}/reports/progress.json
basecamp_get_by_accountid_reports_schedules_upcoming_jsonREADGet upcoming schedule entries and assignable items within a date window. via GET /{accountId}/reports/schedules/upcoming.json
basecamp_get_by_accountid_reports_timesheet_jsonREADGet account-wide timesheet report via GET /{accountId}/reports/timesheet.json
basecamp_get_by_accountid_reports_todos_assigned_by_personidREADGet todos assigned to a specific person via GET /{accountId}/reports/todos/assigned/{personId}
basecamp_get_by_accountid_reports_todos_assigned_jsonREADList people who can be assigned todos via GET /{accountId}/reports/todos/assigned.json
basecamp_get_by_accountid_reports_todos_overdue_jsonREADGet overdue todos grouped by lateness via GET /{accountId}/reports/todos/overdue.json
basecamp_get_by_accountid_reports_users_progress_by_personid_jsonREADGet a person's activity timeline via GET /{accountId}/reports/users/progress/{personId}.json
basecamp_get_by_accountid_schedule_entries_by_entryidREADGet a single schedule entry by id. via GET /{accountId}/schedule_entries/{entryId}
basecamp_get_by_accountid_schedule_entries_by_entryid_occurrences_by_dateREADGet a specific occurrence of a recurring schedule entry via GET /{accountId}/schedule_entries/{entryId}/occurrences/{date}
basecamp_get_by_accountid_schedules_by_scheduleidREADGet a schedule via GET /{accountId}/schedules/{scheduleId}
basecamp_get_by_accountid_schedules_by_scheduleid_entries_jsonREADList entries on a schedule **Pagination**: Uses Link header (RFC5988). via GET /{accountId}/schedules/{scheduleId}/entries.json
basecamp_get_by_accountid_search_jsonREADSearch for content across the account via GET /{accountId}/search.json
basecamp_get_by_accountid_searches_metadata_jsonREADGet search metadata (available filter options) via GET /{accountId}/searches/metadata.json
basecamp_get_by_accountid_stacks_by_folderidREADGet one folder, with the projects grouped inside it expanded under `projects`. via GET /{accountId}/stacks/{folderId}
basecamp_get_by_accountid_stacks_jsonREADList the authenticated user's folders in home-screen order. via GET /{accountId}/stacks.json
basecamp_get_by_accountid_templates_by_templateidREADGet a single template by id via GET /{accountId}/templates/{templateId}
basecamp_get_by_accountid_templates_by_templateid_project_constructions_by_constructionidREADGet the status of a project construction via GET /{accountId}/templates/{templateId}/project_constructions/{constructionId}
basecamp_get_by_accountid_templates_jsonREADList all templates visible to the current user **Pagination**: Uses Link header (RFC5988). via GET /{accountId}/templates.json
basecamp_get_by_accountid_timesheet_entries_by_entryidREADGet a single timesheet entry via GET /{accountId}/timesheet_entries/{entryId}
basecamp_get_by_accountid_todolists_by_idREADGet a single todolist or todolist group by id The endpoint is polymorphic, but it answers with one shape: BC3 has no group model, so both… via GET /{accountId}/todolists/{id}
basecamp_get_by_accountid_todolists_by_todolistid_groups_jsonREADList groups in a todolist **Pagination**: Uses Link header (RFC5988). via GET /{accountId}/todolists/{todolistId}/groups.json
basecamp_get_by_accountid_todolists_by_todolistid_todos_jsonREADList todos in a todolist **Pagination**: Uses Link header (RFC5988). via GET /{accountId}/todolists/{todolistId}/todos.json
basecamp_get_by_accountid_todos_by_todoidREADGet a single todo by id via GET /{accountId}/todos/{todoId}
basecamp_get_by_accountid_todos_completed_jsonREADCompleted to-dos across all accessible projects, grouped by project (paginated). via GET /{accountId}/todos/completed.json
basecamp_get_by_accountid_todos_no_due_date_jsonREADOpen to-dos with no due date across all accessible projects, grouped by project (paginated). via GET /{accountId}/todos/no_due_date.json
basecamp_get_by_accountid_todos_open_jsonREADActive, incomplete to-dos across all accessible projects, grouped by project (paginated). via GET /{accountId}/todos/open.json
basecamp_get_by_accountid_todos_overdue_jsonREADGet every overdue to-do across all accessible projects, oldest-due-date-first. via GET /{accountId}/todos/overdue.json
basecamp_get_by_accountid_todos_unassigned_jsonREADOpen, unassigned to-dos across all accessible projects, grouped by project (paginated). via GET /{accountId}/todos/unassigned.json
basecamp_get_by_accountid_todosets_by_todosetidREADGet a todoset (container for todolists in a project) via GET /{accountId}/todosets/{todosetId}
basecamp_get_by_accountid_todosets_by_todosetid_hill_jsonREADGet the hill chart for a todoset via GET /{accountId}/todosets/{todosetId}/hill.json
basecamp_get_by_accountid_todosets_by_todosetid_todolists_jsonREADList todolists in a todoset **Pagination**: Uses Link header (RFC5988). via GET /{accountId}/todosets/{todosetId}/todolists.json
basecamp_get_by_accountid_uploads_by_uploadidREADGet a single upload by id via GET /{accountId}/uploads/{uploadId}
basecamp_get_by_accountid_uploads_by_uploadid_versions_jsonREADList versions of an upload **Pagination**: Uses Link header (RFC5988). via GET /{accountId}/uploads/{uploadId}/versions.json
basecamp_get_by_accountid_vaults_by_vaultidREADGet a single vault by id via GET /{accountId}/vaults/{vaultId}
basecamp_get_by_accountid_vaults_by_vaultid_documents_jsonREADList documents in a vault **Pagination**: Uses Link header (RFC5988). via GET /{accountId}/vaults/{vaultId}/documents.json
basecamp_get_by_accountid_vaults_by_vaultid_uploads_jsonREADList uploads in a vault **Pagination**: Uses Link header (RFC5988). via GET /{accountId}/vaults/{vaultId}/uploads.json
basecamp_get_by_accountid_vaults_by_vaultid_vaults_jsonREADList vaults (subfolders) in a vault **Pagination**: Uses Link header (RFC5988). via GET /{accountId}/vaults/{vaultId}/vaults.json
basecamp_get_by_accountid_webhooks_by_webhookidREADGet a single webhook by id via GET /{accountId}/webhooks/{webhookId}
basecamp_post_by_accountid_buckets_by_bucketid_card_tables_by_cardtableid_wormholes_jsonWRITECreate a wormhole linking this card table to a column on another card table. via POST /{accountId}/buckets/{bucketId}/card_tables/{cardTableId}/wormholes.json
basecamp_post_by_accountid_buckets_by_bucketid_card_tables_columns_by_columnid_on_hold_jsonWRITEEnable on-hold section in a column via POST /{accountId}/buckets/{bucketId}/card_tables/columns/{columnId}/on_hold.json
basecamp_post_by_accountid_buckets_by_bucketid_categories_jsonWRITECreate a new message type in a project via POST /{accountId}/buckets/{bucketId}/categories.json
basecamp_post_by_accountid_buckets_by_bucketid_chats_by_campfireid_integrations_jsonWRITECreate a new chatbot for a campfire via POST /{accountId}/buckets/{bucketId}/chats/{campfireId}/integrations.json
basecamp_post_by_accountid_buckets_by_bucketid_dock_tools_jsonWRITECreate a tool in a project dock via POST /{accountId}/buckets/{bucketId}/dock/tools.json
basecamp_post_by_accountid_buckets_by_bucketid_todosets_by_todosetid_todos_jsonWRITECreate a to-do directly under a project's to-do set, outside any to-do list. via POST /{accountId}/buckets/{bucketId}/todosets/{todosetId}/todos.json
basecamp_post_by_accountid_buckets_by_bucketid_vaults_by_vaultid_cloud_files_jsonWRITECreate a new cloud file in a vault. via POST /{accountId}/buckets/{bucketId}/vaults/{vaultId}/cloud_files.json
basecamp_post_by_accountid_buckets_by_bucketid_vaults_by_vaultid_google_documents_jsonWRITECreate a new Google document in a vault. via POST /{accountId}/buckets/{bucketId}/vaults/{vaultId}/google_documents.json
basecamp_post_by_accountid_buckets_by_bucketid_webhooks_jsonWRITECreate a new webhook for a project via POST /{accountId}/buckets/{bucketId}/webhooks.json
basecamp_post_by_accountid_card_tables_by_cardtableid_columns_jsonWRITECreate a column in a card table via POST /{accountId}/card_tables/{cardTableId}/columns.json
basecamp_post_by_accountid_card_tables_by_cardtableid_moves_jsonWRITEMove a column within a card table via POST /{accountId}/card_tables/{cardTableId}/moves.json
basecamp_post_by_accountid_card_tables_cards_by_cardid_moves_jsonWRITEMove a card to a different column via POST /{accountId}/card_tables/cards/{cardId}/moves.json
basecamp_post_by_accountid_card_tables_cards_by_cardid_positions_jsonWRITEReposition a step within a card via POST /{accountId}/card_tables/cards/{cardId}/positions.json
basecamp_post_by_accountid_card_tables_cards_by_cardid_steps_jsonWRITECreate a step on a card via POST /{accountId}/card_tables/cards/{cardId}/steps.json
basecamp_post_by_accountid_card_tables_lists_by_columnid_cards_jsonWRITECreate a card in a column via POST /{accountId}/card_tables/lists/{columnId}/cards.json
basecamp_post_by_accountid_card_tables_lists_by_columnid_subscription_jsonWRITESubscribe to a card column (watch for changes) via POST /{accountId}/card_tables/lists/{columnId}/subscription.json
basecamp_post_by_accountid_chats_by_campfireid_lines_jsonWRITECreate a new line (message) in a campfire via POST /{accountId}/chats/{campfireId}/lines.json
basecamp_post_by_accountid_lineup_markers_jsonWRITECreate a new lineup marker via POST /{accountId}/lineup/markers.json
basecamp_post_by_accountid_message_boards_by_boardid_messages_jsonWRITECreate a new message on a message board via POST /{accountId}/message_boards/{boardId}/messages.json
basecamp_post_by_accountid_my_priorities_jsonWRITEAdd a recording to Up Next — the current user's ordered list of prioritized assignments (the priorities returned by GetMyAssignments). via POST /{accountId}/my/priorities.json
basecamp_post_by_accountid_my_priority_moves_jsonWRITEMove an already-prioritized recording to a new 1-based position in Up Next (returns 204 No Content). via POST /{accountId}/my/priority_moves.json
basecamp_post_by_accountid_people_by_personid_out_of_office_jsonWRITEEnable or replace out of office for a person. via POST /{accountId}/people/{personId}/out_of_office.json
basecamp_post_by_accountid_projects_by_projectid_gauge_needles_jsonWRITECreate a gauge needle (progress update) for a project via POST /{accountId}/projects/{projectId}/gauge/needles.json
basecamp_post_by_accountid_projects_by_projectid_recent_visit_jsonWRITERecord that the current user visited a project, moving it to the front of ListRecentProjects (returns 204 No Content). via POST /{accountId}/projects/{projectId}/recent_visit.json
basecamp_post_by_accountid_projects_jsonWRITECreate a new project via POST /{accountId}/projects.json
basecamp_post_by_accountid_questionnaires_by_questionnaireid_questions_jsonWRITECreate a new question in a questionnaire via POST /{accountId}/questionnaires/{questionnaireId}/questions.json
basecamp_post_by_accountid_questions_by_questionid_answers_jsonWRITECreate a new answer for a question via POST /{accountId}/questions/{questionId}/answers.json
basecamp_post_by_accountid_questions_by_questionid_pause_jsonWRITEPause a check-in question (stops sending reminders) via POST /{accountId}/questions/{questionId}/pause.json
basecamp_post_by_accountid_recordings_by_messageid_pin_jsonWRITEPin a message to the top of the message board via POST /{accountId}/recordings/{messageId}/pin.json
basecamp_post_by_accountid_recordings_by_recordingid_bookmark_jsonWRITEBookmark a recording for the current user. via POST /{accountId}/recordings/{recordingId}/bookmark.json
basecamp_post_by_accountid_recordings_by_recordingid_boosts_jsonWRITECreate a boost on a recording via POST /{accountId}/recordings/{recordingId}/boosts.json
basecamp_post_by_accountid_recordings_by_recordingid_comments_jsonWRITECreate a new comment on a recording via POST /{accountId}/recordings/{recordingId}/comments.json
basecamp_post_by_accountid_recordings_by_recordingid_events_by_eventid_boosts_jsonWRITECreate a boost on a specific event within a recording via POST /{accountId}/recordings/{recordingId}/events/{eventId}/boosts.json
basecamp_post_by_accountid_recordings_by_recordingid_spotlight_jsonWRITEPut a recording's card in the spotlight area on its project or template home page. via POST /{accountId}/recordings/{recordingId}/spotlight.json
basecamp_post_by_accountid_recordings_by_recordingid_subscription_jsonWRITESubscribe the current user to a recording via POST /{accountId}/recordings/{recordingId}/subscription.json
basecamp_post_by_accountid_recordings_by_recordingid_timesheet_entries_jsonWRITECreate a timesheet entry on a recording via POST /{accountId}/recordings/{recordingId}/timesheet/entries.json
basecamp_post_by_accountid_recordings_by_toolid_position_jsonWRITEEnable a tool (show it on the project dock) via POST /{accountId}/recordings/{toolId}/position.json
basecamp_post_by_accountid_schedules_by_scheduleid_entries_jsonWRITECreate a new schedule entry via POST /{accountId}/schedules/{scheduleId}/entries.json
basecamp_post_by_accountid_stacks_jsonWRITECreate a folder for the authenticated user and file the given projects into it. via POST /{accountId}/stacks.json
basecamp_post_by_accountid_templates_by_templateid_project_constructions_jsonWRITECreate a project from a template (asynchronous) via POST /{accountId}/templates/{templateId}/project_constructions.json
basecamp_post_by_accountid_templates_jsonWRITECreate a new template via POST /{accountId}/templates.json
basecamp_post_by_accountid_todolists_by_todolistid_groups_jsonWRITECreate a new group in a todolist via POST /{accountId}/todolists/{todolistId}/groups.json
basecamp_post_by_accountid_todolists_by_todolistid_todos_jsonWRITECreate a new todo in a todolist via POST /{accountId}/todolists/{todolistId}/todos.json
basecamp_post_by_accountid_todos_by_todoid_completion_jsonWRITEMark a todo as complete via POST /{accountId}/todos/{todoId}/completion.json
basecamp_post_by_accountid_todosets_by_todosetid_todolists_jsonWRITECreate a new todolist in a todoset via POST /{accountId}/todosets/{todosetId}/todolists.json
basecamp_post_by_accountid_uploads_by_uploadid_versions_jsonWRITEReplace an upload's file with a new version The recording keeps its id, its URL and its comments; the previous file becomes a past version. via POST /{accountId}/uploads/{uploadId}/versions.json
basecamp_post_by_accountid_vaults_by_vaultid_documents_jsonWRITECreate a new document in a vault via POST /{accountId}/vaults/{vaultId}/documents.json
basecamp_post_by_accountid_vaults_by_vaultid_uploads_jsonWRITECreate a new upload in a vault via POST /{accountId}/vaults/{vaultId}/uploads.json
basecamp_post_by_accountid_vaults_by_vaultid_vaults_jsonWRITECreate a new vault (subfolder) in a vault via POST /{accountId}/vaults/{vaultId}/vaults.json
basecamp_put_by_accountid_account_name_jsonWRITERename the current account. via PUT /{accountId}/account/name.json
basecamp_put_by_accountid_buckets_by_bucketid_card_tables_columns_by_columnid_color_jsonWRITESet the color of a column via PUT /{accountId}/buckets/{bucketId}/card_tables/columns/{columnId}/color.json
basecamp_put_by_accountid_buckets_by_bucketid_card_tables_wormholes_by_wormholeidWRITEUpdate a wormhole's destination column via PUT /{accountId}/buckets/{bucketId}/card_tables/wormholes/{wormholeId}
basecamp_put_by_accountid_buckets_by_bucketid_categories_by_typeidWRITEUpdate an existing message type via PUT /{accountId}/buckets/{bucketId}/categories/{typeId}
basecamp_put_by_accountid_buckets_by_bucketid_chats_by_campfireid_integrations_by_chatbotidWRITEUpdate an existing chatbot via PUT /{accountId}/buckets/{bucketId}/chats/{campfireId}/integrations/{chatbotId}
basecamp_put_by_accountid_calendars_by_calendaridWRITEUpdate a calendar's display color. via PUT /{accountId}/calendars/{calendarId}
basecamp_put_by_accountid_card_tables_cards_by_cardidWRITEUpdate an existing card via PUT /{accountId}/card_tables/cards/{cardId}
basecamp_put_by_accountid_card_tables_columns_by_columnidWRITEUpdate an existing column via PUT /{accountId}/card_tables/columns/{columnId}
basecamp_put_by_accountid_card_tables_steps_by_stepidWRITEUpdate an existing step via PUT /{accountId}/card_tables/steps/{stepId}
basecamp_put_by_accountid_card_tables_steps_by_stepid_completions_jsonWRITESet card step completion status (PUT with completion: "on" to complete, "" to uncomplete) via PUT /{accountId}/card_tables/steps/{stepId}/completions.json
basecamp_put_by_accountid_chats_by_campfireid_lines_by_lineidWRITEUpdate an existing campfire line; the content is always treated as rich text (HTML). via PUT /{accountId}/chats/{campfireId}/lines/{lineId}
basecamp_put_by_accountid_cloud_files_by_cloudfileidWRITEReplace a cloud file with a new complete representation. via PUT /{accountId}/cloud_files/{cloudFileId}
basecamp_put_by_accountid_comments_by_commentidWRITEUpdate an existing comment via PUT /{accountId}/comments/{commentId}
basecamp_put_by_accountid_dock_tools_by_toolidWRITEUpdate (rename) an existing tool via PUT /{accountId}/dock/tools/{toolId}
basecamp_put_by_accountid_documents_by_documentidWRITEReplace a document with a new complete representation. via PUT /{accountId}/documents/{documentId}
basecamp_put_by_accountid_gauge_needles_by_needleidWRITEUpdate a gauge needle's description. via PUT /{accountId}/gauge_needles/{needleId}
basecamp_put_by_accountid_google_documents_by_googledocumentidWRITEReplace a Google document with a new complete representation. via PUT /{accountId}/google_documents/{googleDocumentId}
basecamp_put_by_accountid_lineup_markers_by_markeridWRITEUpdate an existing lineup marker via PUT /{accountId}/lineup/markers/{markerId}
basecamp_put_by_accountid_messages_by_messageidWRITEUpdate an existing message via PUT /{accountId}/messages/{messageId}
basecamp_put_by_accountid_my_notes_jsonWRITEReplace the note's content, recording a new revision server-side. via PUT /{accountId}/my/notes.json
basecamp_put_by_accountid_my_preferences_jsonWRITEUpdate the current user's preferences. via PUT /{accountId}/my/preferences.json
basecamp_put_by_accountid_my_profile_jsonWRITEUpdate the current authenticated user's profile (returns 204 No Content) via PUT /{accountId}/my/profile.json
basecamp_put_by_accountid_my_unreads_jsonWRITEMark specified items as read via PUT /{accountId}/my/unreads.json
basecamp_put_by_accountid_projects_by_projectidWRITEUpdate an existing project via PUT /{accountId}/projects/{projectId}
basecamp_put_by_accountid_projects_by_projectid_gauge_jsonWRITEEnable or disable the gauge for a project. via PUT /{accountId}/projects/{projectId}/gauge.json
basecamp_put_by_accountid_projects_by_projectid_people_users_jsonWRITEUpdate project access (grant/revoke/create people) via PUT /{accountId}/projects/{projectId}/people/users.json
basecamp_put_by_accountid_projects_by_projectid_status_active_jsonWRITERestore a project to active status from trash as well as from the archive (returns 204 No Content). via PUT /{accountId}/projects/{projectId}/status/active.json
basecamp_put_by_accountid_projects_by_projectid_status_archived_jsonWRITEArchive a project, removing it from the active project list (returns 204 No Content). via PUT /{accountId}/projects/{projectId}/status/archived.json
basecamp_put_by_accountid_question_answers_by_answeridWRITEUpdate an existing answer via PUT /{accountId}/question_answers/{answerId}
basecamp_put_by_accountid_questions_by_questionidWRITEUpdate an existing question via PUT /{accountId}/questions/{questionId}
basecamp_put_by_accountid_questions_by_questionid_notification_settings_jsonWRITEUpdate notification settings for a check-in question via PUT /{accountId}/questions/{questionId}/notification_settings.json
basecamp_put_by_accountid_recordings_by_recordingid_client_visibility_jsonWRITESet client visibility for a recording via PUT /{accountId}/recordings/{recordingId}/client_visibility.json
basecamp_put_by_accountid_recordings_by_recordingid_status_active_jsonWRITEUnarchive a recording (restore to active status) via PUT /{accountId}/recordings/{recordingId}/status/active.json
basecamp_put_by_accountid_recordings_by_recordingid_status_archived_jsonWRITEArchive a recording via PUT /{accountId}/recordings/{recordingId}/status/archived.json
basecamp_put_by_accountid_recordings_by_recordingid_status_trashed_jsonWRITETrash a recording via PUT /{accountId}/recordings/{recordingId}/status/trashed.json
basecamp_put_by_accountid_recordings_by_recordingid_subscription_jsonWRITEUpdate subscriptions by adding or removing specific users via PUT /{accountId}/recordings/{recordingId}/subscription.json
basecamp_put_by_accountid_recordings_by_toolid_position_jsonWRITEReposition a tool on the project dock via PUT /{accountId}/recordings/{toolId}/position.json
basecamp_put_by_accountid_schedule_entries_by_entryidWRITEReplace a schedule entry with a new complete representation. via PUT /{accountId}/schedule_entries/{entryId}
basecamp_put_by_accountid_schedules_by_scheduleidWRITEUpdate schedule settings via PUT /{accountId}/schedules/{scheduleId}
basecamp_put_by_accountid_stacks_by_folderidWRITERename a folder. via PUT /{accountId}/stacks/{folderId}
basecamp_put_by_accountid_templates_by_templateidWRITEUpdate an existing template via PUT /{accountId}/templates/{templateId}
basecamp_put_by_accountid_timesheet_entries_by_entryidWRITEUpdate a timesheet entry via PUT /{accountId}/timesheet_entries/{entryId}
basecamp_put_by_accountid_todolists_by_idWRITEReplace a todolist (or todolist group) with a new complete representation. via PUT /{accountId}/todolists/{id}
basecamp_put_by_accountid_todolists_groups_by_groupid_position_jsonWRITEReposition a todolist group via PUT /{accountId}/todolists/groups/{groupId}/position.json
basecamp_put_by_accountid_todos_by_todoidWRITEReplace a todo with a new complete representation. via PUT /{accountId}/todos/{todoId}
basecamp_put_by_accountid_todos_by_todoid_position_jsonWRITEReposition a todo within its todolist via PUT /{accountId}/todos/{todoId}/position.json
basecamp_put_by_accountid_todosets_by_todosetid_hills_settings_jsonWRITETrack or untrack todolists on a hill chart via PUT /{accountId}/todosets/{todosetId}/hills/settings.json
basecamp_put_by_accountid_todosets_todolists_by_todolistid_position_jsonWRITEReposition a to-do list within its to-do set. via PUT /{accountId}/todosets/todolists/{todolistId}/position.json
basecamp_put_by_accountid_uploads_by_uploadidWRITEUpdate an existing upload via PUT /{accountId}/uploads/{uploadId}
basecamp_put_by_accountid_vaults_by_vaultidWRITEUpdate an existing vault via PUT /{accountId}/vaults/{vaultId}
basecamp_put_by_accountid_webhooks_by_webhookidWRITEUpdate an existing webhook via PUT /{accountId}/webhooks/{webhookId}
Put Basecamp behind one governed endpoint.
Same permissions, same audit trail, whatever else you connect next.