Process Street Data Set Incoming Webhooks API

An incoming webhook triggers data set row creation or updates from external systems. Use these endpoints to create, view, update, and delete incoming webhooks for a data set.

Documentation

Specifications

Other Resources

OpenAPI Specification

process-street-data-set-incoming-webhooks-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Process Street Public Attachments Data Set Incoming Webhooks API
  version: '1.1'
  description: "The Process Street API is organized around REST. Our API has predictable resource-oriented URLs,\naccepts JSON-encoded request bodies, returns JSON-encoded responses, and uses standard HTTP response\ncodes, authentication, and verbs.\n\nAn [MCP server](https://www.process.st/help/docs/mcp-server/) is also available for integrating with AI agents and tools.\n\n## Core concepts\n\n**Workflow vs Workflow Run.** A **Workflow** (sometimes called a \"playbook\" or template) is the reusable\ndefinition — tasks, form fields, logic, automations. A **Workflow Run** (sometimes called a \"checklist\")\nis one *instance* of running a Workflow. You list available templates via `listWorkflows`; you start one\nvia `createWorkflowRun` (or by scheduling); and you read or update the live state of an in-progress run\nvia the Workflow Runs / Tasks / Form Field Values endpoints. The two are easy to confuse — when in doubt,\n\"Workflow\" is the *blueprint*, \"Workflow Run\" is *one execution*.\n\n**Pages** are similar but standalone: a Page is a content document (no tasks/form fields). A\n**Page Revision** is a versioned snapshot of its content.\n\n## IDs\n\nAll resource IDs are opaque 22-character URL-safe strings (Muids — a base64-encoded UUID). Treat them\nas opaque tokens. Do not parse them, attempt to sort by them, or assume any internal structure. You can\ncompare two IDs for equality with a plain string comparison.\n\n## Dates and times\n\nAll timestamps in requests and responses are ISO-8601, UTC, with millisecond precision\n(e.g. `2024-09-15T14:32:00.000Z`). For date-only fields (typically due dates), use a calendar date\n(`2024-09-15`).\n\n## Pagination\n\nList endpoints page through results using an opaque cursor named `_` (yes, just an underscore).\nThe flow:\n\n1. Call the list endpoint without `_` to get the first page.\n2. Each response includes a `links[]` array. If there are more pages, you'll find an entry with\n   `name: \"next\"` whose `href` is a fully-formed URL you can `GET` directly.\n3. Keep following `next.href` until the `next` link is absent — that's the end.\n\nYou can also reuse the `_` value from one response by passing it as the `_` query parameter on the\nnext request, but **following the `href` is simpler and forward-compatible**.\n\n## Authentication\n\nEvery request must include an API key as `X-API-KEY: <your-key>`. Generate keys from your\norganization settings in the Process Street app. Each key carries the permissions of the user that\ncreated it.\n\n## Idempotency and retries\n\n- `GET` requests are safe to retry on any error.\n- `PUT` requests are idempotent — calling them twice with the same body is equivalent to calling once.\n  Safe to retry on `5xx`.\n- `DELETE` is idempotent (deleting an already-deleted resource returns `404`, which is fine to ignore).\n- `POST` is generally **not** safe to blindly retry. For workflow runs, attach a `referenceId`\n  on create — calling `createWorkflowRun` twice with the same `referenceId` will return the existing\n  run instead of creating a duplicate.\n\n## Errors\n\nErrors are returned as a JSON object with this shape:\n\n```json\n{\n  \"error\": \"human-readable message\",\n  \"errorCode\": \"NotFound\",\n  \"requestId\": \"abc123…\",\n  \"details\": { \"fieldPath\": \"what went wrong\" }\n}\n```\n\n**When present**, branch on `errorCode` rather than regex'ing `error` (we may rewrite the wording). Include\n`requestId` if you contact support so we can find the request in our logs.\n\n`errorCode` and `requestId` are populated on responses generated by the public API exception handler, which\ncovers the great majority of errors. A few low-level failures (e.g. JSON parse failures caught before the\nhandler runs, framework-level routing errors) may return an `ErrorInfo` without these fields. In that case,\nfall back to the HTTP status code (`400`/`401`/`403`/`404`/`409`/`422`/`429`/`5xx`) — its semantics match\nthe corresponding `errorCode` value.\n\n## Rate limits\n\nAll requests are subject to rate limits. If you receive a `429` response, wait for the duration\nspecified in the `Retry-After` header before retrying.\n"
servers:
- url: https://public-api.process.st/api/v1.1
tags:
- name: Data Set Incoming Webhooks
  description: 'An incoming webhook triggers data set row creation or updates from external systems.

    Use these endpoints to create, view, update, and delete incoming webhooks for a data set.'
  externalDocs:
    url: https://www.process.st/help/docs/data-sets-incoming-webhooks/
    description: Process Street help article
paths:
  /data-sets/{dataSetId}/incoming-webhooks:
    get:
      tags:
      - Data Set Incoming Webhooks
      summary: List incoming webhooks for a data set
      description: Returns all non-deleted incoming webhooks for a data set.
      operationId: listDataSetIncomingWebhooks
      parameters:
      - name: dataSetId
        in: path
        description: The ID of the Data Set
        required: true
        schema:
          type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicApiDataSetIncomingWebhookListResponse'
        default:
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorInfo'
      security:
      - apiKeyAuth: []
      - httpAuth: []
    post:
      tags:
      - Data Set Incoming Webhooks
      summary: Create an incoming webhook for a data set
      description: 'Creates an incoming webhook for a data set. When the webhook URL receives a JSON payload,

        it creates or updates data set rows using the configured column mappings.


        **config.columns** maps data set column IDs to JSON path expressions in the incoming payload.

        Each key is a column ID (Muid), each value is a JSON path (e.g. `$.contact.email`).


        **config.keyColumn** (optional) specifies a column used as a unique key for upserts.

        When set, incoming payloads update existing rows matching the key value.

        When absent, every payload creates a new row.'
      operationId: createDataSetIncomingWebhook
      parameters:
      - name: dataSetId
        in: path
        description: The ID of the Data Set
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateDataSetIncomingWebhookRequest'
            examples:
              Create new rows:
                summary: Webhook that always creates new data set rows from incoming payloads
                value:
                  name: CRM Contact Sync
                  automationApp: Make
                  config:
                    columns:
                      gcWPxsRjNNTeZqaTsBpLhg: $.contact.name
                      ocsAkBEFkTih7YpuSfJEnw: $.contact.email
                      kR5mHvDdCCqh3YpuSfJEnw: $.contact.company
              Upsert by email:
                summary: Webhook that updates existing rows matching the key column value, or creates new rows
                value:
                  name: CRM Contact Upsert
                  automationApp: Make
                  config:
                    columns:
                      columnId1: $.contact.name
                      columnId2: $.contact.email
                      columnId3: $.contact.company
                    keyColumn: ocsAkBEFkTih7YpuSfJEnw
        required: true
      responses:
        '201':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicApiDataSetIncomingWebhookResponse'
        '400':
          description: 'Invalid value for: body'
          content:
            text/plain:
              schema:
                type: string
        default:
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorInfo'
      security:
      - apiKeyAuth: []
      - httpAuth: []
  /data-sets/{dataSetId}/incoming-webhooks/{webhookId}:
    get:
      tags:
      - Data Set Incoming Webhooks
      summary: Get an incoming webhook for a data set
      description: Returns an incoming webhook by its ID for a data set.
      operationId: getDataSetIncomingWebhook
      parameters:
      - name: dataSetId
        in: path
        description: The ID of the Data Set
        required: true
        schema:
          type: string
      - name: webhookId
        in: path
        description: The ID of the Webhook
        required: true
        schema:
          type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicApiDataSetIncomingWebhookResponse'
        default:
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorInfo'
      security:
      - apiKeyAuth: []
      - httpAuth: []
    put:
      tags:
      - Data Set Incoming Webhooks
      summary: Update an incoming webhook for a data set
      description: 'Updates an incoming webhook for a data set. PUT semantics: all fields must be provided. Returns the updated webhook.


        See the create endpoint for details on `config.columns` and `config.keyColumn`.'
      operationId: updateDataSetIncomingWebhook
      parameters:
      - name: dataSetId
        in: path
        description: The ID of the Data Set
        required: true
        schema:
          type: string
      - name: webhookId
        in: path
        description: The ID of the Webhook
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateDataSetIncomingWebhookRequest'
        required: true
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicApiDataSetIncomingWebhookResponse'
        '400':
          description: 'Invalid value for: body'
          content:
            text/plain:
              schema:
                type: string
        default:
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorInfo'
      security:
      - apiKeyAuth: []
      - httpAuth: []
    delete:
      tags:
      - Data Set Incoming Webhooks
      summary: Delete an incoming webhook for a data set
      description: Soft-deletes an incoming webhook for a data set. Subsequent GET requests will return 404.
      operationId: deleteDataSetIncomingWebhook
      parameters:
      - name: dataSetId
        in: path
        description: The ID of the Data Set
        required: true
        schema:
          type: string
      - name: webhookId
        in: path
        description: The ID of the Webhook
        required: true
        schema:
          type: string
      responses:
        '204':
          description: ''
        default:
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorInfo'
      security:
      - apiKeyAuth: []
      - httpAuth: []
components:
  schemas:
    PublicApiDataSetIncomingWebhookListResponse:
      title: PublicApiDataSetIncomingWebhookListResponse
      type: object
      properties:
        data:
          description: The list of resources returned by this request.
          type: array
          items:
            title: PublicApiDataSetIncomingWebhook
            type: object
            required:
            - id
            - createdDate
            - createdBy
            - updatedDate
            - updatedBy
            - dataSetId
            - name
            - automationApp
            - status
            - url
            - config
            properties:
              id:
                title: EntityID
                description: The resource's ID.
                type: string
              createdDate:
                description: When the resource was first created. ISO-8601 UTC.
                type: string
                format: date-time
              createdBy:
                description: User who created the resource.
                examples:
                - id: iAaSNCU5lWLYGAi663hO8Q
                  email: jane.doe@example.com
                  username: Jane Doe
                type: object
                required:
                - id
                - email
                - username
                properties:
                  id:
                    title: EntityID
                    description: The resource's ID.
                    type: string
                  email:
                    description: The user's email address (also their login identifier).
                    type: string
                  username:
                    description: The user's display name (e.g. `Jane Doe`).
                    type: string
              updatedDate:
                description: When the resource was last modified. ISO-8601 UTC.
                type: string
                format: date-time
              updatedBy:
                description: User who last modified the resource.
                examples:
                - id: iAaSNCU5lWLYGAi663hO8Q
                  email: jane.doe@example.com
                  username: Jane Doe
                type: object
                required:
                - id
                - email
                - username
                properties:
                  id:
                    title: EntityID
                    description: The resource's ID.
                    type: string
                  email:
                    description: The user's email address (also their login identifier).
                    type: string
                  username:
                    description: The user's display name (e.g. `Jane Doe`).
                    type: string
              dataSetId:
                description: The ID of the Data Set
                examples:
                - hY06ZnQuqaVS-s1bEohGpw
                type: string
              name:
                description: Human-readable label for the webhook.
                type: string
              automationApp:
                description: Label of the automation app or integration source (e.g. `Zapier`, `Custom`).
                type: string
              status:
                description: Whether the incoming webhook is currently accepting payloads. `Active` — incoming requests at the webhook URL create or update data set rows. `Disabled` — the webhook URL is configured but requests are ignored.
                type: string
                enum:
                - Active
                - Disabled
              url:
                description: Public URL to POST payloads to. Include this in the upstream system's webhook config.
                type: string
              config:
                title: PublicApiDataSetIncomingWebhookConfig
                description: Field-specific configuration. Shape depends on `fieldType`.
                type: object
                required:
                - columns
                properties:
                  columns:
                    description: Cell values keyed by column ID.
                    type: object
                    additionalProperties:
                      type: string
                  keyColumn:
                    description: Name of the column used as the unique key when reconciling rows on upsert.
                    type: string
              links:
                description: Navigable HATEOAS links to related resources. Each entry has a `name` (RFC-5988 link relation like `self`, `edit`, `related`), an `href` URL, and a `type` (`Api` for callable endpoints, `App` for browser-facing URLs). Prefer following these `href` values over constructing URLs by hand.
                type: array
                items:
                  title: Link
                  description: A HATEOAS link to a related resource. Use these to navigate between resources without constructing URLs by hand.
                  type: object
                  required:
                  - name
                  - href
                  - type
                  properties:
                    name:
                      description: Standard link relation name (RFC 5988) indicating this link's role. Common values include `self`, `edit`, `related`, `previous`, `next`.
                      type: string
                    href:
                      title: Uri
                      description: URL of the linked resource.
                      examples:
                      - https://api.process.st/api/v1.1/resource/XXX
                      type: string
                    rel:
                      description: Optional. The kind of resource this link points to (e.g. `Workflow`, `Task`, `Comment`).
                      type: string
                      enum:
                      - Approval Task
                      - Approvals
                      - Assignees
                      - Comment
                      - Data Set Records
                      - Data Sets
                      - Form Field Values
                      - Subject Task
                      - Task
                      - Tasks
                      - Users
                      - Webhook
                      - Workflow
                      - Workflow Run
                    type:
                      description: Whether this link targets an API endpoint or a Process Street app URL. `Api` — a callable API endpoint you can fetch directly. `App` — a browser-facing URL in the Process Street UI.
                      type: string
                      enum:
                      - Api
                      - App
        links:
          description: 'Pagination links. When the result has more pages, look for an entry with `name: "next"` — its `href` is the URL to fetch the next page. Absence of `next` means there are no more pages. For single-resource responses this array is typically empty.'
          type: array
          items:
            title: Link
            description: A HATEOAS link to a related resource. Use these to navigate between resources without constructing URLs by hand.
            type: object
            required:
            - name
            - href
            - type
            properties:
              name:
                description: Standard link relation name (RFC 5988) indicating this link's role. Common values include `self`, `edit`, `related`, `previous`, `next`.
                type: string
              href:
                title: Uri
                description: URL of the linked resource.
                examples:
                - https://api.process.st/api/v1.1/resource/XXX
                type: string
              rel:
                description: Optional. The kind of resource this link points to (e.g. `Workflow`, `Task`, `Comment`).
                type: string
                enum:
                - Approval Task
                - Approvals
                - Assignees
                - Comment
                - Data Set Records
                - Data Sets
                - Form Field Values
                - Subject Task
                - Task
                - Tasks
                - Users
                - Webhook
                - Workflow
                - Workflow Run
              type:
                description: Whether this link targets an API endpoint or a Process Street app URL. `Api` — a callable API endpoint you can fetch directly. `App` — a browser-facing URL in the Process Street UI.
                type: string
                enum:
                - Api
                - App
    UpdateDataSetIncomingWebhookRequest:
      title: UpdateDataSetIncomingWebhookRequest
      type: object
      required:
      - name
      - automationApp
      - status
      - config
      properties:
        name:
          description: Display name.
          type: string
        automationApp:
          type: string
        status:
          description: "Incoming webhook lifecycle.\n\n- `Active` — the webhook accepts and processes incoming payloads.\n- `Disabled` — the URL still resolves but payloads are dropped without writing to the data set.\n- `Deleted` — the webhook is soft-deleted; only returned by endpoints that explicitly include\n  deleted records.\n"
          type: string
          enum:
          - Active
          - Disabled
          - Deleted
        config:
          title: DataSetIncomingWebhookConfigRequest
          description: Field-specific configuration. Shape depends on `fieldType`.
          type: object
          required:
          - columns
          properties:
            columns:
              description: Cell values keyed by column ID.
              type: object
              additionalProperties:
                type: string
            keyColumn:
              description: Name of the column used as the unique key when reconciling rows on upsert.
              type: string
    PublicApiDataSetIncomingWebhookResponse:
      title: PublicApiDataSetIncomingWebhookResponse
      type: object
      required:
      - data
      properties:
        data:
          title: PublicApiDataSetIncomingWebhook
          type: object
          required:
          - id
          - createdDate
          - createdBy
          - updatedDate
          - updatedBy
          - dataSetId
          - name
          - automationApp
          - status
          - url
          - config
          properties:
            id:
              title: EntityID
              description: The resource's ID.
              type: string
            createdDate:
              description: When the resource was first created. ISO-8601 UTC.
              type: string
              format: date-time
            createdBy:
              description: User who created the resource.
              examples:
              - id: iAaSNCU5lWLYGAi663hO8Q
                email: jane.doe@example.com
                username: Jane Doe
              type: object
              required:
              - id
              - email
              - username
              properties:
                id:
                  title: EntityID
                  description: The resource's ID.
                  type: string
                email:
                  description: The user's email address (also their login identifier).
                  type: string
                username:
                  description: The user's display name (e.g. `Jane Doe`).
                  type: string
            updatedDate:
              description: When the resource was last modified. ISO-8601 UTC.
              type: string
              format: date-time
            updatedBy:
              description: User who last modified the resource.
              examples:
              - id: iAaSNCU5lWLYGAi663hO8Q
                email: jane.doe@example.com
                username: Jane Doe
              type: object
              required:
              - id
              - email
              - username
              properties:
                id:
                  title: EntityID
                  description: The resource's ID.
                  type: string
                email:
                  description: The user's email address (also their login identifier).
                  type: string
                username:
                  description: The user's display name (e.g. `Jane Doe`).
                  type: string
            dataSetId:
              description: The ID of the Data Set
              examples:
              - hY06ZnQuqaVS-s1bEohGpw
              type: string
            name:
              description: Human-readable label for the webhook.
              type: string
            automationApp:
              description: Label of the automation app or integration source (e.g. `Zapier`, `Custom`).
              type: string
            status:
              description: Whether the incoming webhook is currently accepting payloads. `Active` — incoming requests at the webhook URL create or update data set rows. `Disabled` — the webhook URL is configured but requests are ignored.
              type: string
              enum:
              - Active
              - Disabled
            url:
              description: Public URL to POST payloads to. Include this in the upstream system's webhook config.
              type: string
            config:
              title: PublicApiDataSetIncomingWebhookConfig
              description: Field-specific configuration. Shape depends on `fieldType`.
              type: object
              required:
              - columns
              properties:
                columns:
                  description: Cell values keyed by column ID.
                  type: object
                  additionalProperties:
                    type: string
                keyColumn:
                  description: Name of the column used as the unique key when reconciling rows on upsert.
                  type: string
            links:
              description: Navigable HATEOAS links to related resources. Each entry has a `name` (RFC-5988 link relation like `self`, `edit`, `related`), an `href` URL, and a `type` (`Api` for callable endpoints, `App` for browser-facing URLs). Prefer following these `href` values over constructing URLs by hand.
              type: array
              items:
                title: Link
                description: A HATEOAS link to a related resource. Use these to navigate between resources without constructing URLs by hand.
                type: object
                required:
                - name
                - href
                - type
                properties:
                  name:
                    description: Standard link relation name (RFC 5988) indicating this link's role. Common values include `self`, `edit`, `related`, `previous`, `next`.
                    type: string
                  href:
                    title: Uri
                    description: URL of the linked resource.
                    examples:
                    - https://api.process.st/api/v1.1/resource/XXX
                    type: string
                  rel:
                    description: Optional. The kind of resource this link points to (e.g. `Workflow`, `Task`, `Comment`).
                    type: string
                    enum:
                    - Approval Task
                    - Approvals
                    - Assignees
                    - Comment
                    - Data Set Records
                    - Data Sets
                    - Form Field Values
                    - Subject Task
                    - Task
                    - Tasks
                    - Users
                    - Webhook
                    - Workflow
                    - Workflow Run
                  type:
                    description: Whether this link targets an API endpoint or a Process Street app URL. `Api` — a callable API endpoint you can fetch directly. `App` — a browser-facing URL in the Process Street UI.
                    type: string
                    enum:
                    - Api
                    - App
        links:
          description: 'Pagination links. When the result has more pages, look for an entry with `name: "next"` — its `href` is the URL to fetch the next page. Absence of `next` means there are no more pages. For single-resource responses this array is typically empty.'
          type: array
          items:
            title: Link
            description: A HATEOAS link to a related resource. Use these to navigate between resources without constructing URLs by hand.
            type: object
            required:
            - name
            - href
            - type
            properties:
              name:
                description: Standard link relation name (RFC 5988) indicating this link's role. Common values include `self`, `edit`, `related`, `previous`, `next`.
                type: string
              href:
                title: Uri
                description: URL of the linked resource.
                examples:
                - https://api.process.st/api/v1.1/resource/XXX
                type: string
              rel:
                description: Optional. The kind of resource this link points to (e.g. `Workflow`, `Task`, `Comment`).
                type: string
                enum:
                - Approval Task
                - Approvals
                - Assignees
                - Comment
                - Data Set Records
                - Data Sets
                - Form Field Values
                - Subject Task
                - Task
                - Tasks
                - Users
                - Webhook
                - Workflow
                - Workflow Run
              type:
                description: Whether this link targets an API endpoint or a Process Street app URL. `Api` — a callable API endpoint you can fetch directly. `App` — a browser-facing URL in the Process Street UI.
                type: string
                enum:
                - Api
                - App
    CreateDataSetIncomingWebhookRequest:
      title: CreateDataSetIncomingWebhookRequest
      type: object
      required:
      - name
      - automationApp
      - config
      properties:
        name:
          description: Display name.
          type: string
        automationApp:
          type: string
        config:
          title: DataSetIncomingWebhookConfigRequest
          description: Field-specific configuration. Shape depends on `fieldType`.
          type: object
          required:
          - columns
          properties:
            columns:
              description: Cell values keyed by column ID.
              type: object
              additionalProperties:
                type: string
            keyColumn:
              description: Name of the column used as the unique key when reconciling rows on upsert.
              type: string
    ErrorInfo:
      title: ErrorInfo
      type: object
      required:
      - error
      properties:
        error:
          description: 'Human-readable error message. Suitable for logs or for surfacing to end users; do not parse it

            programmatically — use `errorCode` for that.'
          type: string
        details:
          description: 'Optional structured context. Shape depends on the error: for `Validation` errors the keys are field

            paths; for `PaymentRequired` the keys describe the limit that was hit.'
          type: object
          additionalProperties:
            type: string
        errorCode:
          title: ErrorCode
          description: 'Machine-parsable classification of the error. Always set on responses generated by the global

            exception handler. Branch your own error handling on this (not the message text).'
          type: string
          enum:
          - BadRequest
          - Unauthorized
          - PaymentRequired
          - Forbidden
          - NotFound
          - MethodNotAllowed
          - Conflict
          - PayloadTooLarge
          - Validation
          - RateLimited
          - InternalError
        requestId:
          description: Per-request correlation ID. Include this when contacting support so we can find the request in our logs.
          type: string
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      name: X-API-Key
      in: header
    httpAuth:
      type: http
      description: Bearer token (beta)
      scheme: bearer
x-tagGroups:
- name: Workflows
  tags:
  - Workflows
  - Workflow Revisions
  - Form Fields
  - Workflow Logic Rules
  - Workflow Tasks
  - Workflow Task Assignment Rules
  - Workflow Widgets
  - Workflow Due Date Rules
  - Workflow Task Due Date Rules
  - Workflow Incoming Webhooks
  - Scheduled Workflows
- name: Workflow Runs
  tags:
  - 

# --- truncated at 32 KB (32 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/process-street/refs/heads/main/openapi/process-street-data-set-incoming-webhooks-api-openapi.yml