Basecamp Webhooks
Basecamp Webhooks deliver real-time HTTP notifications when events occur within a project. Configure webhooks per project with an HTTPS payload URL and resource types.
Basecamp Webhooks deliver real-time HTTP notifications when events occur within a project. Configure webhooks per project with an HTTPS payload URL and resource types.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
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.curl "https://apis.io/api/v1/apis/basecamp-webhooks"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
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.
asyncapi: 2.6.0
info:
title: Basecamp Webhook Events
description: >-
The Basecamp webhook system delivers real-time HTTP notifications to
registered HTTPS endpoints when events occur within a Basecamp project.
Webhooks are configured per project with a payload URL and an optional list
of resource types. Basecamp sends an HTTP POST with a JSON payload to the
registered URL whenever a subscribed event occurs. Delivery is attempted up
to 10 times with exponential backoff before a webhook is deactivated if the
endpoint fails to return a 2xx HTTP response.
version: '1.0'
contact:
name: Basecamp Developer Support
url: https://github.com/basecamp/bc3-api/blob/master/sections/webhooks.md
termsOfService: https://basecamp.com/terms
externalDocs:
description: Basecamp Webhooks Documentation
url: https://github.com/basecamp/bc3-api/blob/master/sections/webhooks.md
servers:
basecamp:
url: 'https://3.basecampapi.com'
protocol: https
description: >-
Basecamp sends webhook event notifications as HTTP POST requests
originating from Basecamp infrastructure. Receiving endpoints must be
publicly accessible HTTPS URLs registered via the Webhooks REST API.
security:
- bearerAuth: []
channels:
/webhook:
description: >-
The HTTPS endpoint on the subscriber's server that receives webhook
notifications from Basecamp. Basecamp sends HTTP POST requests with JSON
payloads. Subscribers should respond with a 2xx status code within a
reasonable timeout to acknowledge receipt. Failure to respond with 2xx
after 10 attempts will cause Basecamp to deactivate the webhook.
publish:
operationId: receiveBasecampWebhook
summary: Receive a Basecamp webhook event notification
description: >-
Basecamp sends this message to the subscriber's registered payload URL
whenever a subscribed resource event occurs within a project. The
payload includes the event kind, the recording object, the creator,
and any event-specific details.
message:
oneOf:
- $ref: '#/components/messages/MessageCreated'
- $ref: '#/components/messages/MessageUpdated'
- $ref: '#/components/messages/MessageArchived'
- $ref: '#/components/messages/MessageTrashed'
- $ref: '#/components/messages/TodoCreated'
- $ref: '#/components/messages/TodoUpdated'
- $ref: '#/components/messages/TodoCompleted'
- $ref: '#/components/messages/TodoUncompleted'
- $ref: '#/components/messages/TodoArchived'
- $ref: '#/components/messages/TodoTrashed'
- $ref: '#/components/messages/TodolistCreated'
- $ref: '#/components/messages/TodolistUpdated'
- $ref: '#/components/messages/TodolistArchived'
- $ref: '#/components/messages/TodolistTrashed'
- $ref: '#/components/messages/DocumentCreated'
- $ref: '#/components/messages/DocumentUpdated'
- $ref: '#/components/messages/DocumentArchived'
- $ref: '#/components/messages/DocumentTrashed'
- $ref: '#/components/messages/CommentCreated'
- $ref: '#/components/messages/CommentUpdated'
- $ref: '#/components/messages/CommentTrashed'
- $ref: '#/components/messages/CardCreated'
- $ref: '#/components/messages/CardUpdated'
- $ref: '#/components/messages/CardArchived'
- $ref: '#/components/messages/CardTrashed'
- $ref: '#/components/messages/ScheduleEntryCreated'
- $ref: '#/components/messages/ScheduleEntryUpdated'
- $ref: '#/components/messages/ScheduleEntryArchived'
- $ref: '#/components/messages/ScheduleEntryTrashed'
- $ref: '#/components/messages/UploadCreated'
- $ref: '#/components/messages/UploadUpdated'
- $ref: '#/components/messages/UploadArchived'
- $ref: '#/components/messages/UploadTrashed'
- $ref: '#/components/messages/QuestionAnswerCreated'
- $ref: '#/components/messages/QuestionAnswerUpdated'
- $ref: '#/components/messages/QuestionPaused'
- $ref: '#/components/messages/QuestionResumed'
components:
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: >-
Bearer token used to authenticate REST API calls to configure webhooks.
Not used in the webhook delivery itself — delivery authentication relies
on verifying the source IP or using shared secrets in the payload URL.
messages:
MessageCreated:
name: message_created
title: Message Created
summary: A new message was created on a message board
payload:
$ref: '#/components/schemas/WebhookPayload'
examples:
- name: MessageCreatedExample
payload:
id: 9007199254741234
kind: message_created
created_at: '2024-01-15T10:00:00.000Z'
recording:
id: 1234567
type: Message
status: active
title: Project Kickoff
creator:
id: 99
name: Alice Smith
details: {}
MessageUpdated:
name: message_updated
title: Message Updated
summary: An existing message was updated
payload:
$ref: '#/components/schemas/WebhookPayload'
MessageArchived:
name: message_archived
title: Message Archived
summary: A message was archived
payload:
$ref: '#/components/schemas/WebhookPayload'
MessageTrashed:
name: message_trashed
title: Message Trashed
summary: A message was moved to trash
payload:
$ref: '#/components/schemas/WebhookPayload'
TodoCreated:
name: todo_created
title: To-Do Created
summary: A new to-do was created
payload:
$ref: '#/components/schemas/WebhookPayload'
TodoUpdated:
name: todo_updated
title: To-Do Updated
summary: An existing to-do was updated
payload:
$ref: '#/components/schemas/WebhookPayload'
TodoCompleted:
name: todo_completed
title: To-Do Completed
summary: A to-do was marked as completed
payload:
$ref: '#/components/schemas/WebhookPayload'
TodoUncompleted:
name: todo_uncompleted
title: To-Do Uncompleted
summary: A to-do was marked as incomplete
payload:
$ref: '#/components/schemas/WebhookPayload'
TodoArchived:
name: todo_archived
title: To-Do Archived
summary: A to-do was archived
payload:
$ref: '#/components/schemas/WebhookPayload'
TodoTrashed:
name: todo_trashed
title: To-Do Trashed
summary: A to-do was moved to trash
payload:
$ref: '#/components/schemas/WebhookPayload'
TodolistCreated:
name: todolist_created
title: To-Do List Created
summary: A new to-do list was created
payload:
$ref: '#/components/schemas/WebhookPayload'
TodolistUpdated:
name: todolist_updated
title: To-Do List Updated
summary: An existing to-do list was updated
payload:
$ref: '#/components/schemas/WebhookPayload'
TodolistArchived:
name: todolist_archived
title: To-Do List Archived
summary: A to-do list was archived
payload:
$ref: '#/components/schemas/WebhookPayload'
TodolistTrashed:
name: todolist_trashed
title: To-Do List Trashed
summary: A to-do list was moved to trash
payload:
$ref: '#/components/schemas/WebhookPayload'
DocumentCreated:
name: document_created
title: Document Created
summary: A new document was created in a vault
payload:
$ref: '#/components/schemas/WebhookPayload'
DocumentUpdated:
name: document_updated
title: Document Updated
summary: An existing document was updated
payload:
$ref: '#/components/schemas/WebhookPayload'
DocumentArchived:
name: document_archived
title: Document Archived
summary: A document was archived
payload:
$ref: '#/components/schemas/WebhookPayload'
DocumentTrashed:
name: document_trashed
title: Document Trashed
summary: A document was moved to trash
payload:
$ref: '#/components/schemas/WebhookPayload'
CommentCreated:
name: comment_created
title: Comment Created
summary: A new comment was posted on a recording
payload:
$ref: '#/components/schemas/WebhookPayload'
CommentUpdated:
name: comment_updated
title: Comment Updated
summary: An existing comment was updated
payload:
$ref: '#/components/schemas/WebhookPayload'
CommentTrashed:
name: comment_trashed
title: Comment Trashed
summary: A comment was moved to trash
payload:
$ref: '#/components/schemas/WebhookPayload'
CardCreated:
name: card_created
title: Card Created
summary: A new card was created on a card table
payload:
$ref: '#/components/schemas/WebhookPayload'
CardUpdated:
name: card_updated
title: Card Updated
summary: An existing card was updated or moved
payload:
$ref: '#/components/schemas/WebhookPayload'
CardArchived:
name: card_archived
title: Card Archived
summary: A card was archived
payload:
$ref: '#/components/schemas/WebhookPayload'
CardTrashed:
name: card_trashed
title: Card Trashed
summary: A card was moved to trash
payload:
$ref: '#/components/schemas/WebhookPayload'
ScheduleEntryCreated:
name: schedule_entry_created
title: Schedule Entry Created
summary: A new schedule entry was created
payload:
$ref: '#/components/schemas/WebhookPayload'
ScheduleEntryUpdated:
name: schedule_entry_updated
title: Schedule Entry Updated
summary: An existing schedule entry was updated
payload:
$ref: '#/components/schemas/WebhookPayload'
ScheduleEntryArchived:
name: schedule_entry_archived
title: Schedule Entry Archived
summary: A schedule entry was archived
payload:
$ref: '#/components/schemas/WebhookPayload'
ScheduleEntryTrashed:
name: schedule_entry_trashed
title: Schedule Entry Trashed
summary: A schedule entry was moved to trash
payload:
$ref: '#/components/schemas/WebhookPayload'
UploadCreated:
name: upload_created
title: Upload Created
summary: A new file upload was created in a vault
payload:
$ref: '#/components/schemas/WebhookPayload'
UploadUpdated:
name: upload_updated
title: Upload Updated
summary: An existing upload was updated
payload:
$ref: '#/components/schemas/WebhookPayload'
UploadArchived:
name: upload_archived
title: Upload Archived
summary: An upload was archived
payload:
$ref: '#/components/schemas/WebhookPayload'
UploadTrashed:
name: upload_trashed
title: Upload Trashed
summary: An upload was moved to trash
payload:
$ref: '#/components/schemas/WebhookPayload'
QuestionAnswerCreated:
name: question_answer_created
title: Question Answer Created
summary: A new answer was submitted to an automatic check-in question
payload:
$ref: '#/components/schemas/WebhookPayload'
QuestionAnswerUpdated:
name: question_answer_updated
title: Question Answer Updated
summary: An answer to an automatic check-in question was updated
payload:
$ref: '#/components/schemas/WebhookPayload'
QuestionPaused:
name: question_paused
title: Question Paused
summary: An automatic check-in question was paused
payload:
$ref: '#/components/schemas/WebhookPayload'
QuestionResumed:
name: question_resumed
title: Question Resumed
summary: A paused automatic check-in question was resumed
payload:
$ref: '#/components/schemas/WebhookPayload'
schemas:
WebhookPayload:
type: object
required: [id, kind, created_at, recording, creator]
description: >-
Standard JSON payload delivered by Basecamp to the registered webhook
endpoint for all event types. The recording field contains the full
representation of the resource that triggered the event.
properties:
id:
type: integer
description: Unique identifier for this webhook event
kind:
type: string
description: >-
Event type descriptor in the format {resource}_{action}, such as
message_created, todo_completed, or document_updated.
examples:
- message_created
- todo_completed
- comment_created
- card_updated
created_at:
type: string
format: date-time
description: ISO 8601 timestamp when the event occurred
recording:
$ref: '#/components/schemas/RecordingPayload'
creator:
$ref: '#/components/schemas/PersonPayload'
details:
type: object
description: >-
Event-specific metadata. For copy and move events this includes a
copy object referencing the duplicated item. Contents vary by event
kind.
additionalProperties: true
RecordingPayload:
type: object
description: >-
Full representation of the Basecamp resource that triggered the webhook
event. The exact fields present depend on the resource type.
properties:
id:
type: integer
description: Recording ID
status:
type: string
description: Recording status at the time of the event
enum: [active, archived, trashed]
visible_to_clients:
type: boolean
description: Whether the recording is visible to client users
created_at:
type: string
format: date-time
description: Timestamp when the recording was created
updated_at:
type: string
format: date-time
description: Timestamp when the recording was last updated
title:
type: string
description: Title or summary of the recording
inherits_status:
type: boolean
description: Whether the recording inherits status from a parent
type:
type: string
description: Recording type (Message, Todo, Document, Comment, etc.)
url:
type: string
format: uri
description: API URL for this recording
app_url:
type: string
format: uri
description: Web URL for this recording
bucket:
$ref: '#/components/schemas/BucketPayload'
creator:
$ref: '#/components/schemas/PersonPayload'
content:
type: string
description: HTML-formatted body content (for messages, documents, comments)
completed:
type: boolean
description: Whether the to-do is completed (for Todo type)
due_on:
type: string
format: date
description: Due date for to-dos and schedule entries
nullable: true
starts_at:
type: string
format: date-time
description: Start time for schedule entries
ends_at:
type: string
format: date-time
description: End time for schedule entries
assignees:
type: array
description: Assigned people (for Todos)
items:
$ref: '#/components/schemas/PersonPayload'
BucketPayload:
type: object
description: Reference to the Basecamp project containing the recording
properties:
id:
type: integer
description: Project ID
name:
type: string
description: Project name
type:
type: string
description: Always "Project"
PersonPayload:
type: object
description: Reference to the Basecamp user who created or triggered the event
properties:
id:
type: integer
description: Person ID
attachable_sgid:
type: string
description: Signed global ID
name:
type: string
description: Full name
email_address:
type: string
format: email
description: Email address
personable_type:
type: string
description: Type of personable (User, Client)
title:
type: string
description: Job title
avatar_url:
type: string
format: uri
description: URL to avatar image
created_at:
type: string
format: date-time
description: Account creation timestamp
updated_at:
type: string
format: date-time
description: Last update timestamp
admin:
type: boolean
description: Whether the person is an account administrator
time_zone:
type: string
description: IANA time zone name