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: 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