Skip to content

Product Development · Beta

Procore
API integration

Ship Product Development features without building the integration. Full Procore API access via Proxy and 120+ MCP-ready tools for AI agents — extend models and mappings to fit your product.

Built for specific customer use cases. Issues are resolved quickly.

Talk to us
Procore

Use Cases

Why integrate with Procore

Common scenarios for SaaS companies building Procore integrations for their customers.

01

Sync construction financials with ERP and accounting platforms

Finance and ERP SaaS tools can keep Procore budgets, line items, and sub jobs in lockstep with QuickBooks, Sage, or NetSuite so field cost tracking matches the general ledger without manual dual-entry.

02

Push field-detected issues into Procore as RFIs or punch items

Drone, BIM, and QA platforms can automatically convert detected defects into Procore RFIs or punch items with attached photos, tagged to the right location and sub job, eliminating manual re-entry for site teams.

03

Automate construction payroll from Procore crew and timecard data

Workforce management and payroll SaaS can pull crews, timecard time types, and daily logs to run certified payroll and union wage reporting against the GC's source of truth.

04

Power real-time construction analytics and portfolio dashboards

BI and forecasting tools can continuously ingest budget details, change event comments, sub jobs, and project metadata to surface variance, risk, and performance across a GC's entire project portfolio.

05

Log safety inspections and daily field activity back into Procore

Safety and inspection SaaS can create checklist responses and reference daily logs so the GC retains Procore as the compliance system of record while end users work in a specialized tool.

What You Can Build

Ship these features with Truto + Procore

Concrete product features your team can ship faster by leveraging Truto’s Procore integration instead of building from scratch.

01

Bi-directional RFI sync

Create, read, update, and reply to Procore RFIs from your product, with support for advanced exports and distribution lists.

02

Budget automation with lock/unlock controls

List budget views and line items, bulk create or delete line items, and programmatically lock or unlock budgets as part of your approval workflows.

03

Punch list creation with photo attachments

Create punch items, add comments, bulk-upload attachments, and send punch items to assignees directly from your platform.

04

Location- and sub job-aware issue mapping

Read and write Procore locations (nested or flat) and sub jobs so every record your app pushes is tagged to the correct physical and financial breakdown.

05

Real-time event listeners via Procore webhooks

Programmatically register company- and project-level webhook hooks and bulk-create triggers to react to CRUD events on RFIs, budgets, punch items, and more without polling.

06

Crew and timecard ingestion for payroll workflows

Manage Procore crews and read timecard time types and daily logs to feed labor hours into payroll, HR, or compliance engines.

SuperAI

Procore AI agent tools

Comprehensive AI agent toolset with fine-grained control. Integrates with MCP clients like Cursor and Claude, or frameworks like LangChain.

create_a_procore_oauth_token

Get or refresh a Procore OAuth access token. Returns: access_token, token_type, expires_in, refresh_token, created_at. Required: grant_type, client_id, client_secret. Use grant_type=authorization_code for a new token, grant_type=refresh_token to refresh an existing one, or grant_type=client_credentials for Procore Service Account authentication.

list_all_procore_oauth_tokens

Get details about the current Procore access token, such as the resource owner it belongs to and its remaining lifetime. Returns: resource_owner_id, scopes, expires_in_seconds, application, created_at.

procore_oauth_tokens_revoke

Revoke a Procore access token, invalidating both the access token and its refresh token; the authorization server returns success whether the token was revoked or was already invalid. Requires the Procore-Company-Id header. Returns an empty response body on success. Required: token, client_id, client_secret.

list_all_procore_webhook_hooks

List Procore webhook hooks scoped to a company and/or project. Returns: id, api_version, destination_headers, destination_url, owned_by_company_id, owned_by_project_id, owned_by_user_id, namespace, ulid, timestamp, metadata, user_id, company_id, project_id, event_type, resource_name, resource_id. Required: company_id or project_id — hooks cannot be listed without a scope.

create_a_procore_webhook_hook

Create a Procore webhook hook that delivers event payloads to a destination URL. Returns: id, api_version, destination_headers, destination_url, owned_by_company_id, owned_by_project_id, owned_by_user_id, namespace, ulid, timestamp, metadata, user_id, company_id, project_id, event_type, resource_name, resource_id. Required: hook (with api_version and destination_url), plus either company_id or…

update_a_procore_webhook_hook_by_id

Update a Procore webhook hook by id. Returns: id, api_version, destination_headers, destination_url, owned_by_company_id, owned_by_project_id, owned_by_user_id, namespace, ulid, timestamp, metadata, user_id, company_id, project_id, event_type, resource_name, resource_id. Required: id, hook (with api_version and destination_url), plus either company_id or project_id.

delete_a_procore_webhook_hook_by_id

Delete a Procore webhook hook by id. Returns an empty 204 response on success. Required: id.

list_all_procore_webhook_resources

List Webhook Resources for the given scope in Procore. Returns: id, ulid, timestamp, metadata, user_id, company_id, project_id, api_version, event_type, resource_name, resource_id, related_resources, reason, resource_type. Deprecated v1.0 endpoint.

list_all_procore_companies

List Procore companies visible to the current user. Returns: id, name, is_active, logo_url, pcn_business_experience, my_company. Supports an optional view parameter (defaults to compact) and does not require the Procore-Company-Id header.

list_all_procore_me

Get information about the authenticated Procore user, including a globally unique user id (unique across companies). Returns: id, login, name, ulid, timestamp, metadata, user_id, company_id, project_id, api_version, event_type, resource_name, resource_id.

list_all_procore_company_projects

List Procore projects associated with a company that the current user can access. Returns: id, name, project_number, stage_name, description, active, company_id. Required: company_id.

procore_budget_lock

Lock a Procore project's budget to prevent further budget modifications. Returns: locked. Required: project_id.

procore_budget_unlock

Unlock a Procore project's budget so budget modifications can resume. Returns: locked. Required: project_id.

list_all_procore_budget

Get budget metadata for a Procore project, including the current locked status of the budget. Returns: locked. Required: project_id.

list_all_procore_budget_line_items

List budget line items for a Procore project. Returns a paginated list in a data array of budget line item records, each with its id; each page has a maximum of 100 items. Required: project_id.

create_a_procore_budget_line_item

Create a new budget line item in a Procore project. Returns the created line item's id, original_budget_amount, uom, quantity, unit_cost, and calculation_strategy. Required: project_id, budget_line_item (with wbs_code_id inside it).

procore_budget_line_items_bulk_delete

Delete Budget Line Items in bulk for a Procore project. Returns an empty 204 response on success. Required: project_id (the project whose budget line items are deleted).

list_all_procore_timecard_time_types

List all Timecard Time Types for a Procore company. Returns: id, time_type, in_use. Required: company_id.

update_a_procore_timecard_time_type_by_id

Update a Timecard Time Type for a Procore company. Returns the updated time type record including its id, time_type, and in_use status. Required: id, company_id, and a timecard_time_type body with pay_rate, name, and abbreviated_time_type.

list_all_procore_checklist_responses

List checklist Responses for a Procore company. Returns the collection under data: data.id, data.login, data.name. Required: company_id.

create_a_procore_checklist_response

Create a checklist Response for a Procore company. Returns the created record wrapped in the data envelope: data.id, data.login, data.name. Required: company_id, response (name, corresponding_status).

get_single_procore_checklist_response_by_id

Get a checklist Response by id for a Procore company. Returns the Response wrapped in the data envelope: data.id, data.login, data.name. Required: company_id, id.

update_a_procore_checklist_response_by_id

Update a checklist Response by id for a Procore company. Returns the updated record wrapped in the data envelope: data.id, data.login, data.name. Required: company_id, id.

delete_a_procore_checklist_response_by_id

Delete a checklist Response by id for a Procore company. Returns an empty 204 response on success. Required: company_id, id.

list_all_procore_crews

List all crews with details for a specified Procore project. Returns crew records including id, name, lead_party_id, party_ids, equipment_ids, and created_at. Required: project_id.

create_a_procore_crew

Create a new crew in a Procore project. Returns the created crew record including id, name, lead_party_id, party_ids, and created_at. Required: project_id.

get_single_procore_crew_by_id

Get detailed information for a single crew in a Procore project. Returns: id, name, lead_party_id, party_ids, equipment_ids, created_at, updated_at. Required: project_id, id.

update_a_procore_crew_by_id

Update a Crew in Procore for the specified project. Returns the updated crew record including id, name, lead_party_id, party_ids, equipment_ids, created_at, and updated_at. Required: project_id, id, crew.

delete_a_procore_crew_by_id

Delete a Crew in Procore for the specified project. Returns an empty 204 response on success. Required: project_id, id.

list_all_procore_webhook_triggers

List triggers configured on a Procore webhook hook. Returns an array of trigger records including id, timestamp, company_id, event_type, resource_name, and resource_id. Required: hook_id. The upstream v1.0 endpoint is deprecated.

create_a_procore_webhook_trigger

Create a trigger on a Procore company webhook hook. Returns the created trigger record including id, timestamp, event_type, resource_name, and resource_id. Requires hook_id, company_id, api_version, and a trigger object with resource_name and event_type. The upstream v1.0 endpoint is deprecated.

procore_webhook_triggers_bulk_create

Create multiple triggers on a Procore company webhook hook in a single request. Returns the created trigger records including id, timestamp, event_type, resource_name, and resource_id. Requires hook_id, company_id, api_version, and a triggers array with resource_name and event_type per item. Max 500 triggers; the upstream v1.0 endpoint is deprecated.

procore_webhook_triggers_bulk_delete

Bulk delete Procore webhook triggers by id, removing up to 500 triggers from a hook in a single request. Returns an empty 204 response on success. Required: hook_id, company_id, triggers. The upstream v1.0 endpoint is deprecated.

delete_a_procore_webhook_trigger_by_id

Delete a single Procore webhook trigger from a hook by id. Deprecated v1.0 endpoint — prefer the v2.0 company/project trigger endpoints. Returns an empty 204 response on success. Required: hook_id and id.

list_all_procore_daily_logs

List counts of Procore daily logs by type for a project (v1.1 counts endpoint, replacement for the deprecated /daily_logs/count). Returns one entry per log module with module_name, count, and position. Required: project_id.

list_all_procore_rfi_advanced_exports

Get the available advanced export options for an existing RFI in Procore. Returns option groups including slug, name, type, and the selectable options (id, name) that can be passed when requesting an export. Required: project_id, rfi_id.

create_a_procore_rfi_advanced_export

Request an advanced export of an existing RFI in Procore, specifying the cover sheet and which associated attachments to include. Returns a confirmation message; the export is processed asynchronously and the compiled file is delivered by email when ready. Required: project_id, rfi_id, format, options.

list_all_procore_change_event_comments

List comments on a Procore change event. Returns comment objects with id, body, rating, prostore_file_ids, created_at, and updated_at. Required: company_id, project_id, change_event_id.

create_a_procore_change_event_comment

Create a comment on a Procore change event. Returns the created comment with id, body, rating, prostore_file_ids, created_at, and updated_at. Required: company_id, project_id, change_event_id, and comment.body.

delete_a_procore_change_event_comment_by_id

Delete a comment on a Procore change event by id. Returns an empty 204 response on success. Required: company_id, project_id, change_event_id, and id.

list_all_procore_rfis

List all RFIs in a Procore project. Returns RFI records with id, subject, number, status, questions, and assignees. Required: project_id. Supports filters (e.g. filters[status], filters[overdue]), search, sort[attribute], and serializer_view.

create_a_procore_rfi

Create a new RFI in a Procore project. Returns the created RFI with id, subject, number, status, questions, and assignees. Required: project_id, rfi (with subject, question, and rfi_manager_id).

get_single_procore_rfi_by_id

Get detailed information about a specific RFI in a Procore project. Returns: id, subject, reference, number, status, translated_status, due_date, due_date_variance, drawing_number, priority, position, questions, assignees, distribution_list, created_at, updated_at, initiated_at, time_resolved, assigned_id, ball_in_court_id, cost_code_id, created_by_id, location_id, responsible_contractor_id,…

update_a_procore_rfi_by_id

Update a specified RFI in a Procore project. Returns the updated RFI with id, subject, number, status, questions, and updated_at. Required: project_id, id, rfi.

procore_rfis_bulk_update

Update multiple RFIs in a Procore project in a single batch request. Returns the updated RFI records with id, subject, number, status, questions, and assignees. Required: project_id and a body array of RFI objects each with an id.

list_all_procore_mpz

Check which Multiple Procore Zones (MPZ) zone a company in Procore is routed to and which web URL serves it. Returns: zone, web_base_url.g. us02) and web_base_url (e.g. https://us02.procore.com).

list_all_procore_rfi_replies

List replies for a specified RFI in a Procore project. Returns each reply's id, official flag, answer_date, plain_text_body, rich_text_body, created_by, created_by_id, and attachments. Required: project_id, rfi_id.

create_a_procore_rfi_reply

Create a reply for a specified RFI in a Procore project. Returns the created reply including id, official, answer_date, plain_text_body, created_by, and attachments. Required: project_id, rfi_id, reply.

get_single_procore_rfi_reply_by_id

Get detailed information on a specified RFI reply in a Procore project. Returns: id, official, answer_date, plain_text_body, rich_text_body, created_by, created_by_id, attachments. Required: project_id, rfi_id, id.

update_a_procore_rfi_reply_by_id

Update a specified RFI reply in a Procore project. Returns the updated reply including id, official, answer_date, plain_text_body, created_by, and attachments. Required: project_id, rfi_id, id.

delete_a_procore_rfi_reply_by_id

Delete a specified response (reply) associated with a specified RFI and Project in Procore. Returns an empty 204 response on success. Required: project_id, rfi_id, id.

list_all_procore_budget_details

List all rows from the Procore Budget Detail Report for a project and budget view. Returns rows with id, biller, cost_code, root_cost_code, cost_type, vendor, and detail_type, plus one key per visible budget column keyed by the budget column id. Required: budget_view_id, project_id.

list_all_procore_lien_waivers

List lien waivers in a Procore project. Returns lien waiver records including id, status, type, invoice_id, waiver_date, and locked. Required: project_id (path) and invoice_id (query).

list_all_procore_budget_views

List Budget Views in Procore for a project, or at company level. Returns: id, name, description, created_at, created_by, updated_at, role, links. Sorting by created_at is supported, with a '-' prefix for descending order.

list_all_procore_generic_tools

List the default correspondence types available for a Procore company — the predefined types that can be used when creating generic tools. Returns: key, allow_admin_view_private_item, name, abbreviation, fields. Required: company_id.

list_all_procore_project_dates

List Project Dates for a Procore project. Returns Project Date records including their id and date. Required: project_id.

procore_project_dates_bulk_upsert

Create or update Project Dates on a Procore project in bulk, associating each given project date or updating its date. Returns: id, date. Required: project_id and a project_dates array of items with id and date.

get_single_procore_project_date_by_id

Get details of a specific Project Date on a Procore project. Returns the Project Date record including its id and date. Required: project_id and id.

create_a_procore_project

Create a new Project in a Procore company; the Project is active by default. Returns: id, name, description, project_number, projected_finish_date. Required: company_id, project.name. Country and state codes must be ISO-3166 Alpha-2.

list_all_procore_projects

List Projects for a Procore company. Returns each Project with id, name, description, project_number, and projected_finish_date. Required: company_id.

get_single_procore_project_by_id

Get detailed information about a specific Project in Procore by id. Returns: id, name, description, project_number, projected_finish_date. Required: id.

update_a_procore_project_by_id

Update a specified Project in Procore by id. Returns the updated Project with id, name, description, project_number, and projected_finish_date. Required: id.

delete_a_procore_project_by_id

Delete a Project in Procore by id. Projects that are being used as a Parent Job cannot be deleted. Returns an empty 204 response on success.

list_all_procore_calendars

List all calendars for a specified Procore company. Returns each calendar record with id, created_at, and updated_at. Required: company_id.

list_all_procore_locations

List the Locations associated with a Procore project. Returns each location's id, name, node_name, code, parent_id, and created_at/updated_at. Required: project_id. Supports filters (id, parent_id, code, search, hierarchy depth) and sorting.

create_a_procore_location

Create a new Location for a specified Procore project. Returns the created location including id, name, node_name, code, parent_id, and created_at. Required: project_id and a location body with node_name (parent_id optionally nests the node under an existing location).

get_single_procore_location_by_id

Get a single Location in a Procore project by id. Returns: id, name, node_name, parent_id, code, created_at, updated_at. Required: project_id and id.

update_a_procore_location_by_id

Update a Location on a Procore project. Returns the updated Location including id, name, node_name, parent_id, code, and created_at/updated_at timestamps. Required: project_id, id, and a location object (node_name, parent_id).

delete_a_procore_location_by_id

Delete a Location from a Procore project (v1.1). Returns an empty 204 response on success. Required: project_id, id.

get_single_procore_link_by_id

Get a specific Project Home Link in Procore by id. Returns the link's id, title, url, project_id, created_at, and created_by details. Required: id, project_id.

procore_links_restore

Restore a Project Home Link from the recycle bin in Procore. Returns the restored link's id, title, url, project_id, created_at, and created_by details. Required: link_id.

list_all_procore_punch_items

List all Punch Items in a Procore Project, with rich filtering and sorting. Returns: id, position, name, description, due_date, priority, status_text, workflow_status, reference, location_name, trade_name, category_name, punch_item_type_name, closed_at, created_at, date_initiated, assignees, attachments, distribution_members, punch_item_manager. Required: project_id.

create_a_procore_punch_item

Create a new Punch Item in a Procore Project. Returns the created record with id, name, description, priority, due_date, and status_text. Required: project_id and punch_item.name.

get_single_procore_punch_item_by_id

Get detailed information about a specific Punch Item in a Procore project. Returns: id, punch_item_manager, assignees, created_at, updated_at. Required: id and project_id.

procore_punch_items_send

Send email notifications for unsent Punch Items in a Procore project. Returns an empty 204 response on success. Required: project_id.

create_a_procore_punch_item_comment

Create a new comment on a Procore punch item. Returns the created comment including its id and body. Required: punch_item_id, comment.body.

list_all_procore_sub_jobs

List all Sub Jobs in a Procore project. Returns sub jobs with id, name, code, origin_id, origin_code, origin_data, created_at, and updated_at. Required: project_id.

create_a_procore_sub_job

Create a new Sub Job in Procore. Returns the created sub job with id, name, code, origin_id, origin_data, created_at, and updated_at. Requires a sub_job object containing name, code, origin_id, and origin_data.

get_single_procore_sub_job_by_id

Get a single Sub Job in a Procore project by id. Returns: id, name, code, origin_id, origin_code, origin_data, created_at, updated_at. Required: id.

update_a_procore_sub_job_by_id

Update a specified Sub Job in Procore by id. Returns the updated sub job with id, name, code, origin_id, origin_data, created_at, and updated_at. Requires id and a sub_job object with name, code, origin_id, or origin_data.

delete_a_procore_sub_job_by_id

Delete a specified Sub Job in Procore by id. Returns an empty 204 response on success. Required: id. Deprecated — Procore directs users to the Delete Project Segment Item endpoint in the Work Breakdown Structure docs as the replacement.

list_all_procore_project_webhook_hooks

List webhooks registered for a Procore project. Returns hooks with id, api_version, destination_url, destination_headers, namespace, payload_version, and ownership ids. Required: company_id and project_id. Max 100 per page.

create_a_procore_project_webhook_hook

Create a webhook for a Procore project that delivers event payloads to a destination URL. Returns the created hook with id, api_version, destination_url, destination_headers, and namespace. Requires company_id, project_id, and a hook object with api_version and destination_url.

get_single_procore_project_webhook_hook_by_id

Get a single Procore project webhook by id. Returns: id, api_version, destination_url, destination_headers, namespace, payload_version, status, owned_by_company_id, owned_by_project_id, owned_by_user_id, trigger_count. Required: company_id, project_id, id.

update_a_procore_project_webhook_hook_by_id

Update a Procore project webhook by id — rotate the destination URL or headers, or set status to disabled to stop event delivery without deleting the hook. Returns the updated hook with id, api_version, destination_url, destination_headers, and status. Required: company_id, project_id, id.

delete_a_procore_project_webhook_hook_by_id

Delete a Procore project webhook by id, removing the hook and its associated triggers. Returns an empty 204 response on success. Required: company_id, project_id, id.

list_all_procore_company_webhook_hooks

List webhooks registered for a Procore company. Returns hook records including id, api_version, destination_url, destination_headers, owned_by_company_id, and namespace. Required: company_id, namespace.

create_a_procore_company_webhook_hook

Create a webhook hook for a Procore company that delivers event payloads to a destination URL. Returns the created hook including id, api_version, destination_url, destination_headers, and namespace. Required: company_id, destination_url.

get_single_procore_company_webhook_hook_by_id

Get a specific webhook hook registered for a Procore company by its id. Returns the hook record including id, api_version, destination_url, destination_headers, owned_by_company_id, and namespace. Required: company_id, id.

update_a_procore_company_webhook_hook_by_id

Update a webhook hook registered for a Procore company — for example, toggle status between active and disabled to stop or resume event delivery without deleting the hook. Returns the updated hook including id, api_version, destination_url, destination_headers, and namespace. Required: company_id, id.

delete_a_procore_company_webhook_hook_by_id

Delete a webhook hook registered for a Procore company along with all triggers associated with the hook. Returns an empty 204 response on success. Required: company_id, id.

list_all_procore_project_webhook_resources

List the Procore webhook resources available for a project. Returns resource entries including id, timestamp, event_type, resource_name, and resource_id. Required: company_id, project_id.

list_all_procore_company_webhook_resources

List the Webhook Resources available to a company in Procore. Returns each subscribable resource's api_version, product_category, tools, except, create, update, and delete event details. Required: company_id.

list_all_procore_project_webhook_triggers

List Triggers for a Procore project webhook. Returns the trigger objects including id, timestamp, api_version, event_type, resource_name, and resource_id. Required: company_id, project_id, hook_id.

create_a_procore_project_webhook_trigger

Create a Trigger for a Procore project webhook. Returns the triggers array including id, api_version, event_type, resource_name, and resource_id. Required: company_id, project_id, hook_id, resource_name, event_type.

procore_project_webhook_triggers_bulk_create

Create multiple Triggers for a Procore project webhook in a single request. Returns the triggers including id, api_version, event_type, resource_name, and resource_id. Required: company_id, project_id, hook_id.

procore_project_webhook_triggers_bulk_delete

Delete multiple Triggers from a Procore project webhook in a single request. Returns the remaining triggers including id, event_type, resource_name, and resource_id. Required: company_id, project_id, hook_id.

delete_a_procore_project_webhook_trigger_by_id

Delete a Trigger from a Procore project webhook by id. Returns the remaining triggers including id, event_type, resource_name, and resource_id. Required: id, company_id, project_id, hook_id.

list_all_procore_company_webhook_triggers

List the Triggers configured on a Procore company webhook. Returns an array of trigger objects including their id, resource_name, and event_type. Required: company_id, hook_id.

create_a_procore_company_webhook_trigger

Create a Trigger on a Procore company webhook that fires when the specified resource event occurs. Returns an array of trigger objects including their id, resource_name, and event_type. Required: company_id, hook_id, resource_name, event_type.

procore_company_webhook_triggers_bulk_create

Create multiple Triggers on a Procore company webhook in a single request. Returns trigger records including their id, resource_name, event_type, company_id, and project_id. Required: company_id, hook_id, and a data array of trigger items (resource_name, event_type).

procore_company_webhook_triggers_bulk_delete

Delete multiple Triggers from a Procore company webhook in a single request. Returns trigger records including their id, resource_name, event_type, and company_id. Required: company_id, hook_id, and a data array of trigger items (resource_name, event_type).

delete_a_procore_company_webhook_trigger_by_id

Delete a single Trigger from a Procore company webhook by id. Returns trigger objects including their id, resource_name, and event_type. Required: company_id, hook_id, id.

list_all_procore_locations_flat

List Procore locations for a specified project. Returns location records with id, name, node_name, parent_id, code, created_at, and updated_at. Required: project_id. This flat endpoint is deprecated.

create_a_procore_locations_flat

Create a new Procore location. Returns the created location record with id, name, node_name, parent_id, code, created_at, and updated_at. Required: project_id and location.node_name. Legacy flat variant that scopes the location via project_id in the body.

get_single_procore_locations_flat_by_id

Get a single Procore location by id. Returns the location record with id, name, node_name, parent_id, code, created_at, and updated_at. Required: id. This flat endpoint is deprecated.

update_a_procore_locations_flat_by_id

Update a Procore location by id. Returns the updated location record with id, name, node_name, parent_id, code, created_at, and updated_at. Required: id, project_id, and location.node_name. This flat endpoint is deprecated.

delete_a_procore_locations_flat_by_id

Delete a Procore location by id. Returns an empty 204 response on success. Required: id and project_id. This flat endpoint is deprecated.

list_all_procore_webhook_resource_api_versions

List the Webhook Resources API Versions available in Procore for the given scope. Returns an array of API version strings (e.g. v1.0, v2.0, v3.0). No required parameters. Deprecated: the Webhooks v1.0 Resources API is deprecated.

list_all_procore_crew_ids

List all Crew IDs for a specified project in Procore. Returns an array of integer crew ids (e.g. [42]); filterable by updated_at, deleted_at, search text, and specific ids via filters[id]. Required: project_id.

list_all_procore_daily_log_counts

List Procore daily log counts arranged by log type, respecting the caller's permissions. Returns: module_name, count. Required: project_id. Counts cover the current date only unless date parameters are supplied. Deprecated in favor of the v1.1 daily logs counts endpoint.

list_all_procore_rfi_distribution_managers

List the contacts that comprise the default RFI distribution list for a Procore project. Returns for each user: id, login, name, and company_name. Required: project_id.

list_all_procore_rfi_exports

Download a PDF or CSV export of a Procore project's RFIs List. Returns the generated export as a binary PDF or CSV file download rather than a JSON record. Required: project_id.

list_all_procore_link_recycle_bin

List all Project Home Links in the recycle bin for a specific project in Procore. Returns: id, title, url, position, project_id, created_at.

list_all_procore_project_links

List Home Links on a Procore project. Returns the link record including id, title, url, position, and created_at. Required: company_id, project_id. Max 100 per page.

procore_project_links_bulk_update

Create and update multiple Home Links on a Procore project in one request; include id in an item to update an existing link, omit it to create a new link. Returns: id, title, url, position, project_id, created_at. Required: company_id, project_id, and a body array of items with title and url.

delete_a_procore_project_link_by_id

Delete a Procore project Home Link by sending it to the recycle bin. Required: company_id, project_id, id. Returns an empty 204 response on success.

list_all_procore_flat_links

List the Project Home Links in a Procore project. Returns each link's id, title, and url. Required: project_id.

create_a_procore_flat_link

Create a Project Home Link in a Procore project. Send the link's title and url under a link object. Returns the created link. Required: project_id, link.title, link.url.

update_a_procore_flat_link_by_id

Update a Project Home Link in a Procore project by id. Send the new title and/or url under a link object. Returns the updated link. Required: id, project_id, link.

delete_a_procore_flat_link_by_id

Delete a Project Home Link from a Procore project by id. Moves the link to the project's links recycle bin and returns an empty response. Required: id, project_id.

list_all_procore_punch_item_activities

List all Punch Item Activities for a specified punch item in Procore. Returns an array of activity items, each containing id, type, and trade. Required: punch_item_id.

procore_punch_item_attachments_bulk_create

Add attachments to a Procore punch item by uploading one or more files to the punch item identified by id within a project. Returns an empty response object on success (the documented example response body is {}). Required: id, project_id, attachments.

list_all_procore_punch_item_default_distribution

List the Default Distribution Members for a given Punch Item in Procore. Returns a collection of distribution members with id, login, and name for each user on the distribution list. Required: project_id.

list_all_procore_rfi_distribution_users

List all potential RFI Managers for RFIs in a Procore project. Returns each user's id, login, and name. Required: project_id.

Why Truto

Why use Truto’s MCP server for Procore

Other MCP servers give you a static tool list for one app. Truto gives you a managed, multi-tenant MCP infrastructure across 800+ integrations.

01

Auto-generated, always up to date

Tools are dynamically generated from curated documentation — not hand-coded. As integrations evolve, tools stay current without manual maintenance.

02

Fine-grained access control

Scope each MCP server to read-only, write-only, specific methods, or tagged tool groups. Expose only what your AI agent needs — nothing more.

03

Multi-tenant by design

Each MCP server is scoped to a single connected account with its own credentials. The URL itself is the auth token — no shared secrets, no credential leaking across tenants.

04

Works with every MCP client

Standard JSON-RPC 2.0 protocol. Paste the URL into Claude, ChatGPT, Cursor, or any MCP-compatible agent framework — tools are discovered automatically.

05

Built-in auth, rate limits, and error handling

Tool calls execute through Truto’s proxy layer with automatic OAuth refresh, rate-limit handling, and normalized error responses. No raw API plumbing in your agent.

06

Expiring and auditable servers

Create time-limited MCP servers for contractors or automated workflows. Optional dual-auth requires both the URL and a Truto API token for high-security environments.

How It Works

From zero to integrated

Go live with Procore in under an hour. No boilerplate, no maintenance burden.

01

Link your customer’s Procore account

Use Truto’s frontend SDK to connect your customer’s Procore account. We handle all OAuth and API key flows — you don’t need to create the OAuth app.

02

We handle authentication

Don’t spend time refreshing access tokens or figuring out secure storage. We handle it and inject credentials into every API request.

03

Call our API, we call Procore

Truto’s Proxy API is a 1-to-1 mapping of the Procore API. You call us, we call Procore, and pass the response back in the same cycle.

04

Unified response format

Every response follows a single format across all integrations. We translate Procore’s pagination into unified cursor-based pagination. Data is always in the result attribute.

FAQs

Common questions about Procore on Truto

Authentication, rate limits, data freshness, and everything else you need to know before you integrate.

How does authentication work for Procore via Truto?

Procore uses OAuth 2.0. Truto handles the full token lifecycle — creating OAuth tokens, listing active tokens, and revoking them — so your end users connect their Procore account once and your app never stores credentials.

Can we subscribe to real-time Procore events instead of polling?

Yes. Truto exposes Procore's webhook architecture at both the company and project level. You can create and manage webhook hooks, bulk-create or bulk-delete triggers, and list available webhook resources and API versions to subscribe to CRUD events on supported objects.

Which Procore objects can we write to, not just read?

Write operations are supported for RFIs (and replies), punch items (with comments and bulk attachments), budget line items, checklist responses, crews, projects, locations, sub jobs, change event comments, project dates, and more. Many of these support update and delete in addition to create.

Does the integration support project- and company-scoped data?

Yes. Truto exposes company-level endpoints (companies, company projects, company webhooks) and project-scoped endpoints (project webhooks, project links, project dates, budgets per project), so you can model access the same way Procore does.

Can we bulk-update records to avoid hitting rate limits?

Several Procore endpoints support bulk operations through Truto, including bulk update for RFIs, bulk upsert for project dates, bulk create for punch item attachments, bulk create/delete for webhook triggers, and bulk delete for budget line items.

How do we map issues to the right physical and financial breakdown?

Use the locations endpoints (both nested and flat) to resolve the correct building, floor, or room, and the sub jobs endpoints to resolve the cost structure. Both are available as list, get, create, update, and delete operations so you can keep mappings in sync.

Procore

Get Procore integrated into your app

Our team understands what it takes to make a Procore integration successful. A short, crisp 30 minute call with folks who understand the problem.