Every API here is available over the APIs.io API and to AI agents over MCP.
openapi: 3.2.0
info:
title: Procore REST Company Permission Templates 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: Company Permission Templates
paths:
/rest/v1.0/companies/{company_id}/permission_templates:
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:
x-doc:
visibility: public
stage: ga
exposure: public
summary: List permission templates
description: Returns the Permission Template names and IDs for the specified Company.
tags:
- Company Permission Templates
parameters:
- name: company_id
in: path
description: Unique identifier for the company.
required: true
schema:
type: integer
- in: query
name: filters[type]
required: false
description: Allows filtering by template type. If none is provided, default is "project_tools". Allowed types = company_tools, project_tools, global. Example - ?filters[type]=company_tools
schema:
type: string
- in: query
name: view
required: false
description: Returns detailed permission templates if view=with_permissions is specified.
schema:
type: string
responses:
'200':
description: Success
content:
application/json:
schema:
type: array
items:
type: object
properties:
id:
type: integer
description: The ID of the Permission Template
example: 1
name:
type: string
example: General Contractor
description: The name of the Permission Template
project_specific:
type: boolean
description: If the Permission Template is project specific
example: true
type:
type: string
enum:
- project_specific
- company_tools
- global
description: Permission Template type
default: global
example: global
category:
type:
- string
- 'null'
enum:
- internal
- external
description: The category of the Permission Template
example: internal
example:
id: 1
name: General Contractor
project_specific: true
'400':
description: Bad Request
content:
application/json:
schema:
type: object
properties:
code:
type: integer
format: int32
message:
type: string
fields:
type: string
reason:
description: A human-readable code providing additional detail on the cause of the error.
type: string
error:
description: Description of the error thrown.
type:
- string
- 'null'
example: Invalid Token
'401':
description: Unauthorized
content:
application/json:
schema:
type: object
properties:
code:
type: integer
format: int32
message:
type: string
fields:
type: string
reason:
description: A human-readable code providing additional detail on the cause of the error.
type: string
error:
description: Description of the error thrown.
type:
- string
- 'null'
example: Invalid Token
'403':
description: Forbidden
content:
application/json:
schema:
type: object
properties:
code:
type: integer
format: int32
message:
type: string
fields:
type: string
reason:
description: A human-readable code providing additional detail on the cause of the error.
type: string
error:
description: Description of the error thrown.
type:
- string
- 'null'
example: Invalid Token
default:
description: Unexpected error
content:
application/json:
schema:
type: object
properties:
code:
type: integer
format: int32
message:
type: string
fields:
type: string
reason:
description: A human-readable code providing additional detail on the cause of the error.
type: string
error:
description: Description of the error thrown.
type:
- string
- 'null'
example: Invalid Token
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/v1.0/companies/%7Bcompany_id%7D/permission_templates',\n qs: {'filters[type]': 'SOME_STRING_VALUE', view: 'SOME_STRING_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")
conn.request("GET", "/rest/v1.0/companies/%7Bcompany_id%7D/permission_templates?filters%5Btype%5D=SOME_STRING_VALUE&view=SOME_STRING_VALUE")
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/v1.0/companies/%7Bcompany_id%7D/permission_templates?filters%5Btype%5D=SOME_STRING_VALUE&view=SOME_STRING_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/v1.0/companies/%7Bcompany_id%7D/permission_templates?filters%5Btype%5D=SOME_STRING_VALUE&view=SOME_STRING_VALUE\"),\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
x-changelog:
- summary: Added with_permissions query
description: 'Added a view query that returns detailed permission templates when specified.
Default serializer is used if no view is specified or does not match with_permissions.
Example - ?view=with_permissions'
endpoint: GET /companies/{company_id}/permission_templates
type: new
breaking: false
datestamp: '2023-05-24'
versions:
- '1.0'
x-doc:
visibility: public
stage: ga
exposure: public
link: company-permission-templates?version=1.0#list-permission-templates
operationId: listPermissionTemplates
post:
x-doc:
visibility: public
stage: ga
exposure: public
summary: Create Permission Template
description: Returns the created Permission Template along with its permitted actions.
tags:
- Company Permission Templates
parameters:
- name: company_id
in: path
description: Unique identifier for the company.
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
required:
- permission_template
properties:
permission_template:
properties:
id:
type: integer
description: The ID of the Permission Template
example: 1
company_id:
type: integer
description: The ID of the Company the Permission Template belongs to
example: 1
name:
type: string
description: The name of the Permission Template
example: General Contractor
provider_type:
type: string
description: '''Project'' or ''Company'''
type:
type: string
description: '''company_tools'', ''global'' or ''project_specific'''
provider_id:
type: integer
description: Either the company_id or project_id based on provider_type
example: 3
category:
type:
- string
- 'null'
description: The category of the Permission Template
enum:
- internal
- external
example: internal
user_access_levels:
type: object
description: user access levels for active tools
example:
admin: 2
images: 3
permissions:
type: object
description: permitted actions for active tools
example:
admin:
view_settings: true
view_wbs_configuration: true
images:
add_comment: true
add_description: true
bulk_edit: true
email_outbound: true
project_id:
type: integer
description: id of corresponding project if provider_type == Project
example: 3
example:
id: 1
name: General Contractor
user_access_levels:
home: 2
images: 3
permissions:
admin:
view_settings: true
view_wbs_configuration: true
images:
add_comment: true
add_description: true
bulk_edit: true
email_outbound: true
provider_type: Project
provider_id: 7
project_id: 7
company_id: 2
type: project_specific
category: internal
type:
- object
- 'null'
required: true
responses:
'200':
description: Success
content:
application/json:
schema:
properties:
id:
type: integer
description: The ID of the Permission Template
example: 1
company_id:
type: integer
description: The ID of the Company the Permission Template belongs to
example: 1
name:
type: string
description: The name of the Permission Template
example: General Contractor
provider_type:
type: string
description: '''Project'' or ''Company'''
type:
type: string
description: '''company_tools'', ''global'' or ''project_specific'''
provider_id:
type: integer
description: Either the company_id or project_id based on provider_type
example: 3
category:
type:
- string
- 'null'
description: The category of the Permission Template
enum:
- internal
- external
example: internal
user_access_levels:
type: object
description: user access levels for active tools
example:
admin: 2
images: 3
permissions:
type: object
description: permitted actions for active tools
example:
admin:
view_settings: true
view_wbs_configuration: true
images:
add_comment: true
add_description: true
bulk_edit: true
email_outbound: true
project_id:
type: integer
description: id of corresponding project if provider_type == Project
example: 3
example:
id: 1
name: General Contractor
user_access_levels:
home: 2
images: 3
permissions:
admin:
view_settings: true
view_wbs_configuration: true
images:
add_comment: true
add_description: true
bulk_edit: true
email_outbound: true
provider_type: Project
provider_id: 7
project_id: 7
company_id: 2
type: project_specific
category: internal
type:
- object
- 'null'
'400':
description: Bad Request
content:
application/json:
schema:
type: object
properties:
code:
type: integer
format: int32
message:
type: string
fields:
type: string
reason:
description: A human-readable code providing additional detail on the cause of the error.
type: string
error:
description: Description of the error thrown.
type:
- string
- 'null'
example: Invalid Token
'401':
description: Unauthorized
content:
application/json:
schema:
type: object
properties:
code:
type: integer
format: int32
message:
type: string
fields:
type: string
reason:
description: A human-readable code providing additional detail on the cause of the error.
type: string
error:
description: Description of the error thrown.
type:
- string
- 'null'
example: Invalid Token
'403':
description: Forbidden
content:
application/json:
schema:
type: object
properties:
code:
type: integer
format: int32
message:
type: string
fields:
type: string
reason:
description: A human-readable code providing additional detail on the cause of the error.
type: string
error:
description: Description of the error thrown.
type:
- string
- 'null'
example: Invalid Token
default:
description: Unexpected error
content:
application/json:
schema:
type: object
properties:
code:
type: integer
format: int32
message:
type: string
fields:
type: string
reason:
description: A human-readable code providing additional detail on the cause of the error.
type: string
error:
description: Description of the error thrown.
type:
- string
- 'null'
example: Invalid Token
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/v1.0/companies/%7Bcompany_id%7D/permission_templates',\n headers: {'content-type': 'application/json'},\n body: {\n permission_template: {\n id: 1,\n name: 'General Contractor',\n user_access_levels: {home: 2, images: 3},\n permissions: {\n admin: {view_settings: true, view_wbs_configuration: true},\n images: {\n add_comment: true,\n add_description: true,\n bulk_edit: true,\n email_outbound: true\n }\n },\n provider_type: 'Project',\n provider_id: 7,\n project_id: 7,\n company_id: 2,\n type: 'project_specific',\n category: 'internal'\n }\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
conn = http.client.HTTPSConnection("api.procore.com")
payload = "{\"permission_template\":{\"id\":1,\"name\":\"General Contractor\",\"user_access_levels\":{\"home\":2,\"images\":3},\"permissions\":{\"admin\":{\"view_settings\":true,\"view_wbs_configuration\":true},\"images\":{\"add_comment\":true,\"add_description\":true,\"bulk_edit\":true,\"email_outbound\":true}},\"provider_type\":\"Project\",\"provider_id\":7,\"project_id\":7,\"company_id\":2,\"type\":\"project_specific\",\"category\":\"internal\"}}"
headers = { ''content-type'': "application/json" }
conn.request("POST", "/rest/v1.0/companies/%7Bcompany_id%7D/permission_templates", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))'
- id: shell_curl
mimeType: application/json
title: Curl
content: "curl --request POST \\\n --url https://api.procore.com/rest/v1.0/companies/%7Bcompany_id%7D/permission_templates \\\n --header 'content-type: application/json' \\\n --data '{\"permission_template\":{\"id\":1,\"name\":\"General Contractor\",\"user_access_levels\":{\"home\":2,\"images\":3},\"permissions\":{\"admin\":{\"view_settings\":true,\"view_wbs_configuration\":true},\"images\":{\"add_comment\":true,\"add_description\":true,\"bulk_edit\":true,\"email_outbound\":true}},\"provider_type\":\"Project\",\"provider_id\":7,\"project_id\":7,\"company_id\":2,\"type\":\"project_specific\",\"category\":\"internal\"}}'"
- 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/v1.0/companies/%7Bcompany_id%7D/permission_templates\"),\n Content = new StringContent(\"{\\\"permission_template\\\":{\\\"id\\\":1,\\\"name\\\":\\\"General Contractor\\\",\\\"user_access_levels\\\":{\\\"home\\\":2,\\\"images\\\":3},\\\"permissions\\\":{\\\"admin\\\":{\\\"view_settings\\\":true,\\\"view_wbs_configuration\\\":true},\\\"images\\\":{\\\"add_comment\\\":true,\\\"add_description\\\":true,\\\"bulk_edit\\\":true,\\\"email_outbound\\\":true}},\\\"provider_type\\\":\\\"Project\\\",\\\"provider_id\\\":7,\\\"project_id\\\":7,\\\"company_id\\\":2,\\\"type\\\":\\\"project_specific\\\",\\\"category\\\":\\\"internal\\\"}}\")\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: createPermissionTemplate
/rest/v1.0/companies/{company_id}/permission_templates/{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: full
get:
x-doc:
visibility: public
stage: ga
exposure: public
summary: Returns specific template
description: Returns the Permission Template along with its permitted actions.
tags:
- Company Permission Templates
parameters:
- name: company_id
in: path
description: Unique identifier for the company.
required: true
schema:
type: integer
- name: id
in: path
description: The ID of the permission template to be retrieved
required: true
schema:
type: integer
responses:
'200':
description: Success
content:
application/json:
schema:
properties:
id:
type: integer
description: The ID of the Permission Template
example: 1
company_id:
type: integer
description: The ID of the Company the Permission Template belongs to
example: 1
name:
type: string
description: The name of the Permission Template
example: General Contractor
provider_type:
type: string
description: '''Project'' or ''Company'''
type:
type: string
description: '''company_tools'', ''global'' or ''project_specific'''
provider_id:
type: integer
description: Either the company_id or project_id based on provider_type
example: 3
category:
type:
- string
- 'null'
description: The category of the Permission Template
enum:
- internal
- external
example: internal
user_access_levels:
type: object
description: user access levels for active tools
example:
admin: 2
images: 3
permissions:
type: object
description: permitted actions for active tools
example:
admin:
view_settings: true
view_wbs_configuration: true
images:
add_comment: true
add_description: true
bulk_edit: true
email_outbound: true
project_id:
type: integer
description: id of corresponding project if provider_type == Project
example: 3
example:
id: 1
name: General Contractor
user_access_levels:
home: 2
images: 3
permissions:
admin:
view_settings: true
view_wbs_configuration: true
images:
add_comment: true
add_description: true
bulk_edit: true
email_outbound: true
provider_type: Project
provider_id: 7
project_id: 7
company_id: 2
type: project_specific
category: internal
type:
- object
- 'null'
'400':
description: Bad Request
content:
application/json:
schema:
type: object
properties:
code:
type: integer
format: int32
message:
type: string
fields:
type: string
reason:
description: A human-readable code providing additional detail on the cause of the error.
type: string
error:
description: Description of the error thrown.
type:
- string
- 'null'
example: Invalid Token
'401':
description: Unauthorized
content:
application/json:
schema:
type: object
properties:
code:
type: integer
format: int32
message:
type: string
fields:
type: string
reason:
description: A human-readable code providing additional detail on the cause of the error.
type: string
error:
description: Description of the error thrown.
type:
- string
- 'null'
example: Invalid Token
'403':
description: Forbidden
content:
application/json:
schema:
type: object
properties:
code:
type: integer
format: int32
message:
type: string
fields:
type: string
reason:
description: A human-readable code providing additional detail on the cause of the error.
type: string
error:
description: Description of the error thrown.
type:
- string
- 'null'
example: Invalid Token
default:
description: Unexpected error
content:
application/json:
schema:
type: object
properties:
code:
type: integer
format: int32
message:
type: string
fields:
type: string
reason:
description: A human-readable code providing additional detail on the cause of the error.
type: string
error:
description: Description of the error thrown.
type:
- string
- 'null'
example: Invalid Token
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/v1.0/companies/%7Bcompany_id%7D/permission_templates/%7Bid%7D'\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")
conn.request("GET", "/rest/v1.0/companies/%7Bcompany_id%7D/permission_templates/%7Bid%7D")
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/v1.0/companies/%7Bcompany_id%7D/permission_templates/%7Bid%7D"
- 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/v1.0/companies/%7Bcompany_id%7D/permission_templates/%7Bid%7D\"),\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: returnsSpecificTemplate
components:
securitySchemes:
bearerAuth:
type: http
scheme: bearer