> ## Documentation Index
> Fetch the complete documentation index at: https://developer.plugchoice.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Meters

> Add a grid meter for load balancing: a reader on the smart meter tells Plugchoice what the house draws.

Link also adds grid meters. A meter reader on the smart meter's P1 port tells Plugchoice how much the house draws from the grid, and load balancing uses that to keep the chargers at the site under the main fuse.

Link adds meter readers from Chargee and Reduxi, each with a setup made for the brand.

![Add a meter reader to Home: it reads your smart meter, so your chargers never draw more than the main fuse allows](/images/sdk/meter-intro-light.webp)

## Open Link for a meter

Create the [client session](/sdk/api/create-client-session) with `device_type: "meter"` and the site the meter is for, then open Link with the `add` action as you would for a charger.

```bash curl theme={null}
curl https://api.plugchoice.com/sdk/v1/client-sessions \
  -u "$PLUGCHOICE_CLIENT_ID:$PLUGCHOICE_CLIENT_SECRET" \
  -H "Plugchoice-Version: 2026-10-07" \
  -H "Content-Type: application/json" \
  -d '{
    "external_user_id": "user_42",
    "device_type": "meter",
    "scope": { "sites": ["8f6e2c1a-4b7d-4e2f-9a3c-5d1b7e9f0a2c"] }
  }'
```

```ts Node theme={null}
const response = await fetch('https://api.plugchoice.com/sdk/v1/client-sessions', {
  method: 'POST',
  headers: {
    Authorization: `Basic ${btoa(`${clientId}:${clientSecret}`)}`,
    'Plugchoice-Version': '2026-10-07',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    external_user_id: 'user_42',
    device_type: 'meter',
    scope: { sites: ['8f6e2c1a-4b7d-4e2f-9a3c-5d1b7e9f0a2c'] },
  }),
});
const { client_secret } = await response.json();
```

A link session adds one kind of device: a meter session offers meter readers only, never chargers. A meter needs a site; without one in the scope, Link asks for the address first.

## What each brand can do

![Which meter reader do you have: Reduxi and Chargee](/images/sdk/meter-brands-light.webp)

| Brand | Models | Onboarding method | Phone needs | In a browser |
| - | - | - | - | - |
| [Chargee](/sdk/meters/chargee) | Sparky, Flint | `vendor_cloud` | - | |
| [Reduxi](/sdk/meters/reduxi) | P1 Ultra | `local_hotspot` | `wifi`, `tcp` | |

Where the phone or browser can't do a brand's setup, Link leaves the brand out.

## After the setup

Link waits until the meter's first readings arrive, for at most three minutes. When the site has no load balancing yet, your user then gives the main fuse and the grid type, and load balancing starts with the chargers at the site.

![Your main fuse: the main fuse per phase in amps, and the grid type](/images/sdk/meter-fuse-light.webp)

The result's `devices` hold `{ "type": "meter", "id": "…" }`, as the [link session](/sdk/concepts/link-sessions) does in `devices` and `meter_ids`. The readings start without your app: they go straight from the meter to Plugchoice.

![Your meter reader is connected](/images/sdk/meter-done-light.webp)

Load balancing needs the Smart license on the chargers. Without it, the meter is added and measures nothing until they have it; your user is told so.

## New brands

Support for a meter brand lives in the hosted flow, not in the SDK. A new brand reaches your users without a new release of your app.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.