Airtable Webhooks API

Subscribe to real-time change notifications on bases

Documentation

📖
Documentation
https://airtable.com/developers/web/api/introduction
📖
GettingStarted
https://support.airtable.com/docs/getting-started-with-airtables-web-api
📖
Authentication
https://airtable.com/developers/web/api/authentication
📖
Authentication
https://airtable.com/developers/web/guides/personal-access-tokens
📖
Authentication
https://airtable.com/developers/web/guides/oauth-integrations
📖
Documentation
https://airtable.com/developers/web/api/webhooks-overview
📖
APIReference
https://airtable.com/developers/web/api/list-records
📖
APIReference
https://airtable.com/developers/web/api/update-record
📖
RateLimits
https://airtable.com/developers/web/api/rate-limits
📖
Documentation
https://airtable.com/developers/web/api/cursor-pagination
📖
Documentation
https://airtable.com/developers/web/api/field-model
📖
Documentation
https://airtable.com/developers/web/api/list-bases
📖
Documentation
https://airtable.com/developers/web/api/get-base-schema
📖
Documentation
https://airtable.com/developers/web/api/create-base
📖
Documentation
https://airtable.com/developers/web/api/create-table
📖
Documentation
https://airtable.com/developers/web/api/create-field
📖
APIReference
https://airtable.com/developers/web/api/update-table
📖
APIReference
https://airtable.com/developers/web/api/update-field
📖
Documentation
https://airtable.com/developers/web/api/scim-overview
📖
APIReference
https://airtable.com/developers/web/api/model/scim-user-schema
📖
APIReference
https://airtable.com/developers/web/api/create-scim-user
📖
APIReference
https://airtable.com/developers/web/api/get-scim-user
📖
APIReference
https://airtable.com/developers/web/api/put-scim-user
📖
APIReference
https://airtable.com/developers/web/api/delete-scim-user
📖
APIReference
https://airtable.com/developers/web/api/get-scim-group
📖
APIReference
https://airtable.com/developers/web/api/delete-scim-group
📖
GettingStarted
https://support.airtable.com/docs/managing-users-via-idp-sync

Specifications

Schemas & Data

Other Resources

OpenAPI Specification

airtable-webhooks-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Airtable Audit Logs Webhooks API
  description: The Airtable API can be used to integrate your data in Airtable with any external system. The API closely follows REST semantics, uses JSON to encode objects, and relies on standard HTTP codes to signal operation outcomes. It provides full CRUD operations on records, comment management, and webhook subscriptions for real-time notifications.
  version: 1.0.0
  contact:
    name: Airtable
    url: https://airtable.com/developers
    email: support@airtable.com
  license:
    name: Proprietary
    url: https://airtable.com/tos
  termsOfService: https://airtable.com/tos
servers:
- url: https://api.airtable.com/v0
  description: Airtable API v0 production server
security:
- bearerAuth: []
tags:
- name: Webhooks
  description: Subscribe to real-time change notifications on bases
paths:
  /bases/{baseId}/webhooks:
    get:
      operationId: listWebhooks
      summary: Airtable List Webhooks for a Base
      description: Returns a list of all webhooks registered for the specified base. Includes webhook configuration, status, and expiration information.
      tags:
      - Webhooks
      parameters:
      - $ref: '#/components/parameters/baseIdPath'
      responses:
        '200':
          description: A list of webhooks.
          content:
            application/json:
              schema:
                type: object
                properties:
                  webhooks:
                    type: array
                    items:
                      $ref: '#/components/schemas/Webhook'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
    post:
      operationId: createWebhook
      summary: Airtable Create a Webhook for a Base
      description: Creates a new webhook subscription for the specified base. Webhooks expire after 7 days and must be refreshed. The response includes a MAC secret used to verify webhook notification payloads. Requires OAuth authentication with the webhook:manage scope.
      tags:
      - Webhooks
      parameters:
      - $ref: '#/components/parameters/baseIdPath'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WebhookCreateRequest'
      responses:
        '200':
          description: The created webhook with MAC secret.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WebhookCreateResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /bases/{baseId}/webhooks/{webhookId}:
    delete:
      operationId: deleteWebhook
      summary: Airtable Delete a Webhook
      description: Deletes an existing webhook subscription. The webhook will no longer send notifications after deletion.
      tags:
      - Webhooks
      parameters:
      - $ref: '#/components/parameters/baseIdPath'
      - name: webhookId
        in: path
        required: true
        description: The unique identifier of the webhook.
        schema:
          type: string
      responses:
        '200':
          description: Confirmation that the webhook was deleted.
          content:
            application/json:
              schema:
                type: object
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /bases/{baseId}/webhooks/{webhookId}/refresh:
    post:
      operationId: refreshWebhook
      summary: Airtable Refresh a Webhook
      description: Extends the expiration time of an existing webhook. Webhooks expire after 7 days of inactivity and must be periodically refreshed to remain active.
      tags:
      - Webhooks
      parameters:
      - $ref: '#/components/parameters/baseIdPath'
      - name: webhookId
        in: path
        required: true
        description: The unique identifier of the webhook.
        schema:
          type: string
      responses:
        '200':
          description: The refreshed webhook with new expiration time.
          content:
            application/json:
              schema:
                type: object
                properties:
                  expirationTime:
                    type: string
                    format: date-time
                    description: The new expiration time for the webhook.
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /bases/{baseId}/webhooks/{webhookId}/payloads:
    get:
      operationId: listWebhookPayloads
      summary: Airtable List Webhook Payloads
      description: Returns a list of payloads that have been generated for the specified webhook. Payloads are returned in chronological order and can be paginated using a cursor.
      tags:
      - Webhooks
      parameters:
      - $ref: '#/components/parameters/baseIdPath'
      - name: webhookId
        in: path
        required: true
        description: The unique identifier of the webhook.
        schema:
          type: string
      - name: cursor
        in: query
        required: false
        description: A cursor for pagination. Pass the cursor from the previous response to get the next page.
        schema:
          type: string
      responses:
        '200':
          description: A list of webhook payloads.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WebhookPayloadList'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
components:
  schemas:
    WebhookSpecification:
      type: object
      description: The specification defining what changes the webhook monitors.
      properties:
        options:
          type: object
          properties:
            filters:
              type: object
              description: Filters to narrow down which changes trigger the webhook.
              properties:
                sourceOptions:
                  type: object
                  properties:
                    formSubmission:
                      type: object
                      properties:
                        tableId:
                          type: string
                        viewId:
                          type: string
                    formPageSubmission:
                      type: object
                      properties:
                        pageId:
                          type: string
                dataTypes:
                  type: array
                  description: The types of data changes to monitor.
                  items:
                    type: string
                    enum:
                    - tableData
                    - tableFields
                    - tableMetadata
                recordChangeScope:
                  type: string
                  description: The scope of record changes to monitor.
                watchDataInFieldIds:
                  type: array
                  description: Specific field IDs to watch for changes.
                  items:
                    type: string
                watchSchemasOfFieldIds:
                  type: array
                  description: Specific field IDs whose schema changes to watch.
                  items:
                    type: string
    WebhookPayload:
      type: object
      description: A single webhook payload representing a batch of changes.
      properties:
        timestamp:
          type: string
          format: date-time
          description: The time when the payload was generated.
        baseTransactionNumber:
          type: integer
          description: The transaction number for this batch of changes.
        payloadFormat:
          type: string
          description: The format version of the payload.
        actionMetadata:
          type: object
          description: Metadata about the action that triggered the webhook.
          properties:
            source:
              type: string
              description: The source of the action (e.g., client, publicApi, formSubmission).
            sourceMetadata:
              type: object
              description: Additional metadata about the source.
        changedTablesById:
          type: object
          description: A mapping of table IDs to their changes.
          additionalProperties:
            type: object
            properties:
              changedRecordsById:
                type: object
                additionalProperties:
                  type: object
              createdRecordsById:
                type: object
                additionalProperties:
                  type: object
              destroyedRecordIds:
                type: array
                items:
                  type: string
              changedFieldsById:
                type: object
                additionalProperties:
                  type: object
              createdFieldsById:
                type: object
                additionalProperties:
                  type: object
              destroyedFieldIds:
                type: array
                items:
                  type: string
              changedViewsById:
                type: object
                additionalProperties:
                  type: object
              createdViewsById:
                type: object
                additionalProperties:
                  type: object
              destroyedViewIds:
                type: array
                items:
                  type: string
    WebhookCreateResponse:
      type: object
      description: Response after creating a new webhook, including the MAC secret.
      properties:
        id:
          type: string
          description: The unique identifier of the newly created webhook.
        macSecretBase64:
          type: string
          description: The Base64-encoded MAC secret used to verify the authenticity of webhook notification payloads.
        expirationTime:
          type: string
          format: date-time
          description: The time when the webhook will expire if not refreshed.
      required:
      - id
      - macSecretBase64
    WebhookCreateRequest:
      type: object
      description: Request body for creating a new webhook.
      properties:
        notificationUrl:
          type: string
          format: uri
          description: The URL that will receive POST notifications when changes occur.
        specification:
          $ref: '#/components/schemas/WebhookSpecification'
      required:
      - notificationUrl
    Webhook:
      type: object
      description: A webhook subscription on an Airtable base.
      properties:
        id:
          type: string
          description: The unique identifier of the webhook.
        type:
          type: string
          description: The type of the webhook (e.g., client).
        isHookEnabled:
          type: boolean
          description: Whether the webhook is currently active.
        notificationUrl:
          type: string
          format: uri
          description: The URL that receives webhook notifications.
        cursorForNextPayload:
          type: integer
          description: The cursor position for the next unread payload.
        areNotificationsEnabled:
          type: boolean
          description: Whether notifications are currently being sent.
        createdTime:
          type: string
          format: date-time
          description: The time when the webhook was created.
        expirationTime:
          type: string
          format: date-time
          description: The time when the webhook will expire if not refreshed.
        specification:
          $ref: '#/components/schemas/WebhookSpecification'
      required:
      - id
      - type
    Error:
      type: object
      description: An error response from the Airtable API.
      properties:
        error:
          type: object
          properties:
            type:
              type: string
              description: The type of error (e.g., AUTHENTICATION_REQUIRED, NOT_FOUND, INVALID_REQUEST).
            message:
              type: string
              description: A human-readable description of the error.
          required:
          - type
          - message
    WebhookPayloadList:
      type: object
      description: A paginated list of webhook payloads.
      properties:
        payloads:
          type: array
          items:
            $ref: '#/components/schemas/WebhookPayload'
        cursor:
          type: integer
          description: The cursor for fetching the next page of payloads.
        mightHaveMore:
          type: boolean
          description: Whether there may be more payloads to fetch.
      required:
      - payloads
  parameters:
    baseIdPath:
      name: baseId
      in: path
      required: true
      description: The unique identifier of the base (starts with 'app').
      schema:
        type: string
        pattern: ^app[a-zA-Z0-9]+$
  responses:
    Unauthorized:
      description: Authentication credentials are missing or invalid.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    TooManyRequests:
      description: Rate limit exceeded. The API allows 5 requests per second per base.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFound:
      description: The requested resource was not found.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Forbidden:
      description: The authenticated user does not have permission to perform this action.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    UnprocessableEntity:
      description: The request body contains invalid data.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: Airtable uses Bearer token authentication. Provide a personal access token or OAuth access token in the Authorization header.
externalDocs:
  description: Airtable Web API Documentation
  url: https://airtable.com/developers/web/api/introduction