Procore Workflow Instances (Bulk) API

The Workflow Instances (Bulk) API from Procore — 2 operation(s) for workflow instances (bulk).

Operations 2

POST /rest/v2.0/companies/{company_id}/projects/{project_id}/workflows/instances/bulk_create Bulk Create Workflow Instances (Project) (Public) #
POST /rest/v2.0/companies/{company_id}/workflows/instances/bulk_create Bulk Create Workflow Instances (Company) (Public) #

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/procore:procore-workflow-instances-bulk-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

procore-workflow-instances-bulk-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Procore REST Workflow Instances (Bulk) API
  version: v1.0/v2.0
  description: Merged from the per-resource OpenAPI documents Procore publishes through its developer portal (https://developers.procore.com/api/v1/resource_groups). Originals are kept verbatim in openapi/_original/resources/.
  x-source: https://developers.procore.com/api/v1/resource_groups
servers:
- url: https://api.procore.com
  description: Production
security:
- bearerAuth: []
tags:
- name: Workflow Instances (Bulk)
paths:
  /rest/v2.0/companies/{company_id}/projects/{project_id}/workflows/instances/bulk_create:
    parameters:
    - name: Procore-Company-Id
      in: header
      description: Unique company identifier associated with the Procore User Account.
      required: true
      schema:
        type: integer
    - name: company_id
      in: path
      description: Unique identifier for the company.
      required: true
      schema:
        type: string
    - name: project_id
      in: path
      required: true
      description: Unique identifier for the project.
      schema:
        type: string
    x-compliance-level: partial
    post:
      x-doc:
        visibility: public
        stage: ga
        exposure: public
      summary: Bulk Create Workflow Instances (Project) (Public)
      description: 'Asynchronously bulk create workflow instances for a list of project-level items. If an active instance already exists for an item, a failure will be returned for that item.


        The returned async operation id can be used to query for status using the `GET /rest/v2.0/companies/{company_id}/async_operations/{operation_id}` API. The result field of the operation contains a list of completed and failed items.


        For example:

        ````json

        {

        "completed_items": [

        {

        "item_id": "123",

        "instance_id": "456"

        }

        ],

        "failed_items": [

        {

        "item_id": "789",

        "step": "create",

        "message": "Item not found"

        }

        ]

        }

        ````'
      tags:
      - Workflow Instances (Bulk)
      parameters:
      - required: false
        name: Idempotency-Token
        in: header
        description: Client-generated UUID v4 identifying a create operation. Retrying with the same token returns the original result instead of creating a duplicate.
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              description: Workflow Instances Bulk Create
              properties:
                tool_type:
                  type: string
                  description: Tool that instances are being created for.
                  example: drawing
                tool_subtype:
                  type:
                  - string
                  - 'null'
                  description: Tool sub-type. Only required for specific tools.
                  example: '-18472'
                items:
                  type: array
                  description: List of objects to create workflow instances for.
                  items:
                    type: object
                    properties:
                      item_id:
                        type: string
                        description: ID of the item to create the workflow for.
                        example: '9238237'
                      preset_id:
                        type: string
                        description: ID of the workflow configuration to use when creating the workflow.
                        example: '328274'
              required:
              - tool_type
              - items
      responses:
        '202':
          description: Accepted
          content:
            application/json:
              schema:
                type: object
                description: Workflow Instances Bulk Create
                properties:
                  data:
                    type: object
                    description: Result of the bulk creation request
                    properties:
                      operation_id:
                        type: string
                        description: ID of the asynchronous operation
                        example: '115654'
                      operation_type:
                        type: string
                        description: Type of the asynchronous operation
                        example: workflows_instance_bulk_create
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        description: HTTP status in screaming snake case (like BAD_REQUEST)
                      message:
                        type: string
                        description: Human readable message describing error.
                      details:
                        type: array
                        description: Additional information about the error.
                        items:
                          type: object
                          required:
                          - reason_code
                          - message
                          properties:
                            reason_code:
                              type: string
                              description: A machine-readable code that identifies the error specifically enough for the client to interpret what happened and take action.
                              example: BLANK
                            message:
                              type: string
                              description: Human readable message
                              example: Name can't be blank
                            source:
                              type: string
                              description: Source of the error
                              example: name
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        description: HTTP status in screaming snake case (like BAD_REQUEST)
                      message:
                        type: string
                        description: Human readable message describing error.
                      details:
                        type: array
                        description: Additional information about the error.
                        items:
                          type: object
                          required:
                          - reason_code
                          - message
                          properties:
                            reason_code:
                              type: string
                              description: A machine-readable code that identifies the error specifically enough for the client to interpret what happened and take action.
                              example: BLANK
                            message:
                              type: string
                              description: Human readable message
                              example: Name can't be blank
                            source:
                              type: string
                              description: Source of the error
                              example: name
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        description: HTTP status in screaming snake case (like BAD_REQUEST)
                      message:
                        type: string
                        description: Human readable message describing error.
                      details:
                        type: array
                        description: Additional information about the error.
                        items:
                          type: object
                          required:
                          - reason_code
                          - message
                          properties:
                            reason_code:
                              type: string
                              description: A machine-readable code that identifies the error specifically enough for the client to interpret what happened and take action.
                              example: BLANK
                            message:
                              type: string
                              description: Human readable message
                              example: Name can't be blank
                            source:
                              type: string
                              description: Source of the error
                              example: name
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        description: HTTP status in screaming snake case (like BAD_REQUEST)
                      message:
                        type: string
                        description: Human readable message describing error.
                      details:
                        type: array
                        description: Additional information about the error.
                        items:
                          type: object
                          required:
                          - reason_code
                          - message
                          properties:
                            reason_code:
                              type: string
                              description: A machine-readable code that identifies the error specifically enough for the client to interpret what happened and take action.
                              example: BLANK
                            message:
                              type: string
                              description: Human readable message
                              example: Name can't be blank
                            source:
                              type: string
                              description: Source of the error
                              example: name
        '422':
          description: Unprocessable Entity
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        description: HTTP status in screaming snake case (like BAD_REQUEST)
                      message:
                        type: string
                        description: Human readable message describing error.
                      details:
                        type: array
                        description: Additional information about the error.
                        items:
                          type: object
                          required:
                          - reason_code
                          - message
                          properties:
                            reason_code:
                              type: string
                              description: A machine-readable code that identifies the error specifically enough for the client to interpret what happened and take action.
                              example: BLANK
                            message:
                              type: string
                              description: Human readable message
                              example: Name can't be blank
                            source:
                              type: string
                              description: Source of the error
                              example: name
      x-code-samples:
      - id: node_request
        mimeType: application/json
        title: Node.js
        content: "const request = require('request');\n\nconst options = {\n  method: 'POST',\n  url: 'https://api.procore.com/rest/v2.0/companies/%7Bcompany_id%7D/projects/%7Bproject_id%7D/workflows/instances/bulk_create',\n  headers: {'Idempotency-Token': 'SOME_STRING_VALUE', 'content-type': 'application/json'},\n  body: {\n    tool_type: 'drawing',\n    tool_subtype: '-18472',\n    items: [{item_id: '9238237', preset_id: '328274'}]\n  },\n  json: true\n};\n\nrequest(options, function (error, response, body) {\n  if (error) throw new Error(error);\n\n  console.log(body);\n});\n"
      - id: python_python3
        mimeType: application/json
        title: Python3
        content: "import http.client\n\nconn = http.client.HTTPSConnection(\"api.procore.com\")\n\npayload = \"{\\\"tool_type\\\":\\\"drawing\\\",\\\"tool_subtype\\\":\\\"-18472\\\",\\\"items\\\":[{\\\"item_id\\\":\\\"9238237\\\",\\\"preset_id\\\":\\\"328274\\\"}]}\"\n\nheaders = {\n    'Idempotency-Token': \"SOME_STRING_VALUE\",\n    'content-type': \"application/json\"\n    }\n\nconn.request(\"POST\", \"/rest/v2.0/companies/%7Bcompany_id%7D/projects/%7Bproject_id%7D/workflows/instances/bulk_create\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"
      - id: shell_curl
        mimeType: application/json
        title: Curl
        content: "curl --request POST \\\n  --url https://api.procore.com/rest/v2.0/companies/%7Bcompany_id%7D/projects/%7Bproject_id%7D/workflows/instances/bulk_create \\\n  --header 'Idempotency-Token: SOME_STRING_VALUE' \\\n  --header 'content-type: application/json' \\\n  --data '{\"tool_type\":\"drawing\",\"tool_subtype\":\"-18472\",\"items\":[{\"item_id\":\"9238237\",\"preset_id\":\"328274\"}]}'"
      - id: csharp_httpclient
        mimeType: application/json
        title: C#
        content: "var client = new HttpClient();\nvar request = new HttpRequestMessage\n{\n    Method = HttpMethod.Post,\n    RequestUri = new Uri(\"https://api.procore.com/rest/v2.0/companies/%7Bcompany_id%7D/projects/%7Bproject_id%7D/workflows/instances/bulk_create\"),\n    Headers =\n    {\n        { \"Idempotency-Token\", \"SOME_STRING_VALUE\" },\n    },\n    Content = new StringContent(\"{\\\"tool_type\\\":\\\"drawing\\\",\\\"tool_subtype\\\":\\\"-18472\\\",\\\"items\\\":[{\\\"item_id\\\":\\\"9238237\\\",\\\"preset_id\\\":\\\"328274\\\"}]}\")\n    {\n        Headers =\n        {\n            ContentType = new MediaTypeHeaderValue(\"application/json\")\n        }\n    }\n};\nusing (var response = await client.SendAsync(request))\n{\n    response.EnsureSuccessStatusCode();\n    var body = await response.Content.ReadAsStringAsync();\n    Console.WriteLine(body);\n}"
      x-rate-limit-enabled: true
      x-procore-kong-tags:
      - rate-limit:enabled
      operationId: bulkCreateWorkflowInstancesProjectPublic
  /rest/v2.0/companies/{company_id}/workflows/instances/bulk_create:
    parameters:
    - name: Procore-Company-Id
      in: header
      description: Unique company identifier associated with the Procore User Account.
      required: true
      schema:
        type: integer
    - name: company_id
      in: path
      description: Unique identifier for the company.
      required: true
      schema:
        type: string
    x-compliance-level: partial
    post:
      x-doc:
        visibility: public
        stage: ga
        exposure: public
      summary: Bulk Create Workflow Instances (Company) (Public)
      description: 'Asynchronously bulk create workflow instances for a list of company-level items. If an active instance already exists for an item, a failure will be returned for that item.


        The returned async operation id can be used to query for status using the `GET /rest/v2.0/companies/{company_id}/async_operations/{operation_id}` API. The result field of the operation contains a list of completed and failed items.


        For example:

        ````json

        {

        "completed_items": [

        {

        "item_id": "123",

        "instance_id": "456"

        }

        ],

        "failed_items": [

        {

        "item_id": "789",

        "step": "create",

        "message": "Item not found"

        }

        ]

        }

        ````'
      tags:
      - Workflow Instances (Bulk)
      parameters:
      - required: false
        name: Idempotency-Token
        in: header
        description: Client-generated UUID v4 identifying a create operation. Retrying with the same token returns the original result instead of creating a duplicate.
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              description: Workflow Instances Bulk Create
              properties:
                tool_type:
                  type: string
                  description: Tool that instances are being created for.
                  example: drawing
                tool_subtype:
                  type:
                  - string
                  - 'null'
                  description: Tool sub-type. Only required for specific tools.
                  example: '-18472'
                items:
                  type: array
                  description: List of objects to create workflow instances for.
                  items:
                    type: object
                    properties:
                      item_id:
                        type: string
                        description: ID of the item to create the workflow for.
                        example: '9238237'
                      preset_id:
                        type: string
                        description: ID of the workflow configuration to use when creating the workflow.
                        example: '328274'
              required:
              - tool_type
              - items
      responses:
        '202':
          description: Accepted
          content:
            application/json:
              schema:
                type: object
                description: Workflow Instances Bulk Create
                properties:
                  data:
                    type: object
                    description: Result of the bulk creation request
                    properties:
                      operation_id:
                        type: string
                        description: ID of the asynchronous operation
                        example: '115654'
                      operation_type:
                        type: string
                        description: Type of the asynchronous operation
                        example: workflows_instance_bulk_create
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        description: HTTP status in screaming snake case (like BAD_REQUEST)
                      message:
                        type: string
                        description: Human readable message describing error.
                      details:
                        type: array
                        description: Additional information about the error.
                        items:
                          type: object
                          required:
                          - reason_code
                          - message
                          properties:
                            reason_code:
                              type: string
                              description: A machine-readable code that identifies the error specifically enough for the client to interpret what happened and take action.
                              example: BLANK
                            message:
                              type: string
                              description: Human readable message
                              example: Name can't be blank
                            source:
                              type: string
                              description: Source of the error
                              example: name
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        description: HTTP status in screaming snake case (like BAD_REQUEST)
                      message:
                        type: string
                        description: Human readable message describing error.
                      details:
                        type: array
                        description: Additional information about the error.
                        items:
                          type: object
                          required:
                          - reason_code
                          - message
                          properties:
                            reason_code:
                              type: string
                              description: A machine-readable code that identifies the error specifically enough for the client to interpret what happened and take action.
                              example: BLANK
                            message:
                              type: string
                              description: Human readable message
                              example: Name can't be blank
                            source:
                              type: string
                              description: Source of the error
                              example: name
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        description: HTTP status in screaming snake case (like BAD_REQUEST)
                      message:
                        type: string
                        description: Human readable message describing error.
                      details:
                        type: array
                        description: Additional information about the error.
                        items:
                          type: object
                          required:
                          - reason_code
                          - message
                          properties:
                            reason_code:
                              type: string
                              description: A machine-readable code that identifies the error specifically enough for the client to interpret what happened and take action.
                              example: BLANK
                            message:
                              type: string
                              description: Human readable message
                              example: Name can't be blank
                            source:
                              type: string
                              description: Source of the error
                              example: name
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        description: HTTP status in screaming snake case (like BAD_REQUEST)
                      message:
                        type: string
                        description: Human readable message describing error.
                      details:
                        type: array
                        description: Additional information about the error.
                        items:
                          type: object
                          required:
                          - reason_code
                          - message
                          properties:
                            reason_code:
                              type: string
                              description: A machine-readable code that identifies the error specifically enough for the client to interpret what happened and take action.
                              example: BLANK
                            message:
                              type: string
                              description: Human readable message
                              example: Name can't be blank
                            source:
                              type: string
                              description: Source of the error
                              example: name
        '422':
          description: Unprocessable Entity
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        description: HTTP status in screaming snake case (like BAD_REQUEST)
                      message:
                        type: string
                        description: Human readable message describing error.
                      details:
                        type: array
                        description: Additional information about the error.
                        items:
                          type: object
                          required:
                          - reason_code
                          - message
                          properties:
                            reason_code:
                              type: string
                              description: A machine-readable code that identifies the error specifically enough for the client to interpret what happened and take action.
                              example: BLANK
                            message:
                              type: string
                              description: Human readable message
                              example: Name can't be blank
                            source:
                              type: string
                              description: Source of the error
                              example: name
      x-code-samples:
      - id: node_request
        mimeType: application/json
        title: Node.js
        content: "const request = require('request');\n\nconst options = {\n  method: 'POST',\n  url: 'https://api.procore.com/rest/v2.0/companies/%7Bcompany_id%7D/workflows/instances/bulk_create',\n  headers: {'Idempotency-Token': 'SOME_STRING_VALUE', 'content-type': 'application/json'},\n  body: {\n    tool_type: 'drawing',\n    tool_subtype: '-18472',\n    items: [{item_id: '9238237', preset_id: '328274'}]\n  },\n  json: true\n};\n\nrequest(options, function (error, response, body) {\n  if (error) throw new Error(error);\n\n  console.log(body);\n});\n"
      - id: python_python3
        mimeType: application/json
        title: Python3
        content: "import http.client\n\nconn = http.client.HTTPSConnection(\"api.procore.com\")\n\npayload = \"{\\\"tool_type\\\":\\\"drawing\\\",\\\"tool_subtype\\\":\\\"-18472\\\",\\\"items\\\":[{\\\"item_id\\\":\\\"9238237\\\",\\\"preset_id\\\":\\\"328274\\\"}]}\"\n\nheaders = {\n    'Idempotency-Token': \"SOME_STRING_VALUE\",\n    'content-type': \"application/json\"\n    }\n\nconn.request(\"POST\", \"/rest/v2.0/companies/%7Bcompany_id%7D/workflows/instances/bulk_create\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"
      - id: shell_curl
        mimeType: application/json
        title: Curl
        content: "curl --request POST \\\n  --url https://api.procore.com/rest/v2.0/companies/%7Bcompany_id%7D/workflows/instances/bulk_create \\\n  --header 'Idempotency-Token: SOME_STRING_VALUE' \\\n  --header 'content-type: application/json' \\\n  --data '{\"tool_type\":\"drawing\",\"tool_subtype\":\"-18472\",\"items\":[{\"item_id\":\"9238237\",\"preset_id\":\"328274\"}]}'"
      - id: csharp_httpclient
        mimeType: application/json
        title: C#
        content: "var client = new HttpClient();\nvar request = new HttpRequestMessage\n{\n    Method = HttpMethod.Post,\n    RequestUri = new Uri(\"https://api.procore.com/rest/v2.0/companies/%7Bcompany_id%7D/workflows/instances/bulk_create\"),\n    Headers =\n    {\n        { \"Idempotency-Token\", \"SOME_STRING_VALUE\" },\n    },\n    Content = new StringContent(\"{\\\"tool_type\\\":\\\"drawing\\\",\\\"tool_subtype\\\":\\\"-18472\\\",\\\"items\\\":[{\\\"item_id\\\":\\\"9238237\\\",\\\"preset_id\\\":\\\"328274\\\"}]}\")\n    {\n        Headers =\n        {\n            ContentType = new MediaTypeHeaderValue(\"application/json\")\n        }\n    }\n};\nusing (var response = await client.SendAsync(request))\n{\n    response.EnsureSuccessStatusCode();\n    var body = await response.Content.ReadAsStringAsync();\n    Console.WriteLine(body);\n}"
      x-rate-limit-enabled: true
      x-procore-kong-tags:
      - rate-limit:enabled
      operationId: bulkCreateWorkflowInstancesCompanyPublic
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer