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.
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/basecamp-projects-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
openapi: 3.2.0
info:
title: Basecamp Projects API
description: The Basecamp API is a REST API that provides programmatic access to Basecamp's project management and team communication platform.
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:
ProjectCreateRequest:
type: object
required:
- name
properties:
name:
type: string
description: Name for the new project
description:
type: string
description: Optional description of the project
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'
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
Error:
type: object
properties:
error:
type: string
description: Human-readable error message
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
responses:
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'
NotFound:
description: Not found — the requested resource does not exist
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
Unauthorized:
description: Unauthorized — missing or invalid Bearer token
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'
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