Grist webhooks API

Document changes can trigger requests to URLs called webhooks.

Operations 6

GET /docs/{docId}/webhooks Webhooks associated with a document #
POST /docs/{docId}/webhooks Create new webhooks for a document #
PATCH /docs/{docId}/webhooks/{webhookId} Modify a webhook #
DELETE /docs/{docId}/webhooks/{webhookId} Remove a webhook #
DELETE /docs/{docId}/webhooks/queue Empty a document's queue of undelivered payloads #
DELETE /docs/{docId}/webhooks/queue/{webhookId} Clear queue for a specific webhook #

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/grist-webhooks-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

grist-webhooks-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  description: 'An API for manipulating Grist sites, workspaces, and documents.


    # Authentication

    <SecurityDefinitions />

    '
  version: 1.0.1
  title: Grist attachments Webhooks API
servers:
- url: https://{gristhost}/api
  variables:
    subdomain:
      description: The team name, or `docs` for personal areas
      default: docs
security:
- ApiKey: []
tags:
- name: webhooks
  description: Document changes can trigger requests to URLs called webhooks.
paths:
  /docs/{docId}/webhooks:
    get:
      operationId: listWebhooks
      tags:
      - webhooks
      summary: Webhooks associated with a document
      description: 'Returns all webhooks configured for this document, including their

        settings and delivery statistics.

        '
      parameters:
      - $ref: '#/components/parameters/docIdPathParam'
      responses:
        200:
          description: A list of webhooks.
          content:
            application/json:
              schema:
                type: object
                required:
                - webhooks
                properties:
                  webhooks:
                    $ref: '#/components/schemas/Webhooks'
    post:
      operationId: createWebhooks
      tags:
      - webhooks
      summary: Create new webhooks for a document
      description: 'Creates one or more webhooks that will POST to specified URLs when

        data in the document changes. Returns the IDs of the created webhooks.

        '
      parameters:
      - $ref: '#/components/parameters/docIdPathParam'
      requestBody:
        description: an array of webhook settings
        content:
          application/json:
            schema:
              type: object
              required:
              - webhooks
              properties:
                webhooks:
                  type: array
                  items:
                    type: object
                    required:
                    - fields
                    properties:
                      fields:
                        $ref: '#/components/schemas/WebhookPartialFields'
      responses:
        200:
          description: Success
          content:
            application/json:
              schema:
                type: object
                required:
                - webhooks
                properties:
                  webhooks:
                    type: array
                    items:
                      $ref: '#/components/schemas/WebhookId'
  /docs/{docId}/webhooks/{webhookId}:
    patch:
      operationId: modifyWebhook
      tags:
      - webhooks
      summary: Modify a webhook
      description: 'Update the configuration of an existing webhook, such as its URL,

        enabled state, or event types.

        '
      parameters:
      - $ref: '#/components/parameters/docIdPathParam'
      - in: path
        name: webhookId
        schema:
          type: string
        required: true
      requestBody:
        description: the changes to make
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WebhookPartialFields'
      responses:
        200:
          description: Webhook updated successfully. Returns empty body.
    delete:
      operationId: deleteWebhook
      tags:
      - webhooks
      summary: Remove a webhook
      description: 'Permanently delete a webhook. Any pending deliveries in the queue

        for this webhook will also be removed.

        '
      parameters:
      - $ref: '#/components/parameters/docIdPathParam'
      - in: path
        name: webhookId
        schema:
          type: string
        required: true
      responses:
        200:
          description: Webhook deleted successfully.
          content:
            application/json:
              schema:
                type: object
                required:
                - success
                properties:
                  success:
                    type: boolean
                    example: true
  /docs/{docId}/webhooks/queue:
    delete:
      operationId: clearWebhookQueue
      tags:
      - webhooks
      summary: Empty a document's queue of undelivered payloads
      description: 'Clear all pending webhook deliveries for this document. Use this

        if the queue has built up due to unreachable endpoints.

        '
      parameters:
      - $ref: '#/components/parameters/docIdPathParam'
      responses:
        200:
          description: Queue cleared successfully. Returns empty body.
  /docs/{docId}/webhooks/queue/{webhookId}:
    delete:
      operationId: clearWebhookQueueForWebhook
      tags:
      - webhooks
      summary: Clear queue for a specific webhook
      description: 'Clear the queue of pending payloads for a specific webhook.

        Only document owners can call this endpoint.

        '
      parameters:
      - $ref: '#/components/parameters/docIdPathParam'
      - name: webhookId
        in: path
        required: true
        schema:
          type: string
        description: ID of the webhook
      responses:
        200:
          description: Queue cleared
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: true
components:
  schemas:
    WebhookId:
      type: object
      required:
      - id
      properties:
        id:
          type: string
          description: Webhook identifier
          example: xxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx
    WebhookUsage:
      type:
      - object
      - 'null'
      required:
      - numWaiting
      - status
      properties:
        numWaiting:
          type: integer
        status:
          type: string
          example: idle
        updatedTime:
          type:
          - number
          - 'null'
          format: UNIX epoch in milliseconds
          example: 1685637500424
        lastSuccessTime:
          type:
          - number
          - 'null'
          format: UNIX epoch in milliseconds
          example: 1685637500424
        lastFailureTime:
          type:
          - number
          - 'null'
          format: UNIX epoch in milliseconds
          example: 1685637500424
        lastErrorMessage:
          type:
          - string
          - 'null'
          example: null
        lastHttpStatus:
          type:
          - number
          - 'null'
          example: 200
        lastEventBatch:
          $ref: '#/components/schemas/WebhookBatchStatus'
    Webhooks:
      type: array
      items:
        $ref: '#/components/schemas/Webhook'
    WebhookRequiredFields:
      type: object
      required:
      - name
      - memo
      - url
      - enabled
      - unsubscribeKey
      - eventTypes
      - isReadyColumn
      - tableId
      properties:
        unsubscribeKey:
          type: string
    WebhookBatchStatus:
      type:
      - object
      - 'null'
      required:
      - size
      - attempts
      - status
      properties:
        size:
          type: number
          example: 1
        attempts:
          type: number
          example: 1
        errorMessage:
          type:
          - string
          - 'null'
          example: null
        httpStatus:
          type: number
          example: 200
        status:
          type: string
          example: success
    Webhook:
      type: object
      properties:
        id:
          type: string
          format: uuid
          example: xxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx
        fields:
          $ref: '#/components/schemas/WebhookFields'
        usage:
          $ref: '#/components/schemas/WebhookUsage'
    WebhookFields:
      allOf:
      - $ref: '#/components/schemas/WebhookPartialFields'
      - $ref: '#/components/schemas/WebhookRequiredFields'
    WebhookPartialFields:
      type: object
      properties:
        name:
          type:
          - string
          - 'null'
          example: new-project-email
        memo:
          type:
          - string
          - 'null'
          example: Send an email when a project is added
        url:
          type: string
          format: uri
          example: https://example.com/webhook/123
        enabled:
          type: boolean
        eventTypes:
          type: array
          items:
            type: string
          example:
          - add
          - update
        isReadyColumn:
          type:
          - string
          - 'null'
          example: null
        tableId:
          type: string
          example: Projects
  parameters:
    docIdPathParam:
      in: path
      name: docId
      schema:
        type: string
      description: A string id (UUID)
      required: true
  securitySchemes:
    ApiKey:
      type: http
      scheme: bearer
      bearerFormat: 'Authorization: Bearer XXXXXXXXXXX'
      description: Access to the Grist API is controlled by an Authorization header, which should contain the word 'Bearer', followed by a space, followed by your API key.