MuleSoft
- Last updated
- Save as PDF
Table of Contents
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
|
|
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:
- Open the Creating an App article in the Procore Developer documentation.
- Follow the step-by-step guide to create a new OAuth application.
- 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.
- 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
- Start your MuleSoft application.
- Go to http://localhost:8081/authorize-procore.
You will be redirected to the Procore authorization page. - 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
- Procore API Documentation: developers.procore.com.
- MuleSoft Documentation: docs.mulesoft.com.
- Community Forums: Procore Developer Community.
- Support Tickets: Contact Procore Developer 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
- Open Anypoint Studio.
- Navigate to File > New > Mule Project.
- Enter the project name. For example, 'procore-integration'.
- Select Mule Runtime version 4.9.6 or higher.
- 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:
- Run the application in Anypoint Studio.
- Use localhost endpoints for testing.
- Configure local OAuth callback URLs.
- Use the Procore development environment.
CloudHub Deployment
For CloudHub deployment:
- Package your application as a JAR file.
- Deploy the application to CloudHub through Runtime Manager.
- Configure environment-specific properties.
- Set up OAuth callback URLs.
- Configure SSL certificates.
Security Best Practices
Secure Configuration
- Use secure properties for sensitive data.
- Never commit credentials to version control.
- Use environment variables for production.
- Rotate credentials regularly.
OAuth Security
- Use HTTPS for all OAuth endpoints.
- Validate OAuth scopes.
- Implement proper token management.
- Monitor authentication failures.
Input Validation
- Validate all input parameters.
- Sanitize user input.
- Implement proper error handling.
- 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
- Procore API Documentation: developers.procore.com.
- MuleSoft Documentation: docs.mulesoft.com.
- Community Forums: Procore Developer Community.
- Support Tickets: Contact Procore Developer 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.