Procore Unmanaged Equipment API

The Unmanaged Equipment API from Procore — 2 operation(s) for unmanaged equipment.

Business capability
Plant & Equipment Management BC-5040.40

Operations 3

GET /rest/v2.0/companies/{company_id}/projects/{project_id}/equipment_register/equipment_unmanaged Get unmanaged equipment (Project) #
POST /rest/v2.0/companies/{company_id}/projects/{project_id}/equipment_register/equipment_unmanaged Create unmanaged equipment (Project) #
PATCH /rest/v2.0/companies/{company_id}/projects/{project_id}/equipment_register/equipment_unmanaged/{equipment_id} Update unmanaged equipment (Project) #

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-unmanaged-equipment-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-unmanaged-equipment-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Procore REST Unmanaged Equipment 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: Unmanaged Equipment
paths:
  /rest/v2.0/companies/{company_id}/projects/{project_id}/equipment_register/equipment_unmanaged:
    parameters:
    - name: Procore-Company-Id
      in: header
      description: Unique company identifier associated with the Procore User Account.
      required: true
      schema:
        type: integer
    x-compliance-level: partial
    get:
      tags:
      - Unmanaged Equipment
      summary: Get unmanaged equipment (Project)
      operationId: getEquipmentUnmanaged
      parameters:
      - name: project_id
        in: path
        description: The Id of the project
        required: true
        schema:
          type: string
          example: '1'
      - name: search
        in: query
        description: Search criteria
        required: false
        schema:
          type: string
      - name: filters[id]
        in: query
        description: Filter ids
        required: false
        schema:
          type: string
      - name: filters[updated_at]
        in: query
        description: 'Updated at filter (date range format: YYYY-MM-DD...YYYY-MM-DD or YYYY-MM-DDTHH:MM:SSZ...YYYY-MM-DDTHH:MM:SSZ)'
        required: false
        schema:
          type: string
      - name: page
        in: query
        description: The page number to retrieve. Default is 1.
        required: false
        schema:
          type: integer
          format: int32
      - name: per_page
        in: query
        description: Number of records per page
        required: true
        schema:
          type: integer
          default: 10
          maximum: 100
      - name: view
        in: query
        description: Equipment view type
        required: false
        schema:
          type: string
          default: normal
          enum:
          - ids
          - normal
          - extended
          pattern: ids|normal|extended
      - name: company_id
        in: path
        description: Unique identifier for the company.
        required: true
        schema:
          type: string
        example: '1234'
      responses:
        '200':
          description: Successful Operation
          content:
            application/json:
              schema:
                oneOf:
                - type: object
                  description: Normal View
                  properties:
                    data:
                      type: array
                      items:
                        type: object
                        properties:
                          id:
                            type: string
                            description: Unique identifier of the unmanaged equipment
                            example: 01HXSAXEAHVJ3VCRXSRTXQKXXX
                          identification_number:
                            type: string
                            description: Identification number of the unmanaged equipment
                            example: EQ123
                          is_active:
                            type: boolean
                            description: Flag indicating if the unmanaged equipment is active
                            example: true
                          created_at:
                            type: string
                            format: date-time
                            example: '2021-08-01T12:00:00Z'
                          updated_at:
                            type: string
                            format: date-time
                            example: '2021-08-01T12:00:00Z'
                  title: normal
                - type: object
                  description: Extended View
                  properties:
                    data:
                      type: array
                      items:
                        type: object
                        properties:
                          id:
                            type: string
                            description: Unique identifier of the unmanaged equipment
                            example: 01HXSAXEAHVJ3VCRXSRTXQKXXX
                          identification_number:
                            type: string
                            description: Identification number of the unmanaged equipment
                            example: EQ123
                          is_active:
                            type: boolean
                            description: Flag indicating if the unmanaged equipment is active
                            example: true
                          created_at:
                            type: string
                            format: date-time
                            example: '2021-08-01T12:00:00Z'
                          updated_at:
                            type: string
                            format: date-time
                            example: '2021-08-01T12:00:00Z'
                  title: extended
                - type: object
                  description: Ids View
                  properties:
                    data:
                      type: array
                      items:
                        type: string
                  title: ids
        '400':
          description: The server could not understand the request due to invalid syntax or parameters that fail to meet validation requirements.
        '401':
          description: Although the HTTP standard specifies "unauthorized", semantically this response means "unauthenticated". That is, the client must authenticate itself to get the requested response.
        '403':
          description: The client does not have access rights to the content; that is, it is authenticated, but the server is refusing to give the requested resource. Unlike 401, the client's identity is known to the server.
        '404':
          description: The server can not find the requested resource. This can mean either the URL is not recognized, or the resource itself does not exist. Servers may also send this response instead of 403 to hide the existence of a resource from an unauthorized client.
      x-doc:
        stage: beta
        visibility: public
        exposure: public
      x-code-samples:
      - id: node_request
        title: Node.js
        content: "const request = require('request');\n\nconst options = {\n  method: 'GET',\n  url: 'https://api.procore.com/rest/v2.0/companies/1234/projects/1/equipment_register/equipment_unmanaged',\n  qs: {\n    search: 'SOME_STRING_VALUE',\n    'filters[id]': 'SOME_STRING_VALUE',\n    'filters[updated_at]': 'SOME_STRING_VALUE',\n    page: 'SOME_INTEGER_VALUE',\n    per_page: 'SOME_INTEGER_VALUE',\n    view: 'SOME_STRING_VALUE'\n  },\n  headers: {'Procore-Company-Id': 'SOME_INTEGER_VALUE'}\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
        title: Python3
        content: 'import http.client


          conn = http.client.HTTPSConnection("api.procore.com")


          headers = { ''Procore-Company-Id'': "SOME_INTEGER_VALUE" }


          conn.request("GET", "/rest/v2.0/companies/1234/projects/1/equipment_register/equipment_unmanaged?search=SOME_STRING_VALUE&filters%5Bid%5D=SOME_STRING_VALUE&filters%5Bupdated_at%5D=SOME_STRING_VALUE&page=SOME_INTEGER_VALUE&per_page=SOME_INTEGER_VALUE&view=SOME_STRING_VALUE", headers=headers)


          res = conn.getresponse()

          data = res.read()


          print(data.decode("utf-8"))'
      - id: shell_curl
        title: Curl
        content: "curl --request GET \\\n  --url 'https://api.procore.com/rest/v2.0/companies/1234/projects/1/equipment_register/equipment_unmanaged?search=SOME_STRING_VALUE&filters%5Bid%5D=SOME_STRING_VALUE&filters%5Bupdated_at%5D=SOME_STRING_VALUE&page=SOME_INTEGER_VALUE&per_page=SOME_INTEGER_VALUE&view=SOME_STRING_VALUE' \\\n  --header 'Procore-Company-Id: SOME_INTEGER_VALUE'"
      - id: csharp_httpclient
        title: C#
        content: "var client = new HttpClient();\nvar request = new HttpRequestMessage\n{\n    Method = HttpMethod.Get,\n    RequestUri = new Uri(\"https://api.procore.com/rest/v2.0/companies/1234/projects/1/equipment_register/equipment_unmanaged?search=SOME_STRING_VALUE&filters%5Bid%5D=SOME_STRING_VALUE&filters%5Bupdated_at%5D=SOME_STRING_VALUE&page=SOME_INTEGER_VALUE&per_page=SOME_INTEGER_VALUE&view=SOME_STRING_VALUE\"),\n    Headers =\n    {\n        { \"Procore-Company-Id\", \"SOME_INTEGER_VALUE\" },\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
    post:
      tags:
      - Unmanaged Equipment
      summary: Create unmanaged equipment (Project)
      operationId: createEquipmentUnmanaged
      parameters:
      - name: project_id
        in: path
        description: The Id of the project
        required: true
        schema:
          type: string
          example: '1'
          exclusiveMinimum: 0
      - name: company_id
        in: path
        description: Unique identifier for the company.
        required: true
        schema:
          type: string
        example: '1234'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              description: Unmanaged Equipment Save Request
              properties:
                identification_number:
                  type: string
                  description: Identification number of the unmanaged equipment
                  example: EQ123
                  minLength: 1
              required:
              - identification_number
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      id:
                        type: string
                        description: Unique identifier of the unmanaged equipment
                        example: 01HXSAXEAHVJ3VCRXSRTXQKXXX
                      identification_number:
                        type: string
                        description: Identification number of the unmanaged equipment
                        example: EQ123
                      is_active:
                        type: boolean
                        description: Flag indicating if the unmanaged equipment is active
                        example: true
                      created_at:
                        type: string
                        format: date-time
                        example: '2021-08-01T12:00:00Z'
                      updated_at:
                        type: string
                        format: date-time
                        example: '2021-08-01T12:00:00Z'
        '400':
          description: The server could not understand the request due to invalid syntax or parameters that fail to meet validation requirements.
        '401':
          description: Although the HTTP standard specifies "unauthorized", semantically this response means "unauthenticated". That is, the client must authenticate itself to get the requested response.
        '403':
          description: The client does not have access rights to the content; that is, it is authenticated, but the server is refusing to give the requested resource. Unlike 401, the client's identity is known to the server.
        '404':
          description: The server can not find the requested resource. This can mean either the URL is not recognized, or the resource itself does not exist. Servers may also send this response instead of 403 to hide the existence of a resource from an unauthorized client.
        '422':
          description: The request was well-formed but was unable to be followed due to semantic errors.
      x-doc:
        stage: beta
        visibility: public
        exposure: public
      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/1234/projects/1/equipment_register/equipment_unmanaged',\n  headers: {'Procore-Company-Id': 'SOME_INTEGER_VALUE', 'content-type': 'application/json'},\n  body: {identification_number: 'EQ123'},\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 = \"{\\\"identification_number\\\":\\\"EQ123\\\"}\"\n\nheaders = {\n    'Procore-Company-Id': \"SOME_INTEGER_VALUE\",\n    'content-type': \"application/json\"\n    }\n\nconn.request(\"POST\", \"/rest/v2.0/companies/1234/projects/1/equipment_register/equipment_unmanaged\", 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/1234/projects/1/equipment_register/equipment_unmanaged \\\n  --header 'Procore-Company-Id: SOME_INTEGER_VALUE' \\\n  --header 'content-type: application/json' \\\n  --data '{\"identification_number\":\"EQ123\"}'"
      - 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/1234/projects/1/equipment_register/equipment_unmanaged\"),\n    Headers =\n    {\n        { \"Procore-Company-Id\", \"SOME_INTEGER_VALUE\" },\n    },\n    Content = new StringContent(\"{\\\"identification_number\\\":\\\"EQ123\\\"}\")\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
  /rest/v2.0/companies/{company_id}/projects/{project_id}/equipment_register/equipment_unmanaged/{equipment_id}:
    parameters:
    - name: Procore-Company-Id
      in: header
      description: Unique company identifier associated with the Procore User Account.
      required: true
      schema:
        type: integer
    x-compliance-level: partial
    patch:
      tags:
      - Unmanaged Equipment
      summary: Update unmanaged equipment (Project)
      operationId: updateEquipmentUnmanaged
      parameters:
      - name: equipment_id
        in: path
        description: Equipment id
        required: true
        schema:
          type: string
      - name: project_id
        in: path
        description: The Id of the project
        required: true
        schema:
          type: string
          example: '1'
          exclusiveMinimum: 0
      - name: company_id
        in: path
        description: Unique identifier for the company.
        required: true
        schema:
          type: string
        example: '1234'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              description: Unmanaged Equipment update request
              properties:
                is_active:
                  type: boolean
                  description: Active/Inactive indicator for Equipment Category.
                  example: true
              required:
              - is_active
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      id:
                        type: string
                        description: Unique identifier of the unmanaged equipment
                        example: 01HXSAXEAHVJ3VCRXSRTXQKXXX
                      identification_number:
                        type: string
                        description: Identification number of the unmanaged equipment
                        example: EQ123
                      is_active:
                        type: boolean
                        description: Flag indicating if the unmanaged equipment is active
                        example: true
                      created_at:
                        type: string
                        format: date-time
                        example: '2021-08-01T12:00:00Z'
                      updated_at:
                        type: string
                        format: date-time
                        example: '2021-08-01T12:00:00Z'
        '400':
          description: The server could not understand the request due to invalid syntax or parameters that fail to meet validation requirements.
        '401':
          description: Although the HTTP standard specifies "unauthorized", semantically this response means "unauthenticated". That is, the client must authenticate itself to get the requested response.
        '403':
          description: The client does not have access rights to the content; that is, it is authenticated, but the server is refusing to give the requested resource. Unlike 401, the client's identity is known to the server.
        '404':
          description: The server can not find the requested resource. This can mean either the URL is not recognized, or the resource itself does not exist. Servers may also send this response instead of 403 to hide the existence of a resource from an unauthorized client.
        '422':
          description: The request was well-formed but was unable to be followed due to semantic errors.
      x-doc:
        stage: beta
        visibility: public
        exposure: public
      x-code-samples:
      - id: node_request
        mimeType: application/json
        title: Node.js
        content: "const request = require('request');\n\nconst options = {\n  method: 'PATCH',\n  url: 'https://api.procore.com/rest/v2.0/companies/1234/projects/1/equipment_register/equipment_unmanaged/%7Bequipment_id%7D',\n  headers: {'Procore-Company-Id': 'SOME_INTEGER_VALUE', 'content-type': 'application/json'},\n  body: {is_active: true},\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 = \"{\\\"is_active\\\":true}\"\n\nheaders = {\n    'Procore-Company-Id': \"SOME_INTEGER_VALUE\",\n    'content-type': \"application/json\"\n    }\n\nconn.request(\"PATCH\", \"/rest/v2.0/companies/1234/projects/1/equipment_register/equipment_unmanaged/%7Bequipment_id%7D\", 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 PATCH \\\n  --url https://api.procore.com/rest/v2.0/companies/1234/projects/1/equipment_register/equipment_unmanaged/%7Bequipment_id%7D \\\n  --header 'Procore-Company-Id: SOME_INTEGER_VALUE' \\\n  --header 'content-type: application/json' \\\n  --data '{\"is_active\":true}'"
      - id: csharp_httpclient
        mimeType: application/json
        title: C#
        content: "var client = new HttpClient();\nvar request = new HttpRequestMessage\n{\n    Method = HttpMethod.Patch,\n    RequestUri = new Uri(\"https://api.procore.com/rest/v2.0/companies/1234/projects/1/equipment_register/equipment_unmanaged/%7Bequipment_id%7D\"),\n    Headers =\n    {\n        { \"Procore-Company-Id\", \"SOME_INTEGER_VALUE\" },\n    },\n    Content = new StringContent(\"{\\\"is_active\\\":true}\")\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
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer