Basecamp Templates API

Manage project templates and construct projects from them

Operations 7

GET /templates.json List templates #
POST /templates.json Create a template #
GET /templates/{templateId}.json Get a template #
PUT /templates/{templateId}.json Update a template #
DELETE /templates/{templateId}.json Delete a template #
POST /templates/{templateId}/project_constructions.json Create project from template #
GET /templates/{templateId}/project_constructions/{constructionId}.json Get project construction status #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/basecamp-templates-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

basecamp-templates-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Basecamp Templates 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: Templates
  description: Manage project templates and construct projects from them
paths:
  /templates.json:
    get:
      operationId: listTemplates
      summary: List templates
      description: Returns a paginated list of active project templates visible to the authenticated user. Optionally filter by status.
      tags:
      - Templates
      parameters:
      - name: status
        in: query
        description: Filter templates by status.
        required: false
        schema:
          type: string
          enum:
          - archived
          - trashed
      responses:
        '200':
          description: List of templates
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Template'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createTemplate
      summary: Create a template
      description: Creates a new project template with the given name and optional description. Returns the template with a 201 Created status.
      tags:
      - Templates
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TemplateCreateRequest'
      responses:
        '201':
          description: Template created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Template'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /templates/{templateId}.json:
    get:
      operationId: getTemplate
      summary: Get a template
      description: Returns the project template with the given ID.
      tags:
      - Templates
      parameters:
      - $ref: '#/components/parameters/TemplateId'
      responses:
        '200':
          description: Template details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Template'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      operationId: updateTemplate
      summary: Update a template
      description: Updates the name and description of an existing project template.
      tags:
      - Templates
      parameters:
      - $ref: '#/components/parameters/TemplateId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TemplateCreateRequest'
      responses:
        '200':
          description: Updated template
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Template'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    delete:
      operationId: deleteTemplate
      summary: Delete a template
      description: Moves the template with the given ID to trash.
      tags:
      - Templates
      parameters:
      - $ref: '#/components/parameters/TemplateId'
      responses:
        '204':
          description: Template trashed
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /templates/{templateId}/project_constructions.json:
    post:
      operationId: createProjectFromTemplate
      summary: Create project from template
      description: Starts the construction of a new project based on the given template. Returns a project construction object whose status can be polled until it transitions from "pending" to "completed".
      tags:
      - Templates
      parameters:
      - $ref: '#/components/parameters/TemplateId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProjectConstructionRequest'
      responses:
        '201':
          description: Project construction initiated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProjectConstruction'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /templates/{templateId}/project_constructions/{constructionId}.json:
    get:
      operationId: getProjectConstruction
      summary: Get project construction status
      description: Returns the current status of a project construction job. Poll this endpoint until status changes from "pending" to "completed".
      tags:
      - Templates
      parameters:
      - $ref: '#/components/parameters/TemplateId'
      - $ref: '#/components/parameters/ConstructionId'
      responses:
        '200':
          description: Project construction status
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProjectConstruction'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
components:
  schemas:
    ProjectConstruction:
      type: object
      properties:
        id:
          type: integer
          description: Project construction job ID
        status:
          type: string
          description: Construction status
          enum:
          - pending
          - completed
        url:
          type: string
          format: uri
          description: API URL to poll for this construction job
        project:
          $ref: '#/components/schemas/Project'
          description: The resulting project once construction is completed
    Error:
      type: object
      properties:
        error:
          type: string
          description: Human-readable error message
    TemplateCreateRequest:
      type: object
      required:
      - name
      properties:
        name:
          type: string
          description: Template name
        description:
          type: string
          description: Optional template description
    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'
    Template:
      type: object
      required:
      - id
      - name
      - status
      properties:
        id:
          type: integer
          description: Template ID
        status:
          type: string
          description: Template status
          enum:
          - active
          - archived
          - trashed
        created_at:
          type: string
          format: date-time
          description: Timestamp when the template was created
        updated_at:
          type: string
          format: date-time
          description: Timestamp when the template was last updated
        name:
          type: string
          description: Template name
        description:
          type: string
          description: Template description
          nullable: true
        url:
          type: string
          format: uri
          description: API URL for this template
        app_url:
          type: string
          format: uri
          description: Web URL for this template
        dock:
          type: array
          description: Tools available in this template
          items:
            $ref: '#/components/schemas/DockItem'
    ProjectConstructionRequest:
      type: object
      required:
      - project
      properties:
        project:
          type: object
          required:
          - name
          properties:
            name:
              type: string
              description: Name for the new project being constructed
            description:
              type: string
              description: Optional description for the new project
  responses:
    NotFound:
      description: Not found — the requested resource does not exist
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    BadRequest:
      description: Bad request — missing required fields or invalid values
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Unauthorized:
      description: Unauthorized — missing or invalid Bearer token
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  parameters:
    ConstructionId:
      name: constructionId
      in: path
      required: true
      description: Unique identifier of the project construction job
      schema:
        type: integer
    TemplateId:
      name: templateId
      in: path
      required: true
      description: Unique identifier of the template
      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