Pull measured interval data from any project your organization has been granted access to. One HTTPS endpoint, the wc_* Standard Register Model, 15-minute resolution — the same data contract the WattChop Live dashboard runs on.
This API is for partners, asset managers, and third-party verifiers who need programmatic, server-to-server access to a site's measured energy data. What you pull through this API is exactly what the dashboard displays — same registers, same values, same cadence.
Quick Start — 30 Seconds
Replace YOUR_API_KEY with your organization read key and run this from any terminal:
curl https://app.wattchop.com/api/v1/data/PROJECT_ID/intervals?window=24h \
-H "X-Api-Key: YOUR_API_KEY"
That's it. You get back the last 24 hours of measured 15-minute interval data in the wc_* register model.
Response
{
"project_id": "a1b2c3d4-e5f6-47a8-9b0c-1d2e3f4a5b6c",
"window": "24h",
"cadence_minutes": 15,
"row_count": 95,
"site_device_id": "…",
"registers": ["wc_load", "wc_grid_import", "wc_grid_export", "wc_generation",
"wc_battery_charge", "wc_battery_discharge", "wc_battery_soc"],
"intervals": [
{
"timestamp_utc": "2026-07-22T16:45:00+00:00",
"wc_load": 38.36,
"wc_grid_import": 38.44,
"wc_grid_export": 0.0,
"wc_generation": 19.72,
"wc_battery_charge": 19.79,
"wc_battery_discharge": 0.0,
"wc_battery_soc": null
}
]
}
The wc_* Standard Register Model
The read API speaks the same register vocabulary as the WattChop Live ingest API (WC-DOC-019). What a data producer pushes as wc_load is what you pull back as wc_load — one standard, both directions.
| JSON Key | Unit | Description |
|---|---|---|
wc_load | kWh | Gross site consumption for the interval |
wc_grid_import | kWh | Energy purchased from the utility |
wc_grid_export | kWh | Energy exported/sold to the utility |
wc_generation | kWh | Total solar/PV generation |
wc_battery_charge | kWh | Energy into the battery |
wc_battery_discharge | kWh | Energy out of the battery |
wc_battery_soc | % | Battery state of charge (0–100) |
All energy registers are kWh per 15-minute interval. A register with no measured value for an interval is null — WattChop never fabricates data. If a site's hardware doesn't report a register (for example, SOC on some meter configurations), that register is null throughout; it still appears in registers so your schema stays stable.
Endpoint Reference
GET /api/v1/data/{project_id}/intervals
| Parameter | Type | Required | Notes |
|---|---|---|---|
project_id | path | Yes | The project UUID — shown under the project name in your dashboard, with a Copy button. |
window | query | No | 24h (default), 7d, or 30d — rolling from now |
Rows are ordered oldest-first, aligned to 15-minute boundaries, timestamped in UTC. A 24-hour window typically returns 95–96 rows (the current interval lands once the meter reports it). Data is served from the project's commissioned meter of record, identified in the response as site_device_id.
Authentication & Access
All requests require an X-Api-Key header carrying your organization read key:
X-Api-Key: wc_org_xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
One key per organization — access follows your project grants. Your key identifies your organization; which projects it can read is determined by the project-level access your organization has been granted in WattChop. There is nothing to configure per project: if a project owner grants your organization access, your existing key reaches it immediately. If a grant is revoked, API access to that project ends immediately as well.
A request for a project outside your grants returns 404 — the API does not distinguish "doesn't exist" from "not yours."
Read keys are read-only. They cannot push data (see WC-DOC-019 for the ingest API, which uses separate producer credentials) and cannot access any other WattChop surface.
Keys are provisioned by WattChop when partner read access is set up for your organization. To request access or rotate a key, open a support ticket or email support@wattchop.com.
Timestamps & Data Semantics
- All timestamps are UTC (+00:00). Localize on your side.
- Cadence is fixed at 15 minutes — the same granularity your utility bills on. No finer resolution is available.
- Rolling windows only:
24h,7d,30d. For historical exports beyond 30 days, contact support — bulk exports are handled on request. - Values are measured data from the site's metering. Late-arriving meter polls can add rows near the trailing edge of a window; if you're reconciling counts between two pulls, expect the most recent hour to fill in.
Rate Limits
Usage is limited to 100 requests per hour per API key. Polling each granted project once per 15-minute interval fits comfortably within that budget.
Attribution
The read feed is provided at no charge to organizations with project access. If you display, re-publish, or build reporting on data from this API, the surface must credit the source: "Data provided by WattChop" or "Powered by WattChop." That's the whole deal.
Scope of the Feed
This API serves measured physical data — energy flows and battery state as recorded at the site. Tariff rates, per-interval pricing, export credit values, and savings calculations are part of the WattChop analysis platform and are presented in the dashboard and WattChop reports; they are not part of the data feed.
Error Handling
| HTTP Status | Meaning | Action |
|---|---|---|
200 | Success | — |
401 | Invalid or revoked API key | Check the key; contact support if rotated |
403 | Key lacks the required scope | Contact support |
404 | Project not found or not granted to your organization | Verify the project ID and your access |
422 | Invalid window parameter | Use 24h, 7d, or 30d |
429 | Rate limit exceeded | May be returned if usage exceeds the per-key hourly limit; back off and retry |
Ready to pull?
Open a project, hit Copy next to its ID, run the Quick Start curl, and your pipeline is live. Questions → support@wattchop.com.