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 usUse Cases
Why integrate with Procore
Common scenarios for SaaS companies building Procore integrations for their customers.
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.
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.
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.
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.
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.
Bi-directional RFI sync
Create, read, update, and reply to Procore RFIs from your product, with support for advanced exports and distribution lists.
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.
Punch list creation with photo attachments
Create punch items, add comments, bulk-upload attachments, and send punch items to assignees directly from your platform.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.