Every API here is available over the APIs.io API and to AI agents over MCP.
openapi: 3.2.0
info:
title: Procore REST Markup Stamp V 2 Controller 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: markup-stamp-v-2-controller
paths:
/rest/v2.0/companies/{company_id}/projects/{project_id}/viewer_documents/stamps/{stamp_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
put:
tags:
- markup-stamp-v-2-controller
summary: Update Stamp
description: Updates an existing stamp with enhanced features for a specific company, project, and document.
operationId: updateStamp_1
parameters:
- name: stamp_id
in: path
description: The unique identifier of the stamp to update
required: true
schema:
type: string
- name: company_id
in: path
description: The unique identifier of the company
required: true
schema:
type: string
- name: project_id
in: path
description: The unique identifier of the project
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
type: object
description: Request body containing stamp data to save
properties:
background_image:
type: string
background_color:
type: string
pattern: ^#[0-9A-Fa-f]{6}$
title:
type: string
minLength: 1
text:
type: string
font_family:
type: string
text_color:
type: string
pattern: ^#[0-9A-Fa-f]{6}$
custom_properties:
type: object
properties:
user_name:
type: boolean
company:
type: boolean
date:
type: boolean
time:
type: boolean
font_style:
type: object
properties:
bold:
type: boolean
italic:
type: boolean
underline:
type: boolean
strike_through:
type: boolean
font_family:
type: string
minLength: 1
size:
type: integer
format: int32
minimum: 1
text_color:
type: string
pattern: ^#[0-9A-Fa-f]{6}$
required:
- font_family
required:
- title
required: true
responses:
'200':
description: OK
content:
'*/*':
schema:
type: object
properties:
id:
type: string
background_image:
type: string
background_color:
type: string
title:
type: string
text:
type: string
custom_properties:
type: object
properties:
user_name:
type: boolean
company:
type: boolean
date:
type: boolean
time:
type: boolean
font_style:
type: object
properties:
bold:
type: boolean
italic:
type: boolean
underline:
type: boolean
strike_through:
type: boolean
font_family:
type: string
minLength: 1
size:
type: integer
format: int32
minimum: 1
text_color:
type: string
pattern: ^#[0-9A-Fa-f]{6}$
required:
- font_family
is_legacy_stamp:
type: boolean
x-rate-limit-enabled: true
x-doc:
visibility: public
stage: ga
exposure: public
x-code-samples:
- id: node_request
mimeType: application/json
title: Node.js
content: "const request = require('request');\n\nconst options = {\n method: 'PUT',\n url: 'http://localhost:8080/rest/v2.0/companies/%7Bcompany_id%7D/projects/%7Bproject_id%7D/viewer_documents/stamps/%7Bstamp_id%7D',\n headers: {'content-type': 'application/json'},\n body: {\n background_image: 'string',\n background_color: 'string',\n title: 'string',\n text: 'string',\n font_family: 'string',\n text_color: 'string',\n custom_properties: {user_name: true, company: true, date: true, time: true},\n font_style: {\n bold: true,\n italic: true,\n underline: true,\n strike_through: true,\n font_family: 'string',\n size: 1,\n text_color: 'string'\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.HTTPConnection("localhost:8080")
payload = "{\"background_image\":\"string\",\"background_color\":\"string\",\"title\":\"string\",\"text\":\"string\",\"font_family\":\"string\",\"text_color\":\"string\",\"custom_properties\":{\"user_name\":true,\"company\":true,\"date\":true,\"time\":true},\"font_style\":{\"bold\":true,\"italic\":true,\"underline\":true,\"strike_through\":true,\"font_family\":\"string\",\"size\":1,\"text_color\":\"string\"}}"
headers = { ''content-type'': "application/json" }
conn.request("PUT", "/rest/v2.0/companies/%7Bcompany_id%7D/projects/%7Bproject_id%7D/viewer_documents/stamps/%7Bstamp_id%7D", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))'
- id: shell_curl
mimeType: application/json
title: Curl
content: "curl --request PUT \\\n --url http://localhost:8080/rest/v2.0/companies/%7Bcompany_id%7D/projects/%7Bproject_id%7D/viewer_documents/stamps/%7Bstamp_id%7D \\\n --header 'content-type: application/json' \\\n --data '{\"background_image\":\"string\",\"background_color\":\"string\",\"title\":\"string\",\"text\":\"string\",\"font_family\":\"string\",\"text_color\":\"string\",\"custom_properties\":{\"user_name\":true,\"company\":true,\"date\":true,\"time\":true},\"font_style\":{\"bold\":true,\"italic\":true,\"underline\":true,\"strike_through\":true,\"font_family\":\"string\",\"size\":1,\"text_color\":\"string\"}}'"
- id: csharp_httpclient
mimeType: application/json
title: C#
content: "var client = new HttpClient();\nvar request = new HttpRequestMessage\n{\n Method = HttpMethod.Put,\n RequestUri = new Uri(\"http://localhost:8080/rest/v2.0/companies/%7Bcompany_id%7D/projects/%7Bproject_id%7D/viewer_documents/stamps/%7Bstamp_id%7D\"),\n Content = new StringContent(\"{\\\"background_image\\\":\\\"string\\\",\\\"background_color\\\":\\\"string\\\",\\\"title\\\":\\\"string\\\",\\\"text\\\":\\\"string\\\",\\\"font_family\\\":\\\"string\\\",\\\"text_color\\\":\\\"string\\\",\\\"custom_properties\\\":{\\\"user_name\\\":true,\\\"company\\\":true,\\\"date\\\":true,\\\"time\\\":true},\\\"font_style\\\":{\\\"bold\\\":true,\\\"italic\\\":true,\\\"underline\\\":true,\\\"strike_through\\\":true,\\\"font_family\\\":\\\"string\\\",\\\"size\\\":1,\\\"text_color\\\":\\\"string\\\"}}\")\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}"
delete:
tags:
- markup-stamp-v-2-controller
summary: Delete Stamp
description: Deletes a stamp for a specific company, project, and document.
operationId: deleteStamp_1
parameters:
- name: company_id
in: path
description: The unique identifier of the company
required: true
schema:
type: string
- name: project_id
in: path
description: The unique identifier of the project
required: true
schema:
type: string
- name: stamp_id
in: path
description: The unique identifier of the stamp to delete
required: true
schema:
type: string
responses:
'200':
description: OK
content:
'*/*':
schema:
type: object
properties:
message:
type: string
x-rate-limit-enabled: true
x-doc:
visibility: public
stage: ga
exposure: public
x-code-samples:
- id: node_request
title: Node.js
content: "const request = require('request');\n\nconst options = {\n method: 'DELETE',\n url: 'http://localhost:8080/rest/v2.0/companies/%7Bcompany_id%7D/projects/%7Bproject_id%7D/viewer_documents/stamps/%7Bstamp_id%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.HTTPConnection("localhost:8080")
conn.request("DELETE", "/rest/v2.0/companies/%7Bcompany_id%7D/projects/%7Bproject_id%7D/viewer_documents/stamps/%7Bstamp_id%7D")
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))'
- id: shell_curl
title: Curl
content: "curl --request DELETE \\\n --url http://localhost:8080/rest/v2.0/companies/%7Bcompany_id%7D/projects/%7Bproject_id%7D/viewer_documents/stamps/%7Bstamp_id%7D"
- id: csharp_httpclient
title: C#
content: "var client = new HttpClient();\nvar request = new HttpRequestMessage\n{\n Method = HttpMethod.Delete,\n RequestUri = new Uri(\"http://localhost:8080/rest/v2.0/companies/%7Bcompany_id%7D/projects/%7Bproject_id%7D/viewer_documents/stamps/%7Bstamp_id%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}"
/rest/v2.0/companies/{company_id}/projects/{project_id}/viewer_documents/stamps:
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:
- markup-stamp-v-2-controller
summary: Get Stamps
description: Returns Stamps V2 for the user, company and project with pagination and search functionality. Supports both legacy and new stamps.
operationId: getStamps_1
parameters:
- name: company_id
in: path
description: The unique identifier of the company
required: true
schema:
type: string
- name: project_id
in: path
description: The unique identifier of the project
required: true
schema:
type: string
- name: page
in: query
description: Page number for pagination (1-based)
required: false
schema:
type: integer
format: int32
default: 1
- name: per_page
in: query
description: Number of stamps to return per page
required: false
schema:
type: integer
format: int32
default: 10
- name: search_text
in: query
description: Text to search for in stamp content
required: false
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
stamps:
type: array
items:
type: object
properties:
id:
type: string
background_image:
type: string
background_color:
type: string
title:
type: string
text:
type: string
custom_properties:
type: object
properties:
user_name:
type: boolean
company:
type: boolean
date:
type: boolean
time:
type: boolean
font_style:
type: object
properties:
bold:
type: boolean
italic:
type: boolean
underline:
type: boolean
strike_through:
type: boolean
font_family:
type: string
minLength: 1
size:
type: integer
format: int32
minimum: 1
text_color:
type: string
pattern: ^#[0-9A-Fa-f]{6}$
required:
- font_family
is_legacy_stamp:
type: boolean
x-rate-limit-enabled: true
x-doc:
visibility: public
stage: ga
exposure: public
x-code-samples:
- id: node_request
title: Node.js
content: "const request = require('request');\n\nconst options = {\n method: 'GET',\n url: 'http://localhost:8080/rest/v2.0/companies/%7Bcompany_id%7D/projects/%7Bproject_id%7D/viewer_documents/stamps',\n qs: {\n page: 'SOME_INTEGER_VALUE',\n per_page: 'SOME_INTEGER_VALUE',\n search_text: 'SOME_STRING_VALUE'\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
title: Python3
content: 'import http.client
conn = http.client.HTTPConnection("localhost:8080")
conn.request("GET", "/rest/v2.0/companies/%7Bcompany_id%7D/projects/%7Bproject_id%7D/viewer_documents/stamps?page=SOME_INTEGER_VALUE&per_page=SOME_INTEGER_VALUE&search_text=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 'http://localhost:8080/rest/v2.0/companies/%7Bcompany_id%7D/projects/%7Bproject_id%7D/viewer_documents/stamps?page=SOME_INTEGER_VALUE&per_page=SOME_INTEGER_VALUE&search_text=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(\"http://localhost:8080/rest/v2.0/companies/%7Bcompany_id%7D/projects/%7Bproject_id%7D/viewer_documents/stamps?page=SOME_INTEGER_VALUE&per_page=SOME_INTEGER_VALUE&search_text=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}"
post:
tags:
- markup-stamp-v-2-controller
summary: Save Stamp
description: Saves new stamp with enhanced features for a specific company, project, and document.
operationId: saveStamp_1
parameters:
- name: company_id
in: path
description: The unique identifier of the company
required: true
schema:
type: string
- name: project_id
in: path
description: The unique identifier of the project
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
type: object
description: Request body containing stamp data to save
properties:
background_image:
type: string
background_color:
type: string
pattern: ^#[0-9A-Fa-f]{6}$
title:
type: string
minLength: 1
text:
type: string
font_family:
type: string
text_color:
type: string
pattern: ^#[0-9A-Fa-f]{6}$
custom_properties:
type: object
properties:
user_name:
type: boolean
company:
type: boolean
date:
type: boolean
time:
type: boolean
font_style:
type: object
properties:
bold:
type: boolean
italic:
type: boolean
underline:
type: boolean
strike_through:
type: boolean
font_family:
type: string
minLength: 1
size:
type: integer
format: int32
minimum: 1
text_color:
type: string
pattern: ^#[0-9A-Fa-f]{6}$
required:
- font_family
required:
- title
required: true
responses:
'200':
description: OK
content:
'*/*':
schema:
type: object
properties:
id:
type: string
background_image:
type: string
background_color:
type: string
title:
type: string
text:
type: string
custom_properties:
type: object
properties:
user_name:
type: boolean
company:
type: boolean
date:
type: boolean
time:
type: boolean
font_style:
type: object
properties:
bold:
type: boolean
italic:
type: boolean
underline:
type: boolean
strike_through:
type: boolean
font_family:
type: string
minLength: 1
size:
type: integer
format: int32
minimum: 1
text_color:
type: string
pattern: ^#[0-9A-Fa-f]{6}$
required:
- font_family
is_legacy_stamp:
type: boolean
x-rate-limit-enabled: true
x-doc:
visibility: public
stage: ga
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: 'http://localhost:8080/rest/v2.0/companies/%7Bcompany_id%7D/projects/%7Bproject_id%7D/viewer_documents/stamps',\n headers: {'content-type': 'application/json'},\n body: {\n background_image: 'string',\n background_color: 'string',\n title: 'string',\n text: 'string',\n font_family: 'string',\n text_color: 'string',\n custom_properties: {user_name: true, company: true, date: true, time: true},\n font_style: {\n bold: true,\n italic: true,\n underline: true,\n strike_through: true,\n font_family: 'string',\n size: 1,\n text_color: 'string'\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.HTTPConnection("localhost:8080")
payload = "{\"background_image\":\"string\",\"background_color\":\"string\",\"title\":\"string\",\"text\":\"string\",\"font_family\":\"string\",\"text_color\":\"string\",\"custom_properties\":{\"user_name\":true,\"company\":true,\"date\":true,\"time\":true},\"font_style\":{\"bold\":true,\"italic\":true,\"underline\":true,\"strike_through\":true,\"font_family\":\"string\",\"size\":1,\"text_color\":\"string\"}}"
headers = { ''content-type'': "application/json" }
conn.request("POST", "/rest/v2.0/companies/%7Bcompany_id%7D/projects/%7Bproject_id%7D/viewer_documents/stamps", 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 http://localhost:8080/rest/v2.0/companies/%7Bcompany_id%7D/projects/%7Bproject_id%7D/viewer_documents/stamps \\\n --header 'content-type: application/json' \\\n --data '{\"background_image\":\"string\",\"background_color\":\"string\",\"title\":\"string\",\"text\":\"string\",\"font_family\":\"string\",\"text_color\":\"string\",\"custom_properties\":{\"user_name\":true,\"company\":true,\"date\":true,\"time\":true},\"font_style\":{\"bold\":true,\"italic\":true,\"underline\":true,\"strike_through\":true,\"font_family\":\"string\",\"size\":1,\"text_color\":\"string\"}}'"
- 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(\"http://localhost:8080/rest/v2.0/companies/%7Bcompany_id%7D/projects/%7Bproject_id%7D/viewer_documents/stamps\"),\n Content = new StringContent(\"{\\\"background_image\\\":\\\"string\\\",\\\"background_color\\\":\\\"string\\\",\\\"title\\\":\\\"string\\\",\\\"text\\\":\\\"string\\\",\\\"font_family\\\":\\\"string\\\",\\\"text_color\\\":\\\"string\\\",\\\"custom_properties\\\":{\\\"user_name\\\":true,\\\"company\\\":true,\\\"date\\\":true,\\\"time\\\":true},\\\"font_style\\\":{\\\"bold\\\":true,\\\"italic\\\":true,\\\"underline\\\":true,\\\"strike_through\\\":true,\\\"font_family\\\":\\\"string\\\",\\\"size\\\":1,\\\"text_color\\\":\\\"string\\\"}}\")\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}"
components:
securitySchemes:
bearerAuth:
type: http
scheme: bearer