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 KeyUnitDescription
wc_loadkWhConsumption on one submetered load branch — see display_name for which circuit
wc_grid_importkWhEnergy purchased from the utility
wc_grid_exportkWhEnergy exported/sold to the utility
wc_generationkWhTotal solar/PV generation
wc_battery_chargekWhEnergy into battery
wc_battery_dischargekWhEnergy 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 SendWattChop Derives
wc_grid_import + wc_generationwc_load = grid_import + generation − grid_export
wc_load + wc_generationwc_grid_import = max(0, load − generation)
wc_grid_export = max(0, generation − load)
wc_grid_import onlywc_load = grid_import (assumes no generation)
wc_generation onlySolar 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 PresentDashboard ModeHero Metric
wc_load onlySpend TrackerDaily grid cost ($)
wc_generation onlyProduction MonitorDaily kWh generated
wc_load + wc_generationSavings TrackerDaily savings ($)
All registersFull OptimizationDaily savings ($)

Endpoint Reference

POST /api/v1/ingest

Push one or more readings to a project.

FieldTypeRequiredNotes
readingsarrayYes1–96 readings per request (max one full day)
readings[].timestampstringYesISO 8601 UTC. Must align to 15-min boundaries
readings[].wc_*floatAny oneAny register from the table above
sourcestringNoYour 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

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 Fieldwc_* Register
siteCurrentPowerFlow.PV.currentPowerwc_generation
siteCurrentPowerFlow.LOAD.currentPowerwc_load
siteCurrentPowerFlow.GRID.currentPower (positive)wc_grid_import
siteCurrentPowerFlow.GRID.currentPower (negative)wc_grid_export
siteCurrentPowerFlow.STORAGE.chargeLevelwc_battery_soc

Enphase

Enphase Fieldwc_* Register
production[0].wNowwc_generation
consumption[0].wNowwc_load

Tesla Powerwall

Tesla Fieldwc_* Register
solar.instant_powerwc_generation
load.instant_powerwc_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 StatusMeaningAction
200All readings acceptedContinue normal operation
207Partial success — some readings rejectedCheck errors array for details
401Invalid or expired API keyCheck key, contact support if revoked
422Invalid request bodyCheck JSON format and required fields
429Rate limit exceededWait 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