Basecamp · Capability

Basecamp API

The Basecamp API is a REST API that provides programmatic access to Basecamp's project management and team communication platform. It enables developers to manage projects, to-do lists, messages, documents, schedules, campfires, uploads, card tables, templates, and team members across Basecamp accounts. The API uses OAuth 2.0 for authentication and returns JSON responses, with all requests scoped to an account ID in the base URL path. Resources include projects, people, to-dos, message boards, documents, card tables, campfires, questionnaires, and webhooks, covering the full breadth of Basecam

Run with Naftiko BasecampAPI

What You Can Do

GET
Listprojects — List projects
/projects.json
POST
Createproject — Create a project
/projects.json
GET
Getproject — Get a project
/projects/{projectId}.json
PUT
Updateproject — Update a project
/projects/{projectId}.json
DELETE
Deleteproject — Delete a project
/projects/{projectId}.json
GET
Listpeople — List all people
/people.json
GET
Listprojectpeople — List people on a project
/projects/{projectId}/people.json
PUT
Updateprojectaccess — Update project access
/projects/{projectId}/people/users.json
GET
Listpingablepeople — List pingable people
/circles/people.json
GET
Getperson — Get a person
/people/{personId}.json
GET
Getmyprofile — Get my profile
/my/profile.json
PUT
Updatemyprofile — Update my profile
/my/profile.json
GET
Listtemplates — List templates
/templates.json
POST
Createtemplate — Create a template
/templates.json
GET
Gettemplate — Get a template
/templates/{templateId}.json
PUT
Updatetemplate — Update a template
/templates/{templateId}.json
DELETE
Deletetemplate — Delete a template
/templates/{templateId}.json
POST
Createprojectfromtemplate — Create project from template
/templates/{templateId}/project_constructions.json
GET
Getprojectconstruction — Get project construction status
/templates/{templateId}/project_constructions/{constructionId}.json
GET
Listrecordings — List recordings
/projects/recordings.json
PUT
Trashrecording — Trash a recording
/recordings/{recordingId}/status/trashed.json
PUT
Archiverecording — Archive a recording
/recordings/{recordingId}/status/archived.json
PUT
Unarchiverecording — Unarchive a recording
/recordings/{recordingId}/status/active.json
GET
Listmessages — List messages
/message_boards/{messageBoardId}/messages.json
POST
Createmessage — Create a message
/message_boards/{messageBoardId}/messages.json
GET
Getmessage — Get a message
/messages/{messageId}.json
PUT
Updatemessage — Update a message
/messages/{messageId}.json
GET
Listcomments — List comments
/recordings/{recordingId}/comments.json
POST
Createcomment — Create a comment
/recordings/{recordingId}/comments.json
GET
Getcomment — Get a comment
/comments/{commentId}.json
PUT
Updatecomment — Update a comment
/comments/{commentId}.json
GET
Listtodolists — List to-do lists
/todosets/{todosetId}/todolists.json
POST
Createtodolist — Create a to-do list
/todosets/{todosetId}/todolists.json
GET
Gettodolist — Get a to-do list
/todolists/{todolistId}.json
PUT
Updatetodolist — Update a to-do list
/todolists/{todolistId}.json
GET
Listtodos — List to-dos
/todolists/{todolistId}/todos.json
POST
Createtodo — Create a to-do
/todolists/{todolistId}/todos.json
GET
Gettodo — Get a to-do
/todos/{todoId}.json
PUT
Updatetodo — Update a to-do
/todos/{todoId}.json
POST
Completetodo — Complete a to-do
/todos/{todoId}/completion.json
DELETE
Uncompletetodo — Uncomplete a to-do
/todos/{todoId}/completion.json
PUT
Repositiontodo — Reposition a to-do
/todos/{todoId}/position.json
GET
Getschedule — Get a schedule
/schedules/{scheduleId}.json
PUT
Updateschedule — Update a schedule
/schedules/{scheduleId}.json
GET
Listscheduleentries — List schedule entries
/schedules/{scheduleId}/entries.json
POST
Createscheduleentry — Create a schedule entry
/schedules/{scheduleId}/entries.json
GET
Getscheduleentry — Get a schedule entry
/schedule_entries/{entryId}.json
PUT
Updatescheduleentry — Update a schedule entry
/schedule_entries/{entryId}.json
GET
Listdocuments — List documents
/vaults/{vaultId}/documents.json
POST
Createdocument — Create a document
/vaults/{vaultId}/documents.json
GET
Getdocument — Get a document
/documents/{documentId}.json
PUT
Updatedocument — Update a document
/documents/{documentId}.json
GET
Listuploads — List uploads
/vaults/{vaultId}/uploads.json
POST
Createupload — Create an upload
/vaults/{vaultId}/uploads.json
GET
Getupload — Get an upload
/uploads/{uploadId}.json
PUT
Updateupload — Update an upload
/uploads/{uploadId}.json
GET
Listcampfires — List campfires
/chats.json
GET
Getcampfire — Get a campfire
/chats/{campfireId}.json
GET
Listcampfirelines — List campfire lines
/chats/{campfireId}/lines.json
POST
Createcampfireline — Create a campfire line
/chats/{campfireId}/lines.json

MCP Tools

listprojects

List projects

read-only idempotent
createproject

Create a project

getproject

Get a project

read-only idempotent
updateproject

Update a project

idempotent
deleteproject

Delete a project

idempotent
listpeople

List all people

read-only idempotent
listprojectpeople

List people on a project

read-only idempotent
updateprojectaccess

Update project access

idempotent
listpingablepeople

List pingable people

read-only idempotent
getperson

Get a person

read-only idempotent
getmyprofile

Get my profile

read-only idempotent
updatemyprofile

Update my profile

idempotent
listtemplates

List templates

read-only idempotent
createtemplate

Create a template

gettemplate

Get a template

read-only idempotent
updatetemplate

Update a template

idempotent
deletetemplate

Delete a template

idempotent
createprojectfromtemplate

Create project from template

getprojectconstruction

Get project construction status

read-only idempotent
listrecordings

List recordings

read-only idempotent
trashrecording

Trash a recording

idempotent
archiverecording

Archive a recording

idempotent
unarchiverecording

Unarchive a recording

idempotent
listmessages

List messages

read-only idempotent
createmessage

Create a message

getmessage

Get a message

read-only idempotent
updatemessage

Update a message

idempotent
listcomments

List comments

read-only idempotent
createcomment

Create a comment

getcomment

Get a comment

read-only idempotent
updatecomment

Update a comment

idempotent
listtodolists

List to-do lists

read-only idempotent
createtodolist

Create a to-do list

gettodolist

Get a to-do list

read-only idempotent
updatetodolist

Update a to-do list

idempotent
listtodos

List to-dos

read-only idempotent
createtodo

Create a to-do

gettodo

Get a to-do

read-only idempotent
updatetodo

Update a to-do

idempotent
completetodo

Complete a to-do

uncompletetodo

Uncomplete a to-do

idempotent
repositiontodo

Reposition a to-do

idempotent
getschedule

Get a schedule

read-only idempotent
updateschedule

Update a schedule

idempotent
listscheduleentries

List schedule entries

read-only idempotent
createscheduleentry

Create a schedule entry

getscheduleentry

Get a schedule entry

read-only idempotent
updatescheduleentry

Update a schedule entry

idempotent
listdocuments

List documents

read-only idempotent
createdocument

Create a document

getdocument

Get a document

read-only idempotent
updatedocument

Update a document

idempotent
listuploads

List uploads

read-only idempotent
createupload

Create an upload

getupload

Get an upload

read-only idempotent
updateupload

Update an upload

idempotent
listcampfires

List campfires

read-only idempotent
getcampfire

Get a campfire

read-only idempotent
listcampfirelines

List campfire lines

read-only idempotent
createcampfireline

Create a campfire line

Capability Spec

basecamp-capability.yaml Raw ↑
naftiko: 1.0.0-alpha2
info:
  label: Basecamp API
  description: The Basecamp API is a REST API that provides programmatic access to Basecamp's project management and team
    communication platform. It enables developers to manage projects, to-do lists, messages, documents, schedules, campfires,
    uploads, card tables, templates, and team members across Basecamp accounts. The API uses OAuth 2.0 for authentication
    and returns JSON responses, with all requests scoped to an account ID in the base URL path. Resources include projects,
    people, to-dos, message boards, documents, card tables, campfires, questionnaires, and webhooks, covering the full breadth
    of Basecam
  tags:
  - Basecamp
  - API
  created: '2026-05-06'
  modified: '2026-05-06'
capability:
  consumes:
  - type: http
    namespace: basecamp
    baseUri: https://3.basecampapi.com/999999999
    description: Basecamp API HTTP API.
    authentication:
      type: bearer
      token: '{{BASECAMP_TOKEN}}'
    resources:
    - name: projects-json
      path: /projects.json
      operations:
      - name: listprojects
        method: GET
        description: List projects
        inputParameters:
        - name: status
          in: query
          type: string
          description: Filter projects by status. Omit for active projects.
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: createproject
        method: POST
        description: Create a project
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: projects-projectid-json
      path: /projects/{projectId}.json
      operations:
      - name: getproject
        method: GET
        description: Get a project
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: updateproject
        method: PUT
        description: Update a project
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: deleteproject
        method: DELETE
        description: Delete a project
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: people-json
      path: /people.json
      operations:
      - name: listpeople
        method: GET
        description: List all people
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: projects-projectid-people-json
      path: /projects/{projectId}/people.json
      operations:
      - name: listprojectpeople
        method: GET
        description: List people on a project
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: projects-projectid-people-users-json
      path: /projects/{projectId}/people/users.json
      operations:
      - name: updateprojectaccess
        method: PUT
        description: Update project access
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: circles-people-json
      path: /circles/people.json
      operations:
      - name: listpingablepeople
        method: GET
        description: List pingable people
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: people-personid-json
      path: /people/{personId}.json
      operations:
      - name: getperson
        method: GET
        description: Get a person
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: my-profile-json
      path: /my/profile.json
      operations:
      - name: getmyprofile
        method: GET
        description: Get my profile
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: updatemyprofile
        method: PUT
        description: Update my profile
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: templates-json
      path: /templates.json
      operations:
      - name: listtemplates
        method: GET
        description: List templates
        inputParameters:
        - name: status
          in: query
          type: string
          description: Filter templates by status.
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: createtemplate
        method: POST
        description: Create a template
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: templates-templateid-json
      path: /templates/{templateId}.json
      operations:
      - name: gettemplate
        method: GET
        description: Get a template
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: updatetemplate
        method: PUT
        description: Update a template
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: deletetemplate
        method: DELETE
        description: Delete a template
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: templates-templateid-project-constructions-json
      path: /templates/{templateId}/project_constructions.json
      operations:
      - name: createprojectfromtemplate
        method: POST
        description: Create project from template
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: templates-templateid-project-constructions-const
      path: /templates/{templateId}/project_constructions/{constructionId}.json
      operations:
      - name: getprojectconstruction
        method: GET
        description: Get project construction status
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: projects-recordings-json
      path: /projects/recordings.json
      operations:
      - name: listrecordings
        method: GET
        description: List recordings
        inputParameters:
        - name: type
          in: query
          type: string
          required: true
          description: The recording type to list.
        - name: bucket
          in: query
          type: integer
          description: Filter to a specific project (bucket) ID.
        - name: status
          in: query
          type: string
          description: Filter by recording status.
        - name: sort
          in: query
          type: string
          description: Sort field.
        - name: direction
          in: query
          type: string
          description: Sort direction.
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: recordings-recordingid-status-trashed-json
      path: /recordings/{recordingId}/status/trashed.json
      operations:
      - name: trashrecording
        method: PUT
        description: Trash a recording
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: recordings-recordingid-status-archived-json
      path: /recordings/{recordingId}/status/archived.json
      operations:
      - name: archiverecording
        method: PUT
        description: Archive a recording
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: recordings-recordingid-status-active-json
      path: /recordings/{recordingId}/status/active.json
      operations:
      - name: unarchiverecording
        method: PUT
        description: Unarchive a recording
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: message-boards-messageboardid-messages-json
      path: /message_boards/{messageBoardId}/messages.json
      operations:
      - name: listmessages
        method: GET
        description: List messages
        inputParameters:
        - name: sort
          in: query
          type: string
          description: Sort field.
        - name: direction
          in: query
          type: string
          description: Sort direction.
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: createmessage
        method: POST
        description: Create a message
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: messages-messageid-json
      path: /messages/{messageId}.json
      operations:
      - name: getmessage
        method: GET
        description: Get a message
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: updatemessage
        method: PUT
        description: Update a message
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: recordings-recordingid-comments-json
      path: /recordings/{recordingId}/comments.json
      operations:
      - name: listcomments
        method: GET
        description: List comments
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: createcomment
        method: POST
        description: Create a comment
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: comments-commentid-json
      path: /comments/{commentId}.json
      operations:
      - name: getcomment
        method: GET
        description: Get a comment
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: updatecomment
        method: PUT
        description: Update a comment
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: todosets-todosetid-todolists-json
      path: /todosets/{todosetId}/todolists.json
      operations:
      - name: listtodolists
        method: GET
        description: List to-do lists
        inputParameters:
        - name: status
          in: query
          type: string
          description: Filter by status.
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: createtodolist
        method: POST
        description: Create a to-do list
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: todolists-todolistid-json
      path: /todolists/{todolistId}.json
      operations:
      - name: gettodolist
        method: GET
        description: Get a to-do list
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: updatetodolist
        method: PUT
        description: Update a to-do list
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: todolists-todolistid-todos-json
      path: /todolists/{todolistId}/todos.json
      operations:
      - name: listtodos
        method: GET
        description: List to-dos
        inputParameters:
        - name: status
          in: query
          type: string
          description: Filter by status.
        - name: completed
          in: query
          type: boolean
          description: Set to true to return completed to-dos.
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: createtodo
        method: POST
        description: Create a to-do
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: todos-todoid-json
      path: /todos/{todoId}.json
      operations:
      - name: gettodo
        method: GET
        description: Get a to-do
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: updatetodo
        method: PUT
        description: Update a to-do
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: todos-todoid-completion-json
      path: /todos/{todoId}/completion.json
      operations:
      - name: completetodo
        method: POST
        description: Complete a to-do
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: uncompletetodo
        method: DELETE
        description: Uncomplete a to-do
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: todos-todoid-position-json
      path: /todos/{todoId}/position.json
      operations:
      - name: repositiontodo
        method: PUT
        description: Reposition a to-do
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: schedules-scheduleid-json
      path: /schedules/{scheduleId}.json
      operations:
      - name: getschedule
        method: GET
        description: Get a schedule
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: updateschedule
        method: PUT
        description: Update a schedule
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: schedules-scheduleid-entries-json
      path: /schedules/{scheduleId}/entries.json
      operations:
      - name: listscheduleentries
        method: GET
        description: List schedule entries
        inputParameters:
        - name: status
          in: query
          type: string
          description: Filter by status.
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: createscheduleentry
        method: POST
        description: Create a schedule entry
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: schedule-entries-entryid-json
      path: /schedule_entries/{entryId}.json
      operations:
      - name: getscheduleentry
        method: GET
        description: Get a schedule entry
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: updatescheduleentry
        method: PUT
        description: Update a schedule entry
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: vaults-vaultid-documents-json
      path: /vaults/{vaultId}/documents.json
      operations:
      - name: listdocuments
        method: GET
        description: List documents
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: createdocument
        method: POST
        description: Create a document
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: documents-documentid-json
      path: /documents/{documentId}.json
      operations:
      - name: getdocument
        method: GET
        description: Get a document
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: updatedocument
        method: PUT
        description: Update a document
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: vaults-vaultid-uploads-json
      path: /vaults/{vaultId}/uploads.json
      operations:
      - name: listuploads
        method: GET
        description: List uploads
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: createupload
        method: POST
        description: Create an upload
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: uploads-uploadid-json
      path: /uploads/{uploadId}.json
      operations:
      - name: getupload
        method: GET
        description: Get an upload
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: updateupload
        method: PUT
        description: Update an upload
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: chats-json
      path: /chats.json
      operations:
      - name: listcampfires
        method: GET
        description: List campfires
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: chats-campfireid-json
      path: /chats/{campfireId}.json
      operations:
      - name: getcampfire
        method: GET
        description: Get a campfire
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
    - name: chats-campfireid-lines-json
      path: /chats/{campfireId}/lines.json
      operations:
      - name: listcampfirelines
        method: GET
        description: List campfire lines
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
      - name: createcampfireline
        method: POST
        description: Create a campfire line
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
  exposes:
  - type: rest
    port: 8080
    namespace: basecamp-rest
    description: REST adapter for Basecamp API.
    resources:
    - path: /projects.json
      name: listprojects
      operations:
      - method: GET
        name: listprojects
        description: List projects
        call: basecamp.listprojects
        outputParameters:
        - type: object
          mapping: $.
    - path: /projects.json
      name: createproject
      operations:
      - method: POST
        name: createproject
        description: Create a project
        call: basecamp.createproject
        outputParameters:
        - type: object
          mapping: $.
    - path: /projects/{projectId}.json
      name: getproject
      operations:
      - method: GET
        name: getproject
        description: Get a project
        call: basecamp.getproject
        outputParameters:
        - type: object
          mapping: $.
    - path: /projects/{projectId}.json
      name: updateproject
      operations:
      - method: PUT
        name: updateproject
        description: Update a project
        call: basecamp.updateproject
        outputParameters:
        - type: object
          mapping: $.
    - path: /projects/{projectId}.json
      name: deleteproject
      operations:
      - method: DELETE
        name: deleteproject
        description: Delete a project
        call: basecamp.deleteproject
        outputParameters:
        - type: object
          mapping: $.
    - path: /people.json
      name: listpeople
      operations:
      - method: GET
        name: listpeople
        description: List all people
        call: basecamp.listpeople
        outputParameters:
        - type: object
          mapping: $.
    - path: /projects/{projectId}/people.json
      name: listprojectpeople
      operations:
      - method: GET
        name: listprojectpeople
        description: List people on a project
        call: basecamp.listprojectpeople
        outputParameters:
        - type: object
          mapping: $.
    - path: /projects/{projectId}/people/users.json
      name: updateprojectaccess
      operations:
      - method: PUT
        name: updateprojectaccess
        description: Update project access
        call: basecamp.updateprojectaccess
        outputParameters:
        - type: object
          mapping: $.
    - path: /circles/people.json
      name: listpingablepeople
      operations:
      - method: GET
        name: listpingablepeople
        description: List pingable people
        call: basecamp.listpingablepeople
        outputParameters:
        - type: object
          mapping: $.
    - path: /people/{personId}.json
      name: getperson
      operations:
      - method: GET
        name: getperson
        description: Get a person
        call: basecamp.getperson
        outputParameters:
        - type: object
          mapping: $.
    - path: /my/profile.json
      name: getmyprofile
      operations:
      - method: GET
        name: getmyprofile
        description: Get my profile
        call: basecamp.getmyprofile
        outputParameters:
        - type: object
          mapping: $.
    - path: /my/profile.json
      name: updatemyprofile
      operations:
      - method: PUT
        name: updatemyprofile
        description: Update my profile
        call: basecamp.updatemyprofile
        outputParameters:
        - type: object
          mapping: $.
    - path: /templates.json
      name: listtemplates
      operations:
      - method: GET
        name: listtemplates
        description: List templates
        call: basecamp.listtemplates
        outputParameters:
        - type: object
          mapping: $.
    - path: /templates.json
      name: createtemplate
      operations:
      - method: POST
        name: createtemplate
        description: Create a template
        call: basecamp.createtemplate
        outputParameters:
        - type: object
          mapping: $.
    - path: /templates/{templateId}.json
      name: gettemplate
      operations:
      - method: GET
        name: gettemplate
        description: Get a template
        call: basecamp.gettemplate
        outputParameters:
        - type: object
          mapping: $.
    - path: /templates/{templateId}.json
      name: updatetemplate
      operations:
      - method: PUT
        name: updatetemplate
        description: Update a template
        call: basecamp.updatetemplate
        outputParameters:
        - type: object
          mapping: $.
    - path: /templates/{templateId}.json
      name: deletetemplate
      operations:
      - method: DELETE
        name: deletetemplate
        description: Delete a template
        call: basecamp.deletetemplate
        outputParameters:
        - type: object
          mapping: $.
    - path: /templates/{templateId}/project_constructions.json
      name: createprojectfromtemplate
      operations:
      - method: POST
        name: createprojectfromtemplate
        description: Create project from template
        call: basecamp.createprojectfromtemplate
        outputParameters:
        - type: object
          mapping: $.
    - path: /templates/{templateId}/project_constructions/{constructionId}.json
      name: getprojectconstruction
      operations:
      - method: GET
        name: getprojectconstruction
        description: Get project construction status
        call: basecamp.getprojectconstruction
        outputParameters:
        - type: object
          mapping: $.
    - path: /projects/recordings.json
      name: listrecordings
      operations:
      - method: GET
        name: listrecordings
        description: List recordings
        call: basecamp.listrecordings
        outputParameters:
        - type: object
          mapping: $.
    - path: /recordings/{recordingId}/status/trashed.json
      name: trashrecording
      operations:
      - method: PUT
        name: trashrecording
        description: Trash a recording
        call: basecamp.trashrecording
        outputParameters:
        - type: object
          mapping: $.
    - path: /recordings/{recordingId}/status/archived.json
      name: archiverecording
      operations:
      - method: PUT
        name: archiverecording
        description: Archive a recording
        call: basecamp.archiverecording
        outputParameters:
        - type: object
          mapping: $.
    - path: /recordings/{recordingId}/status/active.json
      name: unarchiverecording
      operations:
      - method: PUT
        name: unarchiverecording
        description: Unarchive a recording
        call: basecamp.unarchiverecording
        outputParameters:
        - type: object
          mapping: $.
    - path: /message_boards/{messageBoardId}/messages.json
      name: listmessages
      operations:
      - method: GET
        name: listmessages
        description: List messages
        call: basecamp.listmessages
        outputParameters:
        - type: object
          mapping: $.
    - path: /message_boards/{messageBoardId}/messages.json
      name: createmessage
      operations:
      - method: POST
        name: createmessage
        description: Create a message
        call: basecamp.createmessage
        outputParameters:
        - type: object
          mapping: $.
    - path: /messages/{messageId}.json
      name: getmessage
      operations:
      - method: GET
        name: getmessage
        description: Get a message
        call: basecamp.getmessage
        outputParameters:
        - type: object
          mapping: $.
    - path: /messages/{messageId}.json
      name: updatemessage
      operations:
      - method: PUT
        name: updatemessage
        description: Update a message
        call: basecamp.updatemessage
        outputParameters:
        - type: object
          mapping: $.
    - path: /recordings/{recordingId}/comments.json
      name: listcomments
      operations:
      - method: GET
        name: listcomments
        description: List comments
        call: basecamp.listcomments
        outputParameters:
        - type: object
          mapping: $.
    - path: /recordings/{recordingId}/comments.json
      name: createcomment
      operations:
      - method: POST
        name: createcomment
        description: Create a comment
        call: basecamp.createcomment
        outputParameters:
        - type: object
          mapping: $.
    - path: /comments/{commentId}.json
      name: getcomment
      operations:
      - method: GET
        name: getcomment
        description: Get a comment
        call: basecamp.getcomment
        outputParameters:
        - type: object
          mapping: $.
    - path: /comments/{commentId}.json
      name: updatecomment
      operations:
      - method: PUT
        name: updatecomment
        description: Update a comment
        call: basecamp.updatecomment
        outputParameters:
        - type: object
          mapping: $.
    - path: /todosets/{todosetId}/todolists.json
      name: listtodolists
      operations:
      - method: GET
        name: listtodolists
        description: List to-do lists
        call: basecamp.listtodolists
        outputParameters:
        - type: object
          mapping: $.
    - path: /todosets/{todosetId}/todolists.json
      name: createtodolist
      operations:
      - method: POST
        name: createtodolist
        description: Create a to-do list
        call: basecamp.createtodolist
        outputParameters:
        - type: object
          mapping: $.
    - path: /todolists/{todolistId}.json
      name: gettodolist
      operations:
      - method: GET
        name: gettodolist
        description: Get a to-do list
        call: basecamp.gettodolist
        outputParameters:
        - type: object
          mapping: $.
    - path: /todolists/{todolistId}.json
      name: updatetodolist
      operations:
      - method: PUT
        name: updatetodolist
        description: Update a to-do list
        call: basecamp.updatetodolist
        outputParameters:
        - type: object
          mapping: $.
    - path: /todolists/{todolistId}/todos.json
      name: listtodos
      operations:
      - method: GET
        name: listtodos
        description: List to-dos
        call: basecamp.listtodos
        outputParameters:
        - type: object
          mapping: $.
    - path: /todolists/{todolistId}/todos.json
      name: createtodo
      operations:
      - method: POST
        name: createtodo
        description: Create a to-do
        call: basecamp.createtodo
        outputParameters:
        - type: object
          mapping: $.
    - path: /todos/{todoId}.json
      name: gettodo
      operations:
      - method: GET
        name: gettodo
        description: Get a to-do
        call: basecamp.gettodo
        outputParameters:
        - type: object
          mapping: $.
    - path: /todos/{todoId}.json
      name: updatetodo
      operations:
      - method: PUT
        name: updatetodo
        description: Update a to-do
        call: basecamp.updatetodo
        outputParameters:
        - type: object
          mapping: $.
    - path: /todos/{todoId}/completion.json
      name: completetodo
      operations:
      - method: POST
        name: completetodo
        description: Complete a to-do
        call: basecamp.completetodo
        outputParameters:
        - type: object
          mapping: $.
    - path: /todos/{todoId}/completion.json
      name: uncompletetodo
      operations:
      - method: DELETE
        name: uncompletetodo
        description: Uncomplete a to-do
        call: basecamp.uncompletetodo
        outputParameters:
        - type: object
          mapping: $.
    - path: /todos/{todoId}/position.json
      name: repositiontodo
      operations:
      - method: PUT
        name: repositiontodo
        description: Reposition a to-do
        call: basecamp.repositiontodo
        outputParameters:
        - type: object
          mapping: $.
    - path: /schedules/{scheduleId}.json
      name: getschedule
      operations:
      - method: GET
        name: getschedule
        description: Get a schedule
        call: basecamp.getschedule
        outputParameters:
        - type: object
          mapping: $.
    - path: /schedules/{scheduleId}.json
      name: updateschedule
      operations:
      - method: PUT
        name: updateschedule
        description: Update a schedule
        call: basecamp.updateschedule
        outputParameters:
        - type: object
          mapping: $.
    - path: /schedules/{scheduleId}/entries.json
      name: listscheduleentries
      operations:
      - method: GET
        name: listscheduleentries
        description: List schedule entries
        call: basecamp.listscheduleentries
        outputParameters:
        - type: object
          mapping: $.
    - path: /schedules/{scheduleId}/entries.json
      name: createscheduleentry
      operations:
      - method: POST
        name: createscheduleentry
        description: Create a schedule entry
        call: basecamp.createscheduleentry
        outputParameters:
        - type: object
          mapping: $.
    - path: /schedule_entries/{entryId}.json
      name: getscheduleentry
      operations:
      - method: GET
        name: getscheduleentry
        description: Get a schedule entry
        call: basecamp.getscheduleentry
        outputParameters:
        - type: object
          mapping: $.
    - path: /schedule_entries/{entryId}.json
      name: updatescheduleentry
      operations:
      - method: PUT
        name: updatescheduleentry
        description: Update a schedule entry
        call: basecamp.updatescheduleentry
        outputParameters:
        - type: object
          mapping: $.
    - path: /vaults/{vaultId}/documents.jso

# --- truncated at 32 KB (51 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/basecamp/refs/heads/main/capabilities/basecamp-capability.yaml