"Procore core workflow a \u2014 construction management platform integration.\n\
Scanned 9/2/2026
Install to Claude Code
npx -y skills add jeremylongshore/tons-of-skills-marketplace --skill procore-core-workflow-a --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Procore Core Workflow A?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/jeremylongshore-procore-core-workflow-a-5b2af4c2)More formats (shields.io, HTML) on the badges page.
---
name: procore-core-workflow-a
description: "Procore core workflow a \u2014 construction management platform integration.\n\
Use when working with Procore API for project management, RFIs, or submittals.\n\
Trigger with phrases like \"procore core workflow a\", \"procore-core-workflow-a\"\
.\n"
allowed-tools: Read, Write, Edit, Bash(npm:*), Bash(pip:*), Bash(curl:*), Grep
version: 1.5.0
license: MIT
author: Jeremy Longshore <jeremy@intentsolutions.io>
tags:
- saas
- procore
- construction
- project-management
compatibility: Designed for Claude Code
---
# Procore Core Workflow A
## Overview
Build a complete RFI workflow: create, assign, respond, track, and close RFIs using the Procore API.
## Prerequisites
- Completed `procore-hello-world` with project access
## Instructions
### Step 1: Create RFI with Full Details
```python
rfi_data = {
"rfi": {
"subject": "HVAC duct routing — Level 2 conflict",
"question_body": "The HVAC ducts conflict with structural beams at grid B-4. Need routing alternatives.",
"assignee_id": 11111,
"rfi_manager_id": 22222,
"due_date": "2026-04-15",
"priority": "high",
"cost_impact": "yes",
"schedule_impact": "yes",
}
}
rfi = requests.post(
f"{BASE}/projects/{project_id}/rfis",
headers={**headers, "Content-Type": "application/json"},
json=rfi_data,
)
rfi_id = rfi.json()["id"]
```
### Step 2: Add Response to RFI
```python
response = requests.post(
f"{BASE}/projects/{project_id}/rfis/{rfi_id}/responses",
headers={**headers, "Content-Type": "application/json"},
json={
"response": {
"body": "Route ducts below beam using 8-inch offset. See attached drawing.",
}
},
)
```
### Step 3: Track RFI Status
```python
rfi_detail = requests.get(f"{BASE}/projects/{project_id}/rfis/{rfi_id}", headers=headers)
data = rfi_detail.json()
print(f"RFI #{data['number']}: {data['status']['name']}")
print(f" Days open: {data.get('days_open', 0)}")
print(f" Responses: {len(data.get('responses', []))}")
```
### Step 4: Close RFI
```python
requests.patch(
f"{BASE}/projects/{project_id}/rfis/{rfi_id}",
headers={**headers, "Content-Type": "application/json"},
json={"rfi": {"status": "closed"}},
)
```
## Output
- RFI created with full metadata (priority, impacts, due date)
- Responses added to RFI thread
- Status tracked through lifecycle
- RFI closed upon resolution
## Error Handling
| Error | Cause | Solution |
|-------|-------|----------|
| `422 Invalid assignee` | User not on project | Verify user is a project member |
| `403 Cannot close` | Not RFI manager | Only RFI manager can close |
| Missing responses | RFI in draft status | Distribute RFI first |
## Resources
- [RFIs API](https://developers.procore.com/reference/rest/rfis)
- [Procore Developers](https://developers.procore.com/)
## Next Steps
Submittal workflow: `procore-core-workflow-b`
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!