https://www.brainiac.software/api/v1/solar-battery/generation-deviation-detect$0.04 USDCDetect solar generation deviations
Compare supplied solar generation kWh to expected kWh and flag deviations. Missing expected values are not invented.
Body
| Field | Required | Notes |
|---|---|---|
text | No | string |
json | No | string |
csv | No | string |
file | No | object; Object |
generation | No | array; Array |
panels | No | array; Array |
inverterEvents | No | array; Array |
batteryCycles | No | array; Array |
batteryHealth | No | array; Array |
warranties | No | array; Array |
efficiencyPeriods | No | array; Array |
consumption | No | array; Array |
assets | No | array; Array |
faultMap | No | array; Array |
asOf | No | string |
Request exampleJSON
{
"asOf": "2026-11-04T21:00:00.000Z",
"generation": [
{
"id": "G1",
"assetId": "SITE-A",
"at": "2026-11-01",
"kwh": 180,
"expectedKwh": 200,
"irradiance": 4.2,
"source": "Caller-supplied meter"
},
{
"id": "G2",
"assetId": "SITE-A",
"at": "2026-11-02",
"kwh": 210,
"expectedKwh": 205,
"source": "Caller-supplied meter"
}
]
}Response exampleJSON
{
"checkedAt": "2026-11-04T21:00:00.000Z",
"status": "detected",
"pointCount": 2,
"deviationCount": 0,
"items": [
{
"id": "G1",
"assetId": "SITE-A",
"at": "2026-11-01",
"kwh": 180,
"kwhSupplied": true,
"expectedKwh": 200,
"expectedKwhSupplied": true,
"deviationKwh": -20,
"deviationKwhSupplied": true,
"deviationPct": -10,
"deviationPctSupplied": true,
"irradiance": 4.2,
"irradianceSupplied": true,
"source": "Caller-supplied meter",
"cloudPlatformUsed": false
},
{
"id": "G2",
"assetId": "SITE-A",
"at": "2026-11-02",
"kwh": 210,
"kwhSupplied": true,
"expectedKwh": 205,
"expectedKwhSupplied": true,
"deviationKwh": 5,
"deviationKwhSupplied": true,
"deviationPct": 2.439,
"deviationPctSupplied": true,
"irradiance": 0,
"irradianceSupplied": false,
"source": "Caller-supplied meter",
"cloudPlatformUsed": false
}
],
"paidProviderUsed": false,
"apiKeyRequired": false,
"cloudPlatformUsed": false,
"warrantyCoverageDetermined": false,
"findings": [],
"limitations": [
"Generation, panel, inverter, battery, warranty, efficiency, consumption, and asset records are copied only from labeled fields supplied by the caller.",
"No inverter cloud platform or paid energy monitoring service is used and no API key is required.",
"Degradation, SOH, efficiency, and deviation metrics use only supplied measurements. Missing values are not invented.",
"Inverter fault labels come from caller-supplied fault maps or simple keyword signals in supplied messages. Manufacturer cloud catalogs are not queried.",
"Warranty comparisons use only caller-supplied warranty thresholds and measured values. Legal warranty coverage is not determined."
]
}cURL
curl -i -X POST "https://www.brainiac.software/api/v1/solar-battery/generation-deviation-detect" \
-H 'content-type: application/json' \
-H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
--data-binary @- <<'JSON'
{
"asOf": "2026-11-04T21:00:00.000Z",
"generation": [
{
"id": "G1",
"assetId": "SITE-A",
"at": "2026-11-01",
"kwh": 180,
"expectedKwh": 200,
"irradiance": 4.2,
"source": "Caller-supplied meter"
},
{
"id": "G2",
"assetId": "SITE-A",
"at": "2026-11-02",
"kwh": 210,
"expectedKwh": 205,
"source": "Caller-supplied meter"
}
]
}
JSONhttps://www.brainiac.software/api/v1/solar-battery/panel-degradation-estimate$0.04 USDCEstimate solar panel degradation
Estimate panel degradation from supplied nameplate/prior and measured capacity over time. Missing baselines are not invented.
Body
| Field | Required | Notes |
|---|---|---|
text | No | string |
json | No | string |
csv | No | string |
file | No | object; Object |
generation | No | array; Array |
panels | No | array; Array |
inverterEvents | No | array; Array |
batteryCycles | No | array; Array |
batteryHealth | No | array; Array |
warranties | No | array; Array |
efficiencyPeriods | No | array; Array |
consumption | No | array; Array |
assets | No | array; Array |
faultMap | No | array; Array |
asOf | No | string |
Request exampleJSON
{
"asOf": "2026-11-04T21:00:00.000Z",
"panels": [
{
"id": "P1",
"assetId": "SITE-A",
"name": "Array 1",
"installedAt": "2022-01-01",
"nameplateKw": 50,
"measuredKw": 46.5,
"measuredAt": "2026-11-01",
"source": "Caller-supplied IV curve"
}
]
}Response exampleJSON
{
"checkedAt": "2026-11-04T21:00:00.000Z",
"status": "estimated",
"panelCount": 1,
"items": [
{
"id": "P1",
"assetId": "SITE-A",
"name": "Array 1",
"nameplateKw": 50,
"nameplateKwSupplied": true,
"measuredKw": 46.5,
"measuredKwSupplied": true,
"priorMeasuredKw": 0,
"priorMeasuredKwSupplied": false,
"degradationPct": 7,
"degradationPctSupplied": true,
"years": 4.8323,
"yearsSupplied": true,
"annualDegradationPct": 1.4486,
"annualDegradationPctSupplied": true,
"source": "Caller-supplied IV curve",
"cloudPlatformUsed": false
}
],
"paidProviderUsed": false,
"apiKeyRequired": false,
"cloudPlatformUsed": false,
"warrantyCoverageDetermined": false,
"findings": [],
"limitations": [
"Generation, panel, inverter, battery, warranty, efficiency, consumption, and asset records are copied only from labeled fields supplied by the caller.",
"No inverter cloud platform or paid energy monitoring service is used and no API key is required.",
"Degradation, SOH, efficiency, and deviation metrics use only supplied measurements. Missing values are not invented.",
"Inverter fault labels come from caller-supplied fault maps or simple keyword signals in supplied messages. Manufacturer cloud catalogs are not queried.",
"Warranty comparisons use only caller-supplied warranty thresholds and measured values. Legal warranty coverage is not determined."
]
}cURL
curl -i -X POST "https://www.brainiac.software/api/v1/solar-battery/panel-degradation-estimate" \
-H 'content-type: application/json' \
-H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
--data-binary @- <<'JSON'
{
"asOf": "2026-11-04T21:00:00.000Z",
"panels": [
{
"id": "P1",
"assetId": "SITE-A",
"name": "Array 1",
"installedAt": "2022-01-01",
"nameplateKw": 50,
"measuredKw": 46.5,
"measuredAt": "2026-11-01",
"source": "Caller-supplied IV curve"
}
]
}
JSONhttps://www.brainiac.software/api/v1/solar-battery/inverter-fault-classify$0.04 USDCClassify solar inverter faults
Classify supplied inverter log events using a caller fault map or keyword signals in supplied messages. Cloud catalogs are not queried.
Body
| Field | Required | Notes |
|---|---|---|
text | No | string |
json | No | string |
csv | No | string |
file | No | object; Object |
generation | No | array; Array |
panels | No | array; Array |
inverterEvents | No | array; Array |
batteryCycles | No | array; Array |
batteryHealth | No | array; Array |
warranties | No | array; Array |
efficiencyPeriods | No | array; Array |
consumption | No | array; Array |
assets | No | array; Array |
faultMap | No | array; Array |
asOf | No | string |
Request exampleJSON
{
"asOf": "2026-11-04T21:00:00.000Z",
"inverterEvents": [
{
"id": "E1",
"assetId": "SITE-A",
"at": "2026-11-01T10:00:00.000Z",
"code": "F01",
"message": "Grid overvoltage",
"severity": "warn",
"source": "Caller-supplied inverter log"
},
{
"id": "E2",
"assetId": "SITE-A",
"at": "2026-11-01T11:00:00.000Z",
"code": "ISO",
"message": "Isolation fault detected",
"severity": "fault",
"source": "Caller-supplied inverter log"
}
],
"faultMap": [
{
"code": "F01",
"label": "Grid overvoltage",
"category": "grid"
}
]
}Response exampleJSON
{
"checkedAt": "2026-11-04T21:00:00.000Z",
"status": "classified",
"eventCount": 2,
"categories": [
{
"category": "grid",
"count": 1
},
{
"category": "insulation",
"count": 1
}
],
"items": [
{
"id": "E1",
"assetId": "SITE-A",
"at": "2026-11-01T10:00:00.000Z",
"code": "F01",
"message": "Grid overvoltage",
"severity": "warn",
"category": "grid",
"label": "Grid overvoltage",
"method": "caller_fault_map",
"source": "Caller-supplied inverter log",
"cloudPlatformUsed": false
},
{
"id": "E2",
"assetId": "SITE-A",
"at": "2026-11-01T11:00:00.000Z",
"code": "ISO",
"message": "Isolation fault detected",
"severity": "fault",
"category": "insulation",
"label": "Ground/isolation signal in supplied text",
"method": "keyword",
"source": "Caller-supplied inverter log",
"cloudPlatformUsed": false
}
],
"paidProviderUsed": false,
"apiKeyRequired": false,
"cloudPlatformUsed": false,
"warrantyCoverageDetermined": false,
"findings": [],
"limitations": [
"Generation, panel, inverter, battery, warranty, efficiency, consumption, and asset records are copied only from labeled fields supplied by the caller.",
"No inverter cloud platform or paid energy monitoring service is used and no API key is required.",
"Degradation, SOH, efficiency, and deviation metrics use only supplied measurements. Missing values are not invented.",
"Inverter fault labels come from caller-supplied fault maps or simple keyword signals in supplied messages. Manufacturer cloud catalogs are not queried.",
"Warranty comparisons use only caller-supplied warranty thresholds and measured values. Legal warranty coverage is not determined."
]
}cURL
curl -i -X POST "https://www.brainiac.software/api/v1/solar-battery/inverter-fault-classify" \
-H 'content-type: application/json' \
-H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
--data-binary @- <<'JSON'
{
"asOf": "2026-11-04T21:00:00.000Z",
"inverterEvents": [
{
"id": "E1",
"assetId": "SITE-A",
"at": "2026-11-01T10:00:00.000Z",
"code": "F01",
"message": "Grid overvoltage",
"severity": "warn",
"source": "Caller-supplied inverter log"
},
{
"id": "E2",
"assetId": "SITE-A",
"at": "2026-11-01T11:00:00.000Z",
"code": "ISO",
"message": "Isolation fault detected",
"severity": "fault",
"source": "Caller-supplied inverter log"
}
],
"faultMap": [
{
"code": "F01",
"label": "Grid overvoltage",
"category": "grid"
}
]
}
JSONhttps://www.brainiac.software/api/v1/solar-battery/cycle-aging-analyze$0.04 USDCAnalyze battery cycle aging
Analyze supplied battery cycle counts, depth of discharge, and throughput. Rated cycle life is used only when supplied.
Body
| Field | Required | Notes |
|---|---|---|
text | No | string |
json | No | string |
csv | No | string |
file | No | object; Object |
generation | No | array; Array |
panels | No | array; Array |
inverterEvents | No | array; Array |
batteryCycles | No | array; Array |
batteryHealth | No | array; Array |
warranties | No | array; Array |
efficiencyPeriods | No | array; Array |
consumption | No | array; Array |
assets | No | array; Array |
faultMap | No | array; Array |
asOf | No | string |
Request exampleJSON
{
"asOf": "2026-11-04T21:00:00.000Z",
"batteryCycles": [
{
"id": "C1",
"assetId": "SITE-A",
"at": "2026-01-01",
"cycleCount": 400,
"depthOfDischargePct": 80,
"throughputKwh": 12000,
"source": "Caller-supplied BMS"
},
{
"id": "C2",
"assetId": "SITE-A",
"at": "2026-11-01",
"cycleCount": 520,
"depthOfDischargePct": 75,
"throughputKwh": 3500,
"source": "Caller-supplied BMS"
}
],
"batteryHealth": [
{
"id": "H1",
"assetId": "SITE-A",
"ratedCycles": 6000,
"cycleCount": 520,
"source": "Caller-supplied BMS"
}
]
}Response exampleJSON
{
"checkedAt": "2026-11-04T21:00:00.000Z",
"status": "analyzed",
"assetCount": 1,
"items": [
{
"assetId": "SITE-A",
"observationCount": 2,
"latestCycleCount": 520,
"latestCycleCountSupplied": true,
"cycleDelta": 120,
"cycleDeltaSupplied": true,
"averageDodPct": 77.5,
"averageDodPctSupplied": true,
"throughputKwh": 15500,
"throughputKwhSupplied": true,
"ratedCycles": 6000,
"ratedCyclesSupplied": true,
"cycleLifeUsedPct": 8.6667,
"cycleLifeUsedPctSupplied": true,
"cloudPlatformUsed": false
}
],
"paidProviderUsed": false,
"apiKeyRequired": false,
"cloudPlatformUsed": false,
"warrantyCoverageDetermined": false,
"findings": [],
"limitations": [
"Generation, panel, inverter, battery, warranty, efficiency, consumption, and asset records are copied only from labeled fields supplied by the caller.",
"No inverter cloud platform or paid energy monitoring service is used and no API key is required.",
"Degradation, SOH, efficiency, and deviation metrics use only supplied measurements. Missing values are not invented.",
"Inverter fault labels come from caller-supplied fault maps or simple keyword signals in supplied messages. Manufacturer cloud catalogs are not queried.",
"Warranty comparisons use only caller-supplied warranty thresholds and measured values. Legal warranty coverage is not determined."
]
}cURL
curl -i -X POST "https://www.brainiac.software/api/v1/solar-battery/cycle-aging-analyze" \
-H 'content-type: application/json' \
-H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
--data-binary @- <<'JSON'
{
"asOf": "2026-11-04T21:00:00.000Z",
"batteryCycles": [
{
"id": "C1",
"assetId": "SITE-A",
"at": "2026-01-01",
"cycleCount": 400,
"depthOfDischargePct": 80,
"throughputKwh": 12000,
"source": "Caller-supplied BMS"
},
{
"id": "C2",
"assetId": "SITE-A",
"at": "2026-11-01",
"cycleCount": 520,
"depthOfDischargePct": 75,
"throughputKwh": 3500,
"source": "Caller-supplied BMS"
}
],
"batteryHealth": [
{
"id": "H1",
"assetId": "SITE-A",
"ratedCycles": 6000,
"cycleCount": 520,
"source": "Caller-supplied BMS"
}
]
}
JSONhttps://www.brainiac.software/api/v1/solar-battery/state-of-health-estimate$0.04 USDCEstimate battery state of health
Estimate battery SOH from supplied sohPct or measured versus nameplate energy. Missing capacities are not invented.
Body
| Field | Required | Notes |
|---|---|---|
text | No | string |
json | No | string |
csv | No | string |
file | No | object; Object |
generation | No | array; Array |
panels | No | array; Array |
inverterEvents | No | array; Array |
batteryCycles | No | array; Array |
batteryHealth | No | array; Array |
warranties | No | array; Array |
efficiencyPeriods | No | array; Array |
consumption | No | array; Array |
assets | No | array; Array |
faultMap | No | array; Array |
asOf | No | string |
Request exampleJSON
{
"asOf": "2026-11-04T21:00:00.000Z",
"batteryHealth": [
{
"id": "H1",
"assetId": "SITE-A",
"name": "Battery A",
"nameplateKwh": 60,
"measuredKwh": 54,
"cycleCount": 520,
"ratedCycles": 6000,
"measuredAt": "2026-11-01",
"source": "Caller-supplied BMS"
}
]
}Response exampleJSON
{
"checkedAt": "2026-11-04T21:00:00.000Z",
"status": "estimated",
"assetCount": 1,
"items": [
{
"id": "H1",
"assetId": "SITE-A",
"name": "Battery A",
"nameplateKwh": 60,
"nameplateKwhSupplied": true,
"measuredKwh": 54,
"measuredKwhSupplied": true,
"sohPct": 90,
"sohPctSupplied": true,
"cycleCount": 520,
"cycleCountSupplied": true,
"ratedCycles": 6000,
"ratedCyclesSupplied": true,
"cycleLifeUsedPct": 8.6667,
"cycleLifeUsedPctSupplied": true,
"measuredAt": "2026-11-01",
"source": "Caller-supplied BMS",
"cloudPlatformUsed": false
}
],
"paidProviderUsed": false,
"apiKeyRequired": false,
"cloudPlatformUsed": false,
"warrantyCoverageDetermined": false,
"findings": [],
"limitations": [
"Generation, panel, inverter, battery, warranty, efficiency, consumption, and asset records are copied only from labeled fields supplied by the caller.",
"No inverter cloud platform or paid energy monitoring service is used and no API key is required.",
"Degradation, SOH, efficiency, and deviation metrics use only supplied measurements. Missing values are not invented.",
"Inverter fault labels come from caller-supplied fault maps or simple keyword signals in supplied messages. Manufacturer cloud catalogs are not queried.",
"Warranty comparisons use only caller-supplied warranty thresholds and measured values. Legal warranty coverage is not determined."
]
}cURL
curl -i -X POST "https://www.brainiac.software/api/v1/solar-battery/state-of-health-estimate" \
-H 'content-type: application/json' \
-H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
--data-binary @- <<'JSON'
{
"asOf": "2026-11-04T21:00:00.000Z",
"batteryHealth": [
{
"id": "H1",
"assetId": "SITE-A",
"name": "Battery A",
"nameplateKwh": 60,
"measuredKwh": 54,
"cycleCount": 520,
"ratedCycles": 6000,
"measuredAt": "2026-11-01",
"source": "Caller-supplied BMS"
}
]
}
JSONhttps://www.brainiac.software/api/v1/solar-battery/warranty-threshold-check$0.03 USDCCheck battery warranty thresholds
Compare supplied SOH, cycles, and calendar age to caller-supplied warranty thresholds. Legal warranty coverage is not determined.
Body
| Field | Required | Notes |
|---|---|---|
text | No | string |
json | No | string |
csv | No | string |
file | No | object; Object |
generation | No | array; Array |
panels | No | array; Array |
inverterEvents | No | array; Array |
batteryCycles | No | array; Array |
batteryHealth | No | array; Array |
warranties | No | array; Array |
efficiencyPeriods | No | array; Array |
consumption | No | array; Array |
assets | No | array; Array |
faultMap | No | array; Array |
asOf | No | string |
Request exampleJSON
{
"asOf": "2026-11-04T21:00:00.000Z",
"batteryHealth": [
{
"id": "H1",
"assetId": "SITE-A",
"nameplateKwh": 60,
"measuredKwh": 54,
"cycleCount": 520,
"ratedCycles": 6000,
"source": "Caller-supplied BMS"
}
],
"warranties": [
{
"id": "W1",
"assetId": "SITE-A",
"kind": "capacity",
"minSohPct": 70,
"maxCycles": 6000,
"maxCalendarYears": 10,
"installedAt": "2022-01-01",
"asOf": "2026-11-04",
"source": "Caller-supplied warranty extract"
}
]
}Response exampleJSON
{
"checkedAt": "2026-11-04T21:00:00.000Z",
"status": "checked",
"warrantyCount": 1,
"items": [
{
"id": "W1",
"assetId": "SITE-A",
"kind": "capacity",
"measuredSohPct": 90,
"measuredSohPctSupplied": true,
"minSohPct": 70,
"minSohPctSupplied": true,
"sohWithinThreshold": true,
"sohWithinThresholdSupplied": true,
"cycleCount": 520,
"cycleCountSupplied": true,
"maxCycles": 6000,
"maxCyclesSupplied": true,
"cyclesWithinThreshold": true,
"cyclesWithinThresholdSupplied": true,
"ageYears": 4.8405,
"ageYearsSupplied": true,
"maxCalendarYears": 10,
"maxCalendarYearsSupplied": true,
"calendarWithinThreshold": true,
"calendarWithinThresholdSupplied": true,
"source": "Caller-supplied warranty extract",
"warrantyCoverageDetermined": false,
"cloudPlatformUsed": false
}
],
"warrantyCoverageDetermined": false,
"paidProviderUsed": false,
"apiKeyRequired": false,
"cloudPlatformUsed": false,
"findings": [],
"limitations": [
"Generation, panel, inverter, battery, warranty, efficiency, consumption, and asset records are copied only from labeled fields supplied by the caller.",
"No inverter cloud platform or paid energy monitoring service is used and no API key is required.",
"Degradation, SOH, efficiency, and deviation metrics use only supplied measurements. Missing values are not invented.",
"Inverter fault labels come from caller-supplied fault maps or simple keyword signals in supplied messages. Manufacturer cloud catalogs are not queried.",
"Warranty comparisons use only caller-supplied warranty thresholds and measured values. Legal warranty coverage is not determined."
]
}cURL
curl -i -X POST "https://www.brainiac.software/api/v1/solar-battery/warranty-threshold-check" \
-H 'content-type: application/json' \
-H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
--data-binary @- <<'JSON'
{
"asOf": "2026-11-04T21:00:00.000Z",
"batteryHealth": [
{
"id": "H1",
"assetId": "SITE-A",
"nameplateKwh": 60,
"measuredKwh": 54,
"cycleCount": 520,
"ratedCycles": 6000,
"source": "Caller-supplied BMS"
}
],
"warranties": [
{
"id": "W1",
"assetId": "SITE-A",
"kind": "capacity",
"minSohPct": 70,
"maxCycles": 6000,
"maxCalendarYears": 10,
"installedAt": "2022-01-01",
"asOf": "2026-11-04",
"source": "Caller-supplied warranty extract"
}
]
}
JSONhttps://www.brainiac.software/api/v1/solar-battery/round-trip-efficiency$0.03 USDCCalculate battery round-trip efficiency
Calculate round-trip efficiency from supplied charge and discharge energy for each period.
Body
| Field | Required | Notes |
|---|---|---|
text | No | string |
json | No | string |
csv | No | string |
file | No | object; Object |
generation | No | array; Array |
panels | No | array; Array |
inverterEvents | No | array; Array |
batteryCycles | No | array; Array |
batteryHealth | No | array; Array |
warranties | No | array; Array |
efficiencyPeriods | No | array; Array |
consumption | No | array; Array |
assets | No | array; Array |
faultMap | No | array; Array |
asOf | No | string |
Request exampleJSON
{
"asOf": "2026-11-04T21:00:00.000Z",
"efficiencyPeriods": [
{
"id": "R1",
"assetId": "SITE-A",
"periodStart": "2026-10-01",
"periodEnd": "2026-10-31",
"chargeKwh": 1000,
"dischargeKwh": 920,
"source": "Caller-supplied meter"
}
]
}Response exampleJSON
{
"checkedAt": "2026-11-04T21:00:00.000Z",
"status": "calculated",
"periodCount": 1,
"items": [
{
"id": "R1",
"assetId": "SITE-A",
"periodStart": "2026-10-01",
"periodEnd": "2026-10-31",
"chargeKwh": 1000,
"chargeKwhSupplied": true,
"dischargeKwh": 920,
"dischargeKwhSupplied": true,
"roundTripEfficiencyPct": 92,
"roundTripEfficiencyPctSupplied": true,
"source": "Caller-supplied meter",
"cloudPlatformUsed": false
}
],
"paidProviderUsed": false,
"apiKeyRequired": false,
"cloudPlatformUsed": false,
"warrantyCoverageDetermined": false,
"findings": [],
"limitations": [
"Generation, panel, inverter, battery, warranty, efficiency, consumption, and asset records are copied only from labeled fields supplied by the caller.",
"No inverter cloud platform or paid energy monitoring service is used and no API key is required.",
"Degradation, SOH, efficiency, and deviation metrics use only supplied measurements. Missing values are not invented.",
"Inverter fault labels come from caller-supplied fault maps or simple keyword signals in supplied messages. Manufacturer cloud catalogs are not queried.",
"Warranty comparisons use only caller-supplied warranty thresholds and measured values. Legal warranty coverage is not determined."
]
}cURL
curl -i -X POST "https://www.brainiac.software/api/v1/solar-battery/round-trip-efficiency" \
-H 'content-type: application/json' \
-H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
--data-binary @- <<'JSON'
{
"asOf": "2026-11-04T21:00:00.000Z",
"efficiencyPeriods": [
{
"id": "R1",
"assetId": "SITE-A",
"periodStart": "2026-10-01",
"periodEnd": "2026-10-31",
"chargeKwh": 1000,
"dischargeKwh": 920,
"source": "Caller-supplied meter"
}
]
}
JSONhttps://www.brainiac.software/api/v1/solar-battery/storage-self-consumption$0.04 USDCCalculate solar storage self-consumption
Calculate self-consumption and self-sufficiency from supplied generation, load, and optional import/export energy.
Body
| Field | Required | Notes |
|---|---|---|
text | No | string |
json | No | string |
csv | No | string |
file | No | object; Object |
generation | No | array; Array |
panels | No | array; Array |
inverterEvents | No | array; Array |
batteryCycles | No | array; Array |
batteryHealth | No | array; Array |
warranties | No | array; Array |
efficiencyPeriods | No | array; Array |
consumption | No | array; Array |
assets | No | array; Array |
faultMap | No | array; Array |
asOf | No | string |
Request exampleJSON
{
"asOf": "2026-11-04T21:00:00.000Z",
"consumption": [
{
"id": "N1",
"assetId": "SITE-A",
"at": "2026-11-01",
"generationKwh": 180,
"loadKwh": 120,
"gridExportKwh": 50,
"gridImportKwh": 10,
"source": "Caller-supplied"
},
{
"id": "N2",
"assetId": "SITE-A",
"at": "2026-11-02",
"generationKwh": 210,
"loadKwh": 150,
"gridExportKwh": 55,
"gridImportKwh": 5,
"source": "Caller-supplied"
}
]
}Response exampleJSON
{
"checkedAt": "2026-11-04T21:00:00.000Z",
"status": "calculated",
"assetCount": 1,
"items": [
{
"assetId": "SITE-A",
"observationCount": 2,
"generationKwh": 390,
"generationKwhSupplied": true,
"loadKwh": 270,
"loadKwhSupplied": true,
"gridImportKwh": 15,
"gridImportKwhSupplied": true,
"gridExportKwh": 105,
"gridExportKwhSupplied": true,
"selfConsumedKwh": 270,
"selfConsumedKwhSupplied": true,
"selfConsumptionPct": 69.2308,
"selfConsumptionPctSupplied": true,
"selfSufficiencyPct": 100,
"selfSufficiencyPctSupplied": true,
"cloudPlatformUsed": false
}
],
"paidProviderUsed": false,
"apiKeyRequired": false,
"cloudPlatformUsed": false,
"warrantyCoverageDetermined": false,
"findings": [],
"limitations": [
"Generation, panel, inverter, battery, warranty, efficiency, consumption, and asset records are copied only from labeled fields supplied by the caller.",
"No inverter cloud platform or paid energy monitoring service is used and no API key is required.",
"Degradation, SOH, efficiency, and deviation metrics use only supplied measurements. Missing values are not invented.",
"Inverter fault labels come from caller-supplied fault maps or simple keyword signals in supplied messages. Manufacturer cloud catalogs are not queried.",
"Warranty comparisons use only caller-supplied warranty thresholds and measured values. Legal warranty coverage is not determined."
]
}cURL
curl -i -X POST "https://www.brainiac.software/api/v1/solar-battery/storage-self-consumption" \
-H 'content-type: application/json' \
-H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
--data-binary @- <<'JSON'
{
"asOf": "2026-11-04T21:00:00.000Z",
"consumption": [
{
"id": "N1",
"assetId": "SITE-A",
"at": "2026-11-01",
"generationKwh": 180,
"loadKwh": 120,
"gridExportKwh": 50,
"gridImportKwh": 10,
"source": "Caller-supplied"
},
{
"id": "N2",
"assetId": "SITE-A",
"at": "2026-11-02",
"generationKwh": 210,
"loadKwh": 150,
"gridExportKwh": 55,
"gridImportKwh": 5,
"source": "Caller-supplied"
}
]
}
JSONhttps://www.brainiac.software/api/v1/solar-battery/asset-compare$0.05 USDCCompare distributed energy assets
Compare supplied solar/storage assets on generation deviation, SOH, efficiency, and self-consumption metrics derived only from caller records.
Body
| Field | Required | Notes |
|---|---|---|
text | No | string |
json | No | string |
csv | No | string |
file | No | object; Object |
generation | No | array; Array |
panels | No | array; Array |
inverterEvents | No | array; Array |
batteryCycles | No | array; Array |
batteryHealth | No | array; Array |
warranties | No | array; Array |
efficiencyPeriods | No | array; Array |
consumption | No | array; Array |
assets | No | array; Array |
faultMap | No | array; Array |
asOf | No | string |
Request exampleJSON
{
"asOf": "2026-11-04T21:00:00.000Z",
"assets": [
{
"id": "SITE-A",
"name": "Rooftop A",
"kind": "solar-storage",
"capacityKw": 50,
"capacityKwh": 60,
"region": "NL"
},
{
"id": "SITE-B",
"name": "Rooftop B",
"kind": "solar-storage",
"capacityKw": 40,
"capacityKwh": 40,
"region": "NL"
}
],
"generation": [
{
"id": "G1",
"assetId": "SITE-A",
"at": "2026-11-01",
"kwh": 180,
"expectedKwh": 200,
"source": "Caller-supplied"
},
{
"id": "G3",
"assetId": "SITE-B",
"at": "2026-11-01",
"kwh": 140,
"expectedKwh": 150,
"source": "Caller-supplied"
}
],
"batteryHealth": [
{
"id": "H1",
"assetId": "SITE-A",
"nameplateKwh": 60,
"measuredKwh": 54,
"source": "Caller-supplied"
}
],
"consumption": [
{
"id": "N1",
"assetId": "SITE-A",
"at": "2026-11-01",
"generationKwh": 180,
"loadKwh": 120,
"source": "Caller-supplied"
}
]
}Response exampleJSON
{
"checkedAt": "2026-11-04T21:00:00.000Z",
"status": "compared",
"assetCount": 2,
"items": [
{
"id": "SITE-A",
"name": "Rooftop A",
"kind": "solar-storage",
"region": "NL",
"capacityKw": 50,
"capacityKwSupplied": true,
"capacityKwh": 60,
"capacityKwhSupplied": true,
"generationPointCount": 1,
"averageDeviationPct": -10,
"averageDeviationPctSupplied": true,
"sohPct": 90,
"sohPctSupplied": true,
"averageRoundTripEfficiencyPct": 0,
"averageRoundTripEfficiencyPctSupplied": false,
"selfConsumptionPct": 66.6667,
"selfConsumptionPctSupplied": true,
"source": "",
"cloudPlatformUsed": false
},
{
"id": "SITE-B",
"name": "Rooftop B",
"kind": "solar-storage",
"region": "NL",
"capacityKw": 40,
"capacityKwSupplied": true,
"capacityKwh": 40,
"capacityKwhSupplied": true,
"generationPointCount": 1,
"averageDeviationPct": -6.6667,
"averageDeviationPctSupplied": true,
"sohPct": 0,
"sohPctSupplied": false,
"averageRoundTripEfficiencyPct": 0,
"averageRoundTripEfficiencyPctSupplied": false,
"selfConsumptionPct": 0,
"selfConsumptionPctSupplied": false,
"source": "",
"cloudPlatformUsed": false
}
],
"paidProviderUsed": false,
"apiKeyRequired": false,
"cloudPlatformUsed": false,
"warrantyCoverageDetermined": false,
"findings": [],
"limitations": [
"Generation, panel, inverter, battery, warranty, efficiency, consumption, and asset records are copied only from labeled fields supplied by the caller.",
"No inverter cloud platform or paid energy monitoring service is used and no API key is required.",
"Degradation, SOH, efficiency, and deviation metrics use only supplied measurements. Missing values are not invented.",
"Inverter fault labels come from caller-supplied fault maps or simple keyword signals in supplied messages. Manufacturer cloud catalogs are not queried.",
"Warranty comparisons use only caller-supplied warranty thresholds and measured values. Legal warranty coverage is not determined."
]
}cURL
curl -i -X POST "https://www.brainiac.software/api/v1/solar-battery/asset-compare" \
-H 'content-type: application/json' \
-H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
--data-binary @- <<'JSON'
{
"asOf": "2026-11-04T21:00:00.000Z",
"assets": [
{
"id": "SITE-A",
"name": "Rooftop A",
"kind": "solar-storage",
"capacityKw": 50,
"capacityKwh": 60,
"region": "NL"
},
{
"id": "SITE-B",
"name": "Rooftop B",
"kind": "solar-storage",
"capacityKw": 40,
"capacityKwh": 40,
"region": "NL"
}
],
"generation": [
{
"id": "G1",
"assetId": "SITE-A",
"at": "2026-11-01",
"kwh": 180,
"expectedKwh": 200,
"source": "Caller-supplied"
},
{
"id": "G3",
"assetId": "SITE-B",
"at": "2026-11-01",
"kwh": 140,
"expectedKwh": 150,
"source": "Caller-supplied"
}
],
"batteryHealth": [
{
"id": "H1",
"assetId": "SITE-A",
"nameplateKwh": 60,
"measuredKwh": 54,
"source": "Caller-supplied"
}
],
"consumption": [
{
"id": "N1",
"assetId": "SITE-A",
"at": "2026-11-01",
"generationKwh": 180,
"loadKwh": 120,
"source": "Caller-supplied"
}
]
}
JSONhttps://www.brainiac.software/api/v1/solar-battery/performance-report$0.08 USDCBuild solar battery performance report
Aggregate generation deviation, degradation, inverter faults, cycle aging, SOH, warranty, efficiency, self-consumption, and asset comparison from caller-supplied records only.
Body
| Field | Required | Notes |
|---|---|---|
text | No | string |
json | No | string |
csv | No | string |
file | No | object; Object |
generation | No | array; Array |
panels | No | array; Array |
inverterEvents | No | array; Array |
batteryCycles | No | array; Array |
batteryHealth | No | array; Array |
warranties | No | array; Array |
efficiencyPeriods | No | array; Array |
consumption | No | array; Array |
assets | No | array; Array |
faultMap | No | array; Array |
asOf | No | string |
Request exampleJSON
{
"asOf": "2026-11-04T21:00:00.000Z",
"assets": [
{
"id": "SITE-A",
"name": "Rooftop A",
"kind": "solar-storage",
"capacityKw": 50,
"capacityKwh": 60,
"region": "NL",
"installedAt": "2022-01-01"
},
{
"id": "SITE-B",
"name": "Rooftop B",
"kind": "solar-storage",
"capacityKw": 40,
"capacityKwh": 40,
"region": "NL",
"installedAt": "2023-06-01"
}
],
"generation": [
{
"id": "G1",
"assetId": "SITE-A",
"at": "2026-11-01",
"kwh": 180,
"expectedKwh": 200,
"irradiance": 4.2,
"source": "Caller-supplied meter"
},
{
"id": "G2",
"assetId": "SITE-A",
"at": "2026-11-02",
"kwh": 210,
"expectedKwh": 205,
"source": "Caller-supplied meter"
},
{
"id": "G3",
"assetId": "SITE-B",
"at": "2026-11-01",
"kwh": 140,
"expectedKwh": 150,
"source": "Caller-supplied meter"
}
],
"panels": [
{
"id": "P1",
"assetId": "SITE-A",
"name": "Array 1",
"installedAt": "2022-01-01",
"nameplateKw": 50,
"measuredKw": 46.5,
"measuredAt": "2026-11-01",
"source": "Caller-supplied IV curve"
}
],
"inverterEvents": [
{
"id": "E1",
"assetId": "SITE-A",
"at": "2026-11-01T10:00:00.000Z",
"code": "F01",
"message": "Grid overvoltage",
"severity": "warn",
"source": "Caller-supplied inverter log"
},
{
"id": "E2",
"assetId": "SITE-A",
"at": "2026-11-01T11:00:00.000Z",
"code": "ISO",
"message": "Isolation fault detected",
"severity": "fault",
"source": "Caller-supplied inverter log"
}
],
"faultMap": [
{
"code": "F01",
"label": "Grid overvoltage",
"category": "grid"
}
],
"batteryCycles": [
{
"id": "C1",
"assetId": "SITE-A",
"at": "2026-01-01",
"cycleCount": 400,
"depthOfDischargePct": 80,
"throughputKwh": 12000,
"source": "Caller-supplied BMS"
},
{
"id": "C2",
"assetId": "SITE-A",
"at": "2026-11-01",
"cycleCount": 520,
"depthOfDischargePct": 75,
"throughputKwh": 3500,
"source": "Caller-supplied BMS"
}
],
"batteryHealth": [
{
"id": "H1",
"assetId": "SITE-A",
"name": "Battery A",
"nameplateKwh": 60,
"measuredKwh": 54,
"cycleCount": 520,
"ratedCycles": 6000,
"measuredAt": "2026-11-01",
"source": "Caller-supplied BMS"
}
],
"warranties": [
{
"id": "W1",
"assetId": "SITE-A",
"kind": "capacity",
"minSohPct": 70,
"maxCycles": 6000,
"maxCalendarYears": 10,
"installedAt": "2022-01-01",
"asOf": "2026-11-04",
"source": "Caller-supplied warranty extract"
}
],
"efficiencyPeriods": [
{
"id": "R1",
"assetId": "SITE-A",
"periodStart": "2026-10-01",
"periodEnd": "2026-10-31",
"chargeKwh": 1000,
"dischargeKwh": 920,
"source": "Caller-supplied meter"
}
],
"consumption": [
{
"id": "N1",
"assetId": "SITE-A",
"at": "2026-11-01",
"generationKwh": 180,
"loadKwh": 120,
"gridExportKwh": 50,
"gridImportKwh": 10,
"source": "Caller-supplied"
},
{
"id": "N2",
"assetId": "SITE-A",
"at": "2026-11-02",
"generationKwh": 210,
"loadKwh": 150,
"gridExportKwh": 55,
"gridImportKwh": 5,
"source": "Caller-supplied"
}
]
}Response exampleJSON
{
"checkedAt": "2026-11-04T21:00:00.000Z",
"status": "reported",
"asOf": "2026-11-04T21:00:00.000Z",
"sections": {
"generationDeviation": {
"pointCount": 3,
"deviationCount": 0
},
"panelDegradation": {
"panelCount": 1
},
"inverterFaults": {
"eventCount": 2,
"categoryCount": 2
},
"cycleAging": {
"assetCount": 1
},
"stateOfHealth": {
"assetCount": 1
},
"warranty": {
"warrantyCount": 1
},
"roundTripEfficiency": {
"periodCount": 1
},
"selfConsumption": {
"assetCount": 1
},
"assetCompare": {
"assetCount": 2
}
},
"cloudPlatformUsed": false,
"warrantyCoverageDetermined": false,
"paidProviderUsed": false,
"apiKeyRequired": false,
"findings": [],
"limitations": [
"Generation, panel, inverter, battery, warranty, efficiency, consumption, and asset records are copied only from labeled fields supplied by the caller.",
"No inverter cloud platform or paid energy monitoring service is used and no API key is required.",
"Degradation, SOH, efficiency, and deviation metrics use only supplied measurements. Missing values are not invented.",
"Inverter fault labels come from caller-supplied fault maps or simple keyword signals in supplied messages. Manufacturer cloud catalogs are not queried.",
"Warranty comparisons use only caller-supplied warranty thresholds and measured values. Legal warranty coverage is not determined."
]
}cURL
curl -i -X POST "https://www.brainiac.software/api/v1/solar-battery/performance-report" \
-H 'content-type: application/json' \
-H 'Idempotency-Key: <fresh-64-character-random-hex-key>' \
--data-binary @- <<'JSON'
{
"asOf": "2026-11-04T21:00:00.000Z",
"assets": [
{
"id": "SITE-A",
"name": "Rooftop A",
"kind": "solar-storage",
"capacityKw": 50,
"capacityKwh": 60,
"region": "NL",
"installedAt": "2022-01-01"
},
{
"id": "SITE-B",
"name": "Rooftop B",
"kind": "solar-storage",
"capacityKw": 40,
"capacityKwh": 40,
"region": "NL",
"installedAt": "2023-06-01"
}
],
"generation": [
{
"id": "G1",
"assetId": "SITE-A",
"at": "2026-11-01",
"kwh": 180,
"expectedKwh": 200,
"irradiance": 4.2,
"source": "Caller-supplied meter"
},
{
"id": "G2",
"assetId": "SITE-A",
"at": "2026-11-02",
"kwh": 210,
"expectedKwh": 205,
"source": "Caller-supplied meter"
},
{
"id": "G3",
"assetId": "SITE-B",
"at": "2026-11-01",
"kwh": 140,
"expectedKwh": 150,
"source": "Caller-supplied meter"
}
],
"panels": [
{
"id": "P1",
"assetId": "SITE-A",
"name": "Array 1",
"installedAt": "2022-01-01",
"nameplateKw": 50,
"measuredKw": 46.5,
"measuredAt": "2026-11-01",
"source": "Caller-supplied IV curve"
}
],
"inverterEvents": [
{
"id": "E1",
"assetId": "SITE-A",
"at": "2026-11-01T10:00:00.000Z",
"code": "F01",
"message": "Grid overvoltage",
"severity": "warn",
"source": "Caller-supplied inverter log"
},
{
"id": "E2",
"assetId": "SITE-A",
"at": "2026-11-01T11:00:00.000Z",
"code": "ISO",
"message": "Isolation fault detected",
"severity": "fault",
"source": "Caller-supplied inverter log"
}
],
"faultMap": [
{
"code": "F01",
"label": "Grid overvoltage",
"category": "grid"
}
],
"batteryCycles": [
{
"id": "C1",
"assetId": "SITE-A",
"at": "2026-01-01",
"cycleCount": 400,
"depthOfDischargePct": 80,
"throughputKwh": 12000,
"source": "Caller-supplied BMS"
},
{
"id": "C2",
"assetId": "SITE-A",
"at": "2026-11-01",
"cycleCount": 520,
"depthOfDischargePct": 75,
"throughputKwh": 3500,
"source": "Caller-supplied BMS"
}
],
"batteryHealth": [
{
"id": "H1",
"assetId": "SITE-A",
"name": "Battery A",
"nameplateKwh": 60,
"measuredKwh": 54,
"cycleCount": 520,
"ratedCycles": 6000,
"measuredAt": "2026-11-01",
"source": "Caller-supplied BMS"
}
],
"warranties": [
{
"id": "W1",
"assetId": "SITE-A",
"kind": "capacity",
"minSohPct": 70,
"maxCycles": 6000,
"maxCalendarYears": 10,
"installedAt": "2022-01-01",
"asOf": "2026-11-04",
"source": "Caller-supplied warranty extract"
}
],
"efficiencyPeriods": [
{
"id": "R1",
"assetId": "SITE-A",
"periodStart": "2026-10-01",
"periodEnd": "2026-10-31",
"chargeKwh": 1000,
"dischargeKwh": 920,
"source": "Caller-supplied meter"
}
],
"consumption": [
{
"id": "N1",
"assetId": "SITE-A",
"at": "2026-11-01",
"generationKwh": 180,
"loadKwh": 120,
"gridExportKwh": 50,
"gridImportKwh": 10,
"source": "Caller-supplied"
},
{
"id": "N2",
"assetId": "SITE-A",
"at": "2026-11-02",
"generationKwh": 210,
"loadKwh": 150,
"gridExportKwh": 55,
"gridImportKwh": 5,
"source": "Caller-supplied"
}
]
}
JSON