Skip to main content
Procore

MuleSoft

Overview

streamline project management workflows between Procore and third-party applications

Set up user-defined triggers from applications like Salesforce to instantly create new projects in Procore. For example, a new Procore project can be created automatically when an opportunity is closed in Salesforce, eliminating the need for manual data entry. You can also easily modify existing Procore project details by configuring triggers from your third-party apps to update project information as required. 

FEATURES

  • Easy and secure authentication with Procore, eliminating the complexities of manual API key management.
  • Build custom integrations by interacting with any Procore API endpoint.
  • Create Procore projects directly from Salesforce, automating project setup and improving data consistency between the two platforms.
  • Expand the integration capabilities between Procore and the MuleSoft ecosystem, enabling the creation of complex and automated workflows.

MuleSoft.png

www.mulesoft.com

MuleSoft and the MuleSoft logo are either trademarks or registered trademarks of MuleSoft in the United States and/or other countries. 

User Manual

This user manual provides step-by-step instructions for implementing and using the Procore connector. The Procore connector for MuleSoft enables seamless integration between MuleSoft applications and Procore’s construction project management platform. This connector provides a comprehensive set of operations for creating, managing, and interacting with construction projects through Procore’s REST API.

What is Procore?

Procore is a leading construction project management platform that helps construction professionals manage projects, resources, and financials from planning to closeout. The platform provides tools for project management, quality and safety, financial management, and field productivity.

Key Features

  • OAuth 2.0 Authentication: Secure connection to Procore API using OAuth 2.0 authorization code flow.
  • Project Management: Create and update construction projects with comprehensive project details.
  • Company-Specific Operations: All operations support company-specific contexts through Procore Company ID.
  • Advanced Error Handling: Robust error handling with detailed logging and proper exception management.
  • Geographic Support: Full support for latitude, longitude, and geographic information.
  • Custom Fields: Support for custom fields and metadata.
  • Cost Code Integration: Standard cost code management and copying.

System Requirements

Component Version
Mule Runtime 4.9.6 or higher
Java 17
Anypoint Studio 7.x or higher
Procore API v1.0

Installation and Setup

Prerequisites

Before you can install the Procore Connector, ensure you have the following:

  • MuleSoft Anypoint Studio 7.x or higher installed.
  • Mule Runtime 4.9.6 or higher.
  • Java 17 or higher.
  • Procore developer account with API access.
  • OAuth 2.0 credentials from Procore.

Install the Connector

Add Maven Dependency

Add the Procore connector dependency to your project’s pom.xml

<dependency>
 <groupId>com.procore.integrations</groupId>
 <artifactId>procore</artifactId>
 <version>1.0.0</version>
 <classifier>mule-plugin</classifier>
</dependency>

Configure Properties

Create a properties file (src/main/resources/properties/dev.properties) with your configuration:

# HTTP Listener Configuration
http.listener.host=0.0.0.0
http.listener.port=8081

# Procore OAuth Configuration
procore.config.oauth.consumer_key=your-consumer-key
procore.config.oauth.consumer_secret=your-consumer-secret
procore.config.oauth.callback_path=/mule/callback
procore.config.oauth.authorize_path=/authorize-procore
procore.config.oauth.external_callback_path=http://localhost:8081/mule/callback
 Note
Replace your-consumer-key and your-consumer-secret with your actual Procore OAuth credentials.

Configuration

Basic Configuration

The Procore Connector requires configuration for both the HTTP listener and OAuth authentication.

HTTP Listener Configuration

<http:listener-config name="HTTP_Listener_config" doc:name="HTTP Listener config">
 <http:listener-connection host="${http.listener.host}" port="${http.listener.port}"
/>
</http:listener-config>

Procore Connector Configuration

 <procore:config name="Procore_Config" doc:name="Procore Config" doc:id="8c4f73ce-b817-
4f65-8eae-c6d04dbd53b4">
 <procore:connection >
 <procore:oauth-authorization-code
 consumerKey="${procore.config.oauth.consumer_key}"
 consumerSecret="${procore.config.oauth.consumer_secret}"
 />
 <procore:oauth-callback-config
 listenerConfig="HTTP_Listener_config"
 callbackPath="${procore.config.oauth.callback_path}"
 authorizePath="${procore.config.oauth.authorize_path}"
 externalCallbackUrl="${procore.config.oauth.external_callback_path}"
 />
 </procore:connection>
</procore:config>
 Note
The OAuth configuration enables secure authentication with Procore’s API using the authorization code flow.

Environment-Specific Configuration

Create separate property files for different environments:

Development Environment

http.listener.host=0.0.0.0
http.listener.port=8081
procore.config.oauth.external_callback_path=http://localhost:8081/mule/callback

Staging Environment

http.listener.host=0.0.0.0
http.listener.port=8081
procore.config.oauth.external_callback_path=https://staging.yourdomain.com/mule/callback

Production Environment

http.listener.host=0.0.0.0
http.listener.port=8081
procore.config.oauth.external_callback_path=https://yourdomain.com/mule/callback

Operations

Create Project Operation

The Create Project operation allows you to create new construction projects in Procore.

Parameters

Basic Information
PARAMETER TYPE REQUIRED DESCRIPTION
Company ID String Yes The Procore Company ID for the project.
Name String Yes The name of the project.
Code String No The project code. For example, 'NOB-2024'.
Description String No A description of the project.
Active Boolean No Indicates whether the project is active (default: true).
Project Number String No The project number. For example, 'A-2'.
Accounting Project Number String No The accounting project number.
Store Number String No The project store number.
Designated Market Area String No The market area designated for the project.
Location Information
PARAMETER TYPE REQUIRED DESCRIPTION
Address String No The project address.
City String No The city where the project is located.
State Code String No The state code (ISO-3166 Alpha-2 format). For example, 'CA' or 'NY'.
Country Code String No The country code (ISO-3166 Alpha-2 format, default: US).
ZIP String No The ZIP/postal code.
County String No The county where the project is located.
Latitude String No The latitude coordinate of the project.
Longitude String No The longitude coordinate of the project.
Time Zone String No The timezone where the project is located. For example, 'America/Los_Angeles'.
Timeline Information
PARAMETER TYPE REQUIRED DESCRIPTION
Start Date String No The date that the contract for the project is signed (YYYY-MM-DD).
Completion Date String No The date that all parties agree that the project meets substantial completion.
Warranty Start Date String No The warranty start date of the project.
Warranty End Date String No The warranty end date of the project.
Estimated Start Date String No The estimated start date of the project.
Estimated Completion Date String No The estimated completion date of the project.
Override Start Date String No Custom start date displayed on the Portfolio page.
Override Start Date Check Boolean No Enable use of override_start_date as Actual Start Date.
Override End Date String No Custom end date displayed on the Portfolio page.
Override End Date Check Boolean No Enable use of override_end_date as Projected Finish Date.
Financial Information
PARAMETER TYPE REQUIRED DESCRIPTION
Total Value Double No The total amount of construction work performed, planned, or put in place.
Estimated Value Double No The estimated value of the project.
Square Feet Double No The total square footage of the project.
Project Classification
PARAMETER TYPE REQUIRED DESCRIPTION
Project Type ID String No The project type identifier.
Project Stage ID String No The project stage identifier.
Project Bid Type ID String No The project bid type identifier.
Project Owner Type ID String No The project owner type identifier.
Project Region ID String No The project region identifier.
Project Template ID String No The project template identifier for standardization.
Sector String No The sector of a project. For example, 'Commercial'.
Work Scope String No The scope of work for a project. For example, 'New Construction'.
Delivery Method String No The delivery method of a project. For example, 'Design-Build'.
Organizational Structure
PARAMETER TYPE REQUIRED DESCRIPTION
Office ID String No The project office identifier.
Program ID String No The project program identifier.
Department IDs List<String> No The department IDs associated with the project.
Parent Job ID String No The project’s parent job identifier.
Contact and Communication
PARAMETER TYPE REQUIRED DESCRIPTION
Phone String No The telephone number of the project.
Public Notes String No The public notes for the project.
Flag String No The flag of the project. For example, 'URGENT'.
Integration and Origin
PARAMETER TYPE REQUIRED DESCRIPTION
ERP Integrated Boolean No Indicates whether the project will be ERP-integrated.
Origin ID String No External third-party identifier for the project.
Origin Data String No External third-party data string associated with the project.
Origin Code String No External third-party code associated with the project.
Cost Code Configuration
PARAMETER TYPE REQUIRED DESCRIPTION
Enable Copy of Standard Cost Codes Boolean No Enable copying default standard cost codes during creation (default: false).
Additional Settings
PARAMETER TYPE REQUIRED DESCRIPTION
Locale String No The locale for the project. For example, 'en-US'.
Image ID String No The image identifier of the project.

Example Usage

<procore:create-project
 doc:name="Create Project"
 doc:id="a381945f-95c0-480e-87ed-01528b64e818"
 config-ref="Procore_Config"
 companyId="#[payload.company_id]"
 name="#[payload.name]"
 address="#[payload.address]"
 city="#[payload.city]"
 stateCode="#[payload.state_code]"
 countryCode="#[payload.country_code]"
 zip="#[payload.zip]"
 latitude="#[payload.latitude]"
 longitude="#[payload.longitude]"
 startDate="#[payload.start_date]"
 completionDate="#[payload.completion_date]"
 warrantyStartDate="#[payload.warranty_start_date]"
 warrantyEndDate="#[payload.warranty_end_date]"
 code="#[payload.code]"
 description="#[payload.description]"
 totalValue="#[payload.total_value]"
 estimatedValue="#[payload.estimated_value]"
 estimatedStartDate="#[payload.estimated_start_date]"
 estimatedCompletionDate="#[payload.estimated_completion_date]"
 squareFeet="#[payload.square_feet]"
 phone="#[payload.phone]"
 projectNumber="#[payload.project_number]"
 storeNumber="#[payload.store_number]"
 accountingProjectNumber="#[payload.accounting_project_number]"
 locale="#[payload.locale]"
 timeZone="#[payload.time_zone]"
 officeId="#[payload.office_id]"
 parentJobId="#[payload.parent_job_id]"
 programId="#[payload.program_id]"
 projectStageId="#[payload.project_stage_id]"
 projectBidTypeId="#[payload.project_bid_type_id]"
 projectTypeId="#[payload.project_type_id]"
 projectOwnerTypeId="#[payload.project_owner_type_id]"
 projectRegionId="#[payload.project_region_id]"
 projectTemplateId="#[payload.project_template_id]"
 imageId="#[payload.image_id]"
 flag="#[payload.flag]"
 publicNotes="#[payload.public_notes]"
 departmentIds="#[payload.department_ids]"
 originId="#[payload.origin_id]"
 originData="#[payload.origin_data]"
 designatedMarketArea="#[payload.designated_market_area]"
 sector="#[payload.sector]"
 workScope="#[payload.work_scope]"
 deliveryMethod="#[payload.delivery_method]"
 active="#[payload.active]"
 erpIntegrated="#[payload.erp_integrated]"
 enableCopyOfStandardCostCodes="#[payload.enable_copy_of_standard_cost_codes]"
 originCode="#[payload.origin_code]"
 overrideStartDate="#[payload.override_start_date]"
 overrideStartDateCheck="#[payload.override_start_date_check]"
 overrideEndDate="#[payload.override_end_date]"
 overrideEndDateCheck="#[payload.override_end_date_check]"
/>

Sample Request

{
 "company_id": "562949953437078",
 "name": "MuleTest Cloud 9 - 31",
 "address": "123 Main St",
 "city": "Anytown",
 "code": "P123",
 "country_code": "US",
 "description": "This is mule test project",
 "start_date": "2025-01-01",
 "completion_date": "2025-12-31",
 "total_value": "1000000",
 "warranty_start_date": "2025-01-01",
 "warranty_end_date": "2026-01-01",
 "flag": "1",
 "phone": "123-456-7890",
 "project_number": "P3423",
 "public_notes": "Public Notes",
 "project_stage_id": "3",
 "square_feet": "1000",
 "state_code": "CA",
 "time_zone": "US/Pacific",
 "zip": "12345",
 "parent_job_id": "562949955019589",
 "program_id": "562949953512759",
 "project_bid_type_id": "562949953465028",
 "project_type_id": "562949953482050",
 "project_owner_type_id": "562949953439322",
 "project_region_id": "562949953468817",
 "office_id": "562949953440611",
 "override_start_date": "2025-01-01",
 "override_start_date_check": true,
 "override_end_date": "2026-12-31",
 "override_end_date_check": true,
 "department_ids": [
 "562949953494810",
 "562949953495650"
 ],
 "estimated_value": "1000000",
 "estimated_start_date": "2025-01-01",
 "estimated_completion_date": "2025-12-31",
 "store_number": "123",
 "accounting_project_number": "123",
 "designated_market_area": "Market Area",
 "erp_integrated": false,
 "latitude": "37.7749",
 "longitude": "-124.5924746",
 "locale": "en",
 "enable_copy_of_standard_cost_codes": false,
 "sector": "assembly",
 "work_scope": "new_construction",
 "delivery_method": "construction_manager_as_agent_owners_rep",
 "active": true
}

Update Project Operation

The Update Project operation allows you to modify existing construction projects in Procore.

Parameters

Required Parameters
PARAMETER TYPE REQUIRED DESCRIPTION
Company ID String Yes The Procore Company ID for the project.
Project ID String Yes The unique identifier of the project to be updated.
Basic Information
PARAMETER TYPE REQUIRED DESCRIPTION
Name String No The updated name of the project.
Code String No The updated project code. For example, 'NOB-2024'.
Description String No The updated description of the project.
Active Boolean No Indicates whether the project is active (default: true).
Project Number String No The updated project number.
Accounting Project Number String No The updated accounting project number.
Store Number String No The updated project store number.
Designated Market Area String No The updated market area designated for the project.
Location Information
PARAMETER TYPE REQUIRED DESCRIPTION
Address String No The updated project address.
City String No The updated city where the project is located.
State Code String No The updated state code (ISO-3166 Alpha-2 format). For example, 'CA' or 'NY'.
Country Code String No The updated country code (ISO-3166 Alpha-2 format, default: US).
ZIP String No The updated ZIP/postal code.
County String No The county where the project is located.
Latitude String No The updated latitude coordinate of the project.
Longitude String No The updated longitude coordinate of the project.
Time Zone String No The updated timezone where the project is located. For example, 'America/Los_Angeles'.
Timeline Information
PARAMETER TYPE REQUIRED DESCRIPTION
Start Date String No The updated date that the contract for the project is signed (YYYY-MM-DD).
Completion Date String No The updated date that all parties agree that the project meets substantial completion.
Warranty Start Date String No The updated warranty start date of the project.
Warranty End Date String No The updated warranty end date of the project.
Estimated Start Date String No The updated estimated start date of the project.
Estimated Completion Date String No The updated estimated completion date of the project.
Financial Information
PARAMETER TYPE REQUIRED DESCRIPTION
Total Value Double No The updated total amount of construction work performed, planned, or put in place.
Estimated Value Double No The updated estimated value of the project.
Square Feet Double No The updated total square footage of the project.
Project Classification
PARAMETER TYPE REQUIRED DESCRIPTION
Project Type ID String No The updated project type identifier.
Project Stage ID String No The updated project stage identifier.
Project Bid Type ID String No The updated project bid type identifier.
Project Owner Type ID String No The updated project owner type identifier.
Project Region ID String No The updated project region identifier.
Project Template ID String No The updated project template identifier for standardization.
Sector String No The updated sector of a project. For example, 'Commercial'.
Work Scope String No The updated scope of work for a project. For example, 'New Construction'.
Delivery Method String No The updated delivery method of a project. For example, 'Design-Build'.
Organizational Structure
PARAMETER TYPE REQUIRED DESCRIPTION
Office ID String No The updated project office identifier.
Program ID String No The updated project program identifier.
Department IDs List<String> No The updated department IDs associated with the project.
Parent Job ID String No The updated project’s parent job identifier.
Contact and Communication
PARAMETER TYPE REQUIRED DESCRIPTION
Phone String No The updated telephone number of the project.
Fax String No The fax number for the project.
Public Notes String No The updated public notes for the project.
Flag String No The updated flag of the project. For example, 'URGENT'.
Integration and Origin
PARAMETER TYPE REQUIRED DESCRIPTION
ERP Integrated Boolean No Indicates whether the project will be ERP-integrated.
Origin ID String No The updated external third-party identifier for the project.
Origin Data String No The updated external third-party data string associated with the project.
Origin Code String No The updated external third-party code associated with the project.
Cost Code Configuration
PARAMETER TYPE REQUIRED DESCRIPTION
Standard Cost Code List ID String No The identifier for the Standard Cost Code List.
Additional Settings
PARAMETER TYPE REQUIRED DESCRIPTION
Locale String No The updated locale for the project. 
Image ID String No The updated image identifier of the project.

Example Usage

<procore:update-project doc:name="Update Project"
 doc:id="3e28c0b7-77af-4a97-a809-a4a6a63d7bd7"
 config-ref="Procore_Config"
 companyId="#[payload.company_id]"
 name="#[payload.name]"
 active="false"
 address="#[payload.address]"
 city="#[payload.city]"
 countryCode="#[payload.country_code]"
 description="#[payload.description]"
 startDate="#[payload.start_date]"
 completionDate="#[payload.completion_date]"
 totalValue="#[payload.total_value]"
 warrantyStartDate="#[payload.warranty_start_date]"
 warrantyEndDate="#[payload.warranty_end_date]"
 flag="#[payload.flag]"
 locale="#[payload.locale]"
 phone="#[payload.phone]"
 fax="#[payload.fax]"
 publicNotes="#[payload.public_notes]"
 projectStageId="#[payload.project_stage_id]"
 squareFeet="#[payload.square_feet]"
 stateCode="#[payload.state_code]"
 timeZone="#[payload.time_zone]"
 zip="#[payload.zip]"
 parentJobId="#[payload.parent_job_id]"
 projectBidTypeId="#[payload.project_bid_type_id]"
 projectOwnerTypeId="#[payload.project_owner_type_id]"
 projectRegionId="#[payload.project_region_id]"
 originId="#[payload.origin_id]"
 originData="#[payload.origin_data]"
 originCode="#[payload.origin_code]"
 sector="#[payload.sector]"
 workScope="#[payload.work_scope]"
 deliveryMethod="#[payload.delivery_method]"
 projectTemplateId="#[payload.project_template_id]"
 projectNumber="#[payload.project_number]"
 programId="#[payload.program_id]"
 storeNumber="#[payload.store_number]"
 accountingProjectNumber="#[payload.accounting_project_number]"
 designatedMarketArea="#[payload.designated_market_area]"
 estimatedValue="#[payload.estimated_value]"
 estimatedStartDate="#[payload.estimated_start_date]"
 estimatedCompletionDate="#[payload.estimated_completion_date]"
 projectTypeId="#[payload.project_type_id]"
 imageId="#[payload.image_id]"
 officeId="#[payload.office_id]"
 projectId="#[payload.project_id]"
 county="#[payload.county]"
 standardCostCodeListId="#[payload.standard_cost_code_list_id]"
 departmentIds="#[payload.department_ids]"
/>

Sample Request

{
 "company_id": "562949953437078",
 "project_id": "562949955035825",
 "active": true,
 "address": "123 Main St Updated",
 "city": "Anytown Updated",
 "country_code": "US",
 "county": "Santa Barbara County updated",
 "description": "This is mule test project updated",
 "erp_integrated": true,
 "standard_cost_code_list_id": "562949953436338",
 "start_date": "2025-02-01",
 "completion_date": "2025-12-30",
 "total_value": 100001,
 "warranty_start_date": "2025-02-01",
 "warranty_end_date": "2026-01-30",
 "fax": "0161 999 8888",
 "flag": "1",
 "locale": "en",
 "name": "MuleTest9 - 17 Updated",
 "office_id": 562949953582263,
 "phone": "123-456-7890",
 "project_number": "P3424",
 "public_notes": "Public Notes Updated",
 "project_stage_id": 562949953421313,
 "square_feet": 1001,
 "state_code": "AZ",
 "time_zone": "US/Mountain",
 "zip": "54321",
 "parent_job_id": 562949955019589,
 "program_id": 562949953520454,
 "project_bid_type_id": 562949953465027,
 "project_type_id": 562949953482049,
 "project_owner_type_id": 562949953439321,
 "project_region_id": 562949953470887,
 "project_template_id": null,
 "department_ids": [
 562949953495657,
 562949953495655
 ],
 "estimated_value": 1000001,
 "estimated_start_date": "2025-02-01",
 "estimated_completion_date": "2025-12-30",
 "store_number": "1234",
 "accounting_project_number": "1234",
 "designated_market_area": "Southeast",
 "sector": "auto_service",
 "work_scope": "renovation_alteration",
 "delivery_method": "integrated_project_delivery"
}

Authentication

OAuth 2.0 Setup

The Procore Connector uses OAuth 2.0 authorization code flow for secure authentication.

Step 1: Create Procore OAuth Application

Follow these steps using the Procore Developer documentation to create your OAuth application:

  1. Open the Creating an App article in the Procore Developer documentation.
  2. Follow the step-by-step guide to create a new OAuth application.
  3. During the setup process, configure the following:
    • Application Name: Enter a descriptive name for your application.
    • Redirect URI: Enter your callback URL. For example, http://localhost:8081/mule/callback.
    • Scopes: Select all required scopes. For example, read:projects and write:projects.
  4. Save the application and note your Client ID and Client Secret.
 Note
The redirect URL must match the externalCallbackUrl in your connector configuration. For detailed instructions, refer to Procore Developer's Creating an App article.

Step 2: Configure OAuth in MuleSoft

<procore:config name="Procore_Config" doc:name="Procore Config">
 <procore:connection>
 <procore:oauth-authorization-code
 consumerKey="${procore.config.oauth.consumer_key}"
 consumerSecret="${procore.config.oauth.consumer_secret}"/>
 <procore:oauth-callback-config
 listenerConfig="HTTP_Listener_config"
 callbackPath="/mule/callback"
 authorizePath="/authorize-procore"
 externalCallbackUrl="http://localhost:8081/mule/callback" />
 </procore:connection>
</procore:config>

Step 3: Authorization Flow

  1. Start your MuleSoft application. 
  2. Go to http://localhost:8081/authorize-procore.
    You will be redirected to the Procore authorization page.
  3. Log in with your Procore credentials and authorize the application.
    You will be redirected back to your callback URL. The connector will automatically handle the token exchange and storage.
 Note
The connector automatically refreshes OAuth tokens when they expire.

Error Handling

Error Types

The Procore Connector provides comprehensive error handling with specific error types:

ERROR TYPE CODE DESCRIPTION
BAD_REQUEST 400 Invalid request parameters or malformed data.
UNAUTHORIZED 401 Invalid or expired authentication credentials.
FORBIDDEN 403 Insufficient permissions to access the resource.
NOT_FOUND 404 The requested resource was not found. 
CONFLICT 409 The request conflicts with the current state of the resource.
TOO_MANY_REQUESTS 429 API rate limit has been exceeded.
CONNECTIVITY N/A Unable to connect to Procore services.
UNEXPECTED_ERROR N/A Unknown or unclassified errors.

Troubleshooting

Common Issues

Authentication Problems

  • UNAUTHORIZED Error: Check that your OAuth consumer key and secret are correct.
  • ACCESS_TOKEN_MISSING: Verify that the OAuth flow completed successfully.
  • OAUTH_STATE_MISSING: Ensure that the OAuth callback configuration is correct.
  • Scope Issues: Make sure your Procore application has the required scopes.

API Errors

  • BAD_REQUEST Error: Verify that all required parameters are provided and that their data types are correct.
  • INVALID_REQUEST Error: Check the request's format and structure.
  • FORBIDDEN Error: Ensure that your Procore user has the required permissions.
  • TOO_MANY_REQUESTS Error: Implement retry logic with exponential backoff.

Resource Errors

  • NOT_FOUND Error: Verify that the project or company ID exists and is accessible.
  • CONFLICT Error: Check the current state of the resource before performing update operations.
  • UNPROCESSABLE_ENTITY Error: Review business logic validation rules.

Connection Issues

  • CONNECTIVITY Error: Check your network connectivity and firewall settings.
  • SERVICE_UNAVAILABLE Error: The Procore service may be temporarily down.
  • REQUEST_TIMEOUT Error: Increase the timeout settings in your configuration.
  • GATEWAY_TIMEOUT Error: Check your proxy or load balancer configuration.

Debugging

Enable Debug Logging

Add the following logger configuration to enable debug logging:

<logger name="com.procore.mule" level="DEBUG"/>

Common Debug Information

  • Request/Response Logs: Log API request and response details.
  • Token Information: Log token refresh events and OAuth state.
  • Parameter Validation: Log parameter validation results.
  • Error Details: Log detailed error information with Procore error types.
  • Connection Events: Log connection creation and failure events.

Support

Best Practices

Development

  • Use Secure Properties: Store sensitive configuration in secure properties.
  • Implement Error Handling: Always implement proper error handling for all operations.
  • Validate Input: Validate all input parameters before making API calls.
  • Log Operations: Log operation attempts for debugging and monitoring.
  • Test Thoroughly: Test all operations with various parameter combinations.

Production

  • Monitor Performance: Monitor API response times and error rates.
  • Implement Retry Logic: Implement retry logic for transient errors.
  • Use Connection Pooling: Leverage connection pooling for better performance.
  • Secure Configuration: Use secure properties for sensitive data.
  • Regular Updates: Keep the connector updated to the latest version.

Testing

  • Unit Tests: Write unit tests for all operations.
  • Integration Tests: Test with the actual Procore API.
  • Error Scenarios: Test error handling scenarios.
  • Performance Tests: Test with realistic data volumes.
  • Security Tests: Test authentication and authorization.

Appendix

API Endpoints

OPERATION METHOD ENDPOINT DESCRIPTION
Create Project POST /rest/v1.0/projects Create a new project
Update Project PATCH /rest/v1.0/projects/{id} Update an existing project

Data Types

TYPE DESCRIPTION EXAMPLE
String  Text values "Project Name"
Boolean True/false values true
Double Decimal numbers 1000000.0
Integer Whole numbers 50000
List<String> Array of strings ["dept1", "dept2"]
Date Date values "2024-01-01"

Glossary

TERM DEFINITION
Procore Construction project management platform.
OAuth 2.0 Authorization protocol for secure API access.
Company ID Unique identifier for a Procore company.
Project ID Unique identifier for a Procore project.
Standard Cost Codes Predefined cost categories for construction projects.
Custom Fields User-defined fields for project customization.
Procore Error Codes Specific error types that are defined by the Procore connector for error handling.
BAD_REQUEST Error indicating invalid request parameters or malformed data.
UNAUTHORIZED Error indicating invalid or expired authentication credentials.
FORBIDDEN Error indicating insufficient permissions to access a resource.
NOT_FOUND Error indicating the requested resource was not found.
CONFLICT Error indicating request conflicts with current resource state.
TOO_MANY_REQUESTS Error indicating API rate limit has been exceeded.
CONNECTIVITY Error indicating inability to connect to Procore services.
UNEXPECTED_ERROR Generic error for unknown or unclassified errors.

Technical Reference

This technical guide will walk you through how to create and configure MuleSoft projects that integrate with Procore’s construction project management platform. The Procore connector enables enterprise applications to create and manage construction projects through MuleSoft-based solutions.

Version Information

Component Version
Mule Runtime 4.9.6 or higher
Java 17
Connector 0.0.115-SNAPSHOT

Key Features

  • OAuth 2.0 authentication with automatic token refresh.
  • Project creation and management operations.
  • Comprehensive parameter support for project details.
  • Company-specific operations with Procore Company ID.
  • Geographic location support (latitude/longitude).
  • Standard cost code integration.
  • Custom field support.
  • Error handling and logging.

Create a Mule Project

Prerequisites

Before you create a Mule project with the Procore connector, ensure you have the following:

  • MuleSoft Anypoint Studio 7.x or higher.
  • Mule Runtime 4.9.6 or higher.
  • Java 17 or higher.
  • Procore developer account with API access.
  • OAuth 2.0 credentials from Procore.

Project Setup

Create a Mule Project

  1. Open Anypoint Studio.
  2. Navigate to File > NewMule Project.
  3. Enter the project name. For example, 'procore-integration'.
  4. Select Mule Runtime version 4.9.6 or higher.
  5. Click Finish.

Add Procore Connector Dependency

Add the Procore connector dependency to your pom.xml:

<dependency>
 <groupId>com.procore</groupId>
 <artifactId>procore-connector</artifactId>
 <version>0.0.115-SNAPSHOT</version>
 <classifier>mule-plugin</classifier>
</dependency>

Configure Project Properties

Create a src/main/resources/properties/dev.properties file :

# HTTP Listener Configuration
http.listener.host=0.0.0.0
http.listener.port=8081

# Procore OAuth Configuration
procore.config.oauth.consumer_key=your-consumer-key
procore.config.oauth.consumer_secret=your-consumer-secret
procore.config.oauth.callback_path=/mule/callback
procore.config.oauth.authorize_path=/authorize-procore
procore.config.oauth.external_callback_path=http://localhost:8081/mule/callback

Project Configuration

HTTP Listener Configuration

Configure the HTTP listener for your Mule application:

<http:listener-config name="HTTP_Listener_config" doc:name="HTTP Listener config">
 <http:listener-connection host="${http.listener.host}" port="${http.listener.port}"
/>
</http:listener-config>

Procore Connector Configuration

Configure the Procore connector with OAuth 2.0 authentication:

<procore:config name="Procore_Config" doc:name="Procore Config">
 <procore:connection>
 <procore:oauth-authorization-code
 consumerKey="${procore.config.oauth.consumer_key}"
 consumerSecret="${procore.config.oauth.consumer_secret}"/>
 <procore:oauth-callback-config
 listenerConfig="HTTP_Listener_config"
 callbackPath="${procore.config.oauth.callback_path}"
 authorizePath="${procore.config.oauth.authorize_path}"
 externalCallbackUrl="${procore.config.oauth.external_callback_path}" />
 </procore:connection>
</procore:config>

Environment-Specific Configuration

Create separate property files for different environments:

Development Environment (dev.properties)

http.listener.host=0.0.0.0
http.listener.port=8081
procore.config.oauth.external_callback_path=http://localhost:8081/mule/callback

Staging Environment (staging.properties)

http.listener.host=0.0.0.0
http.listener.port=8081
procore.config.oauth.external_callback_path=https://staging.yourdomain.com/mule/callback

Production Environment (prod.properties)

http.listener.host=0.0.0.0
http.listener.port=8081
procore.config.oauth.external_callback_path=https://yourdomain.com/mule/callback

Create a Mule Flow

Basic Project Creation Flow

Create a flow to handle project creation requests:

<flow name="createProjectFlow">
 <http:listener config-ref="HTTP_Listener_config" path="/create-project"/>
 
 <!-- Validate input payload -->
 <validation:is-not-null value="#[payload.company_id]" message="Company ID is
required"/>
 <validation:is-not-null value="#[payload.name]" message="Project name is required"/>
 
 <!-- Transform payload if needed -->
 <ee:transform>
 <ee:message>
 <ee:set-payload><![CDATA[%dw 2.0
output application/java
---
{
 companyId: payload.company_id,
 name: payload.name,
 address: payload.address,
 city: payload.city,
 stateCode: payload.state_code,
 countryCode: payload.country_code,
 zip: payload.zip,
 description: payload.description,
 startDate: payload.start_date,
 completionDate: payload.completion_date,
 totalValue: payload.total_value
}]]></ee:set-payload>
 </ee:message>
 </ee:transform>
 
 <!-- Call Procore API -->
 <procore:create-project config-ref="Procore_Config"
 companyId="#[payload.companyId]"
 name="#[payload.name]"
 address="#[payload.address]"
 city="#[payload.city]"
 stateCode="#[payload.stateCode]"
 countryCode="#[payload.countryCode]"
 zip="#[payload.zip]"
 description="#[payload.description]"
 startDate="#[payload.startDate]"
 completionDate="#[payload.completionDate]"
 totalValue="#[payload.totalValue]"/>
 
 <!-- Handle response -->
 <ee:transform>
 <ee:message>
 <ee:set-payload><![CDATA[%dw 2.0
output application/json
---
{
 success: true,
 projectId: payload.id,
 projectName: payload.name,
 message: "Project created successfully"
}]]></ee:set-payload>
 </ee:message>
 </ee:transform>
</flow>

Project Update Flow

Create a flow to handle project updates:

<flow name="updateProjectFlow">
 <http:listener config-ref="HTTP_Listener_config" path="/update-project"/>
 
 <!-- Validate required parameters -->
 <validation:is-not-null value="#[payload.project_id]" message="Project ID is
required"/>
 <validation:is-not-null value="#[payload.company_id]" message="Company ID is
required"/>
 
 <!-- Call Procore API -->
 <procore:update-project config-ref="Procore_Config"
 companyId="#[payload.company_id]"
 projectId="#[payload.project_id]"
 name="#[payload.name]"
 active="#[payload.active]"
 address="#[payload.address]"
 city="#[payload.city]"
 description="#[payload.description]"
 startDate="#[payload.start_date]"
 completionDate="#[payload.completion_date]"
 totalValue="#[payload.total_value]"/>
 
 <!-- Handle response -->
 <ee:transform>
 <ee:message>
 <ee:set-payload><![CDATA[%dw 2.0
output application/json
---
{
 success: true,
 projectId: payload.id,
 projectName: payload.name,
 message: "Project updated successfully"
}]]></ee:set-payload>
 </ee:message>
 </ee:transform>
</flow>

Error Handling Flow

Create a global error handler for your application:

<error-handler name="GlobalErrorHandler">
 <on-error-continue type="PROCORE:BAD_REQUEST">
 <ee:transform>
 <ee:message>
 <ee:set-payload><![CDATA[%dw 2.0
output application/json
---
{
 success: false,
 error: "Bad Request",
 message: error.description,
 details: error.detailedDescription
}]]></ee:set-payload>
 </ee:message>
 </ee:transform>
 <http:response-builder statusCode="400"/>
 </on-error-continue>
 
 <on-error-continue type="PROCORE:UNAUTHORIZED">
 <ee:transform>
 <ee:message>
 <ee:set-payload><![CDATA[%dw 2.0
output application/json
---
{
 success: false,
 error: "Unauthorized",
 message: "Invalid or expired authentication credentials"
}]]></ee:set-payload>
 </ee:message>
 </ee:transform>
 <http:response-builder statusCode="401"/>
 </on-error-continue>
 
 <on-error-continue type="PROCORE:FORBIDDEN">
 <ee:transform>
 <ee:message>
 <ee:set-payload><![CDATA[%dw 2.0
output application/json
---
{
 success: false,
 error: "Forbidden",
 message: "Insufficient permissions to access the resource"
}]]></ee:set-payload>
 </ee:message>
 </ee:transform>
 <http:response-builder statusCode="403"/>
 </on-error-continue>
 
 <on-error-continue type="PROCORE:NOT_FOUND">
 <ee:transform>
 <ee:message>
 <ee:set-payload><![CDATA[%dw 2.0
output application/json
---
{
 success: false,
 error: "Not Found",
 message: "The requested resource was not found"
}]]></ee:set-payload>
 </ee:message>
 </ee:transform>
 <http:response-builder statusCode="404"/>
 </on-error-continue>
 
 <on-error-continue type="ANY">
 <ee:transform>
 <ee:message>
 <ee:set-payload><![CDATA[%dw 2.0
output application/json
---
{
 success: false,
 error: "Internal Server Error",
 message: "An unexpected error occurred"
}]]></ee:set-payload>
 </ee:message>
 </ee:transform>
 <http:response-builder statusCode="500"/>
 </on-error-continue>
</error-handler>

DataWeave Transformations

Input Validation Transformation

Create a DataWeave transformation to validate and transform input data:

<ee:transform>
 <ee:message>
 <ee:set-payload><![CDATA[%dw 2.0
output application/java
---
{
 companyId: payload.company_id default "",
 name: payload.name default "",
 address: payload.address default "",
 city: payload.city default "",
 stateCode: payload.state_code default "",
 countryCode: payload.country_code default "US",
 zip: payload.zip default "",
 description: payload.description default "",
 startDate: payload.start_date default "",
 completionDate: payload.completion_date default "",
 totalValue: payload.total_value default 0.0,
 latitude: payload.latitude default "",
 longitude: payload.longitude default "",
 phone: payload.phone default "",
 projectNumber: payload.project_number default "",
 active: payload.active default true
}]]></ee:set-payload>
 </ee:message>
</ee:transform>

Response Transformation

Create a DataWeave transformation for API responses:

<ee:transform>
 <ee:message>
 <ee:set-payload><![CDATA[%dw 2.0
output application/json
---
{
 success: true,
 data: {
 id: payload.id,
 name: payload.name,
 description: payload.description,
 active: payload.active,
 address: payload.address,
 city: payload.city,
 stateCode: payload.stateCode,
 countryCode: payload.countryCode,
 zip: payload.zip,
 startDate: payload.startDate,
 completionDate: payload.completionDate,
 totalValue: payload.totalValue,
 createdAt: payload.createdAt,
 updatedAt: payload.updatedAt
 },
 message: "Operation completed successfully"
}]]></ee:set-payload>
 </ee:message>
</ee:transform>

Deployment

Local Development

For local development:

  1. Run the application in Anypoint Studio.
  2. Use localhost endpoints for testing.
  3. Configure local OAuth callback URLs.
  4. Use the Procore development environment.

CloudHub Deployment

For CloudHub deployment:

  1. Package your application as a JAR file.
  2. Deploy the application to CloudHub through Runtime Manager.
  3. Configure environment-specific properties.
  4. Set up OAuth callback URLs.
  5. Configure SSL certificates.

Security Best Practices

Secure Configuration

  1. Use secure properties for sensitive data.
  2. Never commit credentials to version control.
  3. Use environment variables for production.
  4. Rotate credentials regularly.

OAuth Security

  1. Use HTTPS for all OAuth endpoints.
  2. Validate OAuth scopes.
  3. Implement proper token management.
  4. Monitor authentication failures.

Input Validation

  1. Validate all input parameters.
  2. Sanitize user input.
  3. Implement proper error handling.
  4. Log security events.

Troubleshooting

Common Issues

Authentication Problems

ISSUE SOLUTION
UNAUTHORIZED Error Check the consumer key and secret key for OAuth.
ACCESS_TOKEN_MISSING Verify the configuration for token refresh.
OAUTH_STATE_MISSING Ensure that the OAuth flow is configured correctly.
Scope Issues Ensure that the requested scope is authorized.

API Errors

ERROR SOLUTION
BAD_REQUEST  Check the required parameters and data types.
INVALID_REQUEST  Verify the format and structure of the request.
FORBIDDEN  Verify that the user has the required permissions.
TOO_MANY_REQUESTS  Implement the correct retry logic with exponential backoff.

Resource Errors

ERROR SOLUTION
NOT_FOUND  Verify that the project or company ID exists and is accessible.
CONFLICT  Verify the state of the resource before initiating update operations.
UNPROCESSABLE_ENTITY  Check the validation rules of the business logic.

Connection Issues

ERROR SOLUTION
CONNECTIVITY  Check the network connectivity and firewall settings.
SERVICE_UNAVAILABLE  Procore service may be temporarily down.
REQUEST_TIMEOUT  Increase the timeout settings.
GATEWAY_TIMEOUT  Check the configuration of the proxy or load balancer.

Debugging

Enable Debug Logging

<logger name="com.procore.mule" level="DEBUG"/>

Common Debug Information

  • Request/Response Logs: Log API request and response details.
  • Token Information: Log token refresh events and OAuth state.
  • Parameter Validation: Log parameter validation results.
  • Error Details: Log detailed error information with Procore error types.
  • Connection Events: Log connection creation and failure events.

Support

Best Practices

Development

  • Use Secure Properties: Store sensitive configuration in secure properties.
  • Implement Error Handling: Always implement proper error handling.
  • Validate Input: Validate all input parameters before API calls.
  • Log Operations: Log operation attempts for debugging.
  • Test Thoroughly: Test all operations with various parameter combinations.

Production

  • Monitor Performance: Monitor API response times and error rates.
  • Implement Retry Logic: Implement retry logic for transient errors.
  • Use Connection Pooling: Leverage connection pooling for better performance.
  • Secure Configuration: Use secure properties for sensitive data.
  • Regular Updates: Keep the connector updated to the latest version.

Testing

  • Unit Tests: Write unit tests for all operations.
  • Integration Tests: Test with the actual Procore API.
  • Error Scenarios: Test error handling scenarios.
  • Performance Tests: Test with realistic data volumes.
  • Security Tests: Test authentication and authorization.

Appendix

API Endpoints

OPERATION METHOD ENDPOINT DESCRIPTION
Create Project POST /rest/v1.0/projects Create a new project
Update Project PATCH /rest/v1.0/projects/{id} Update an existing project

Procore Error Codes

ERROR CODE DESCRIPTION CAUSE SOLUTION
BAD_REQUEST Invalid request parameters or malformed data. Missing required fields or invalid data types. Check the request payload and validate parameters.
UNAUTHORIZED Invalid or expired authentication credentials. Invalid OAuth tokens or expired access tokens. Refresh the OAuth tokens or re-authenticate.
FORBIDDEN Insufficient permissions to access the resource. The user lacks the required permissions. Verify user permissions in Procore.
NOT_FOUND The requested resource was not found.  Invalid project or company ID or deleted resource. Verify that the resource exists and is accessible.
REQUEST_TIMEOUT The request timed out. Network latency or server overload. Implement retry logic with backoff.
CONFLICT The request conflicts with the current state of the resource. Concurrent modifications or business rule violations. Check the resource state before updating.
UNPROCESSABLE_ENTITY Well-formed request with semantic errors. Validation failures of the business logic. Review business rules and data constraints.
TOO_MANY_REQUESTS Rate limit exceeded. API rate limiting. Implement exponential backoff retry.
INTERNAL_SERVER_ERROR Unexpected error on Procore server.  Server-side issues. Contact Procore support.
NOT_IMPLEMENTED Requested operation is not supported.  API endpoint is unavailable. Check the API documentation for supported operations.
BAD_GATEWAY Gateway error. Proxy or load balancer issues. Check the network infrastructure.
SERVICE_UNAVAILABLE Procore service is temporarily unavailable. Maintenance or server issues. Retry after the service is restored.
GATEWAY_TIMEOUT  Gateway timeout. Network timeout issues. Increase the timeout settings.
HTTP_VERSION_NOT_SUPPORTED  Unsupported HTTP version. Protocol version mismatch. Use a supported HTTP version.
CONNECTIVITY Unable to connect to Procore services. Network issues or firewall blocking. Check the network connectivity.
INVALID_REQUEST Request contains invalid parameters or format. Malformed request structure. Validate the request format.
UNEXPECTED_ERROR Unexpected error occurred. Unknown or unclassified errors. Check logs for detailed information on the error.

Data Types

TYPE DESCRIPTION EXAMPLE
String  Text values "Project Name"
Boolean True/false values true
Double Decimal numbers 1000000.0
Integer Whole numbers 50000
List Array of strings ["dept1", "dept2"]
Date Date values "2024-01-01"

Glossary

TERM DEFINITION
Procore Construction project management platform.
OAuth 2.0 Authorization protocol for secure API access.
Company ID Unique identifier for a Procore company.
Project ID Unique identifier for a Procore project.
Standard Cost Codes Predefined cost categories for construction projects.
Custom Fields User-defined fields for project customization.
Procore Error Codes Specific error types that are defined by the Procore connector for error handling.
BAD_REQUEST Error indicating invalid request parameters or malformed data.
UNAUTHORIZED Error indicating invalid or expired authentication credentials.
FORBIDDEN Error indicating insufficient permissions to access a resource.
NOT_FOUND Error indicating the requested resource was not found.
CONFLICT Error indicating request conflicts with current resource state.
TOO_MANY_REQUESTS Error indicating API rate limit has been exceeded.
CONNECTIVITY Error indicating inability to connect to Procore services.
UNEXPECTED_ERROR Generic error for unknown or unclassified errors.

Release Notes

Below are the notable changes to the Procore + MuleSoft integration. 

Recent Changes

Version 1.0.0 (06/2025)

Overview

The Procore Connector 1.0.0 provides seamless integration between MuleSoft applications and Procore’s construction project management platform. This initial release establishes the foundation for managing construction projects through MuleSoft-based enterprise solutions.

What’s New

Core Features
  • OAuth 2.0 Authentication: Secure connection to Procore API using OAuth 2.0 authorization code flow with automatic token refresh.
  • Project Management Operations: Complete support for creating and updating construction projects.
  • Company-Specific Context: All operations support company-specific contexts through Procore Company ID headers.
  • Advanced Error Handling: Robust error handling with detailed logging and proper exception management.
Operations
Create Project Operation
  • Project Details Management: Create new construction projects with comprehensive project details, including name, description, code, and type configuration.
  • Location Data Support: Full support for latitude, longitude, and geographic information.
  • Date Management: Override start/end dates with configurable date handling.
  • Company Integration: Company ID association and office linking.
  • Cost Code Support: Optional standard cost code copying during creation.
  • Advanced Fields: Support for project numbers, store numbers, accounting project numbers, and designated market areas.
Update Project Operation
  • Project Modification: Update existing project details and configurations. 
  • Additional Fields: County, fax, and standard cost code list management.
  • Flexible Updates: Partial updates with optional parameter support.
  • Validation: Built-in validation for project ID and company associations.

Technical Specifications

System Requirements
Component Version
Mule Runtime 4.9.6 or higher
Java 17
Dependencies
Dependency Version Purpose
mule-sdk-api 0.11.4 MuleSoft SDK API
gson 2.12.1 JSON serialization/deserialization
nimbus-jose-jwt 9.37.3 JWT token handling
mule-http-connector 1.10.3 HTTP operations
mule-file-connector 1.5.3 File operations
mule-objectstore-connector 1.2.2 Object store operations
mule-selenium-connector 2.2.3 Selenium operations
Configuration Parameters
Connection Configuration
  • Base URL: Configurable Procore API base URL (default: https://api.procore.com).
  • Timeout Settings: Configurable connection timeout (default: 30 seconds).
  • Proxy Support: Optional proxy configuration for enterprise environments.
  • OAuth 2.0: Authorization code flow with automatic token refresh.
Project Parameters
  • Basic Information: Name, description, code, active status.
  • Location Data: Address, city, state, country, ZIP, latitude, longitude.
  • Date Management: Start date, completion date, warranty dates, override dates.
  • Financial Data: Total value, estimated value, square feet.
  • Organizational Data: Company ID, office ID, department IDs, project stage.
  • Advanced Fields: Project type, bid type, owner type, region, template.
  • Custom Fields: Origin data, flags, public notes, locale, timezone.

Installation

Maven Dependency
<dependency>
 <groupId>com.procore.integrations</groupId>
 <artifactId>procore</artifactId>
 <version>1.0.0</version>
 <classifier>mule-plugin</classifier>
</dependency>
Configuration Example
<procore:config name="Procore_Config">
 <procore:connection>
 <procore:oauth-authorization-code
 consumerKey="${oauth.client.id}"
 consumerSecret="${oauth.client.secret}"/>
 <procore:oauth-callback-config
 listenerConfig="HTTP_Listener_config"
 callbackPath="/mule/callback"
 authorizePath="/authorize-procore"
 externalCallbackUrl="http://localhost:8081/mule/callback" />
 </procore:connection>
</procore:config>

Usage Examples

Create Project Example
<procore:create-project
 config-ref="Procore_Config"
 companyId="#[payload.company_id]"
 name="#[payload.name]"
 address="#[payload.address]"
 city="#[payload.city]"
 stateCode="#[payload.state_code]"
 countryCode="#[payload.country_code]"
 zip="#[payload.zip]"
 description="#[payload.description]"
 startDate="#[payload.start_date]"
 completionDate="#[payload.completion_date]"
 totalValue="#[payload.total_value]"
 enableCopyOfStandardCostCodes="#[payload.enable_copy_of_standard_cost_codes]"/>
Update Project Example
<procore:update-project
 config-ref="Procore_Config"
 companyId="#[payload.company_id]"
 projectId="#[payload.project_id]"
 name="#[payload.name]"
 address="#[payload.address]"
 city="#[payload.city]"
 description="#[payload.description]"
 totalValue="#[payload.total_value]"
 county="#[payload.county]"
 fax="#[payload.fax]"
 standardCostCodeListId="#[payload.standard_cost_code_list_id]"/>

Error Handling

Error Types
  • Authentication Errors: OAuth token validation and refresh failures.
  • API Errors: Procore API response errors with detailed error messages.
  • Validation Errors: Parameter validation and business rule violations.
  • Connection Errors: Network connectivity and timeout issues.
  • Unexpected Errors: General exception handling with contextual information.

Testing

Unit Tests
  • Comprehensive unit test coverage for all operations.
  • Mock-based testing for external dependencies.
  • Parameter validation testing.
  • Error handling scenario testing.
Integration Tests
  • End-to-end testing with Procore API. 
  • OAuth flow testing.
  • Real project creation and update scenarios.
  • Performance and load testing.
Test Coverage
  • Code Coverage: Minimum 80% instruction coverage.
  • Test Scenarios: Create and update project operations.
  • Error Scenarios: Authentication, validation, and API errors.
  • Edge Cases: Optional parameters, null values, boundary conditions.

Documentation

Available Documentation
  • README.md: Quick start guide and feature overview.
  • API Documentation: Detailed operation documentation.
  • Configuration Guide: Connection and parameter configuration.
  • Examples: Sample implementations and use cases.
  • Error Handling: Error types and troubleshooting guide.
Additional Resources
  • Demo Project: Complete working example in demo/ directory.
  • Test Suite: Comprehensive test examples in src/test/.
  • Configuration Templates: Pre-configured templates for common scenarios.

Known Issues and Limitations

Current Limitations
  • Single Company Context: Operations require an explicit company ID parameter.
  • Project Operations Only: Limited to project creation and updates.
  • Synchronous Operations: All operations are synchronous.
  • Batch Operations: No support for batch project operations.
Known Issues
  • None reported in this release.
From Previous Versions
  • This is the initial release (1.0.0).
  • No migration required from previous versions.

Support and Maintenance

Support Information
  • Maintainer: Team Strategic Integrations.
  • Issue Tracking: ESI (Enterprise Strategic Integrations).
  • Documentation: Available in the project repository.
  • Community: Procore Enterprise Slack channel.
Maintenance Schedule
  • Security Updates: As needed for critical vulnerabilities.
  • Feature Updates: Quarterly release cycle.
  • Bug Fixes: Monthly patch releases.
  • Documentation Updates: Continuous improvement.

Changelog

Version 1.0.0 (Current Release)
  • Initial Release: First public release of Procore Connector.
  • OAuth 2.0 Authentication: Secure authentication with Procore API.
  • Create Project Operation: Complete project creation functionality.
  • Update Project Operation: Full project update capabilities.
  • Comprehensive Error Handling: Robust error management and logging.
  • Company-Specific Operations: Support for multi-company environments.
  • Advanced Project Features: Support for all major project parameters.
  • Documentation and Examples: Complete documentation and demo project.
  • Test Coverage: Comprehensive unit and integration tests.

Contributing

Development Guidelines
  • Follow MuleSoft development best practices.
  • Maintain 80% minimum code coverage.
  • Include comprehensive error handling.
  • Provide detailed documentation for new features.
  • Follow established naming conventions and code structure.
Testing Requirements
  • Unit tests for all new operations.
  • Integration tests for API interactions.
  • Error scenario testing.
  • Performance testing for new features.
 Note
For additional support, questions, or feature requests, reach out to the Team Strategic Integrations through the Procore Enterprise Slack channel or create an issue in the ESI project tracking system.