Construction Site Operations API Documentation
Read supplied daily reports, schedules, RFIs, instructions, and deliveries to organize site evidence and label schedule deviations without deciding entitlement. Payment is the exact USDC price on Base with x402.
https://brainiac.software/api/v1/construction-site-operations/daily-report-parse$0.04 USDCParse construction daily reports
Copy supplied daily reports into structured rows with dates, locations, authors, workforce, and referenced activities. Delay wording is flagged as recorded narrative only.
Body
| Field | Required | Notes |
|---|---|---|
text | No | string |
json | No | string |
csv | No | string |
file | No | object; Object |
reports | No | array; Array |
activities | No | array; Array |
delays | No | array; Array |
rfis | No | array; Array |
instructions | No | array; Array |
deliveries | No | array; Array |
scope | No | array; Array |
asOf | No | string |
Request exampleJSON
{
"activities": [
{
"id": "A-1",
"name": "Concrete pour"
}
],
"reports": [
{
"id": "DR-1",
"date": "2026-11-03",
"location": "Grid A",
"author": "PM",
"weather": "rain",
"workforce": 12,
"text": "Concrete pour delayed by rain on Grid A",
"activityId": "A-1"
}
],
"text": "The contractor is entitled to an extension.\n"
}Response exampleJSON
{
"checkedAt": "2026-11-04T21:00:00.000Z",
"status": "parsed",
"reports": [
{
"id": "DR-1",
"date": "2026-11-03",
"location": "Grid A",
"author": "PM",
"weather": "rain",
"workforce": 12,
"workforceSupplied": true,
"activityId": "A-1",
"referencedActivities": [
"A-1"
],
"delayWording": true,
"text": "Concrete pour delayed by rain on Grid A",
"kind": "recorded"
}
],
"delayInvented": false,
"entitlementDetermined": false,
"liabilityDetermined": false,
"findings": [
{
"kind": "ignored",
"code": "unlabeled_line",
"subject": "",
"detail": "Lines without a recognized label were not read and their text was not copied."
}
],
"limitations": [
"Daily reports, schedules, RFIs, instructions, and deliveries are copied only from labeled fields supplied by the caller.",
"Schedule deviations use only supplied baseline and actual dates. Missing dates are not invented.",
"A recorded delay event is taken from supplied delay rows or explicit daily-report delay wording. Inferred impact is labeled separately.",
"Contractual entitlement and liability are never determined.",
"Unresolved RFIs and missing deliveries are judged only against supplied due/expected dates and statuses."
]
}cURL
curl -i -X POST "https://brainiac.software/api/v1/construction-site-operations/daily-report-parse" \
-H 'content-type: application/json' \
-H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
--data-binary @- <<'JSON'
{
"activities": [
{
"id": "A-1",
"name": "Concrete pour"
}
],
"reports": [
{
"id": "DR-1",
"date": "2026-11-03",
"location": "Grid A",
"author": "PM",
"weather": "rain",
"workforce": 12,
"text": "Concrete pour delayed by rain on Grid A",
"activityId": "A-1"
}
],
"text": "The contractor is entitled to an extension.\n"
}
JSONhttps://brainiac.software/api/v1/construction-site-operations/progress-analyze$0.05 USDCAnalyze site progress
Compare supplied baseline and actual activity dates to identify schedule deviations. Inferred impact is labeled and is not an entitlement determination.
Body
| Field | Required | Notes |
|---|---|---|
text | No | string |
json | No | string |
csv | No | string |
file | No | object; Object |
reports | No | array; Array |
activities | No | array; Array |
delays | No | array; Array |
rfis | No | array; Array |
instructions | No | array; Array |
deliveries | No | array; Array |
scope | No | array; Array |
asOf | No | string |
Request exampleJSON
{
"asOf": "2026-11-10",
"activities": [
{
"id": "A-1",
"name": "Foundations",
"baselineStart": "2026-11-01",
"baselineEnd": "2026-11-05",
"actualStart": "2026-11-03",
"actualEnd": "2026-11-08",
"percentComplete": 100,
"responsible": "Sub A"
},
{
"id": "A-2",
"name": "Frame",
"baselineStart": "2026-11-06",
"baselineEnd": "2026-11-12",
"actualStart": "2026-11-09",
"percentComplete": 20,
"responsible": "Sub B"
}
]
}Response exampleJSON
{
"checkedAt": "2026-11-04T21:00:00.000Z",
"status": "analyzed",
"lateCount": 2,
"items": [
{
"id": "A-1",
"name": "Foundations",
"location": "",
"responsible": "Sub A",
"baselineStart": "2026-11-01",
"baselineEnd": "2026-11-05",
"actualStart": "2026-11-03",
"actualEnd": "2026-11-08",
"percentComplete": 100,
"percentCompleteSupplied": true,
"startDelayDays": 2,
"startDelayDaysSupplied": true,
"endDelayDays": 3,
"endDelayDaysSupplied": true,
"baselineEndPassedDays": 0,
"baselineEndPassedDaysSupplied": false,
"status": "finished_late",
"deviationRecorded": false,
"impactInferred": true,
"entitlementDetermined": false,
"liabilityDetermined": false
},
{
"id": "A-2",
"name": "Frame",
"location": "",
"responsible": "Sub B",
"baselineStart": "2026-11-06",
"baselineEnd": "2026-11-12",
"actualStart": "2026-11-09",
"actualEnd": "",
"percentComplete": 20,
"percentCompleteSupplied": true,
"startDelayDays": 3,
"startDelayDaysSupplied": true,
"endDelayDays": 0,
"endDelayDaysSupplied": false,
"baselineEndPassedDays": 0,
"baselineEndPassedDaysSupplied": false,
"status": "started_late",
"deviationRecorded": false,
"impactInferred": true,
"entitlementDetermined": false,
"liabilityDetermined": false
}
],
"delayInvented": false,
"entitlementDetermined": false,
"liabilityDetermined": false,
"findings": [],
"limitations": [
"Daily reports, schedules, RFIs, instructions, and deliveries are copied only from labeled fields supplied by the caller.",
"Schedule deviations use only supplied baseline and actual dates. Missing dates are not invented.",
"A recorded delay event is taken from supplied delay rows or explicit daily-report delay wording. Inferred impact is labeled separately.",
"Contractual entitlement and liability are never determined.",
"Unresolved RFIs and missing deliveries are judged only against supplied due/expected dates and statuses."
]
}cURL
curl -i -X POST "https://brainiac.software/api/v1/construction-site-operations/progress-analyze" \
-H 'content-type: application/json' \
-H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
--data-binary @- <<'JSON'
{
"asOf": "2026-11-10",
"activities": [
{
"id": "A-1",
"name": "Foundations",
"baselineStart": "2026-11-01",
"baselineEnd": "2026-11-05",
"actualStart": "2026-11-03",
"actualEnd": "2026-11-08",
"percentComplete": 100,
"responsible": "Sub A"
},
{
"id": "A-2",
"name": "Frame",
"baselineStart": "2026-11-06",
"baselineEnd": "2026-11-12",
"actualStart": "2026-11-09",
"percentComplete": 20,
"responsible": "Sub B"
}
]
}
JSONhttps://brainiac.software/api/v1/construction-site-operations/delay-event-detect$0.04 USDCDetect construction delay events
Collect recorded delay rows and daily-report delay wording, and separately label impacts inferred from baseline versus actual dates. Liability is not determined.
Body
| Field | Required | Notes |
|---|---|---|
text | No | string |
json | No | string |
csv | No | string |
file | No | object; Object |
reports | No | array; Array |
activities | No | array; Array |
delays | No | array; Array |
rfis | No | array; Array |
instructions | No | array; Array |
deliveries | No | array; Array |
scope | No | array; Array |
asOf | No | string |
Request exampleJSON
{
"asOf": "2026-11-10",
"activities": [
{
"id": "A-1",
"name": "Foundations",
"baselineEnd": "2026-11-05",
"actualEnd": "2026-11-08"
}
],
"delays": [
{
"id": "D-1",
"date": "2026-11-03",
"activityId": "A-1",
"days": 2,
"reason": "rain stoppage",
"recorded": true
}
],
"reports": [
{
"id": "DR-1",
"date": "2026-11-03",
"text": "Work delayed by rain",
"activityId": "A-1"
}
]
}Response exampleJSON
{
"checkedAt": "2026-11-04T21:00:00.000Z",
"status": "detected",
"recordedCount": 2,
"inferredCount": 1,
"items": [
{
"id": "D-1",
"date": "2026-11-03",
"activityId": "A-1",
"reason": "rain stoppage",
"days": 2,
"daysSupplied": true,
"source": "delay_record",
"eventKind": "recorded",
"impactInferred": false,
"entitlementDetermined": false,
"liabilityDetermined": false,
"recorded": true
},
{
"id": "DR-1",
"date": "2026-11-03",
"activityId": "A-1",
"reason": "Work delayed by rain",
"days": 0,
"daysSupplied": false,
"source": "daily_report_wording",
"eventKind": "recorded",
"impactInferred": false,
"entitlementDetermined": false,
"liabilityDetermined": false,
"recorded": true
},
{
"id": "INF-A-1",
"date": "2026-11-08",
"activityId": "A-1",
"reason": "Inferred from baseline/actual date comparison for Foundations.",
"days": 3,
"daysSupplied": true,
"source": "schedule_comparison",
"eventKind": "inferred",
"impactInferred": true,
"entitlementDetermined": false,
"liabilityDetermined": false,
"recorded": false
}
],
"delayInvented": false,
"entitlementDetermined": false,
"liabilityDetermined": false,
"findings": [
{
"kind": "observation",
"code": "inferred_impact",
"subject": "",
"detail": "Some delay impacts were inferred from baseline versus actual dates. They are labeled inferred and are not entitlement determinations."
}
],
"limitations": [
"Daily reports, schedules, RFIs, instructions, and deliveries are copied only from labeled fields supplied by the caller.",
"Schedule deviations use only supplied baseline and actual dates. Missing dates are not invented.",
"A recorded delay event is taken from supplied delay rows or explicit daily-report delay wording. Inferred impact is labeled separately.",
"Contractual entitlement and liability are never determined.",
"Unresolved RFIs and missing deliveries are judged only against supplied due/expected dates and statuses."
]
}cURL
curl -i -X POST "https://brainiac.software/api/v1/construction-site-operations/delay-event-detect" \
-H 'content-type: application/json' \
-H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
--data-binary @- <<'JSON'
{
"asOf": "2026-11-10",
"activities": [
{
"id": "A-1",
"name": "Foundations",
"baselineEnd": "2026-11-05",
"actualEnd": "2026-11-08"
}
],
"delays": [
{
"id": "D-1",
"date": "2026-11-03",
"activityId": "A-1",
"days": 2,
"reason": "rain stoppage",
"recorded": true
}
],
"reports": [
{
"id": "DR-1",
"date": "2026-11-03",
"text": "Work delayed by rain",
"activityId": "A-1"
}
]
}
JSONhttps://brainiac.software/api/v1/construction-site-operations/request-for-information-track$0.04 USDCTrack requests for information
Track RFI asked/due/answered dates and identify unresolved or overdue items from supplied statuses. Contractual entitlement is not decided.
Body
| Field | Required | Notes |
|---|---|---|
text | No | string |
json | No | string |
csv | No | string |
file | No | object; Object |
reports | No | array; Array |
activities | No | array; Array |
delays | No | array; Array |
rfis | No | array; Array |
instructions | No | array; Array |
deliveries | No | array; Array |
scope | No | array; Array |
asOf | No | string |
Request exampleJSON
{
"asOf": "2026-11-10",
"rfis": [
{
"id": "RFI-1",
"subject": "Beam detail",
"asked": "2026-11-01",
"due": "2026-11-05",
"status": "open",
"asker": "Contractor",
"activityId": "A-1"
},
{
"id": "RFI-2",
"subject": "Door schedule",
"asked": "2026-11-01",
"due": "2026-11-04",
"answered": "2026-11-03",
"status": "closed",
"asker": "Contractor",
"responder": "Architect"
}
]
}Response exampleJSON
{
"checkedAt": "2026-11-04T21:00:00.000Z",
"status": "tracked",
"openCount": 1,
"overdueCount": 1,
"items": [
{
"id": "RFI-1",
"subject": "Beam detail",
"asked": "2026-11-01",
"due": "2026-11-05",
"answered": "",
"status": "open",
"asker": "Contractor",
"responder": "",
"activityId": "A-1",
"open": true,
"overdueDays": 5,
"overdueDaysSupplied": true,
"eventKind": "recorded",
"entitlementDetermined": false,
"liabilityDetermined": false
},
{
"id": "RFI-2",
"subject": "Door schedule",
"asked": "2026-11-01",
"due": "2026-11-04",
"answered": "2026-11-03",
"status": "closed",
"asker": "Contractor",
"responder": "Architect",
"activityId": "",
"open": false,
"overdueDays": 0,
"overdueDaysSupplied": false,
"eventKind": "recorded",
"entitlementDetermined": false,
"liabilityDetermined": false
}
],
"delayInvented": false,
"entitlementDetermined": false,
"liabilityDetermined": false,
"findings": [
{
"kind": "observation",
"code": "rfi_unresolved",
"subject": "RFI-1",
"detail": "An RFI remains unresolved after its due date in the supplied records."
}
],
"limitations": [
"Daily reports, schedules, RFIs, instructions, and deliveries are copied only from labeled fields supplied by the caller.",
"Schedule deviations use only supplied baseline and actual dates. Missing dates are not invented.",
"A recorded delay event is taken from supplied delay rows or explicit daily-report delay wording. Inferred impact is labeled separately.",
"Contractual entitlement and liability are never determined.",
"Unresolved RFIs and missing deliveries are judged only against supplied due/expected dates and statuses."
]
}cURL
curl -i -X POST "https://brainiac.software/api/v1/construction-site-operations/request-for-information-track" \
-H 'content-type: application/json' \
-H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
--data-binary @- <<'JSON'
{
"asOf": "2026-11-10",
"rfis": [
{
"id": "RFI-1",
"subject": "Beam detail",
"asked": "2026-11-01",
"due": "2026-11-05",
"status": "open",
"asker": "Contractor",
"activityId": "A-1"
},
{
"id": "RFI-2",
"subject": "Door schedule",
"asked": "2026-11-01",
"due": "2026-11-04",
"answered": "2026-11-03",
"status": "closed",
"asker": "Contractor",
"responder": "Architect"
}
]
}
JSONhttps://brainiac.software/api/v1/construction-site-operations/instruction-extract$0.04 USDCExtract site instructions
Extract dates, issuers, locations, referenced activities, and change flags from supplied site instructions.
Body
| Field | Required | Notes |
|---|---|---|
text | No | string |
json | No | string |
csv | No | string |
file | No | object; Object |
reports | No | array; Array |
activities | No | array; Array |
delays | No | array; Array |
rfis | No | array; Array |
instructions | No | array; Array |
deliveries | No | array; Array |
scope | No | array; Array |
asOf | No | string |
Request exampleJSON
{
"activities": [
{
"id": "A-2",
"name": "Frame"
}
],
"instructions": [
{
"id": "SI-1",
"date": "2026-11-04",
"issuer": "Architect",
"location": "Level 2",
"activityId": "A-2",
"change": true,
"text": "Change window opening size on Level 2 Frame"
},
{
"id": "SI-2",
"date": "2026-11-05",
"issuer": "PM",
"text": "Confirm access route remains clear"
}
]
}Response exampleJSON
{
"checkedAt": "2026-11-04T21:00:00.000Z",
"status": "extracted",
"changeCount": 1,
"items": [
{
"id": "SI-1",
"date": "2026-11-04",
"issuer": "Architect",
"location": "Level 2",
"activityId": "A-2",
"referencedActivities": [
"A-2"
],
"text": "Change window opening size on Level 2 Frame",
"change": true,
"changeSupplied": true,
"eventKind": "recorded",
"entitlementDetermined": false,
"liabilityDetermined": false
},
{
"id": "SI-2",
"date": "2026-11-05",
"issuer": "PM",
"location": "",
"activityId": "",
"referencedActivities": [],
"text": "Confirm access route remains clear",
"change": false,
"changeSupplied": false,
"eventKind": "recorded",
"entitlementDetermined": false,
"liabilityDetermined": false
}
],
"delayInvented": false,
"entitlementDetermined": false,
"liabilityDetermined": false,
"findings": [],
"limitations": [
"Daily reports, schedules, RFIs, instructions, and deliveries are copied only from labeled fields supplied by the caller.",
"Schedule deviations use only supplied baseline and actual dates. Missing dates are not invented.",
"A recorded delay event is taken from supplied delay rows or explicit daily-report delay wording. Inferred impact is labeled separately.",
"Contractual entitlement and liability are never determined.",
"Unresolved RFIs and missing deliveries are judged only against supplied due/expected dates and statuses."
]
}cURL
curl -i -X POST "https://brainiac.software/api/v1/construction-site-operations/instruction-extract" \
-H 'content-type: application/json' \
-H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
--data-binary @- <<'JSON'
{
"activities": [
{
"id": "A-2",
"name": "Frame"
}
],
"instructions": [
{
"id": "SI-1",
"date": "2026-11-04",
"issuer": "Architect",
"location": "Level 2",
"activityId": "A-2",
"change": true,
"text": "Change window opening size on Level 2 Frame"
},
{
"id": "SI-2",
"date": "2026-11-05",
"issuer": "PM",
"text": "Confirm access route remains clear"
}
]
}
JSONhttps://brainiac.software/api/v1/construction-site-operations/material-delivery-reconcile$0.04 USDCReconcile material deliveries
Reconcile expected and delivered material records, flagging missing deliveries and short quantities from supplied dates and counts.
Body
| Field | Required | Notes |
|---|---|---|
text | No | string |
json | No | string |
csv | No | string |
file | No | object; Object |
reports | No | array; Array |
activities | No | array; Array |
delays | No | array; Array |
rfis | No | array; Array |
instructions | No | array; Array |
deliveries | No | array; Array |
scope | No | array; Array |
asOf | No | string |
Request exampleJSON
{
"asOf": "2026-11-10",
"deliveries": [
{
"id": "DEL-1",
"material": "Rebar",
"expected": "2026-11-02",
"delivered": "2026-11-04",
"quantityExpected": 10,
"quantityDelivered": 8,
"supplier": "SteelCo"
},
{
"id": "DEL-2",
"material": "Formwork",
"expected": "2026-11-08",
"quantityExpected": 20,
"activityId": "A-1"
}
]
}Response exampleJSON
{
"checkedAt": "2026-11-04T21:00:00.000Z",
"status": "reconciled",
"missingCount": 1,
"shortCount": 1,
"items": [
{
"id": "DEL-1",
"material": "Rebar",
"expected": "2026-11-02",
"delivered": "2026-11-04",
"quantityExpected": 10,
"quantityExpectedSupplied": true,
"quantityDelivered": 8,
"quantityDeliveredSupplied": true,
"activityId": "",
"location": "",
"supplier": "SteelCo",
"missingDelivery": false,
"lateDays": 2,
"lateDaysSupplied": true,
"quantityShort": true,
"eventKind": "recorded",
"impactInferred": false,
"entitlementDetermined": false,
"liabilityDetermined": false
},
{
"id": "DEL-2",
"material": "Formwork",
"expected": "2026-11-08",
"delivered": "",
"quantityExpected": 20,
"quantityExpectedSupplied": true,
"quantityDelivered": 0,
"quantityDeliveredSupplied": false,
"activityId": "A-1",
"location": "",
"supplier": "",
"missingDelivery": true,
"lateDays": 2,
"lateDaysSupplied": true,
"quantityShort": false,
"eventKind": "recorded_gap",
"impactInferred": false,
"entitlementDetermined": false,
"liabilityDetermined": false
}
],
"delayInvented": false,
"entitlementDetermined": false,
"liabilityDetermined": false,
"findings": [
{
"kind": "observation",
"code": "delivery_missing",
"subject": "DEL-2",
"detail": "An expected delivery has no delivered date in the supplied records."
}
],
"limitations": [
"Daily reports, schedules, RFIs, instructions, and deliveries are copied only from labeled fields supplied by the caller.",
"Schedule deviations use only supplied baseline and actual dates. Missing dates are not invented.",
"A recorded delay event is taken from supplied delay rows or explicit daily-report delay wording. Inferred impact is labeled separately.",
"Contractual entitlement and liability are never determined.",
"Unresolved RFIs and missing deliveries are judged only against supplied due/expected dates and statuses."
]
}cURL
curl -i -X POST "https://brainiac.software/api/v1/construction-site-operations/material-delivery-reconcile" \
-H 'content-type: application/json' \
-H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
--data-binary @- <<'JSON'
{
"asOf": "2026-11-10",
"deliveries": [
{
"id": "DEL-1",
"material": "Rebar",
"expected": "2026-11-02",
"delivered": "2026-11-04",
"quantityExpected": 10,
"quantityDelivered": 8,
"supplier": "SteelCo"
},
{
"id": "DEL-2",
"material": "Formwork",
"expected": "2026-11-08",
"quantityExpected": 20,
"activityId": "A-1"
}
]
}
JSONhttps://brainiac.software/api/v1/construction-site-operations/change-impact$0.05 USDCCompare construction change impact
Compare change instructions with supplied scope and programme dates. Linked schedule impact is labeled inferred and is not a liability finding.
Body
| Field | Required | Notes |
|---|---|---|
text | No | string |
json | No | string |
csv | No | string |
file | No | object; Object |
reports | No | array; Array |
activities | No | array; Array |
delays | No | array; Array |
rfis | No | array; Array |
instructions | No | array; Array |
deliveries | No | array; Array |
scope | No | array; Array |
asOf | No | string |
Request exampleJSON
{
"activities": [
{
"id": "A-2",
"name": "Frame",
"baselineEnd": "2026-11-12",
"actualEnd": "2026-11-15"
}
],
"scope": [
{
"id": "SC-1",
"activityId": "A-2",
"text": "Install frame and openings"
}
],
"instructions": [
{
"id": "SI-1",
"date": "2026-11-04",
"issuer": "Architect",
"activityId": "A-2",
"change": true,
"text": "Change opening sizes in frame package"
}
]
}Response exampleJSON
{
"checkedAt": "2026-11-04T21:00:00.000Z",
"status": "compared",
"changeCount": 1,
"items": [
{
"instructionId": "SI-1",
"date": "2026-11-04",
"issuer": "Architect",
"activityId": "A-2",
"referencedActivities": [
"A-2"
],
"scopeMatchCount": 1,
"scopeIds": [
"SC-1"
],
"linkedActivityCount": 1,
"inferredDelayDays": 3,
"inferredDelayDaysSupplied": true,
"recordedChange": true,
"impactInferred": true,
"entitlementDetermined": false,
"liabilityDetermined": false,
"note": "Linked schedule deviations are inferred from baseline/actual dates and are not a contractual entitlement."
}
],
"delayInvented": false,
"entitlementDetermined": false,
"liabilityDetermined": false,
"findings": [],
"limitations": [
"Daily reports, schedules, RFIs, instructions, and deliveries are copied only from labeled fields supplied by the caller.",
"Schedule deviations use only supplied baseline and actual dates. Missing dates are not invented.",
"A recorded delay event is taken from supplied delay rows or explicit daily-report delay wording. Inferred impact is labeled separately.",
"Contractual entitlement and liability are never determined.",
"Unresolved RFIs and missing deliveries are judged only against supplied due/expected dates and statuses."
]
}cURL
curl -i -X POST "https://brainiac.software/api/v1/construction-site-operations/change-impact" \
-H 'content-type: application/json' \
-H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
--data-binary @- <<'JSON'
{
"activities": [
{
"id": "A-2",
"name": "Frame",
"baselineEnd": "2026-11-12",
"actualEnd": "2026-11-15"
}
],
"scope": [
{
"id": "SC-1",
"activityId": "A-2",
"text": "Install frame and openings"
}
],
"instructions": [
{
"id": "SI-1",
"date": "2026-11-04",
"issuer": "Architect",
"activityId": "A-2",
"change": true,
"text": "Change opening sizes in frame package"
}
]
}
JSONhttps://brainiac.software/api/v1/construction-site-operations/report$0.12 USDCReport site operations
Combine daily reports, progress deviations, recorded and inferred delays, RFIs, instructions, deliveries, and change comparisons from supplied site records.
Body
| Field | Required | Notes |
|---|---|---|
text | No | string |
json | No | string |
csv | No | string |
file | No | object; Object |
reports | No | array; Array |
activities | No | array; Array |
delays | No | array; Array |
rfis | No | array; Array |
instructions | No | array; Array |
deliveries | No | array; Array |
scope | No | array; Array |
asOf | No | string |
Request exampleJSON
{
"asOf": "2026-11-10",
"activities": [
{
"id": "A-1",
"name": "Foundations",
"baselineStart": "2026-11-01",
"baselineEnd": "2026-11-05",
"actualStart": "2026-11-03",
"actualEnd": "2026-11-08",
"responsible": "Sub A"
},
{
"id": "A-2",
"name": "Frame",
"baselineEnd": "2026-11-12",
"actualEnd": "2026-11-15"
}
],
"reports": [
{
"id": "DR-1",
"date": "2026-11-03",
"location": "Grid A",
"author": "PM",
"workforce": 12,
"text": "Foundations delayed by rain",
"activityId": "A-1"
}
],
"delays": [
{
"id": "D-1",
"date": "2026-11-03",
"activityId": "A-1",
"days": 2,
"reason": "rain",
"recorded": true
}
],
"rfis": [
{
"id": "RFI-1",
"subject": "Beam detail",
"asked": "2026-11-01",
"due": "2026-11-05",
"status": "open",
"asker": "Contractor",
"activityId": "A-2"
}
],
"instructions": [
{
"id": "SI-1",
"date": "2026-11-04",
"issuer": "Architect",
"activityId": "A-2",
"change": true,
"text": "Change opening sizes"
}
],
"deliveries": [
{
"id": "DEL-1",
"material": "Formwork",
"expected": "2026-11-08",
"quantityExpected": 20
}
],
"scope": [
{
"id": "SC-1",
"activityId": "A-2",
"text": "Install frame and openings"
}
]
}Response exampleJSON
{
"checkedAt": "2026-11-04T21:00:00.000Z",
"status": "reported",
"asOf": "2026-11-10",
"reportCount": 1,
"lateActivityCount": 2,
"recordedDelayCount": 2,
"inferredDelayCount": 2,
"openRfiCount": 1,
"missingDeliveryCount": 1,
"changeCount": 1,
"reports": [
{
"id": "DR-1",
"date": "2026-11-03",
"location": "Grid A",
"author": "PM",
"weather": "",
"workforce": 12,
"workforceSupplied": true,
"activityId": "A-1",
"referencedActivities": [
"A-1"
],
"delayWording": true,
"text": "Foundations delayed by rain",
"kind": "recorded"
}
],
"progress": [
{
"id": "A-1",
"name": "Foundations",
"location": "",
"responsible": "Sub A",
"baselineStart": "2026-11-01",
"baselineEnd": "2026-11-05",
"actualStart": "2026-11-03",
"actualEnd": "2026-11-08",
"percentComplete": 0,
"percentCompleteSupplied": false,
"startDelayDays": 2,
"startDelayDaysSupplied": true,
"endDelayDays": 3,
"endDelayDaysSupplied": true,
"baselineEndPassedDays": 0,
"baselineEndPassedDaysSupplied": false,
"status": "finished_late",
"deviationRecorded": false,
"impactInferred": true,
"entitlementDetermined": false,
"liabilityDetermined": false
},
{
"id": "A-2",
"name": "Frame",
"location": "",
"responsible": "",
"baselineStart": "",
"baselineEnd": "2026-11-12",
"actualStart": "",
"actualEnd": "2026-11-15",
"percentComplete": 0,
"percentCompleteSupplied": false,
"startDelayDays": 0,
"startDelayDaysSupplied": false,
"endDelayDays": 3,
"endDelayDaysSupplied": true,
"baselineEndPassedDays": 0,
"baselineEndPassedDaysSupplied": false,
"status": "finished_late",
"deviationRecorded": false,
"impactInferred": true,
"entitlementDetermined": false,
"liabilityDetermined": false
}
],
"delays": [
{
"id": "D-1",
"date": "2026-11-03",
"activityId": "A-1",
"reason": "rain",
"days": 2,
"daysSupplied": true,
"source": "delay_record",
"eventKind": "recorded",
"impactInferred": false,
"entitlementDetermined": false,
"liabilityDetermined": false,
"recorded": true
},
{
"id": "DR-1",
"date": "2026-11-03",
"activityId": "A-1",
"reason": "Foundations delayed by rain",
"days": 0,
"daysSupplied": false,
"source": "daily_report_wording",
"eventKind": "recorded",
"impactInferred": false,
"entitlementDetermined": false,
"liabilityDetermined": false,
"recorded": true
},
{
"id": "INF-A-1",
"date": "2026-11-08",
"activityId": "A-1",
"reason": "Inferred from baseline/actual date comparison for Foundations.",
"days": 3,
"daysSupplied": true,
"source": "schedule_comparison",
"eventKind": "inferred",
"impactInferred": true,
"entitlementDetermined": false,
"liabilityDetermined": false,
"recorded": false
},
{
"id": "INF-A-2",
"date": "2026-11-15",
"activityId": "A-2",
"reason": "Inferred from baseline/actual date comparison for Frame.",
"days": 3,
"daysSupplied": true,
"source": "schedule_comparison",
"eventKind": "inferred",
"impactInferred": true,
"entitlementDetermined": false,
"liabilityDetermined": false,
"recorded": false
}
],
"rfis": [
{
"id": "RFI-1",
"subject": "Beam detail",
"asked": "2026-11-01",
"due": "2026-11-05",
"answered": "",
"status": "open",
"asker": "Contractor",
"responder": "",
"activityId": "A-2",
"open": true,
"overdueDays": 5,
"overdueDaysSupplied": true,
"eventKind": "recorded",
"entitlementDetermined": false,
"liabilityDetermined": false
}
],
"instructions": [
{
"id": "SI-1",
"date": "2026-11-04",
"issuer": "Architect",
"location": "",
"activityId": "A-2",
"referencedActivities": [
"A-2"
],
"text": "Change opening sizes",
"change": true,
"changeSupplied": true,
"eventKind": "recorded",
"entitlementDetermined": false,
"liabilityDetermined": false
}
],
"deliveries": [
{
"id": "DEL-1",
"material": "Formwork",
"expected": "2026-11-08",
"delivered": "",
"quantityExpected": 20,
"quantityExpectedSupplied": true,
"quantityDelivered": 0,
"quantityDeliveredSupplied": false,
"activityId": "",
"location": "",
"supplier": "",
"missingDelivery": true,
"lateDays": 2,
"lateDaysSupplied": true,
"quantityShort": false,
"eventKind": "recorded_gap",
"impactInferred": false,
"entitlementDetermined": false,
"liabilityDetermined": false
}
],
"changes": [
{
"instructionId": "SI-1",
"date": "2026-11-04",
"issuer": "Architect",
"activityId": "A-2",
"referencedActivities": [
"A-2"
],
"scopeMatchCount": 1,
"scopeIds": [
"SC-1"
],
"linkedActivityCount": 1,
"inferredDelayDays": 3,
"inferredDelayDaysSupplied": true,
"recordedChange": true,
"impactInferred": true,
"entitlementDetermined": false,
"liabilityDetermined": false,
"note": "Linked schedule deviations are inferred from baseline/actual dates and are not a contractual entitlement."
}
],
"delayInvented": false,
"entitlementDetermined": false,
"liabilityDetermined": false,
"findings": [
{
"kind": "observation",
"code": "inferred_impact",
"subject": "",
"detail": "Some delay impacts were inferred from baseline versus actual dates. They are labeled inferred and are not entitlement determinations."
},
{
"kind": "observation",
"code": "rfi_unresolved",
"subject": "RFI-1",
"detail": "An RFI remains unresolved after its due date in the supplied records."
},
{
"kind": "observation",
"code": "delivery_missing",
"subject": "DEL-1",
"detail": "An expected delivery has no delivered date in the supplied records."
}
],
"limitations": [
"Daily reports, schedules, RFIs, instructions, and deliveries are copied only from labeled fields supplied by the caller.",
"Schedule deviations use only supplied baseline and actual dates. Missing dates are not invented.",
"A recorded delay event is taken from supplied delay rows or explicit daily-report delay wording. Inferred impact is labeled separately.",
"Contractual entitlement and liability are never determined.",
"Unresolved RFIs and missing deliveries are judged only against supplied due/expected dates and statuses."
]
}cURL
curl -i -X POST "https://brainiac.software/api/v1/construction-site-operations/report" \
-H 'content-type: application/json' \
-H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
--data-binary @- <<'JSON'
{
"asOf": "2026-11-10",
"activities": [
{
"id": "A-1",
"name": "Foundations",
"baselineStart": "2026-11-01",
"baselineEnd": "2026-11-05",
"actualStart": "2026-11-03",
"actualEnd": "2026-11-08",
"responsible": "Sub A"
},
{
"id": "A-2",
"name": "Frame",
"baselineEnd": "2026-11-12",
"actualEnd": "2026-11-15"
}
],
"reports": [
{
"id": "DR-1",
"date": "2026-11-03",
"location": "Grid A",
"author": "PM",
"workforce": 12,
"text": "Foundations delayed by rain",
"activityId": "A-1"
}
],
"delays": [
{
"id": "D-1",
"date": "2026-11-03",
"activityId": "A-1",
"days": 2,
"reason": "rain",
"recorded": true
}
],
"rfis": [
{
"id": "RFI-1",
"subject": "Beam detail",
"asked": "2026-11-01",
"due": "2026-11-05",
"status": "open",
"asker": "Contractor",
"activityId": "A-2"
}
],
"instructions": [
{
"id": "SI-1",
"date": "2026-11-04",
"issuer": "Architect",
"activityId": "A-2",
"change": true,
"text": "Change opening sizes"
}
],
"deliveries": [
{
"id": "DEL-1",
"material": "Formwork",
"expected": "2026-11-08",
"quantityExpected": 20
}
],
"scope": [
{
"id": "SC-1",
"activityId": "A-2",
"text": "Install frame and openings"
}
]
}
JSON