Skip to main content

rfi-v1 — Request for Information

The RFI schema defines a standardized format for construction Requests for Information. It captures design conflicts, missing information, and clarification requests with drawing references and priority levels.

JSON Schema: spec/schemas/rfi-v1.json

Top-Level Fields

FieldTypeRequiredDescription
projectIdstringYesUnique project identifier
subjectstringYesBrief subject line for the RFI
questionstringYesThe detailed question or clarification request
categorystring (enum)YesRFI category (see below)
prioritystring (enum)YesUrgency level: low, medium, high, critical
referencesarrayYesDrawing/document references (min 1)
suggestedResolutionstringNoAgent's suggested resolution
relatedBomItemsstring[]NoBOM line item IDs related to this RFI
dueDatestring (date)NoRequested response date
assignedToobjectNoIntended recipient
metadataobjectYesGeneration metadata

Category Values

ValueDescription
design-conflictContradictory information between drawings or specs
missing-informationRequired information not shown on documents
clarificationAmbiguous detail that needs confirmation
substitutionRequest to substitute specified materials
coordinationConflicts between trades requiring resolution
code-compliancePotential building code violation

Reference Fields

FieldTypeRequiredDescription
sheetIdstringYesDrawing sheet reference (e.g., "M-201")
areastringNoArea on the sheet (e.g., "grid D4-E6")
coordinatesobjectNoBounding box: {x, y, width, height}
markupstringNoBase64-encoded markup image (PNG)

Assignee Fields

FieldTypeDescription
rolestring (enum)architect, engineer, owner, contractor, subcontractor
companystringCompany name
contactstringContact info (email)

Metadata Fields

FieldTypeRequiredDescription
generatedBystringYesAgent ID that generated this RFI
generatedAtstring (date-time)YesTimestamp of generation
confidencenumber (0-1)NoConfidence this is a legitimate issue
relatedRfisstring[]NoIDs of related RFIs

Example Payload

{
"projectId": "PRJ-2026-OAKRIDGE-MEDICAL",
"subject": "HVAC pipe size discrepancy — Drawing M-201 vs. schedule",
"question": "Drawing M-201 detail 3 shows a 4-inch chilled water supply line at grid D4-E6, but the pipe schedule on M-001 specifies 3-inch for this run. Which is correct?",
"category": "design-conflict",
"priority": "high",
"references": [
{
"sheetId": "M-201",
"area": "grid D4-E6",
"coordinates": {
"x": 1240,
"y": 890,
"width": 320,
"height": 180
}
},
{
"sheetId": "M-001",
"area": "pipe schedule row 14"
}
],
"suggestedResolution": "Use 4-inch as shown on plan detail — the schedule may not have been updated after the Rev C resize.",
"relatedBomItems": ["LI-006", "LI-007"],
"dueDate": "2026-03-15",
"assignedTo": {
"role": "engineer",
"company": "Smith MEP Engineering",
"contact": "rsmith@smithmep.com"
},
"metadata": {
"generatedBy": "pelles-rfi-agent-v1",
"generatedAt": "2026-03-01T14:22:00Z",
"confidence": 0.91,
"relatedRfis": ["RFI-042"]
}
}

Python SDK

from taco import RFIV1

# Parse from JSON
rfi = RFIV1.model_validate(json_data)

# Access with snake_case
print(rfi.category) # "design-conflict"
print(rfi.priority) # "high"
print(rfi.references[0].area) # "grid D4-E6"
print(rfi.metadata.confidence) # 0.91

# Serialize to camelCase JSON
output = rfi.model_dump(by_alias=True, exclude_none=True)