Every API here is available over the APIs.io API and to AI agents over MCP.
openapi: 3.2.0
info:
title: Procore REST Punch Item Assignments 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: Punch Item Assignments
paths:
/rest/v1.0/projects/{project_id}/punch_item_assignments/{id}:
parameters:
- name: Procore-Company-Id
in: header
description: Unique company identifier associated with the Procore User Account.
required: true
schema:
type: integer
- name: id
in: path
required: true
description: ID of the Punch Item Assignment
schema:
type: integer
- name: project_id
in: path
required: true
description: Unique identifier for the project.
schema:
type: integer
x-compliance-level: full
get:
x-doc:
visibility: public
stage: ga
exposure: public
summary: Show Punch Assignment
description: Returns single Punch Item Assignment.
tags:
- Punch Item Assignments
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
id:
type: integer
description: Unique identifier for the Punch Item Assignment.
example: 333675
approved:
type: boolean
description: Resolution status
example: true
status:
type: string
description: Status of Assignment
example: unresolved
name:
type: string
description: Name of the assigned user.
example: Extra work
comment:
type: string
description: Comment
example: Completed
login_information_id:
type: integer
description: ID of the assigned user's login information.
example: 420
login_information_name:
type: string
description: Name of the assigned user.
example: Edgar Admin
login_information:
type: object
properties:
id:
type: integer
description: ID
example: 160586
login:
type: string
description: Email
example: carl.contractor@example.com
name:
type: string
description: Name
example: Carl Contractor
company_name:
type: string
description: Company Name
example: ABC drywall
attachments:
type: array
items:
type: object
properties:
id:
type: integer
description: ID
example: 5324
url:
type: string
description: URL
example: http://www.example.com/
filename:
type: string
description: Filename
example: january_receipt_copy.jpg
viewable_document_id:
type: integer
description: Viewable Document ID
example: 492
attached_to_item_id:
type:
- integer
- 'null'
description: Attached to item ID
example: 323
attached_to_item_type:
type:
- string
- 'null'
description: Attached to item type
example: Image
viewer_url:
type:
- string
- 'null'
description: Unified viewer link
example: /webclients/host/companies/1/projects/1/tools/document-viewer/document-viewer/51GW47XAV5N64CQ2F8HTWFW0M4?item_type=ProcoreComment&item_id=1&parent_id=1&fullscreen
vendor:
type:
- object
- 'null'
properties:
id:
type: integer
example: 161072
name:
type: string
example: SID Architecture
notified_at:
type: string
description: Date assignee was notified of Punch Item
example: '2018-10-22T23:46:50Z'
responded_at:
type: string
description: Date Assignee responded to the Punch Item
example: '2018-10-26T17:51:30Z'
manager_accepted_at:
type: string
description: Date Punch Item Manager resolved the Punch Item Assignment
example: '2018-10-26T18:15:26Z'
user_name:
type: string
description: Name of the assigned user.
example: Edgar Admin
updated_at:
type: string
description: Date Assignment was updated
example: '2018-10-26T18:15:26Z'
'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: User does not have right permissions
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/projects/%7Bproject_id%7D/punch_item_assignments/%7Bid%7D',\n headers: {Authorization: 'Bearer REPLACE_BEARER_TOKEN'}\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 = { ''Authorization'': "Bearer REPLACE_BEARER_TOKEN" }
conn.request("GET", "/rest/v1.0/projects/%7Bproject_id%7D/punch_item_assignments/%7Bid%7D", 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/v1.0/projects/%7Bproject_id%7D/punch_item_assignments/%7Bid%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN'"
- 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/projects/%7Bproject_id%7D/punch_item_assignments/%7Bid%7D\"),\n Headers =\n {\n { \"Authorization\", \"Bearer REPLACE_BEARER_TOKEN\" },\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
x-changelog:
- summary: Add user_name key to Punch Item Assignment Show response
description: Add user_name key to Punch Item Assignment Show response.
endpoint: GET /projects/{project_id}/punch_item_assignments/{id}
type: new
breaking: false
datestamp: '2021-06-24'
versions:
- '1.0'
x-doc:
visibility: public
stage: ga
exposure: public
link: punch-item-assignments?version=1.0#show-punch-assignment
operationId: showPunchAssignment
patch:
x-doc:
visibility: public
stage: ga
exposure: public
summary: Update Punch Item Assignment
description: Update single Punch Item Assignment.
tags:
- Punch Item Assignments
requestBody:
content:
application/json:
schema:
type: object
required:
- punch_item_assignment
properties:
send_emails:
type: string
description: Parameter to send email to assignees, distribution members and creator of the Punch Item. Parameter must be true and status or comment must have changed for an email to send.
example: true
punch_item_assignment:
type: object
description: Punch Item Assignment object
properties:
approved:
type: boolean
description: Resolution status
default: false
example: true
comment:
type: string
description: Comment
example: This Punch Item task is complete
login_information_id:
type: integer
description: User ID
example: 421
status:
type: string
description: Punch Item Assignment Status
default: unresolved
example: ready_for_review
enum:
- unresolved
- ready_for_review
- work_not_accepted
- resolved
document_management_document_revision_ids:
type: array
description: Document Management Document Revisions to attach to the response
items:
type: string
example:
- 5c9800d3-bd12-45dd-a280-85fe887858b2
- da4b5e3b-ddaf-406f-8b2c-dceb6a60a203
upload_ids:
type: array
description: Uploads to attach to the response
items:
type: string
example:
- 01JDENGN32Z9AJN1EB8R6NWYGD
- 01JDENH8W5GWSF34A5TA5T39CC
multipart/form-data:
schema:
type: object
required:
- punch_item_assignment
properties:
send_emails:
type: string
description: Parameter to send email to assignees, distribution members and creator of the Punch Item. Parameter must be true and status or comment must have changed for an email to send.
example: true
punch_item_assignment:
type: object
description: Punch Item Assignment object
properties:
approved:
type: boolean
description: Resolution status
default: false
example: true
comment:
type: string
description: Comment
example: This Punch Item task is complete
login_information_id:
type: integer
description: User ID
example: 421
attachments:
type: array
description: 'Punch Item Assignment attachments.
To upload attachments you must upload the entire payload as `multipart/form-data` content-type and
specify each parameter as form-data together with `attachments[]` as files.'
example:
- <file.png>
items:
type: string
required: true
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
id:
type: integer
description: Unique identifier for the Punch Item Assignment.
example: 333675
approved:
type: boolean
description: Resolution status
example: true
status:
type: string
description: Status of Assignment
example: unresolved
name:
type: string
description: Name of the assigned user.
example: Extra work
comment:
type: string
description: Comment
example: Completed
login_information_id:
type: integer
description: ID of the assigned user's login information.
example: 420
login_information_name:
type: string
description: Name of the assigned user.
example: Edgar Admin
login_information:
type: object
properties:
id:
type: integer
description: ID
example: 160586
login:
type: string
description: Email
example: carl.contractor@example.com
name:
type: string
description: Name
example: Carl Contractor
company_name:
type: string
description: Company Name
example: ABC drywall
attachments:
type: array
items:
type: object
properties:
id:
type: integer
description: ID
example: 5324
url:
type: string
description: URL
example: http://www.example.com/
filename:
type: string
description: Filename
example: january_receipt_copy.jpg
viewable_document_id:
type: integer
description: Viewable Document ID
example: 492
attached_to_item_id:
type:
- integer
- 'null'
description: Attached to item ID
example: 323
attached_to_item_type:
type:
- string
- 'null'
description: Attached to item type
example: Image
viewer_url:
type:
- string
- 'null'
description: Unified viewer link
example: /webclients/host/companies/1/projects/1/tools/document-viewer/document-viewer/51GW47XAV5N64CQ2F8HTWFW0M4?item_type=ProcoreComment&item_id=1&parent_id=1&fullscreen
vendor:
type:
- object
- 'null'
properties:
id:
type: integer
example: 161072
name:
type: string
example: SID Architecture
notified_at:
type: string
description: Date assignee was notified of Punch Item
example: '2018-10-22T23:46:50Z'
responded_at:
type: string
description: Date Assignee responded to the Punch Item
example: '2018-10-26T17:51:30Z'
manager_accepted_at:
type: string
description: Date Punch Item Manager resolved the Punch Item Assignment
example: '2018-10-26T18:15:26Z'
user_name:
type: string
description: Name of the assigned user.
example: Edgar Admin
updated_at:
type: string
description: Date Assignment was updated
example: '2018-10-26T18:15:26Z'
'400':
description: Can not update due to errors
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: User does not have right permissions
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
'422':
description: Unprocessable Entity
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: 'PATCH',\n url: 'https://api.procore.com/rest/v1.0/projects/%7Bproject_id%7D/punch_item_assignments/%7Bid%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'application/json'\n },\n body: {\n send_emails: true,\n punch_item_assignment: {\n approved: true,\n comment: 'This Punch Item task is complete',\n login_information_id: 421,\n status: 'ready_for_review',\n document_management_document_revision_ids: ['5c9800d3-bd12-45dd-a280-85fe887858b2', 'da4b5e3b-ddaf-406f-8b2c-dceb6a60a203'],\n upload_ids: ['01JDENGN32Z9AJN1EB8R6NWYGD', '01JDENH8W5GWSF34A5TA5T39CC']\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\n\nconn = http.client.HTTPSConnection(\"api.procore.com\")\n\npayload = \"{\\\"send_emails\\\":true,\\\"punch_item_assignment\\\":{\\\"approved\\\":true,\\\"comment\\\":\\\"This Punch Item task is complete\\\",\\\"login_information_id\\\":421,\\\"status\\\":\\\"ready_for_review\\\",\\\"document_management_document_revision_ids\\\":[\\\"5c9800d3-bd12-45dd-a280-85fe887858b2\\\",\\\"da4b5e3b-ddaf-406f-8b2c-dceb6a60a203\\\"],\\\"upload_ids\\\":[\\\"01JDENGN32Z9AJN1EB8R6NWYGD\\\",\\\"01JDENH8W5GWSF34A5TA5T39CC\\\"]}}\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"application/json\"\n }\n\nconn.request(\"PATCH\", \"/rest/v1.0/projects/%7Bproject_id%7D/punch_item_assignments/%7Bid%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/v1.0/projects/%7Bproject_id%7D/punch_item_assignments/%7Bid%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: application/json' \\\n --data '{\"send_emails\":true,\"punch_item_assignment\":{\"approved\":true,\"comment\":\"This Punch Item task is complete\",\"login_information_id\":421,\"status\":\"ready_for_review\",\"document_management_document_revision_ids\":[\"5c9800d3-bd12-45dd-a280-85fe887858b2\",\"da4b5e3b-ddaf-406f-8b2c-dceb6a60a203\"],\"upload_ids\":[\"01JDENGN32Z9AJN1EB8R6NWYGD\",\"01JDENH8W5GWSF34A5TA5T39CC\"]}}'"
- 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/v1.0/projects/%7Bproject_id%7D/punch_item_assignments/%7Bid%7D\"),\n Headers =\n {\n { \"Authorization\", \"Bearer REPLACE_BEARER_TOKEN\" },\n },\n Content = new StringContent(\"{\\\"send_emails\\\":true,\\\"punch_item_assignment\\\":{\\\"approved\\\":true,\\\"comment\\\":\\\"This Punch Item task is complete\\\",\\\"login_information_id\\\":421,\\\"status\\\":\\\"ready_for_review\\\",\\\"document_management_document_revision_ids\\\":[\\\"5c9800d3-bd12-45dd-a280-85fe887858b2\\\",\\\"da4b5e3b-ddaf-406f-8b2c-dceb6a60a203\\\"],\\\"upload_ids\\\":[\\\"01JDENGN32Z9AJN1EB8R6NWYGD\\\",\\\"01JDENH8W5GWSF34A5TA5T39CC\\\"]}}\")\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}"
- id: node_request
mimeType: multipart/form-data
title: Node.js
content: "const request = require('request');\n\nconst options = {\n method: 'PATCH',\n url: 'https://api.procore.com/rest/v1.0/projects/%7Bproject_id%7D/punch_item_assignments/%7Bid%7D',\n headers: {\n Authorization: 'Bearer REPLACE_BEARER_TOKEN',\n 'content-type': 'multipart/form-data; boundary=---011000010111000001101001'\n },\n formData: {\n send_emails: 'true',\n punch_item_assignment: '{\"approved\":true,\"comment\":\"This Punch Item task is complete\",\"login_information_id\":421}',\n attachments: '[\"<file.png>\"]'\n }\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: multipart/form-data
title: Python3
content: "import http.client\n\nconn = http.client.HTTPSConnection(\"api.procore.com\")\n\npayload = \"-----011000010111000001101001\\r\\nContent-Disposition: form-data; name=\\\"send_emails\\\"\\r\\n\\r\\ntrue\\r\\n-----011000010111000001101001\\r\\nContent-Disposition: form-data; name=\\\"punch_item_assignment\\\"\\r\\n\\r\\n{\\\"approved\\\":true,\\\"comment\\\":\\\"This Punch Item task is complete\\\",\\\"login_information_id\\\":421}\\r\\n-----011000010111000001101001\\r\\nContent-Disposition: form-data; name=\\\"attachments\\\"\\r\\n\\r\\n[\\\"<file.png>\\\"]\\r\\n-----011000010111000001101001--\\r\\n\"\n\nheaders = {\n 'Authorization': \"Bearer REPLACE_BEARER_TOKEN\",\n 'content-type': \"multipart/form-data; boundary=---011000010111000001101001\"\n }\n\nconn.request(\"PATCH\", \"/rest/v1.0/projects/%7Bproject_id%7D/punch_item_assignments/%7Bid%7D\", payload, headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"
- id: shell_curl
mimeType: multipart/form-data
title: Curl
content: "curl --request PATCH \\\n --url https://api.procore.com/rest/v1.0/projects/%7Bproject_id%7D/punch_item_assignments/%7Bid%7D \\\n --header 'Authorization: Bearer REPLACE_BEARER_TOKEN' \\\n --header 'content-type: multipart/form-data' \\\n --form send_emails=true \\\n --form 'punch_item_assignment={\"approved\":true,\"comment\":\"This Punch Item task is complete\",\"login_information_id\":421}' \\\n --form 'attachments=[\"<file.png>\"]'"
- id: csharp_httpclient
mimeType: multipart/form-data
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/v1.0/projects/%7Bproject_id%7D/punch_item_assignments/%7Bid%7D\"),\n Headers =\n {\n { \"Authorization\", \"Bearer REPLACE_BEARER_TOKEN\" },\n },\n Content = new MultipartFormDataContent\n {\n new StringContent(\"true\")\n {\n Headers =\n {\n ContentDisposition = new ContentDispositionHeaderValue(\"form-data\")\n {\n Name = \"send_emails\",\n }\n }\n },\n new StringContent(\"{\\\"approved\\\":true,\\\"comment\\\":\\\"This Punch Item task is complete\\\",\\\"login_information_id\\\":421}\")\n {\n Headers =\n {\n ContentDisposition = new ContentDispositionHeaderValue(\"form-data\")\n {\n Name = \"punch_item_assignment\",\n }\n }\n },\n new StringContent(\"[\\\"<file.png>\\\"]\")\n {\n Headers =\n {\n ContentDisposition = new ContentDispositionHeaderValue(\"form-data\")\n {\n Name = \"attachments\",\n }\n }\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
x-changelog:
- summary: Add user_name key to Punch Item Assignment Update response
description: Add user_name key to Punch Item Assignment Update response.
endpoint: PATCH /projects/{project_id}/punch_item_assignments/{id}
type: new
breaking: false
datestamp: '2021-06-24'
versions:
- '1.0'
x-doc:
visibility: public
stage: ga
exposure: public
link: punch-item-assignments?version=1.0#update-punch-item-assignment
- summary: Punch Item Assignment Update now also accepts Upload IDs
description: This endpoint now accepts `upload_ids` as part of the payload.
endpoint: PATCH /projects/{project_id}/punch_item_assignments/{id}
type: feature
breaking: false
datestamp: '2024-12-01'
versions:
- '1.0'
x-doc:
visibility: public
stage: ga
exposure: public
link: punch-item-assignments?version=1.0#update-punch-item-assignment
- summary: Accept document_management_document_revision_ids parameter when updating Punch Item Assignment response
description: 'Accept an array of PDM document references as a parameter when updating Punch Item Assignment response.
The new parameter is also returned on the response.'
endpoint: PATCH /projects/{project_id}/punch_item_assignments/{id}
type: new
breaking: false
datestamp: '2026-02-12'
versions:
- '1.0'
x-doc:
visibility: public
stage: ga
exposure: public
link: punch-item-assignments?version=1.0#update-punch-item-assignment
operationId: updatePunchItemAssignment
components:
securitySchemes:
bearerAuth:
type: http
scheme: bearer