Basecamp Webhooks API

Manage webhook subscriptions for a project

OpenAPI Specification

basecamp-webhooks-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Basecamp Authorization Webhooks 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: Webhooks
  description: Manage webhook subscriptions for a project
paths:
  /buckets/{projectId}/webhooks.json:
    get:
      operationId: listWebhooks
      summary: List webhooks
      description: Returns all webhooks configured for the project with the given ID, including delivery history for each webhook.
      tags:
      - Webhooks
      parameters:
      - $ref: '#/components/parameters/ProjectId'
      responses:
        '200':
          description: List of webhooks
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Webhook'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    post:
      operationId: createWebhook
      summary: Create a webhook
      description: Creates a new webhook for the specified project. The payload URL must be HTTPS. Optionally restrict to specific resource types; defaults to all types.
      tags:
      - Webhooks
      parameters:
      - $ref: '#/components/parameters/ProjectId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WebhookCreateRequest'
      responses:
        '201':
          description: Webhook created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Webhook'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /webhooks/{webhookId}.json:
    get:
      operationId: getWebhook
      summary: Get a webhook
      description: Returns the webhook with the given ID and its recent delivery history.
      tags:
      - Webhooks
      parameters:
      - $ref: '#/components/parameters/WebhookId'
      responses:
        '200':
          description: Webhook details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Webhook'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      operationId: updateWebhook
      summary: Update a webhook
      description: Updates the payload URL, active status, or subscribed types of the specified webhook.
      tags:
      - Webhooks
      parameters:
      - $ref: '#/components/parameters/WebhookId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WebhookUpdateRequest'
      responses:
        '200':
          description: Updated webhook
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Webhook'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    delete:
      operationId: deleteWebhook
      summary: Delete a webhook
      description: Permanently deletes the webhook with the given ID.
      tags:
      - Webhooks
      parameters:
      - $ref: '#/components/parameters/WebhookId'
      responses:
        '204':
          description: Webhook deleted
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
components:
  schemas:
    WebhookUpdateRequest:
      type: object
      properties:
        payload_url:
          type: string
          format: uri
          description: Updated HTTPS URL for event delivery
        types:
          type: array
          description: Updated list of subscribed resource types
          items:
            type: string
        active:
          type: boolean
          description: Whether the webhook should be active
    WebhookCreateRequest:
      type: object
      required:
      - payload_url
      properties:
        payload_url:
          type: string
          format: uri
          description: HTTPS URL to receive webhook event notifications
        types:
          type: array
          description: Resource types to subscribe to. Omit to subscribe to all types.
          items:
            type: string
            enum:
            - Message
            - Todo
            - Todolist
            - Document
            - Comment
            - Kanban::Card
            - Schedule::Entry
            - Vault
            - Upload
            - Client::Forward
            - Client::Correspondence
            - Question
            - Question::Answer
            - Inbox::Forward
        active:
          type: boolean
          description: Whether the webhook should be active upon creation
          default: true
    Webhook:
      type: object
      properties:
        id:
          type: integer
          description: Webhook ID
        active:
          type: boolean
          description: Whether this webhook is currently active
        created_at:
          type: string
          format: date-time
          description: Timestamp when the webhook was created
        updated_at:
          type: string
          format: date-time
          description: Timestamp when the webhook was last updated
        payload_url:
          type: string
          format: uri
          description: HTTPS URL where Basecamp sends event notifications
        types:
          type: array
          description: Resource types that trigger this webhook
          items:
            type: string
        url:
          type: string
          format: uri
          description: API URL for this webhook
        app_url:
          type: string
          format: uri
          description: Web URL for this webhook configuration
    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'
    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:
    WebhookId:
      name: webhookId
      in: path
      required: true
      description: Unique identifier of the webhook
      schema:
        type: integer
    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