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.

POSThttps://brainiac.software/api/v1/construction-site-operations/daily-report-parse$0.04 USDC

Parse 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

FieldRequiredNotes
textNostring
jsonNostring
csvNostring
fileNoobject; Object
reportsNoarray; Array
activitiesNoarray; Array
delaysNoarray; Array
rfisNoarray; Array
instructionsNoarray; Array
deliveriesNoarray; Array
scopeNoarray; Array
asOfNostring

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"
}
JSON
POSThttps://brainiac.software/api/v1/construction-site-operations/progress-analyze$0.05 USDC

Analyze site progress

Compare supplied baseline and actual activity dates to identify schedule deviations. Inferred impact is labeled and is not an entitlement determination.

Body

FieldRequiredNotes
textNostring
jsonNostring
csvNostring
fileNoobject; Object
reportsNoarray; Array
activitiesNoarray; Array
delaysNoarray; Array
rfisNoarray; Array
instructionsNoarray; Array
deliveriesNoarray; Array
scopeNoarray; Array
asOfNostring

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"
    }
  ]
}
JSON
POSThttps://brainiac.software/api/v1/construction-site-operations/delay-event-detect$0.04 USDC

Detect 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

FieldRequiredNotes
textNostring
jsonNostring
csvNostring
fileNoobject; Object
reportsNoarray; Array
activitiesNoarray; Array
delaysNoarray; Array
rfisNoarray; Array
instructionsNoarray; Array
deliveriesNoarray; Array
scopeNoarray; Array
asOfNostring

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"
    }
  ]
}
JSON
POSThttps://brainiac.software/api/v1/construction-site-operations/request-for-information-track$0.04 USDC

Track requests for information

Track RFI asked/due/answered dates and identify unresolved or overdue items from supplied statuses. Contractual entitlement is not decided.

Body

FieldRequiredNotes
textNostring
jsonNostring
csvNostring
fileNoobject; Object
reportsNoarray; Array
activitiesNoarray; Array
delaysNoarray; Array
rfisNoarray; Array
instructionsNoarray; Array
deliveriesNoarray; Array
scopeNoarray; Array
asOfNostring

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"
    }
  ]
}
JSON
POSThttps://brainiac.software/api/v1/construction-site-operations/instruction-extract$0.04 USDC

Extract site instructions

Extract dates, issuers, locations, referenced activities, and change flags from supplied site instructions.

Body

FieldRequiredNotes
textNostring
jsonNostring
csvNostring
fileNoobject; Object
reportsNoarray; Array
activitiesNoarray; Array
delaysNoarray; Array
rfisNoarray; Array
instructionsNoarray; Array
deliveriesNoarray; Array
scopeNoarray; Array
asOfNostring

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"
    }
  ]
}
JSON
POSThttps://brainiac.software/api/v1/construction-site-operations/material-delivery-reconcile$0.04 USDC

Reconcile material deliveries

Reconcile expected and delivered material records, flagging missing deliveries and short quantities from supplied dates and counts.

Body

FieldRequiredNotes
textNostring
jsonNostring
csvNostring
fileNoobject; Object
reportsNoarray; Array
activitiesNoarray; Array
delaysNoarray; Array
rfisNoarray; Array
instructionsNoarray; Array
deliveriesNoarray; Array
scopeNoarray; Array
asOfNostring

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"
    }
  ]
}
JSON
POSThttps://brainiac.software/api/v1/construction-site-operations/change-impact$0.05 USDC

Compare 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

FieldRequiredNotes
textNostring
jsonNostring
csvNostring
fileNoobject; Object
reportsNoarray; Array
activitiesNoarray; Array
delaysNoarray; Array
rfisNoarray; Array
instructionsNoarray; Array
deliveriesNoarray; Array
scopeNoarray; Array
asOfNostring

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"
    }
  ]
}
JSON
POSThttps://brainiac.software/api/v1/construction-site-operations/report$0.12 USDC

Report site operations

Combine daily reports, progress deviations, recorded and inferred delays, RFIs, instructions, deliveries, and change comparisons from supplied site records.

Body

FieldRequiredNotes
textNostring
jsonNostring
csvNostring
fileNoobject; Object
reportsNoarray; Array
activitiesNoarray; Array
delaysNoarray; Array
rfisNoarray; Array
instructionsNoarray; Array
deliveriesNoarray; Array
scopeNoarray; Array
asOfNostring

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