---
title: Procore API Integration on Truto
slug: procore
category: Product Development
canonical: "https://truto.one/integrations/detail/procore/"
---

# Procore API Integration on Truto



**Category:** Product Development  
**Status:** Beta

## MCP-ready AI tools

Truto exposes 125 tools for Procore that AI agents can call directly.

- **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.

## How it works

1. **Link your customer's Procore account.** Use Truto's frontend SDK; we handle every OAuth and API key flow so you don't need to create the OAuth app.
2. **Authentication is automatic.** Truto refreshes tokens, stores credentials securely, and injects them into every API request.
3. **Call Truto's API to reach Procore.** The Proxy API is a 1-to-1 mapping of the Procore API.
4. **Get a unified response format.** Every response uses a single shape, with cursor-based pagination and data in the `result` field.

## Use cases

- **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

- **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.

## FAQs

### 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.
