Basecamp Projects API

Manage Basecamp projects (buckets)

OpenAPI Specification

basecamp-projects-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Basecamp Authorization Projects 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 Basecamp's collaboration toolset.
  version: '1.0'
  contact:
    name: Basecamp Developer Support
    url: https://github.com/basecamp/bc3-api
  termsOfService: https://basecamp.com/terms
servers:
- url: https://3.basecampapi.com/{accountId}
  description: Production Server
  variables:
    accountId:
      description: Your Basecamp account ID
      default: '999999999'
security:
- bearerAuth: []
tags:
- name: Projects
  description: Manage Basecamp projects (buckets)
paths:
  /projects.json:
    get:
      operationId: listProjects
      summary: List projects
      description: Returns a paginated list of active projects visible to the authenticated user. Use the optional status parameter to retrieve archived or trashed projects instead.
      tags:
      - Projects
      parameters:
      - name: status
        in: query
        description: Filter projects by status. Omit for active projects.
        required: false
        schema:
          type: string
          enum:
          - archived
          - trashed
      responses:
        '200':
          description: Paginated list of projects
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Project'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
    post:
      operationId: createProject
      summary: Create a project
      description: Creates a new Basecamp project with the given name and optional description. Returns the new project with a 201 Created status.
      tags:
      - Projects
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProjectCreateRequest'
      responses:
        '201':
          description: Project created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Project'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /projects/{projectId}.json:
    get:
      operationId: getProject
      summary: Get a project
      description: Returns the project with the given ID including its dock, which lists the tools enabled for that project.
      tags:
      - Projects
      parameters:
      - $ref: '#/components/parameters/ProjectId'
      responses:
        '200':
          description: Project details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Project'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      operationId: updateProject
      summary: Update a project
      description: Updates the name, description, schedule dates, or admissions settings for an existing project. Returns the updated project.
      tags:
      - Projects
      parameters:
      - $ref: '#/components/parameters/ProjectId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProjectUpdateRequest'
      responses:
        '200':
          description: Updated project
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Project'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    delete:
      operationId: deleteProject
      summary: Delete a project
      description: Moves the project with the given ID to trash. Trashed projects can be permanently deleted from the Basecamp web interface.
      tags:
      - Projects
      parameters:
      - $ref: '#/components/parameters/ProjectId'
      responses:
        '204':
          description: Project moved to trash
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
components:
  schemas:
    ProjectUpdateRequest:
      type: object
      required:
      - name
      properties:
        name:
          type: string
          description: Updated project name
        description:
          type: string
          description: Updated project description
        schedule_attributes:
          type: object
          description: Optional schedule date range for the project
          properties:
            start_date:
              type: string
              format: date
              description: Project start date in ISO 8601 format
            end_date:
              type: string
              format: date
              description: Project end date in ISO 8601 format
        admissions:
          type: string
          description: Controls who can join the project
          enum:
          - invite
          - employee
          - team
    ProjectCreateRequest:
      type: object
      required:
      - name
      properties:
        name:
          type: string
          description: Name for the new project
        description:
          type: string
          description: Optional description of the project
    DockItem:
      type: object
      description: A tool available on a project's dock
      properties:
        id:
          type: integer
          description: Dock item ID
        title:
          type: string
          description: Display title of the tool
        name:
          type: string
          description: Internal name of the tool (e.g., message_board, todoset)
        enabled:
          type: boolean
          description: Whether this tool is enabled on the project
        position:
          type: integer
          description: Display position of the tool in the dock
          nullable: true
        url:
          type: string
          format: uri
          description: API URL for this tool's resource
        app_url:
          type: string
          format: uri
          description: Web URL for this tool's resource
    Project:
      type: object
      required:
      - id
      - name
      - status
      properties:
        id:
          type: integer
          description: Unique project identifier
        status:
          type: string
          description: Project status (active, archived, trashed)
          enum:
          - active
          - archived
          - trashed
        created_at:
          type: string
          format: date-time
          description: Timestamp when the project was created
        updated_at:
          type: string
          format: date-time
          description: Timestamp when the project was last updated
        name:
          type: string
          description: Project name
        description:
          type: string
          description: Project description
          nullable: true
        purpose:
          type: string
          description: Project purpose classification
        clients_enabled:
          type: boolean
          description: Whether client access is enabled for this project
        timesheet_enabled:
          type: boolean
          description: Whether timesheets are enabled for this project
        color:
          type: string
          description: Project color identifier
          nullable: true
        url:
          type: string
          format: uri
          description: API URL for this project
        app_url:
          type: string
          format: uri
          description: Web URL for this project
        bookmark_url:
          type: string
          format: uri
          description: API URL to bookmark this project
        dock:
          type: array
          description: List of tools available on this project
          items:
            $ref: '#/components/schemas/DockItem'
    Error:
      type: object
      properties:
        error:
          type: string
          description: Human-readable error message
  responses:
    BadRequest:
      description: Bad request — missing required fields or invalid values
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    TooManyRequests:
      description: Too many requests — rate limit exceeded. Retry after the interval indicated in the Retry-After response header.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Unauthorized:
      description: Unauthorized — missing or invalid Bearer token
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFound:
      description: Not found — the requested resource does not exist
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  parameters:
    ProjectId:
      name: projectId
      in: path
      required: true
      description: Unique identifier of the project (bucket)
      schema:
        type: integer
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: 'OAuth 2.0 Bearer token obtained via the Basecamp authorization code flow at launchpad.37signals.com. Include as "Authorization: Bearer {token}" in all requests.'
externalDocs:
  description: Basecamp API Documentation
  url: https://github.com/basecamp/bc3-api