WattOps shows, live, what every GPU, job and team draws and costs, finds the GPUs that are on but idle and what they cost you, and writes the energy and carbon reports your finance, sustainability and grant offices ask for. Measured from the hardware, not guessed.
Every GPU that is switched on or held by a job but doing nothing, live: how many, for how long, and the power and money it burns at your own price per kWh.
“6 GPUs idle now · 1,020 idle GPU-hours this month”How Live works →
Cost per job · paid plans
Charge every job, lab and team its share
Energy, cost and CO₂ for each Slurm job, Kubernetes pod and user, so shared clusters can show back or charge back what each group used.
PDF energy and carbon reports per project, with the method, the inputs and a report ID anyone can reproduce: for CSRD, Scope 2, the EU AI Act and grant offices.
HorneSci measured where its HST runtime saves energy
HorneSci builds HST for sparse and incremental computation. With joules compare on six machines, it found where HST beats an optimized baseline, and where it does not.
38.8%less GPU energy and 29.5% less time on an NVIDIA H200, with half the data changing
46%less energy per job on Apple M1 Max
+21%GPU energy on an H100 at 1% changed, while finishing 1.3% sooner: a stopwatch would have missed it
1 GPU free · then paid per GPU · every GPU on Fleet
Your whole fleet, second by second
Run joules connect on each GPU server, Slurm node or notebook, and the Live page shows what the fleet draws right now, what it costs by the hour, and which GPUs burn power doing nothing. A stock ticker, for electricity.
Each machine reports every 5 seconds. Heartbeats never count against your API calls.
Power and cost right nowthe whole fleet and every machine, every 5 seconds, priced at your own rate
Idle GPUs, in dollarswhich GPUs are on but doing nothing, and what that costs by the hour
Every running jobSlurm jobs, Kubernetes pods, containers and users, each with its share of the power
Honest gapsa machine that sleeps or goes offline shows as a gap, never as a made-up line
Cost per job
Fair energy and cost for every job, user and lab
On a shared cluster, everyone pays for the power and nobody knows who used it. joules agent runs on each node and splits each GPU’s and CPU’s measured energy between the jobs on it: Slurm jobs, Kubernetes pods, containers or users.
Group it by account, project or user, see it on the Tracking page, export it, and send each group its share every month. No Prometheus or Grafana stack to run.
Universities and public research: half price on every paid plan.
Cluster · SeptemberExample
AccountGPU-hoursEnergyCostCO₂
chem-lab1,240496 kWh$59.5263 kg
nlp-group860352 kWh$42.2445 kg
bio-imaging410151 kWh$18.1219 kg
held but idle1,020173 kWh$20.7622 kg
Illustrative numbers, measured the way joules agent does on each node · electricity at $0.12 per kWh · 127 g CO₂ per kWh
Built for the people who pay for the power
Research computing
Universities and HPC centres
Charge each lab its measured share of the cluster’s power, find the idle GPUs, and hand the sustainability office and grant applications a report, without running your own Prometheus and Grafana stack.
Half price for universities and public research
GPU clouds and AI hosts
Operators of shared GPU fleets
See the whole fleet live, find the GPUs that are on but idle and what they cost, and give each project its measured energy, cost and carbon.
Fleet: a plan for your fleet, starting with a pilot on your own cluster
ML and platform teams
Teams that train and serve models
Know what each training run and each model really costs to run, get an alert when a change makes it use more, and report the energy to your customers and your sustainability team.
Free to start, then priced by the GPUs you run
Reports
Energy and carbon reports that hold up to an audit
Finance, sustainability and grant offices, and more and more regulators, ask how much energy your computing used. Paid plans turn the measurements into a PDF per project or per month, with the method written out. For example, providers of general-purpose AI models must keep technical documentation that includes the model’s known or estimated energy consumption (AI Act, Article 53 and Annex XI). Where the energy is not known, Annex XI allows it to be estimated from the computational resources used. That is exactly what WattOps computes, with the method written out.
The reports are PDFs with the inputs, the derivation, the assumptions and a report ID. Anyone can check the ID by running the same inputs again. The same figures support Scope 2 carbon reporting (CSRD, GHG Protocol) and customer sustainability questionnaires.
WattOps is a calculation tool, not legal advice. Check your obligations with your own counsel.
Training compute6 × parameters × tokens, from your run’s numbers
Energyaccelerators, servers and facility (PUE), measured or estimated
Carbon and costyour grid’s intensity and your price per kWh
Audit traila report ID that the same inputs always reproduce
Running on your cluster this afternoon
1 · Install
One agent per node
Install joules and start joules agent on each GPU server or Slurm node, by hand, with your config tool, or as a Kubernetes DaemonSet. It reads the power meters about once a second, next to your jobs, not inside them.
sudo joules agent --track fleet
2 · See
Live fleet and cost per job
Within seconds the Live page shows every machine’s power and cost, the idle GPUs, and the jobs running now. Finished jobs land on Tracking with their energy, cost and CO₂.
#/live · #/track
3 · Act
Reports, alerts and savings
Turn idle GPUs off or reschedule them, send each lab its share, get an alert when a job uses far more than usual, and download the monthly report as a PDF.
Slack · Discord · webhook · PDF
Earth: NASA Blue Marble and Black Marble
Orbit
Station
Rack
GPU
Transistor
Atom
Low Earth orbit · about 400 km up
Power is the limit, on the ground and in orbit.
AI compute is limited more and more by the power it can get, and some teams are now designing data centres in orbit to sit in the sun. Scroll to zoom in, all the way down.
In orbit
A data centre that runs on sunlight.
Racks inside pressurised modules, solar wings for the power and radiators to shed the heat into space. Every watt has to be collected, and every watt has to be got rid of.
A rack · about 2 m tall
Rows of GPU servers.
Inside, it is the same as on the ground: racks of servers, their GPUs busy, or, too often, switched on and waiting for work.
A GPU · a few centimetres of silicon
One GPU, hundreds of watts.
A data-centre GPU can draw several hundred watts under load and still tens of watts while it does nothing. joules reads both from the GPU's own energy counter.
Transistors · tens of nanometres apart
Tens of billions of switches.
Every switch costs a little energy each time it flips, and a GPU that is on but idle keeps paying to stay ready.
Silicon · atoms 0.235 nm apart
Where every joule ends up.
Each silicon atom is bonded to four neighbours. All the energy a GPU draws ends up here as heat. WattOps measures it from the hardware, not a spec sheet.
joules sends energy readings and the names of the jobs that used them. It never sends your code, prompts, command arguments or files, and nothing at all unless you ask it to.
Keys kept as fingerprintsan API key is shown once; we store only its SHA-256 fingerprint
Locked-down databasereachable only through server functions that check every caller; row-level security on every table
Encrypted in transitHTTPS everywhere; data stored in the United States (us-east-1)
Privacy law, in writingPIPEDA, BC PIPA and GDPR; a published DPA and sub-processor list
Plans
Start free
Live for 1 GPU, Tracking, the calculator, joules and the leaderboards. Free for good, no card needed.
More GPUs, or a whole fleet
Once you sign in, Billing shows every plan and the price for your own GPUs. For more than 256 GPUs, we set it up with you, starting with a 4–6 week pilot on your own cluster.
Universities and public research pay half: ask us for the code.
Free for everyone
Free tools, on the house
The paid plans are for fleets. These are for anyone who trains or runs a model, free for good: a calculator, the joules command, an open leaderboard and an energy check for pull requests.
Calculator
Know the bill before you start
Enter the model size, the amount of data and your hardware, and see the electricity, cost and CO₂ of a training run before you pay for it.
6 × params × tokens → kWh → g CO₂
joules
Measure any command
Put joules in front of anything you run, like time, and get its real energy, cost and CO₂ from the hardware’s power meters.
joules -- python3 -c "sum(range(10**8))"
Checks
Catch energy creep in review
A GitHub Action measures your benchmark on every pull request and says when a change makes it use more energy than before.
joules ci --budget 10 -- python3 -c "sum(range(10**7))"
One command. A real measurement.
Put joules in front of anything you run, like time. It reads the power meters of the GPU and CPU while the command runs and prints the energy, the cost and the CO₂. This is real output from a MacBook Air.
Measuredfrom the hardware’s power meters, not a spec sheet
Every machineMac, Linux and GPU servers measured; on Windows the GPU is measured and the CPU estimated
Openthe joules tool is open source; every formula is shown
real output · MacBook Air, every core busy
$ joules -- sh -c 'for i in $(seq $(getconf _NPROCESSORS_ONLN)); do python3 -c "x=0
for i in range(100000000): x+=i" & done; wait'
joules · 15.45 s · exit 0
Apple SoC (CPU + GPU + ANE) 71.5 J 4.6 W avg
total 71.5 J = 19.9 mWh
cost <0.0001 · CO₂ 0.00735 g at 370 g/kWh
Your GPU, read from the driver, not from the task manager
On NVIDIA cards every measurement also reads the clock, the temperature, the power limit and the driver’s own throttle reasons, and says in words what they mean. This is real output from a free Google Colab T4: busy the whole time, and still held to 58% of its clock by the power cap. “100% utilisation” never told you that.
Throttled, and whypower cap, heat, hardware slowdown: the share of each run below full clock
Compute- or memory-boundfrom the busy and memory-controller percentages, labelled as the coarse reading it is
On your Tracking pagea throttled badge on every run, a throttling chart, and the full card when you click a run
real output · Google Colab, free T4, 30 s of matrix multiplies
$ joules -- python -c "import torch, time
x = torch.randn(8192, 8192, device='cuda'); t = time.time()
while time.time() - t < 30: x = x @ x"
joules · 32.51 s · exit 0
GPU 0 Tesla T4 2.13 kJ 65 W avg nvml counter
927 MHz (58% of max) · 93% busy · memory 61%
68 °C max · limit 70 W · compute-bound
throttled 93% of the time (power cap)
total 2.13 kJ = 591 mWh
cost <0.0001 at 0.1/kWh · CO₂ 0.219 g at 370 g/kWh
An open leaderboard of measured GPU efficiency
Spec sheets give peak TFLOP/s and a power rating. Neither says how much work a card does for each joule once it heats up and runs into its power limit. One command runs the same one-minute test on any NVIDIA or AMD GPU, the free T4s on Kaggle and Colab included, and adds it to the board. Local models get the same treatment: joules per token, machine against machine on the same model.
Every row is a real measurement from the device's own meter, never a sample, and the board grows as people add their machines. Anyone can look; no account needed. No GPU to hand? The Kaggle notebook ↗ runs the test on a Kaggle T4.
On an NVIDIA H200 with half the data changing, HST used 38.8% less GPU energy and 29.5% less time than an optimized baseline. Read the case study.
Measured
A 1T model on 8 H200s against the API
The same GPUs cost $76.93 per million tokens with 1 user and $1.61 with 256: 30× the API when quiet, 37% under it when busy. Read the write-up.
joules 0.7.6
A leaderboard for GPUs
joules bench gpu --share runs the same one-minute test on any GPU, a Kaggle T4 included, and puts its work per joule on the public board.
Questions people ask
How accurate are the numbers?
joules reads the power meters built into the hardware: NVIDIA and AMD GPU sensors, Intel and AMD CPU energy counters (RAPL) and Apple silicon’s own power reporting. The calculator is within 0.4% of the published energy of GPT-3, BLOOM and Llama 3 70B. What is and is not included is written out on the Method page under “Accuracy and limits”.
Will it slow my jobs down?
No work runs inside your jobs. The agent reads the power counters about once a second, next to your workload, and the command wrapper only watches the command it starts.
What data leaves my machine?
Only what you ask for: energy, power, cost and carbon, the machine’s name, and the names and users of the jobs that used the power. Never code, prompts, command arguments, inline scripts or files.
Which hardware and schedulers does it support?
NVIDIA, AMD and Intel GPUs, Intel and AMD CPUs, and Apple silicon Macs. On Windows the GPU is measured and the CPU estimated. The agent knows Slurm jobs, Kubernetes pods, containers and users, and serves Prometheus metrics too.
Can I try it before paying?
Yes. The Free plan has the calculator, joules and the leaderboard for good. Once you sign in, Billing shows the paid plans and the price for your own GPUs; they are monthly and can be cancelled any time. For more than 256 GPUs, Fleet starts with a 4–6 week pilot on your own cluster.
Who is behind WattOps?
PHENEX TECHNOLOGIES INC., a British Columbia corporation in Vancouver, Canada. WattOps was called Landauer Gap until October 2026; the Landauer gap, how far computing sits above the least energy physics allows, is still the science inside it. The method comes from the D3 research series, published with a DOI, and every formula is shown on the Method page.
Start measuring in two minutes
Create a free accountemail, GitHub or Google
Install joulescurl -LsSf https://wattops.dev/install.sh | sh
Each name's runs in the period and project above: medians per run, ± half the spread of the middle half of the runs, and p, the chance of a difference this large if the two were really the same (Mann-Whitney). Lower energy and time is better. Runs named name @ 70% power are grouped by power limit. joules compare --track PROJECT "CMD A" "CMD B" measures both fairly (warm-up, interleaved runs) and sends every run here.
GPU throttling
Share of each run the GPU spent below its maximum clock for a reason other than being idle: the power cap, heat (thermal), a hardware slowdown or a power brake. Click a run in the table for the full reading.
Landauer gap over time
energy per operation ÷ physical minimum · log scale · lower is betterMeasured with joulesCalculator estimate
Runs
Finished
Project
Run
Hardware
Time
Energy
CO₂
Gap
Energy is what each machine's own meters report: NVIDIA, AMD and Intel GPUs, Intel and AMD CPUs with memory, or on a Mac the Apple chip (CPU, GPU and Neural Engine). Screens, disks and power-supply losses are not included; --pue adds a building's cooling and losses. Runs marked simulated are not measurements. Accuracy and limits →
Track a run
Connect a computer once. After that, every run you measure on it shows up on this page by itself.
Install joulesin a terminal, about 30 seconds
Sign this computer inonce; the command holds a new API key just for it
Measure anythingit appears here within seconds
Waiting for your first run… this page updates by itself.
Add --params and --tokens (billions) so joules can work out the Landauer gap. joules sends the energy, time, cost, CO₂, hardware and a short label: the program and script name, or your --label. Never your arguments, code, outputs or file contents. Each tracked run uses one API call.
GPU
Every machine running joules agent, a few seconds behind: which GPUs are on but doing nothing and what they cost you, then what the whole fleet draws and costs by the hour.
live
Demo
Fleet power
All machinesStart of window
GPUs
Colour by
Show
Power over the window, with its power limit; shaded where the GPU was throttled.
Every GPU, from its own driver readings in each machine's latest heartbeat. Busy is the share of time the GPU was working; throttled means below its maximum clock for a reason other than being idle (power cap, heat, a hardware slowdown). A GPU counts as idle when no job holds it or it is under 5% busy. Machines on joules older than 0.7.2 show their GPUs without readings.
Running now
Job
Machine
GPUs
Power
Per hour
Machines
Seen earlier in this window
Each machine's power is measured by its own meters every second (--pue adds a building's cooling and losses). The split between jobs is an attribution: a job alone on a GPU gets all of it; a shared GPU is split by each job's SM time (GPU time on AMD and Intel), or by the GPU memory it holds when the driver gives no SM time; CPU and memory energy by CPU time. Each finished job says which split it got. A GPU counts as idle when no job holds it or it is under 5% busy. Cost and CO₂ use each agent's --price and grid. Accuracy and limits →
Waiting for your first machine… this page updates by itself.
Put a machine on Live
Install jouleson each GPU server, Slurm node or Mac
Connect itasks for your API key without showing it, names the machine after its GPUs and starts the agent; it appears here within seconds
joules connect
In a notebookKaggle, Colab or Jupyter: after !pip install -q -U landauer-gap, in a Python cell
import joules; joules.connect()
The agent sends each machine's power, its idle GPUs and the jobs running on it (job name, user and power). Never commands, arguments, code or files. Heartbeats do not count against your API calls. In Kubernetes, run it as a DaemonSet with --name $NODE_NAME; on Linux, sudo joules connect installs it as a service that starts with the machine and can read the CPU energy counters. A machine that goes to sleep sends nothing and leaves a gap in the graph; add --keep-awake to keep it awake while the agent runs.
Saved runs
Every estimate you keep, private to your account. Select two to compare.
Runs are saved in this browser. Sign in to keep them in your account and open them on any device.
Some runs are only in this browser.
No saved runs yet. Configure a run in the calculator, then press S or Save run.
Run
Energy
CO₂
Cost
Gap
Comparison
older run is the baseline
Metric
Change
Leaderboard
Measured on real hardware by the people who ran it, from each device's own energy meter. Nothing here is a sample or an estimate, and nobody's name is shown. Anyone can see it at wattops.dev/leaderboard, no sign-in needed.
GPUs: work per joule
Every row is the same test: 8192 × 8192 matrix multiplications, 20 seconds in fp16 and 20 in fp32 after a warm-up, with the energy from the GPU's own meter. GFLOP per joule is the work the card does for each joule it draws; higher is better. The power limit and throttling are shown because they decide much of the result: a T4 in a notebook usually runs against its 70 W limit the whole time.
Put your GPU on the board
About a minute on any NVIDIA or AMD GPU that PyTorch can use. joules sends only the GPU's name, its power limit, and per precision the number of multiplications, the energy, the time and how much the card throttled. Nothing from your notebook, files or machine name.
Ready made: the Kaggle notebook ↗ runs this test on a Kaggle T4, and the fp16 vs fp32 comparison before it. Copy & Edit, set the accelerator to GPU T4 x2, Run All.
Your GPU results
only you see this list
GPU
fp16 GFLOP/J
fp32 GFLOP/J
Shared
Local models: energy per token
Machines are ranked against each other on the same model, never one model against another: a smaller model always uses less energy per token, which does not make it the better choice. Each row is energy above idle, and says what its meters cover; a Mac's meter is the whole chip, an NVIDIA one the GPU alone. Each person's runs count once.
Each figure is what the machine's own meters reported while the model generated tokens. Power at the wall socket is higher. Accuracy and limits →
Put your machine on the board
Install joulesabout 30 seconds
Benchmark a model and share itjoules starts Ollama and downloads the model the first time
Every command, with what it does
joules sends only the model name, hardware, energy per token, speed and average power. Nothing from your prompts, outputs, host name or files. Simulated runs are refused, and joules measures the idle machine for 5 seconds first, so every row is energy above idle.
Your measurements
only you see this list
Model
Hardware
J / token
tok/s
Shared
Method
Every figure comes from a published formula, and every assumption is editable in the calculator.
01
Compute
training = 6 × params × tokens inference = 2 × params per token
The standard operation count for dense transformers. Run time is compute ÷ (peak throughput × utilisation).
02
Electricity
power × draw × time × overhead × PUE
Accelerators first, then CPUs, memory and networking, then cooling and building losses.
03
Carbon and cost
kWh × g CO₂/kWh kWh × $/kWh
Grid presets are rounded recent annual averages. Use your provider’s figure for formal reporting.
04
Landauer gap
(J per operation) ÷ (k_B T ln 2 × bits)
One bit per operation gives the lowest floor, so the gap is an upper bound. Reversible computing aims to avoid erasure altogether.
Validation against published training runs
re-checked automatically on every change
Run
Source
Calculator
Published
Difference
GPT-3 175B, energy
Patterson et al. 2021
1,290 MWh
1,287 MWh
+0.2%
GPT-3 175B, carbon
Patterson et al. 2021
553 t
552 t
+0.2%
BLOOM 176B, energy
Luccioni et al. 2022
433 MWh
433 MWh
0.0%
BLOOM 176B, carbon
Luccioni et al. 2022
24.7 t
24.7 t
0.0%
Llama 3 70B, energy
Meta model card
4,480 MWh
4,480 MWh
0.0%
Llama 3 70B, carbon
Meta model card
1,900 t
1,900 t
0.0%
The calculator is also compared, on every change, with a separate implementation of the same formulas written independently in Python, over random inputs.
The physics underneath: the Landauer gap
where WattOps started, and why the calculator shows it
2.87 × 10−21 J
The least energy physics allows for erasing one bit at room temperature: the Landauer limit, kBT ln 2.
Landauer, 1961 · at 300 K
13 billion×
How far above that limit a 3-billion-parameter model ran, per operation, on a MacBook Air. Measured with joules.
llama3.2 3B · M3 MacBook Air · 0.241 J per token
0.4%
The largest difference between our calculator and the published energy of GPT-3, BLOOM and Llama 3 70B.
Patterson et al. 2021 · Luccioni et al. 2022 · Meta
The gap ruler in the calculator and the Landauer gap column on Tracking show every run against this floor. The derivation is in the D3 research series ↗ and on the blog.
What joules does not see
device meters against the wall socket
joules reads the devices' own meters: the GPU board (NVML, amdgpu, Intel), the CPU package and memory (RAPL), and a Mac's chip (powermetrics). A meter at the wall socket also sees the power supply's losses, fans, storage, the motherboard and network cards, and on a laptop the screen. So joules reports a share of the wall, by design.
We are measuring that share against a logging wall meter, repeated at two GPU power limits, and will publish the dated results here with the raw readings. joules calibrate lets anyone run the same check on their own machine: it compares the meters with a plug-in wall meter over the same minutes and prints the share of the wall reading they saw (--wall-wh for a meter that shows a running total, --wall-csv for one that logs). It is in the joules guide ↗.
Accuracy and limits
what each number covers, and what it does not
Hardware
Where joules reads energy
What it covers
NVIDIA GPUs
The driver's energy counter (NVML); its power reading on older GPUs
The GPU board
AMD GPUs
The amdgpu driver
The GPU, as the driver reports it
Intel Arc and Data Center GPUs
The i915 or xe driver
The GPU
Intel and AMD CPUs (Linux)
RAPL energy counters
CPU package, and memory where the CPU reports it
Mac with Apple silicon
powermetrics, Apple's own figure
The Apple chip: CPU, GPU and Neural Engine
Intel Mac
powermetrics
The CPU package, with its graphics and memory
No energy counters (Windows CPUs, cloud VMs)
None: estimated from CPU time, and labelled ESTIMATED
Not a measurement; good for comparing runs
Not included: screens, disks, fans and power-supply losses. Power at the wall socket is higher. For wall-socket energy, measure with a metered PDU or smart plug, or add your building's overhead with --pue.
Meters are the hardware's own. joules adds and divides what they report; it does not correct them. Their own accuracy is set by the hardware vendor.
Idle: with --subtract-idle, what the machine draws at rest is measured first and taken off, so a run counts only the energy it caused.
Landauer gap: operations are counted as 2 per parameter per generated token (6 per parameter per training token), the standard count for dense transformers. The floor is one bit erased per operation at 300 K (kBT ln 2 = 2.87×10⁻²¹ J), the lowest possible, so the gap is an upper bound. Read it as an order of magnitude.
Calculator: an estimate from your inputs (power draw, utilisation, server overhead, PUE, grid). The published runs above show how close it comes when the inputs are right.
Live: each machine's total is measured; the split between the jobs on it is exact for a job alone on its GPUs, and otherwise an attribution by SM time (or GPU time on AMD and Intel, or GPU memory held when the driver gives no SM time) and CPU time. Each run says which, and how much of its time was sampled.
Cost and CO₂: energy times the price and grid intensity you set. Grid presets are rounded annual averages. Most Canadian provinces use the consumption intensities Environment and Climate Change Canada publishes from the National Inventory Report. Ontario and the data-centre locations use the 2025 average of the local grid for each Google Cloud region (Google's open region carbon data); another cloud's region in the same place, such as AWS us-east-1 or Azure East US in Northern Virginia, draws from the same grid. Sources count imports and timing differently, so a city and its province can differ. Use your supplier's figure for formal reporting.
API and integrations
Run the same model from your code, CI and dashboards. Create and revoke keys in Settings → API keys.
Quickstart
uses your current calculator inputs
Endpoints
JSON · Authorization: Bearer lgk_…
Endpoint
Plan
What it does
POST/api/v1/estimate
Every plan
Inputs in, energy, CO₂, cost, Landauer gap and ranked savings out. Same model as this page.
POST/api/v1/estimate
Paid
With {"inputs": {…}, "save": true, "name": "…"} the run is also saved to your account.
POST/api/v1/report
Paid
Branded PDF report with a verifiable report ID. Same body as estimate.
POST/api/v1/report
Paid
With {"kind": "project", "project": "…", "days": 30}: a measured energy report over every tracked run in that project and period. Add "team": true for your team's runs.
POST/api/v1/track
Every plan
Add a measured run. This is what joules --track sends; a team key puts it in your team. The reply lists any energy alerts it set off.
GET/api/v1/runs
Paid
Your saved runs, newest first. ?limit=1…200
GET/api/v1/measurements
Every plan
The leaderboard: median joules per token for each model and machine. ?model=llama filters, ?mine=1 lists yours.
POST/api/v1/measurements
Every plan
Add a measurement. This is what joules bench --share sends. DELETE ?id= removes one of yours.
GET/api/health
Public
Service status and model version.
Errors are JSON: {"error": {"code", "message", "fields"}}. 401 bad key · 400 bad inputs (each field named) · 403 part of the paid plan · 429 limit reached, with Retry-After. Every response carries X-RateLimit-Limit and X-RateLimit-Remaining.
Settings
Manage your profile, sign-in, team, plan, developer tools and API keys, preferences, alerts and data.
Profile
How you appear in WattOps, and what we know about your account.
Avatar
This is your avatar. It is the picture on the GitHub or Google account you sign in with; without one, your initial is shown.
?
Email
The address you sign in with. Sign-in links and confirmation emails go to it.
—Primary
WattOps ID
Your account's ID in WattOps. Quote it when you contact us about your account.
—
Delete account
Permanently remove your account and everything in it: saved runs, tracked runs, leaderboard measurements, API keys and usage. This cannot be undone.
Sign-in and security
The ways you sign in, your email address and your password.
Sign-in methods
Sessions
Signed in on a computer you no longer use? Sign out everywhere, including here. API keys keep working; revoke them under API keys.
Team
Share projects, Tracking, alerts and energy reports with up to 10 people.
Invitation
Team
Member
Role
Joined
Open invites
Email
Sent
Expires
Leave the team
Plan and usage
Your plan, what you use of it, and every plan side by side.
Live: every machine's power, idle GPUs and running jobs, every 5 seconds (GPUs on Live at once)
1
1 to 256, as many as you choose
All
Cost per token on a vLLM or SGLang server, beside an API price you set
✓
✓
✓
API calls a month
100
200,000
1,000,000
API calls a minute
10
600
1,200
API keys
2
25
50
Calculator, Tracking, leaderboard, joules, CI actions
✓
✓
✓
Branded PDF reports
—
✓
✓
Save and list runs from the API
—
✓
✓
Measured energy reports for a project (PDF)
—
✓
✓
Any run on Tracking as a PDF report, with each phase of a Python session
—
✓
✓
Energy alerts, in the app and to Slack, Discord or a webhook
—
✓
✓
Team workspace, up to 10 people
—
✓
✓
Per GPU is billed monthly by Stripe, each GPU at its class's price: Data center $14 (H100, H200, B200, GB200, MI300X), Workstation $8 (A100, L40S, RTX PRO 6000, A6000) and Entry $4 (T4, L4, A10, V100, RTX 4090 and 5090, other GPUs, and a machine without a GPU). Change the GPUs in each class or cancel any time from here or Manage billing, billed pro rata. Fleet is for more than 256 GPUs, from $1,000 a month with volume prices by GPU class, billed yearly under a written order form, and a 4–6 week pilot costs $2,000, credited to your first year: talk to us. Universities and public research pay half: ask us for the code. Rent in the total is an example at typical cloud prices (data center about $2.50, workstation $1.20 and entry $0.35 a GPU-hour). Prices in US dollars, before tax. See the Terms and refund policy.
Developer tools
Everything for putting joules on machines and using WattOps from code, in one place.
The same command updates an existing install. joules --version shows yours; joules doctor checks which power meters this machine has.
API keys
Keys let joules, CI and your code use your account. Treat them like passwords. How to use them →
Create a key
Your keys
Name
Key
Created
Last used
Team keys
Runs tracked with a team key appear on the team's Tracking page. Its calls count against the team owner's plan.
Name
Key
Made by
Created
Last used
Preferences
Saved to your account, so every device you sign in on uses them.
Alerts
Choose when to hear that a run used much more energy than usual. Alerts that fire show on the Tracking page.
Alerts are part of the paid plan, from $4 a GPU a month.
Active alerts
For
Project
Threshold
Webhook
Your data
What your account holds, and a copy of all of it.
In your account
Saved calculator runs
—
Tracked runs (joules --track)
—
Leaderboard measurements you shared
—
API keys
—
Download a copy
One JSON file with everything above, plus your plan, preferences, team and alerts. API keys are listed by name and prefix only; the keys themselves are never stored.
Delete account
Permanently remove your account and everything in it.