WattChop Live is a free Tariff Smart monitoring dashboard. Point your data at it, and your site gets real-time power charts, expected vs. actual PV, and savings in dollars — not just kWh. The dashboard is free. The data pipe is open. Any hardware that can POST JSON to an HTTPS endpoint is in.
This is the universal ingest API. One endpoint, one register model, any meter or inverter on Earth.
Quick Start — 30 Seconds
Replace YOUR_API_KEY with your project-scoped key and run this from any terminal:
curl -X POST https://app.wattchop.com/api/v1/ingest \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"readings": [{
"timestamp": "2026-04-12T12:00:00Z",
"wc_generation": 7.6
}],
"source": "solaredge"
}'
That's it. One register (wc_generation) is enough to activate the solar production dashboard. Add more registers and the dashboard gets smarter.
Response
{
"status": "ok",
"accepted": 1,
"rejected": 0,
"project_id": "abc-123-def",
"latest_timestamp": "2026-04-12T12:00:00+00:00",
"errors": null
}
The wc_* Standard Register Model
The wc_* prefix is the contract between your hardware and the WattChop dashboard. Map your meter's native registers to these names, push JSON, and the dashboard handles the rest — mode detection, color assignment, chart rendering, savings calculations. Zero manual configuration.
Core Registers
| JSON Key | Unit | Description |
|---|---|---|
wc_load | kWh | Consumption on one submetered load branch — see display_name for which circuit |
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 battery |
wc_battery_discharge | kWh | Energy out of battery |
wc_battery_soc | % | Battery state of charge (0–100) |
💡 Send any ONE register per reading. WattChop derives the rest automatically. Solar-only sites send just wc_generation. Grid-only meters send just wc_grid_import.
Derivation Rules
The endpoint fills gaps automatically using these rules:
| You Send | WattChop Derives |
|---|---|
wc_grid_import + wc_generation | wc_load = grid_import + generation − grid_export |
wc_load + wc_generation | wc_grid_import = max(0, load − generation)wc_grid_export = max(0, generation − load) |
wc_grid_import only | wc_load = grid_import (assumes no generation) |
wc_generation only | Solar production dashboard only — no load analysis |
Dashboard Auto-Detection
The dashboard reads which registers have data and selects the appropriate mode. No setup required.
| Registers Present | Dashboard Mode | Hero Metric |
|---|---|---|
wc_load only | Spend Tracker | Daily grid cost ($) |
wc_generation only | Production Monitor | Daily kWh generated |
wc_load + wc_generation | Savings Tracker | Daily savings ($) |
| All registers | Full Optimization | Daily savings ($) |
Endpoint Reference
POST /api/v1/ingest
Push one or more readings to a project.
| Field | Type | Required | Notes |
|---|---|---|---|
readings | array | Yes | 1–96 readings per request (max one full day) |
readings[].timestamp | string | Yes | ISO 8601 UTC. Must align to 15-min boundaries |
readings[].wc_* | float | Any one | Any register from the table above |
source | string | No | Your platform name, e.g. solaredge, enphase, tesla |
GET /api/v1/ingest/status
Check your integration health.
curl https://app.wattchop.com/api/v1/ingest/status \
-H "X-Api-Key: YOUR_API_KEY"
Response:
{
"project_id": "abc-123-def",
"project_name": "Clubhouse Industrial",
"last_reading": "2026-04-12T12:15:00+00:00",
"readings_24h": 96,
"gaps_24h": 0,
"status": "healthy"
}
Status values: healthy (data within last 2 hours), stale (last data >2 hours ago), no_data (never received data).
Timestamp Rules
- All timestamps must be UTC — use the
Zsuffix or+00:00offset. - Readings should align to 15-minute boundaries:
:00,:15,:30,:45. - Readings within ±2 minutes of a boundary are snapped automatically.
- Duplicate timestamps are idempotent — last write wins.
- Future timestamps (>5 minutes ahead of server time) are rejected.
- Maximum 96 readings per request (one full day).
Authentication
All requests require an X-Api-Key header. Keys are scoped to a single project — one key per site. The key determines where your data lands. You cannot accidentally push to the wrong project.
X-Api-Key: wc_live_xxxxxxxxxxxxxxxxxx
Keys are provisioned when your WattChop Live subscription is activated. Generate your key from the ⚙️ Ops tab in your project. Click + Generate Key, copy the key from the one-time modal, and start pushing data immediately.
Rate Limits
100 requests per hour per API key. Normal operation is 4 requests per hour (one every 15 minutes). If you exceed the limit, the endpoint returns HTTP 429.
Platform Mapping Examples
WattChop does not pull from these platforms. Your middleware translates the data and pushes to WattChop. These tables show how to map each platform's native fields to the wc_* register model.
SolarEdge
| SolarEdge Field | wc_* Register |
|---|---|
siteCurrentPowerFlow.PV.currentPower | wc_generation |
siteCurrentPowerFlow.LOAD.currentPower | wc_load |
siteCurrentPowerFlow.GRID.currentPower (positive) | wc_grid_import |
siteCurrentPowerFlow.GRID.currentPower (negative) | wc_grid_export |
siteCurrentPowerFlow.STORAGE.chargeLevel | wc_battery_soc |
Enphase
| Enphase Field | wc_* Register |
|---|---|
production[0].wNow | wc_generation |
consumption[0].wNow | wc_load |
Tesla Powerwall
| Tesla Field | wc_* Register |
|---|---|
solar.instant_power | wc_generation |
load.instant_power | wc_load |
site.instant_power (positive) | wc_grid_import |
site.instant_power (negative) | wc_grid_export |
battery.instant_power (positive) | wc_battery_discharge |
battery.instant_power (negative) | wc_battery_charge |
/api/system_status/soe (percentage) | wc_battery_soc |
⚡ SolarEdge and Tesla report instantaneous power in watts (W). Convert to kWh per interval before pushing: wc_generation = watts / 1000 × (interval_minutes / 60)
Full Request Examples
Solar + Grid (most common)
curl -X POST https://app.wattchop.com/api/v1/ingest \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"readings": [{
"timestamp": "2026-04-12T12:00:00Z",
"wc_generation": 7.6,
"wc_grid_import": 45.2,
"wc_grid_export": 0.0,
"wc_load": 52.8
}],
"source": "solaredge"
}'
Solar + Battery + Grid (full system)
curl -X POST https://app.wattchop.com/api/v1/ingest \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"readings": [{
"timestamp": "2026-04-12T12:00:00Z",
"wc_generation": 15.2,
"wc_grid_import": 12.0,
"wc_grid_export": 0.0,
"wc_load": 27.2,
"wc_battery_charge": 0.0,
"wc_battery_discharge": 3.5,
"wc_battery_soc": 72.0
}],
"source": "tesla"
}'
Backfill a Full Day (96 intervals)
curl -X POST https://app.wattchop.com/api/v1/ingest \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d @readings_2026-04-11.json
The file should contain a JSON object with a readings array of up to 96 intervals. Backfill up to 90 days of historical data by sending one day at a time.
Error Handling
| HTTP Status | Meaning | Action |
|---|---|---|
| 200 | All readings accepted | Continue normal operation |
| 207 | Partial success — some readings rejected | Check errors array for details |
| 401 | Invalid or expired API key | Check key, contact support if revoked |
| 422 | Invalid request body | Check JSON format and required fields |
| 429 | Rate limit exceeded | Wait and retry — 100 requests/hour limit |
For Hardware Manufacturers
If you make meters, inverters, or battery systems and want your customers to see their savings on WattChop Live — the integration is this article. Map your registers to the wc_* model, push every 15 minutes, and your customers get a free Tariff Smart dashboard with their hardware purchase.
No SDK, no special partnership agreement, no integration fee. Build the POST, push the data, get the dashboard.
Want to be listed as a WattChop Live compatible device? Email jonas@energyboom.io.
Ready to connect?
Open your project's ⚙️ Ops tab, click + Generate Key, and start pushing data. Your dashboard lights up the moment the first reading arrives. Explore the full API at app.wattchop.com/api/docs → support@wattchop.com